3.8 KiB
3.8 KiB
实现方案 —— 2026-04-18-23-19-44
方案目标
修复排版对齐问题,优化导出文件名,实现模板批量操作。
需求 1:修复 field-value 输入内容往上飘
修改文件
src/utils/defaultContent.ts、src/utils/print.ts
修改内容
defaultContent.ts中smartField():vertical-align:text-bottom→vertical-align:baselineline-height:1.2;min-height:1.2em;→line-height:inherit;
print.ts中.field-value打印样式同步修改vertical-align:baseline; line-height:inherit;- 打印时下划线
padding-bottom改为1px以紧贴文字
需求 2、3、4:微调排版间距和 Logo 位置
修改文件
src/utils/defaultContent.ts
修改内容
- 姓名栏横线:
padding-bottom: 1px;(原来是padding: 0 0 1px 0,可能需要调整) - 手术记录标题:
margin-top: 2px;(原来是margin-bottom: 8px等,需要精确调整) - Logo:使用
position:absolute向左上偏移 5px,或调整父容器gap/margin
需求 5:导出 PDF 文件名修正
修改文件
src/utils/print.ts
修改内容
在 printDocument 函数中:
- 保存原始
document.title - 设置
document.title = docTitle - 打印完成后恢复
document.title = originalTitle
这样浏览器在 window.print() 时会使用正确的文件名。
需求 6:导出 JSON 时间使用北京时间
修改文件
src/pages/ReportEditor.tsx、src/pages/ReportManage.tsx、src/pages/TemplateManage.tsx
修改内容
定义一个全局格式化函数 getBeijingTimeStr():
const getBeijingTimeStr = () => {
const d = new Date();
const bjTime = new Date(d.getTime() + (8 * 60 * 60 * 1000));
return bjTime.toISOString().replace(/T/, '-').replace(/:/g, '-').slice(0, 16);
};
替换所有 new Date().toISOString().replace(/[:.]/g, '-') 的调用。
需求 7:模板管理批量操作
修改文件
src/pages/TemplateManage.tsx
修改内容
- 新增状态:
const [selectedIds, setSelectedIds] = useState<string[]>([]); - 批量删除:
handleBatchDelete()过滤掉选中 ID,清空selectedIds - 批量导出:
handleBatchExport()将选中模板打包为 JSON 数组下载 - UI 调整:
- 模板列表每行前增加复选框
- 当有选中项时,显示批量操作工具栏(批量删除 + 批量导出)
- 允许空列表:移除
templates.length > 1对删除按钮的限制(改为只在批量删除时确认)
冲突检查
- 现有
handleDeleteTemplate单个删除逻辑可复用 Login.tsx中的默认模板初始化逻辑需要检查:如果用户删除了所有模板,系统是否会在登录时强制创建默认模板
涉及文件及修改点
| 文件 | 修改点 |
|---|---|
src/utils/defaultContent.ts |
smartField 基线对齐;姓名栏间距;手术记录间距;Logo 位置 |
src/utils/print.ts |
field-value 打印样式;document.title 动态设置 |
src/pages/ReportEditor.tsx |
导出文件名使用北京时间 |
src/pages/ReportManage.tsx |
导出文件名使用北京时间 |
src/pages/TemplateManage.tsx |
导出文件名使用北京时间;批量操作状态和 UI |
风险与注意事项
vertical-align:baseline后,需要验证不同字号混合时(如 11pt 正文 + 12pt 字段)的对齐效果。- Logo 使用
position:absolute时需要确保父容器有position:relative,且不会遮挡其他元素。 - 修改
document.title后需确保在打印失败或用户取消时也能恢复。 - 批量删除后如果
currentTemplateId被删除,需要重置为null或自动选中其他模板。 - 北京时间计算
new Date(d.getTime() + (8 * 60 * 60 * 1000))在夏令时转换时可能有 1 小时偏差,但中国大陆不使用夏令时,所以安全。