# 需求分析 — 2026-04-16-16-51-00 ## 需求背景 用户在进入 **report-editor**(图文报告生成)页面时,期望编辑器能够自动加载在 **system-settings** 中配置的"图文报告生成默认模板"。但目前存在以下异常现象: 1. 超级管理员进入 report-editor 时,顶部模板选择器显示 **"无"**,编辑区域(`editor-content-wrapper print-wrapper`)为纯白色空白,没有加载任何模板内容。 2. 在 system-settings 中已正确设置默认模板为 **"腹腔镜胆囊切除术报告"**,但 report-editor 未按预期加载。 3. 用户从 `/dashboard` 等其他页面返回 `/report-editor` 后,若之前未进行过有效编辑,也可能出现白色空白模板的情况。 ## 功能目标 修复 report-editor 页面初始化时的模板加载逻辑,确保: - 新建报告(无 `reportId`)时,优先加载系统设置中的默认模板。 - 只有当用户确实在编辑器中有过有效编辑内容时,才从本地草稿(draft)恢复。 - 模板选择器中的"当前模板(及重置模板):"应正确反映当前加载的模板名称,而不是显示"无"。 - 从其他页面返回或重新进入 report-editor 时,未编辑状态下不应出现空白模板。 ## 涉及页面/模块 - `src/pages/ReportEditor.tsx` —— 核心问题所在,草稿恢复与默认模板加载逻辑 - `src/pages/SystemSettings.tsx` —— 默认模板设置页面(验证配置读取逻辑) - `src/utils/storage.ts` —— localStorage 读写封装(辅助确认) ## 问题根因(预分析) 通过代码审阅,发现以下导致空白的根因: 1. **空字符串草稿被当作有效内容加载**:`saveDraftToStorage` 在组件卸载时自动保存草稿。如果用户未在编辑器中输入任何内容,保存的 `content` 会是空字符串 `""`。在初始化 effect 中,判断条件 `typeof draft.content === 'string'` 对空字符串也返回 `true`,导致编辑器被填充为空白 HTML,跳过了后续默认模板加载逻辑。 2. **草稿中未记录模板 ID**:`loadedTemplateId` 没有被存入 draft。当从 draft 恢复时,即使内容非空,模板选择器也因缺少 `loadedTemplateId` 而显示"无"。 3. **默认模板加载逻辑被空白草稿截断**:由于空草稿提前将 `contentLoadedRef.current` 设为 `true`,真正的默认模板分支 (`settings.defaultTemplate`) 永远不会执行。 ## 验收标准 - [ ] 超级管理员进入 report-editor 时,编辑区域正确显示 system-settings 中设置的默认模板内容。 - [ ] 模板选择器显示当前已加载的默认模板名称,而非"无"。 - [ ] 从 dashboard 等其他页面返回 report-editor,未编辑情况下不显示空白模板。 - [ ] `npm run lint` 类型检查零错误。 - [ ] `npm run build` 构建通过。