Include field library metadata in template exports

- Add fieldLibrary metadata to HTML template packages, including form fields, custom time formats, multi-select options, and anesthesia options.

- Restore imported template field metadata into local compatibility caches and the backend field library API when available.

- Preserve legacy JSON template import compatibility while keeping user-facing exports on HTML packages.

- Prevent template field saves from overwriting stored multi-select and anesthesia options with empty values.

- Update README, AGENTS, feature, requirement, design, module, progress, component, and testing docs for complete template export behavior.

- Extend template export tests to cover field library metadata round-tripping.
This commit is contained in:
2026-05-02 04:27:08 +08:00
parent 03b54fe18b
commit 44decaa396
12 changed files with 171 additions and 37 deletions

View File

@@ -151,7 +151,7 @@ main.tsx
- 报告正文编辑区:`contentEditable` HTML、智能字段和图片占位符。
- 视频分析区:视频上传、预览、自动抽帧、手动截帧。
- 关键帧列表:点击插入、拖拽插入、后端文件上传状态。
- AI 撰写面板:对话、区域改写差异确认和 AI 日志导出
- AI 撰写面板:对话、区域改写差异确认。
- 语音输入:浏览器麦克风采集,连接 `/api/speech/iat`
- 保存逻辑:优先调用 Reports API并同步 `ReportMedia` 所需的视频/关键帧引用。
@@ -199,7 +199,7 @@ main.tsx
- 富文本命令、表格、字段、图片占位符、AI 区域插入。
- 字段库维护。
- 模板图片资源上传和删除。
- 模板 HTML 模板包导出和 HTML/历史 JSON 模板包导入。
- 模板 HTML 模板包导出和 HTML/历史 JSON 模板包导入HTML 包内嵌模板字段和字段管理设置
后续拆分优先级:

View File

@@ -96,7 +96,7 @@ AI 可编辑区域通过 `.ai-region[data-ai-id]` 和内部 `.ai-content` 定位
`src/utils/print.ts` 通过隐藏 iframe 写入报告 HTML 和打印样式然后调用浏览器打印。PDF 导出依赖浏览器“另存为 PDF”不是服务端生成 PDF。
前端用户可见 JSON 导出入口已移除。报告导出保留浏览器打印/PDF模板导出保留可回导 HTML 模板包和 PDF 打印预览,历史 JSON 模板包只作为导入兼容格式保留。
前端用户可见 JSON 导出入口已移除。报告导出保留浏览器打印/PDF模板导出保留可回导 HTML 模板包和 PDF 打印预览,历史 JSON 模板包只作为导入兼容格式保留。HTML 模板包会在内嵌元数据中保存模板正文、模板对应字段和字段管理设置,导入时同步恢复字段库兼容缓存并尝试写回 `/api/library/fields`
## 外部服务设计

View File

@@ -32,7 +32,7 @@
| 报告查看 | 真实集成 | `ReportView` 优先调用 `GET /api/reports/:id`,后端校验查看权限;页面渲染报告 HTML只有开发/显式回退模式下 API 不可用才回退本地权限检查。 |
| PDF 导出 | 真实集成 | 通过隐藏 iframe 或 `window.print()` 调用浏览器打印,用户手动保存为 PDF不是后端 PDF 生成。 |
| 前端 JSON 导出 | 已移除 | 用户可见的报告、模板和 AI 日志 JSON 导出入口已移除;模板导入仍兼容旧 JSON 模板包。 |
| 模板管理 | 真实集成 | `TemplateManage` 优先调用 `/api/templates?access=manage`,新增/编辑/删除会写后端并清洗 HTML新增后保存内容以当前页面模板列表为准并同步兼容缓存避免旧本地缓存覆盖新模板字段库优先调用 `/api/library/fields`,模板图片资源优先调用 `/api/files`。导出保留 HTML 模板包和 PDF 打印预览,导入兼容 HTML 模板包和旧 JSON 模板包,仍主要在前端处理。 |
| 模板管理 | 真实集成 | `TemplateManage` 优先调用 `/api/templates?access=manage`,新增/编辑/删除会写后端并清洗 HTML新增后保存内容以当前页面模板列表为准并同步兼容缓存避免旧本地缓存覆盖新模板字段库优先调用 `/api/library/fields`,模板图片资源优先调用 `/api/files`。导出保留 HTML 模板包和 PDF 打印预览,HTML 模板包内嵌模板正文、模板字段和字段管理设置;导入兼容 HTML 模板包和旧 JSON 模板包,仍主要在前端处理。 |
| 模板权限 | 真实集成 | 后端按部门模板、部门授权和个人模板过滤 `access=use/manage`;迁移期仍同步 `localStorage.templates`,仅在开发/显式回退模式下作为回退。 |
| 我的个人模板 | 真实集成 | 医生在报告编辑器中保存个人模板时优先调用 `POST /api/templates`,后端把模板归属当前用户;只有开发/显式回退模式下 API 不可用才回退本地模板。 |
| 用户管理 | 真实集成 | `UserManage` 优先调用 `/api/users` 增删改查,后端校验超级管理员/管理员范围、管理员唯一性和医生创建约束;只有开发/显式回退模式下 API 不可用才保留本地回退。 |
@@ -67,7 +67,7 @@
| `src/pages/ReportManage.test.tsx` | 医生/管理员报告可见范围。 |
| `src/utils/permissions.test.ts` | 报告权限、管理员本部门范围、医生个人模板和部门模板范围。 |
| `src/utils/templateList.test.ts` | 模板列表合并,覆盖新增模板不被旧缓存覆盖。 |
| `src/utils/templateExport.test.ts` | HTML 模板包生成、HTML 回导、旧 JSON 导入兼容和文件名清理。 |
| `src/utils/templateExport.test.ts` | HTML 模板包生成、字段库元数据回导、旧 JSON 导入兼容和文件名清理。 |
| `src/utils/storage.test.ts` | 本地存储、系统设置混淆兼容、会话恢复键、默认 Provider 不携带内置 Key 的契约。 |
| `src/utils/defaultContent.test.ts` | 默认模板结构、智能字段、图片占位符、AI 区域、字段和 Provider 配置。 |
| `src/utils/print.test.ts` | 浏览器打印导出入口。 |

