REAL SHOWCASE SOURCEsegmented-control-monitoring
1 个文件 · 75 行 · TypeScript
// ===== showcase/src/examples/components/segmented_control.ts ===== import { RenderBadge, RenderBorder, RenderPageHeader, RenderSegmentedControl, RenderStackPanel, RenderText,} from 'ds-ui' export function createSegmentedControlExample(): RenderStackPanel { const status = new RenderText('当前查看:今日生命体征,舒适密度。', { role: 'secondary' }) const summary = new RenderText('待处理 12 · 高风险 3 · 已完成 28', { role: 'accent', weight: 'semibold' }) let range = 'today' let density = 'comfortable' const sync = (): void => { const rangeLabel = range === 'today' ? '今日' : range === 'week' ? '本周' : '本月' const densityLabel = density === 'compact' ? '紧凑' : '舒适' status.text = `当前查看:${rangeLabel}生命体征,${densityLabel}密度。` summary.text = range === 'today' ? '待处理 12 · 高风险 3 · 已完成 28' : range === 'week' ? '待处理 46 · 高风险 9 · 已完成 186' : '待处理 128 · 高风险 21 · 已完成 742' } const rangeControl = new RenderSegmentedControl({ value: range, options: [ { value: 'today', label: '今日' }, { value: 'week', label: '本周' }, { value: 'month', label: '本月' }, { value: 'quarter', label: '季度', disabled: true }, ], onChange: value => { range = value sync() }, }) const densityControl = new RenderSegmentedControl({ value: density, options: [ { value: 'compact', label: '紧凑' }, { value: 'comfortable', label: '舒适' }, ], onChange: value => { density = value sync() }, }) const filters = new RenderStackPanel({ orientation: 'horizontal', spacing: 18, crossAxisAlignment: 'center' }) filters.addChild(new RenderText('时间范围', { role: 'title', weight: 'semibold' })) filters.addChild(rangeControl) filters.addChild(new RenderText('显示密度', { role: 'title', weight: 'semibold' })) filters.addChild(densityControl) const summaryRow = new RenderStackPanel({ orientation: 'horizontal', spacing: 10, crossAxisAlignment: 'center' }) summaryRow.addChild(new RenderBadge({ value: '监护中心', status: 'primary' })) summaryRow.addChild(summary, 1) summaryRow.addChild(new RenderText('“季度”因数据未归档而禁用', { role: 'secondary', size: 'small' })) const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 16, crossAxisAlignment: 'stretch' }) panel.addChild(new RenderPageHeader({ title: 'SegmentedControl 监护视图切换', description: '少量互斥选项在当前位置切换时间范围和显示密度,并跳过禁用分段。', })) panel.addChild(new RenderBorder({ background: 'panel', padding: 16, child: filters })) panel.addChild(new RenderBorder({ background: 'selected', padding: 16, accentSide: 'left', child: summaryRow })) panel.addChild(status) panel.padding = 24 return panel}