REAL SHOWCASE SOURCEmulti-select-dropdown
1 个文件 · 72 行 · TypeScript
// ===== showcase/src/examples/components/multi_select_dropdown.ts ===== import { RenderFieldPresenter, RenderFormPanel, RenderMultiSelectDropdown, RenderPageHeader, RenderStackPanel, RenderText,} from 'ds-ui' const scopeOptions = [ { value: 'cardiology', label: '心血管内科', group: '临床科室' }, { value: 'respiratory', label: '呼吸与危重症医学科', group: '临床科室' }, { value: 'neurology', label: '神经内科', group: '临床科室' }, { value: 'laboratory', label: '医学检验科', group: '医技科室' }, { value: 'radiology', label: '医学影像科', group: '医技科室' }, { value: 'pharmacy', label: '药学部', group: '医技科室' },] export function createMultiSelectDropdownExample(): RenderStackPanel { const status = new RenderText('已选择 2 个会诊科室;可继续搜索、勾选或清空') const form = new RenderFormPanel({ columns: 2, minColumnWidth: 280, labelWidth: 104, adaptive: true, columnGap: 18, rowGap: 14 }) form.addField(new RenderFieldPresenter({ label: '会诊科室', required: true, child: new RenderMultiSelectDropdown({ options: scopeOptions, values: ['cardiology', 'radiology'], placeholder: '搜索并选择科室', searchable: true, clearable: true, onChange: (_values, options) => { status.text = options.length ? `会诊范围:${options.map(option => option.label).join('、')}` : '会诊范围已清空' }, }), })) form.addField(new RenderFieldPresenter({ label: '授权范围', child: new RenderMultiSelectDropdown({ options: scopeOptions, values: ['respiratory', 'laboratory', 'pharmacy'], searchable: true, clearable: true, helperText: '已选项以紧凑标签展示', }), })) form.addField(new RenderFieldPresenter({ label: '必填校验', status: 'error', message: '至少选择一个适用科室', validationDisplay: 'inline', child: new RenderMultiSelectDropdown({ options: scopeOptions, placeholder: '尚未选择', status: 'error' }), })) form.addField(new RenderFieldPresenter({ label: '只读结果', child: new RenderMultiSelectDropdown({ options: scopeOptions, values: ['neurology'], readonly: true, suffixText: '只读' }), })) const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 18, crossAxisAlignment: 'stretch' }) panel.addChild(new RenderPageHeader({ title: 'MultiSelectDropdown 多选下拉', description: '演示分组搜索、多项勾选、标签摘要、清空、校验与只读状态。', })) panel.addChild(form) panel.addChild(status) panel.padding = 24 return panel}