# zentao-宠物影像工作站-96:字段重命名 - 患者改为宠物 ## 📋 Bug 信息 - **Bug 编号**:zentao-96 - **Bug 标题**:任务清单页和历史清单页的表头字段名调整 - **修复日期**:2025-12-05 - **修复人员**:AI Assistant ## 🎯 需求描述 将任务清单(worklist)和历史清单(historylist)页面中的"患者"相关字段名改为"宠物"相关字段名,以适配宠物影像工作站的业务场景。 ### 字段映射表 | 原字段名 | 新字段名 | 字段ID | |---------|---------|--------| | 患者ID | 宠物ID | `worklistTable.PatientID` | | 患者姓名 | 宠物昵称 | `worklistTable.PatientName` | | 患者年龄 | 宠物年龄 | `worklistTable.PatientAge` | | 患者性别 | 宠物性别 | `worklistTable.PatientSex` | ## 📝 修改详情 ### 1. 中文翻译文件 (zh.js) **文件路径**:`src/assets/i18n/messages/zh.js` **修改内容**: ```javascript // 恢复人医翻译 + 新增宠物医专用翻译 "worklistTable.PatientID": "患者ID", "worklistTable.PatientName": "患者姓名", "worklistTable.PatientAge": "患者年龄", "worklistTable.PatientSex": "患者性别", "animal.worklistTable.PatientID": "宠物ID", // 新增 "animal.worklistTable.PatientName": "宠物昵称", // 新增 "animal.worklistTable.PatientAge": "宠物年龄", // 新增 "animal.worklistTable.PatientSex": "宠物性别", // 新增 ``` ### 2. 英文翻译文件 (en.js) **文件路径**:`src/assets/i18n/messages/en.js` **修改内容**: ```javascript // 恢复人医翻译 + 新增宠物医专用翻译 "worklistTable.PatientID": "Patient ID", "worklistTable.PatientName": "Patient Name", "worklistTable.PatientAge": "Patient Age", "worklistTable.PatientSex": "Patient Sex", "animal.worklistTable.PatientID": "Pet ID", // 新增 "animal.worklistTable.PatientName": "Pet Nickname", // 新增 "animal.worklistTable.PatientAge": "Pet Age", // 新增 "animal.worklistTable.PatientSex": "Pet Sex", // 新增 ``` ### 3. WorklistTable 组件改造 **文件路径**:`src/pages/patient/components/WorklistTable.tsx` **主要改动**: 1. 新增 `generateColumnsDef` 函数,接收 `productName` 参数 2. 动态生成列定义,根据 `productName` 选择对应的翻译 key 3. 为组件接口新增 `productName` 参数 4. 使用 `useMemo` 根据 `productName` 生成列定义 **代码示例**: ```tsx // 生成列定义的辅助函数 const generateColumnsDef = (productName?: string) => [ // ...其他列 { title: ( ), dataIndex: 'PatientID', }, // PatientName, PatientAge, PatientSex 同样处理 ]; // 组件内部 const columnsDef = useMemo(() => generateColumnsDef(productName), [productName]); ``` ### 4. 父组件修改 **修改文件**: - `src/pages/patient/worklist.tsx` - `src/pages/patient/HistoryList.tsx` **改动内容**: 1. 从 Redux 获取 `productName` 2. 传递给 WorklistTable 组件 ```tsx const productName = useSelector( (state: RootState) => state.product.productName ); ``` ## 🔧 技术实现 ### 架构说明 1. **组件复用**:`WorklistTable.tsx` 组件同时被任务清单和历史清单页面使用 2. **国际化方案**:使用 `react-intl` 的 `FormattedMessage` 组件 3. **影响范围**:修改多语言文件后,两个页面会自动同步更新 ### 文件清单 修改的文件(共 2 个): 1. ✏️ `src/assets/i18n/messages/zh.js` 2. ✏️ `src/assets/i18n/messages/en.js` 相关文件(无需修改): - `src/pages/patient/worklist.tsx` - 任务清单页面 - `src/pages/patient/HistoryList.tsx` - 历史清单页面 - `src/pages/patient/components/WorklistTable.tsx` - 表格组件(使用 FormattedMessage) ## 📦 附加工具 ### 多语言文件提取脚本 为便于将多语言文件用于其他用途,创建了可复用的提取脚本: **脚本路径**:`scripts/extract-i18n-json.js` **功能**:将 `.js` 格式的多语言文件转换为纯 JSON 格式(移除 `export default` 和结尾的 `;`) **使用方法**: ```bash node scripts/extract-i18n-json.js ``` **输出文件**: - `scripts/output/i18n/zh.js` - 中文翻译(纯JSON格式,.js扩展名) - `scripts/output/i18n/en.js` - 英文翻译(纯JSON格式,.js扩展名) **文档更新**:已在 `README.md` 中添加脚本使用说明 ## ✅ 测试验证 ### 验证步骤 1. **启动应用** ```bash npm run dev:h5 ``` 2. **验证中文界面** - 切换到中文语言 - 进入任务清单页面 (worklist) - 检查表头是否显示:宠物ID、宠物昵称、宠物年龄、宠物性别 - 进入历史清单页面 (historylist) - 检查表头是否显示:宠物ID、宠物昵称、宠物年龄、宠物性别 3. **验证英文界面** - 切换到英文语言 - 进入任务清单页面 (worklist) - 检查表头是否显示:Pet ID, Pet Nickname, Pet Age, Pet Sex - 进入历史清单页面 (historylist) - 检查表头是否显示:Pet ID, Pet Nickname, Pet Age, Pet Sex ### 预期结果 - ✅ 任务清单和历史清单的表头字段名同步更新 - ✅ 中文界面显示"宠物"相关字段名 - ✅ 英文界面显示"Pet"相关字段名 - ✅ 其他字段不受影响 ## 📊 影响分析 ### 影响范围 - **前端界面**:任务清单、历史清单页面的表头显示 - **用户体验**:字段名更贴合宠物医疗业务场景 - **后端接口**:无影响(仅修改前端显示文本) - **数据结构**:无影响(字段 ID 保持不变) ### 兼容性 - ✅ 向后兼容:字段 ID (`PatientID`, `PatientName` 等) 保持不变 - ✅ 数据兼容:数据库字段名不变,仅修改显示文本 - ✅ API 兼容:接口返回的字段名不变 ## 🔗 相关资源 - **多语言配置目录**:`src/assets/i18n/messages/` - **表格组件**:`src/pages/patient/components/WorklistTable.tsx` - **任务清单页面**:`src/pages/patient/worklist.tsx` - **历史清单页面**:`src/pages/patient/HistoryList.tsx` ## 📌 备注 - 本次修改仅涉及多语言翻译文本,不涉及代码逻辑变更 - 修改后的字段名适用于宠物影像工作站业务场景 - 如需恢复为人类患者场景,只需将翻译文本改回即可 --- **修复完成时间**:2025-12-05 13:20 **验证状态**:✅ 待测试验证