Browse Source

feat: 实现编辑任务模态框和操作面板产品区分多语言支持 (1.20.1 1.20.2)

为编辑任务界面添加产品类型区分的国际化支持,支持VETDROS(动物产品)和普通产品显示不同的界面文本

核心功能实现:
- 模态框标题区分:动物产品显示'编辑动物',普通产品显示'编辑患者'
- 患者信息标题区分:动物产品显示'动物信息',普通产品显示'患者信息'
- 字段标签区分:动物姓名/宠物昵称,动物ID/宠物编号等
- 操作面板工具提示:编辑按钮根据产品类型显示相应提示

改动文件:
- src/pages/patient/components/EditTaskModal.tsx
- src/pages/patient/components/ActionPanel.tsx
- src/assets/i18n/messages/zh.js
- src/assets/i18n/messages/en.js
- CHANGELOG.md
- package.json
dengdx 3 weeks ago
parent
commit
4f2b0d2e62

+ 31 - 0
CHANGELOG.md

@@ -2,6 +2,37 @@
 
 本项目的所有重要变更都将记录在此文件中。
 
+## [1.20.2] - 2025-12-22 16:36
+
+### 新增 (Added)
+- **编辑任务模态框和操作面板产品区分多语言支持** - 为编辑任务界面添加产品类型区分的国际化支持
+  - 在 EditTaskModal.tsx 中根据 productName 动态切换标题、患者信息标题和字段标签
+  - 在 ActionPanel.tsx 中为编辑按钮工具提示添加产品区分支持
+  - 在 zh.js 和 en.js 中添加动物相关的多语言 key
+  - 支持 VETDROS(动物产品)和普通产品显示不同的界面文本
+
+**核心功能实现:**
+- 模态框标题区分:动物产品显示"编辑动物",普通产品显示"编辑患者"
+- 患者信息标题区分:动物产品显示"动物信息",普通产品显示"患者信息"
+- 字段标签区分:动物姓名/宠物昵称,动物ID/宠物编号等
+- 操作面板工具提示:编辑按钮根据产品类型显示相应提示
+
+**技术实现:**
+- 在 EditTaskModal 组件中添加 productName 选择器
+- 使用条件表达式根据产品名称选择不同的翻译 key
+- 新增动物相关多语言键值对到国际化文件
+- 保持与现有 SearchPanel 组件的一致性设计模式
+
+**改动文件:**
+- src/pages/patient/components/EditTaskModal.tsx
+- src/pages/patient/components/ActionPanel.tsx
+- src/assets/i18n/messages/zh.js
+- src/assets/i18n/messages/en.js
+- CHANGELOG.md
+- package.json (版本更新: 1.20.1 -> 1.20.2)
+
+---
+
 ## [1.20.1] - 2025-12-22 15:36
 
 ### 新增 (Added)

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "zsis",
-  "version": "1.20.1",
+  "version": "1.20.2",
   "private": true,
   "description": "医学成像系统",
   "main": "main.js",

+ 7 - 2
scripts/output/i18n/en.js

@@ -34,16 +34,20 @@
   "worklistTable.referringDoctor": "Referring Doctor",
   "searchPanel.name": "Search by Name",
   "searchPanel.patientId": "Search by Patient ID",
+  "animal.searchPanel.name": "Search by Pet Nickname",
+  "animal.searchPanel.patientId": "Search by Pet ID",
+  "animal.editTask.title": "Edit Animal",
+  "animal.editTask.patientInfo": "Animal Information",
+  "animal.register.patientId": "pet ID",
+  "animal.register.patientName": "pet nickname",
   "searchPanel.registrationId": "Search by Registration Number",
   "searchPanel.startDate": "Start Date",
   "searchPanel.endDate": "End Date",
   "searchPanel.search": "Search",
   "register.patientId": "Patient ID",
-  "animal.register.patientId": "pet ID",
   "register.patientId.placeholder": "Enter patient ID",
   "animal.register.patientId.placeholder": "Enter pet ID",
   "register.patientName": "Patient Name",
