# 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
**验证状态**:✅ 待测试验证