REAL SHOWCASE SOURCEpopover-clinical-details
1 个文件 · 79 行 · TypeScript
// ===== showcase/src/examples/components/popover.ts ===== import { RenderBadge, RenderButton, RenderPageHeader, RenderPopover, RenderStackPanel, RenderText, RenderWrapPanel,} from 'ds-ui'import type { ShowcaseExample } from '../../showcase_example' function createVisitContent(status: RenderText): RenderStackPanel { const content = new RenderStackPanel({ orientation: 'vertical', spacing: 10, crossAxisAlignment: 'stretch' }) content.addChild(new RenderText('本次就诊', { role: 'title', weight: 'semibold' })) content.addChild(new RenderBadge({ value: '复诊', status: 'primary' })) content.addChild(new RenderText('心内科 · 2026-07-17 09:30')) content.addChild(new RenderText('主诉:活动后胸闷 3 天', { role: 'secondary' })) content.addChild(new RenderButton({ label: '刷新摘要', onClick: () => { status.text = '就诊摘要已刷新,Popover 保持打开。' }, })) return content} function createRiskContent(status: RenderText): RenderStackPanel { const content = new RenderStackPanel({ orientation: 'vertical', spacing: 10, crossAxisAlignment: 'stretch' }) content.addChild(new RenderText('风险提示', { role: 'title', weight: 'semibold' })) content.addChild(new RenderBadge({ value: '需复核', status: 'warning' })) content.addChild(new RenderText('患者既往有青霉素过敏记录。')) content.addChild(new RenderButton({ label: '标记已阅读', variant: 'primary', onClick: () => { status.text = '风险提示已标记为阅读。' }, })) return content} export function createPopoverExample(): ShowcaseExample { const status = new RenderText('选择一个触发器,浮层会贴近按钮显示。', { role: 'secondary' }) const visitPopover = new RenderPopover({ label: '就诊摘要', content: createVisitContent(status), placement: 'bottom-start', popoverWidth: 300, onOpenChange: open => { status.text = open ? '就诊摘要已打开。' : '就诊摘要已关闭。' }, }) const riskPopover = new RenderPopover({ label: '用药风险', content: createRiskContent(status), placement: 'top-end', popoverWidth: 280, onOpenChange: open => { status.text = open ? '风险提示已打开,并优先显示在触发器上方。' : '风险提示已关闭。' }, }) const actions = new RenderWrapPanel({ spacing: 12, runSpacing: 12 }) actions.addChild(visitPopover) actions.addChild(riskPopover) actions.addChild(new RenderPopover({ label: '权限说明', content: new RenderText('当前账号没有处方审核权限。'), disabled: true, })) const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 18, crossAxisAlignment: 'stretch' }) panel.addChild(new RenderPageHeader({ title: 'Popover 锚点浮窗', description: '在触发器附近承载轻量说明和快捷操作,支持上下定位、外部点击与 Escape 关闭。', })) panel.addChild(actions) panel.addChild(status) panel.addChild(new RenderText('试一试:打开浮层后点击页面空白处,或使用键盘 Enter、Space、ArrowDown 和 Escape。', { role: 'secondary' })) panel.padding = 24 return { content: panel, afterMount: () => visitPopover.openPopover(), }}