REAL SHOWCASE SOURCEchecked-combo-box

1 个文件 · 95 行 · TypeScript

// ===== showcase/src/examples/components/checked_combo_box.ts ===== import {  RenderCheckedComboBox,  RenderFormField,  RenderFormPanel,  RenderPageHeader,  RenderStackPanel,  RenderText,  type DropdownOption,} from 'ds-ui' const statusOptions: DropdownOption[] = [  { value: 'draft', label: '暂存' },  { value: 'submitted', label: '已提交' },  { value: 'executing', label: '执行中' },  { value: 'stopped', label: '已停止' },  { value: 'cancelled', label: '已取消' },] const scopeOptions: DropdownOption[] = [  { value: 'cardiology', label: '心血管内科', group: '临床科室' },  { value: 'respiratory', label: '呼吸与危重症医学科', group: '临床科室' },  { value: 'neurology', label: '神经内科', group: '临床科室' },  { value: 'laboratory', label: '医学检验科', group: '医技科室' },  { value: 'radiology', label: '医学影像科', group: '医技科室' },] export function createCheckedComboBoxExample(): RenderStackPanel {  const status = new RenderText(    '摘要会优先显示容得下的选中项,剩余内容折叠为 +N。',    { role: 'secondary' },  )  const form = new RenderFormPanel({    columns: 'auto',    maxColumns: 2,    minColumnWidth: 320,    labelWidth: 108,    columnGap: 18,    rowGap: 16,  })   form.addField(new RenderFormField({    label: '医嘱状态',    child: new RenderCheckedComboBox({      options: statusOptions,      values: ['submitted', 'executing', 'stopped'],      searchable: true,      clearable: true,      helperText: '可用空间充足时直接显示选中项',      onChange: (_values, options) => {        status.text = options.length          ? `医嘱状态:${options.map(option => option.label).join('、')}`          : '医嘱状态已清空'      },    }),  }))  form.addField(new RenderFormField({    label: '授权范围',    child: new RenderCheckedComboBox({      width: 260,      options: scopeOptions,      values: ['cardiology', 'respiratory', 'laboratory', 'radiology'],      searchable: true,      clearable: true,      helperText: '固定窄宽度用于观察响应式 +N 摘要',      onChange: (_values, options) => {        status.text = `授权范围:已选择 ${options.length} 项`      },    }),  }))  form.addField(new RenderFormField({    label: '只读结果',    child: new RenderCheckedComboBox({      options: scopeOptions,      values: ['neurology', 'radiology'],      readonly: true,      suffixText: '只读',    }),  }), { columnSpan: 2 })   const panel = new RenderStackPanel({    orientation: 'vertical',    spacing: 18,    crossAxisAlignment: 'stretch',  })  panel.addChild(new RenderPageHeader({    title: 'CheckedComboBox 紧凑多选',    description: '对比宽字段、窄字段和只读状态下的响应式摘要与完整勾选弹层。',  }))  panel.addChild(form)  panel.addChild(status)  panel.padding = 24  return panel}