Files
Mdeical_Sur_Report/工程分析/实现方案-2026-04-18-23-19-44.md

91 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 实现方案 —— 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:baseline`
- `line-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` 函数中:
1. 保存原始 `document.title`
2. 设置 `document.title = docTitle`
3. 打印完成后恢复 `document.title = originalTitle`
这样浏览器在 `window.print()` 时会使用正确的文件名。
## 需求 6导出 JSON 时间使用北京时间
### 修改文件
`src/pages/ReportEditor.tsx``src/pages/ReportManage.tsx``src/pages/TemplateManage.tsx`
### 修改内容
定义一个全局格式化函数 `getBeijingTimeStr()`
```ts
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`
### 修改内容
1. **新增状态**`const [selectedIds, setSelectedIds] = useState<string[]>([]);`
2. **批量删除**`handleBatchDelete()` 过滤掉选中 ID清空 `selectedIds`
3. **批量导出**`handleBatchExport()` 将选中模板打包为 JSON 数组下载
4. **UI 调整**
- 模板列表每行前增加复选框
- 当有选中项时,显示批量操作工具栏(批量删除 + 批量导出)
5. **允许空列表**:移除 `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 |
## 风险与注意事项
1. `vertical-align:baseline` 后,需要验证不同字号混合时(如 11pt 正文 + 12pt 字段)的对齐效果。
2. Logo 使用 `position:absolute` 时需要确保父容器有 `position:relative`,且不会遮挡其他元素。
3. 修改 `document.title` 后需确保在打印失败或用户取消时也能恢复。
4. 批量删除后如果 `currentTemplateId` 被删除,需要重置为 `null` 或自动选中其他模板。
5. 北京时间计算 `new Date(d.getTime() + (8 * 60 * 60 * 1000))` 在夏令时转换时可能有 1 小时偏差,但中国大陆不使用夏令时,所以安全。