# 实现方案 — 模板新增术后字段(2026-04-17-09-57-08) ## 一、修改文件清单 1. `src/types.ts` — 扩展 `Report` 类型 + 追加 `DEFAULT_FORM_FIELDS` 2. `src/utils/defaultContent.ts` — 替换默认模板中的 4 处占位文本为 `smartField()` 3. `src/pages/ReportEditor.tsx` — 增加 `formFieldsConfig` 自动补全/升级逻辑 4. `src/pages/TemplateManage.tsx` — 增加同样的自动补全/升级逻辑 ## 二、详细改动 ### 2.1 `src/types.ts` #### A. `Report` 接口追加字段 ```ts postOpCondition?: string; specimenDescription?: string; pathologySent?: string; frozenPathology?: string; ``` #### B. `DEFAULT_FORM_FIELDS` 追加 4 条 ```ts { key: 'postOpCondition', label: '手术后情况', category: '单选', type: 'single_select', visibleInForm: true, isSystemLocked: false, options: ['患者麻醉恢复后安返病房'] }, { key: 'specimenDescription', label: '切除标本描述', category: '单选', type: 'single_select', visibleInForm: true, isSystemLocked: false, options: [] }, { key: 'pathologySent', label: '是否送检病理', category: '单选', type: 'single_select', visibleInForm: true, isSystemLocked: false, options: ['是', '否'] }, { key: 'frozenPathology', label: '冰冻病理结果', category: '填空', type: 'text', visibleInForm: true, isSystemLocked: false }, ``` ### 2.2 `src/utils/defaultContent.ts` 将模板底部 `template-info-section` 中的 4 处文本替换: - `患者麻醉恢复后安返病房` → `${smartField('postOpCondition')}` - `切除标本描述` → `${smartField('specimenDescription')}` - `是` → `${smartField('pathologySent')}` - `冰冻病理结果` → `${smartField('frozenPathology')}` ### 2.3 `src/pages/ReportEditor.tsx` 在初始化 `useEffect` 中,读取 `formFieldsConfig` 后增加**字段合并逻辑**: ```ts const savedFields = storage.get('formFieldsConfig', []); let mergedFields = savedFields; if (savedFields.length > 0) { const missing = DEFAULT_FORM_FIELDS.filter(def => !savedFields.some(f => f.key === def.key)); if (missing.length > 0) { mergedFields = [...savedFields, ...missing]; storage.set('formFieldsConfig', mergedFields); } setFormFields(mergedFields); } else { setFormFields(DEFAULT_FORM_FIELDS); storage.set('formFieldsConfig', DEFAULT_FORM_FIELDS); } ``` ### 2.4 `src/pages/TemplateManage.tsx` 在同样的初始化位置执行完全相同的合并逻辑,保证两个页面中的字段配置一致性。 ## 三、风险与回滚 - **风险**:修改 `DEFAULT_FORM_FIELDS` 和默认模板后,新用户直接生效;老用户通过合并逻辑无痛升级。 - **回滚**:如出现问题,可将 `DEFAULT_FORM_FIELDS` 恢复为 14 条,并回滚 `defaultContent.ts` 中的 4 处替换。 ## 四、验证计划 1. 清空浏览器 localStorage 后刷新,确认新建报告时模板底部 4 处为可编辑方框。 2. 在右侧表单中操作 4 个新控件,观察模板方框实时同步。 3. 在模板方框中直接输入,观察右侧表单实时同步。 4. 预先写入旧版 `formFieldsConfig`(14 条),刷新页面,确认自动补全为 18 条。