REAL SHOWCASE SOURCEcentered-form-layout

1 个文件 · 79 行 · TypeScript

// ===== showcase/src/examples/components/centered_form_layout.ts ===== import {  RenderBorder,  RenderButton,  RenderGridPanel,  RenderPageHeader,  RenderParagraph,  RenderStackPanel,  RenderText,  RenderTextBox,  gridAuto,  gridFr,  gridPx,} from 'ds-ui' const fieldLabel = (text: string): RenderText => {  const label = new RenderText(text, { role: 'secondary' })  label.verticalAlignment = 'center'  return label} export function createCenteredFormLayoutExample(): RenderGridPanel {  const status = new RenderParagraph('表单拥有 maxWidth,外层单格 Grid 才有可用于居中的剩余空间。')  const patientName = new RenderTextBox({ value: '李安然', placeholder: '输入患者姓名' })  const encounterId = new RenderTextBox({ value: 'MZ20260718018', readonly: true })  const department = new RenderTextBox({ value: '呼吸内科', placeholder: '输入科室' })   const form = new RenderGridPanel({    columns: [gridPx(88), gridFr()],    rows: [gridAuto(), gridAuto(), gridAuto()],    columnGap: 12,    rowGap: 12,  })  form.addChild(fieldLabel('患者姓名'), { row: 0, column: 0 })  form.addChild(patientName, { row: 0, column: 1 })  form.addChild(fieldLabel('门诊号'), { row: 1, column: 0 })  form.addChild(encounterId, { row: 1, column: 1 })  form.addChild(fieldLabel('接诊科室'), { row: 2, column: 0 })  form.addChild(department, { row: 2, column: 1 })   const actions = new RenderStackPanel({    orientation: 'horizontal',    spacing: 8,    mainAxisAlignment: 'end',    crossAxisAlignment: 'center',  })  actions.addChild(new RenderButton({    label: '重置',    onClick: () => {      patientName.value = '李安然'      encounterId.value = 'MZ20260718018'      department.value = '呼吸内科'      status.text = '表单已恢复演示数据。'    },  }))  actions.addChild(new RenderButton({    label: '保存',    variant: 'primary',    onClick: () => {      status.text = '居中表单已提交。'    },  }))   const content = new RenderStackPanel({ orientation: 'vertical', spacing: 16, crossAxisAlignment: 'stretch' })  content.addChild(new RenderPageHeader({ title: '患者登记', description: '外层居中,内层 Grid 对齐字段。' }))  content.addChild(form)  content.addChild(actions)  content.addChild(status)   const card = new RenderBorder({ background: 'panel', padding: 20, child: content })  card.maxWidth = 560  card.horizontalAlignment = 'center'  card.verticalAlignment = 'center'   const host = new RenderGridPanel({ columns: [gridFr()], rows: [gridFr()], padding: 24 })  host.addChild(card)  return host}