-  "animal.register.patientName": "pet nickname",
   "register.patientName.placeholder": "Enter patient name",
   "animal.register.patientName.placeholder": "Enter pet nickname",
   "register.previousName": "Previous Name",
@@ -120,6 +124,7 @@
   "dicomNodeDetail.archive": "Archive",
   "actionPanel.deleteTask": "Delete Exam Task",
   "actionPanel.editPatient": "Edit Patient Info",
+  "animal.actionPanel.editPatient": "Edit Animal Info",
   "actionPanel.lockTask": "Lock Task",
   "actionPanel.risSync": "RIS Sync",
   "actionPanel.reRegister": "Re-register",

+ 7 - 2
scripts/output/i18n/zh.js

@@ -34,16 +34,20 @@
   "worklistTable.referringDoctor": "转诊医师",
   "searchPanel.name": "按姓名查询",
   "searchPanel.patientId": "按患者编号查询",
+  "animal.searchPanel.name": "按宠物昵称查询",
+  "animal.searchPanel.patientId": "按宠物编号查询",
+  "animal.editTask.title": "编辑宠物",
+  "animal.editTask.patientInfo": "宠物信息",
+  "animal.register.patientId": "宠物编号",
+  "animal.register.patientName": "宠物昵称",
   "searchPanel.registrationId": "按登记号查询",
   "searchPanel.startDate": "开始日期",
   "searchPanel.endDate": "结束日期",
   "searchPanel.search": "查询",
   "register.patientId": "患者编号",
-  "animal.register.patientId": "宠物编号",
   "register.patientId.placeholder": "请输入患者编号",
   "animal.register.patientId.placeholder": "请输入宠物编号",
   "register.patientName": "患者姓名",
-  "animal.register.patientName": "宠物昵称",
   "register.patientName.placeholder": "请输入患者姓名",
   "animal.register.patientName.placeholder": "请输入宠物昵称",
   "register.previousName": "曾用名",
@@ -120,6 +124,7 @@
   "dicomNodeDetail.archive": "归档",
   "actionPanel.deleteTask": "删除检查任务",
   "actionPanel.editPatient": "编辑患者信息",
+  "animal.actionPanel.editPatient": "编辑宠物信息",
   "actionPanel.lockTask": "锁定任务",
   "actionPanel.risSync": "RIS同步",
   "actionPanel.reRegister": "再登记",

+ 5 - 0
src/assets/i18n/messages/en.js

