REAL SHOWCASE SOURCEmedical-record-editor-admission

1 个文件 · 58 行 · TypeScript

// ===== showcase/src/examples/components/medical_record_editor.ts ===== import {  MedicalRecordEditorController,  RenderButton,  RenderMedicalRecordEditor,  RenderPageHeader,  RenderStackPanel,  RenderText,  RenderWrapPanel,  type MedicalRecordDocument,} from 'ds-ui' const documentModel: MedicalRecordDocument = {  type: 'doc',  props: { width: 210, height: 297, padding: { top: 25.4, bottom: 25.4, left: 19.1, right: 19.1 }, orient: 'portrait', headerLine: 12, footerLine: 12, columns: 1, pageNumOffset: 0 },  children: [    { type: 'header', props: {}, children: [] },    { type: 'body', props: {}, children: [      { type: 'p', props: {}, children: [{ type: 'text', props: { fontSize: 20, fontWeight: 'bold', fontName: '宋体' }, content: '入院记录' }] },      { type: 'p', props: {}, children: [        { type: 'text', content: '姓名:李安然    性别:女    年龄:42 岁    科室:心内科' },      ] },      { type: 'p', props: {}, children: [        { type: 'text', content: '入院日期:' },        { type: 'data-ele-date', props: { id: 'admitDate', caption: '入院日期', format: 'YYYY-MM-DD' }, children: [{ type: 'text', content: '2026-07-17' }] },        { type: 'text', content: '    过敏史:' },        { type: 'data-ele-list', props: { id: 'allergy', caption: '过敏史', multiSelect: true, options: [{ code: 'PEN', value: '青霉素' }, { code: 'CEP', value: '头孢' }, { code: 'NONE', value: '无' }] }, children: [{ type: 'text', content: '青霉素' }] },      ] },      { type: 'p', props: {}, children: [{ type: 'text', props: { fontSize: 14, fontName: '宋体' }, content: '主诉:活动后胸闷三天,加重半天。' }] },      { type: 'p', props: {}, children: [{ type: 'text', props: { fontSize: 14, fontName: '宋体' }, content: '现病史:患者三天前出现胸闷,休息后缓解,无发热、咯血。' }] },      { type: 'p', props: {}, children: [{ type: 'text', props: { fontSize: 14, fontName: '宋体' }, content: '查体:神志清楚,双肺呼吸音清,心率 86 次/分,律齐。' }] },    ] },    { type: 'footer', props: {}, children: [] },  ],} export function createMedicalRecordEditorExample(): RenderStackPanel {  const controller = new MedicalRecordEditorController({ document: documentModel })  controller.setDocumentMode('form')  controller.setShowComment(true)  const editor = new RenderMedicalRecordEditor({ controller, debug: false })  editor.height = 540  const status = new RenderText('表单模式:数据元可交互,正文按模板约束编辑。', { role: 'secondary' })  const actions = new RenderWrapPanel({ spacing: 8, runSpacing: 8 })  actions.addChild(new RenderButton({ label: '表单模式', variant: 'primary', onClick: () => { controller.setDocumentMode('form'); status.text = '已切换到表单模式。' } }))  actions.addChild(new RenderButton({ label: '编辑模式', onClick: () => { controller.setDocumentMode('edit'); status.text = '已切换到自由编辑模式。' } }))  actions.addChild(new RenderButton({ label: '只读预览', onClick: () => { controller.setDocumentMode('view'); status.text = '已切换到只读预览模式。' } }))  actions.addChild(new RenderButton({ label: '序列化病历', onClick: () => { status.text = `病历 JSON 已生成,共 ${JSON.stringify(controller.serialize()).length} 个字符。` } }))   const panel = new RenderStackPanel({ orientation: 'vertical', spacing: 10, crossAxisAlignment: 'stretch' })  panel.addChild(new RenderPageHeader({ title: 'MedicalRecordEditor 入院记录', description: '分页病历编辑、结构化数据元、文档模式、批注能力和 JSON 序列化的完整业务编辑器。' }))  panel.addChild(actions)  panel.addChild(status)  panel.addChild(editor, 1)  panel.padding = 12  return panel}