View File

@@ -76,15 +76,21 @@
```json
{
"version": "1.0",
"version": "1.1",
"type": "surclaw_template_package",
"title": "模板名称",
"description": "模板描述",
"content": "模板 HTML",
"fields": []
"fields": [],
"fieldLibrary": {
"formFields": [],
"customTimeFormats": [],
"multiSelectOptions": {},
"anesthesiaOptions": []
}
}
```
HTML 模板包是一个可直接用浏览器打开的完整 HTML 文件,包含 A4 页面样式、打印样式和内嵌的 `surclaw_template_package` 元数据。它比 JSON 更适合保留“报告整体观感”,也是当前推荐的可回导模板交换格式。
HTML 模板包是一个可直接用浏览器打开的完整 HTML 文件,包含 A4 页面样式、打印样式和内嵌的 `surclaw_template_package` 元数据。元数据会随包保存模板正文、模板对应字段,以及字段管理相关设置:字段库、时间格式、多选字段选项和麻醉方式选项。它比单独 JSON 文件更适合保留“报告整体观感”,也是当前推荐的可回导模板交换格式。
PDF 导出走浏览器打印,适合归档和人工查看,不适合再次导入编辑。

View File

@@ -88,3 +88,4 @@
| 2026-05-02 | 模板管理新增 HTML 模板包导出/导入。 |
| 2026-05-02 | 修复报告编辑器新增 AI 可编辑区域后 AI 撰写下拉栏不立即更新的问题,并补充 E2E。 |
| 2026-05-02 | 移除前端用户可见 JSON 导出入口,保留模板历史 JSON 导入兼容。 |
| 2026-05-02 | 模板 HTML 导出包补充模板字段和字段管理设置,导入时恢复字段库元数据。 |

View File

@@ -46,7 +46,7 @@
- 支持模板新增、编辑、删除、批量删除。
- 支持模板内容富文本编辑、智能字段插入、图片占位符、AI 可编辑区域。
- 支持模板导出可回导 HTML 模板包;导入兼容 HTML 模板包和历史 JSON 模板包。
- 支持模板导出可回导 HTML 模板包;HTML 包需包含模板正文、模板对应字段和字段管理设置,导入兼容 HTML 模板包和历史 JSON 模板包。
- 支持表单字段库维护,包括字段显示、选项、时间格式、默认值和下划线样式。
- 新增模板后会同步当前用户或部门用户的模板权限。

View File

@@ -84,7 +84,7 @@ AI 第三方接口、讯飞语音上游 WebSocket、麦克风权限和真实视
| 默认字段和 AI Provider | 已覆盖 | `defaultContent.test.ts` |
| 打印导出入口 | 已覆盖 | `print.test.ts` |
| 模板列表合并工具 | 已覆盖 | `templateList.test.ts`,防止新增模板被旧本地缓存覆盖。 |
| 模板导入导出工具 | 已覆盖 | `templateExport.test.ts`,覆盖 HTML 模板包、HTML 回导、旧 JSON 导入兼容和文件名清理。 |
| 模板导入导出工具 | 已覆盖 | `templateExport.test.ts`,覆盖 HTML 模板包、字段库元数据回导、旧 JSON 导入兼容和文件名清理。 |
| 默认快捷登录 | 已覆盖 | `e2e/login.spec.ts` |
| 报告权限 E2E | 已覆盖 | `e2e/report-permissions.spec.ts` |
| 报告修订版本 E2E | 已覆盖 | `e2e/report-revision.spec.ts` |