@@ -36,6 +36,10 @@ export default {
   "searchPanel.patientId": "Search by Patient ID",
   "animal.searchPanel.name": "Search by Pet Nickname",
   "animal.searchPanel.patientId": "Search by Pet ID",
+  "animal.editTask.title": "Edit Animal",
+  "animal.editTask.patientInfo": "Animal Information",
+  "animal.register.patientId": "Pet ID",
+  "animal.register.patientName": "Pet Nickname",
   "searchPanel.registrationId": "Search by Registration Number",
   "searchPanel.startDate": "Start Date",
   "searchPanel.endDate": "End Date",
@@ -122,6 +126,7 @@ export default {
   "dicomNodeDetail.archive": "Archive",
   "actionPanel.deleteTask": "Delete Exam Task",
   "actionPanel.editPatient": "Edit Patient Info",
+  "animal.actionPanel.editPatient": "Edit Animal Info",
   "actionPanel.lockTask": "Lock Task",
   "actionPanel.risSync": "RIS Sync",
   "actionPanel.reRegister": "Re-register",

+ 5 - 0
src/assets/i18n/messages/zh.js

@@ -36,6 +36,10 @@ export default {
   "searchPanel.patientId": "按患者编号查询",
   "animal.searchPanel.name": "按宠物昵称查询",
   "animal.searchPanel.patientId": "按宠物编号查询",
+  "animal.editTask.title": "编辑宠物",
+  "animal.editTask.patientInfo": "宠物信息",
+  "animal.register.patientId": "宠物编号",
+  "animal.register.patientName": "宠物昵称",
   "searchPanel.registrationId": "按登记号查询",
   "searchPanel.startDate": "开始日期",
   "searchPanel.endDate": "结束日期",
@@ -122,6 +126,7 @@ export default {
   "dicomNodeDetail.archive": "归档",
   "actionPanel.deleteTask": "删除检查任务",
   "actionPanel.editPatient": "编辑患者信息",
+  "animal.actionPanel.editPatient": "编辑宠物信息",
   "actionPanel.lockTask": "锁定任务",
   "actionPanel.risSync": "RIS同步",
   "actionPanel.reRegister": "再登记",

+ 3 - 2
src/pages/patient/components/ActionPanel.tsx

@@ -88,6 +88,7 @@ const ActionPanel: React.FC = () => {
     (state: RootState) => state.historyEntities.data
   );
   const searchState = useSelector((state: RootState) => state.search);
+  const productName = useSelector((state: RootState) => state.product.productName);
 
   const getSelectedWorkIds = () => {
     const selectedIds =
@@ -496,8 +497,8 @@ const ActionPanel: React.FC = () => {
         }
         tooltip={
           <FormattedMessage
-            id="actionPanel.editPatient"
-            defaultMessage="actionPanel.editPatient"
+            id={productName === 'VETDROS' ? 'animal.actionPanel.editPatient' : 'actionPanel.editPatient'}
+            defaultMessage={productName === 'VETDROS' ? 'animal.actionPanel.editPatient' : 'actionPanel.editPatient'}
           />
         }
         onClick={handleEdit}

+ 20 - 4
src/pages/patient/components/EditTaskModal.tsx

@@ -249,7 +249,10 @@ const EditTaskModal: React.FC = () => {
           }}
         >
           <h2 style={{ margin: 0, fontSize: '18px', fontWeight: 600 }}>
-            <FormattedMessage id="editTask.title" defaultMessage="编辑患者" />
+            <FormattedMessage
+              id={productName === 'VETDROS' ? 'animal.editTask.title' : 'editTask.title'}
+              defaultMessage={productName === 'VETDROS' ? 'animal.editTask.title' : '编辑患者'}
+            />
           </h2>
           <Button
             type="text"
@@ -269,7 +272,10 @@ const EditTaskModal: React.FC = () => {
             {/* 第二行:患者信息 - 响应式多列布局 */}
             <div style={{ marginBottom: '24px' }}>
               <h3 style={{ marginBottom: '16px', fontSize: '16px', fontWeight: 600 }}>
-                <FormattedMessage id="editTask.patientInfo" defaultMessage="患者信息" />
+                <FormattedMessage
+                  id={productName === 'VETDROS' ? 'animal.editTask.patientInfo' : 'editTask.patientInfo'}
+                  defaultMessage={productName === 'VETDROS' ? 'animal.editTask.patientInfo' : '患者信息'}
+                />
               </h3>
               <Row gutter={[16, 16]}>
                 {productName === 'VETDROS' && (
@@ -287,7 +293,12 @@ const EditTaskModal: React.FC = () => {
                 )}
                 <Col xs={24} sm={12} md={8} lg={6}>
                   <Form.Item
-                    label={<FormattedMessage id="register.patientName" defaultMessage="动物姓名" />}
+                    label={
+                      <FormattedMessage
+                        id={productName === 'VETDROS' ? 'animal.register.patientName' : 'register.patientName'}
+                        defaultMessage={productName === 'VETDROS' ? 'animal.register.patientName' : '动物姓名'}
+                      />
+                    }
                     name="patient_name"
                     required={registerFormFields.patient_name.required}
                     validateTrigger={registerFormFields.patient_name.trigger}
@@ -298,7 +309,12 @@ const EditTaskModal: React.FC = () => {
                 </Col>
                 <Col xs={24} sm={12} md={8} lg={6}>
                   <Form.Item
-                    label={<FormattedMessage id="register.patientId" defaultMessage="动物ID" />}
+                    label={
+                      <FormattedMessage
+                        id={productName === 'VETDROS' ? 'animal.register.patientId' : 'register.patientId'}
+                        defaultMessage={productName === 'VETDROS' ? 'animal.register.patientId' : '动物ID'}
+                      />
+                    }
                     name="patient_id"
                     required={registerFormFields.patient_id.required}
                     validateTrigger={registerFormFields.patient_id.trigger}