Parcourir la source

feat 1.13.0 :
- **体位列表追加按钮多语言提示功能** ([src/pages/exam/components/BodyPositionList.tsx](src/pages/exam/components/BodyPositionList.tsx))
- 为体位列表底部的追加按钮添加多语言 Tooltip 提示
- 新增中文和英文的多语言键值对:exam.action.addMorePositions
- 集成 React Intl 的 useIntl hook 和 Tooltip 组件
- 支持鼠标悬停时显示对应语言的提示文本
**核心改进:**
- 用户体验提升:追加按钮现在有清晰的提示信息
- 国际化支持:支持中文添加更多体位和英文Add More Positions
- 代码架构优化:使用标准的 React Intl 多语言方案
- 视觉反馈增强:悬停时显示提示,提升交互友好性
**技术实现:**
- 新增多语言键值对到 zh.js 和 en.js
- 在 BodyPositionList 组件中导入 Tooltip 和 useIntl
- 使用 Tooltip 包裹追加按钮区域
- 动态获取当前语言对应的提示文本
**改动文件:**
- src/assets/i18n/messages/zh.js - 添加中文翻译
- src/assets/i18n/messages/en.js - 添加英文翻译
- src/pages/exam/components/BodyPositionList.tsx - 实施 Tooltip 功能
- CHANGELOG.md
- package.json (版本更新: 1.12.5 -> 1.13.0)

dengdx il y a 3 semaines
Parent
commit
aee72cdcd2

+ 30 - 0
CHANGELOG.md

@@ -2,6 +2,36 @@
 
 本项目的所有重要变更都将记录在此文件中。
 
+## [1.13.0] - 2025-12-18 14:18
+
+### 新增 (Added)
+- **体位列表追加按钮多语言提示功能** ([src/pages/exam/components/BodyPositionList.tsx](src/pages/exam/components/BodyPositionList.tsx))
+  - 为体位列表底部的追加按钮添加多语言 Tooltip 提示
+  - 新增中文和英文的多语言键值对:"exam.action.addMorePositions"
+  - 集成 React Intl 的 useIntl hook 和 Tooltip 组件
+  - 支持鼠标悬停时显示对应语言的提示文本
+
+**核心改进:**
+- 用户体验提升:追加按钮现在有清晰的提示信息
+- 国际化支持:支持中文"添加更多体位"和英文"Add More Positions"
+- 代码架构优化:使用标准的 React Intl 多语言方案
+- 视觉反馈增强:悬停时显示提示,提升交互友好性
+
+**技术实现:**
+- 新增多语言键值对到 zh.js 和 en.js
+- 在 BodyPositionList 组件中导入 Tooltip 和 useIntl
+- 使用 Tooltip 包裹追加按钮区域
+- 动态获取当前语言对应的提示文本
+
+**改动文件:**
+- src/assets/i18n/messages/zh.js - 添加中文翻译
+- src/assets/i18n/messages/en.js - 添加英文翻译
+- src/pages/exam/components/BodyPositionList.tsx - 实施 Tooltip 功能
+- CHANGELOG.md
+- package.json (版本更新: 1.12.5 -> 1.13.0)
+
+---
+
 ## [1.12.5] - 2025-12-18 13:47
 
 ### 修复 (Fixed)

+ 1 - 1
package.json

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

+ 16 - 1
scripts/output/i18n/en.js

@@ -238,5 +238,20 @@
   "exam.close.aec": "close AEC",
   "exam.open.aec": "open AEC",
   "exam.thinkness": "thinkness",
-  "exam.exposure.mode": "exposure mode"
+  "exam.exposure.mode": "exposure mode",
+  "exam.bodysize.placeholder": "Select Body Size",
+  "exam.thickness.label": "Thickness (cm)",
+  "exam.thickness.placeholder": "Thickness",
+  "exam.exposureMode.label": "Exposure Mode",
+  "exam.exposureMode.placeholder": "Select Exposure Mode",
+  "exam.aec.enabled": "AEC Enabled",
+  "exam.aec.disabled": "AEC Disabled",
+  "exam.action.resetParams": "Reset Parameters",
+  "exam.action.deletePosition": "Delete Selected Position",
+  "exam.action.copyPosition": "Copy Selected Position",
+  "exam.action.saveParams": "Save Parameters",
+  "exam.action.toggleCamera": "Toggle Camera",
+  "exam.action.reject": "Reject",
+  "exam.action.restore": "Restore",
+  "exam.action.addMorePositions": "Add More Positions"
 }

+ 16 - 1
scripts/output/i18n/zh.js

@@ -238,5 +238,20 @@
   "exam.close.aec": "关闭 AEC",
   "exam.open.aec": "打开 AEC",
   "exam.thinkness": "厚度",
-  "exam.exposure.mode": "曝光模式"
+  "exam.exposure.mode": "曝光模式",
+  "exam.bodysize.placeholder": "选择体型",
+  "exam.thickness.label": "厚度 (cm)",
+  "exam.thickness.placeholder": "厚度",
+  "exam.exposureMode.label": "曝光模式",
+  "exam.exposureMode.placeholder": "选择曝光模式",
+  "exam.aec.enabled": "开启AEC",
+  "exam.aec.disabled": "关闭AEC",
+  "exam.action.resetParams": "重置参数",
+  "exam.action.deletePosition": "删除选择的体位",
+  "exam.action.copyPosition": "复制选择的体位",
+  "exam.action.saveParams": "保存参数",
+  "exam.action.toggleCamera": "打开/关闭摄像头",
+  "exam.action.reject": "拒绝",
+  "exam.action.restore": "恢复",
+  "exam.action.addMorePositions": "添加更多体位"
 }

+ 2 - 1
src/assets/i18n/messages/en.js

@@ -252,5 +252,6 @@ export default {
   "exam.action.saveParams": "Save Parameters",
   "exam.action.toggleCamera": "Toggle Camera",
   "exam.action.reject": "Reject",
-  "exam.action.restore": "Restore"
+  "exam.action.restore": "Restore",
+  "exam.action.addMorePositions": "Add More Positions"
 };

+ 2 - 1
src/assets/i18n/messages/zh.js

@@ -252,5 +252,6 @@ export default {
   "exam.action.saveParams": "保存参数",
   "exam.action.toggleCamera": "打开/关闭摄像头",
   "exam.action.reject": "拒绝",
-  "exam.action.restore": "恢复"
+  "exam.action.restore": "恢复",
+  "exam.action.addMorePositions": "添加更多体位"
 };

+ 17 - 13
src/pages/exam/components/BodyPositionList.tsx

@@ -2,8 +2,9 @@ import React, { useEffect, useState, useRef } from 'react';
 import { useSelector, useDispatch } from 'react-redux';
 import { ExtendedBodyPosition } from '../../../states/exam/bodyPositionListSlice';
 import { RootState, AppDispatch } from '../../../states/store';
-import { message, Badge } from 'antd';
+import { message, Badge, Tooltip } from 'antd';
 import { CheckOutlined, CloseOutlined } from '@ant-design/icons';
+import { useIntl } from 'react-intl';
 import AppendViewIcon from '@/components/AppendViewIcon';
 import ImageViewer from './ImageViewer';
 import { getExposedImageUrl, getViewIconUrl } from '../../../API/bodyPosition';
@@ -23,6 +24,7 @@ const BodyPositionList: React.FC<BodyPositionListProps> = ({
   showAddButton = true,
 }) => {
   const dispatch = useDispatch<AppDispatch>();
+  const intl = useIntl();
   const currentKey = useSelector(
     (state: RootState) => state.BusinessFlow.currentKey
   );
@@ -176,21 +178,23 @@ const BodyPositionList: React.FC<BodyPositionListProps> = ({
       </div>
 
       {showAddButton && (
-        <div
-          className="mx-auto cursor-pointer"
-          style={{ width: '50%' }}
-          onClick={addBodyPositionClick}
-        >
+        <Tooltip title={intl.formatMessage({ id: 'exam.action.addMorePositions' })}>
           <div
-            style={{
-              stroke: 'var(--color-primary)',
-              strokeWidth: 0.5,
-              color: 'var(--color-text)',
-            }}
+            className="mx-auto cursor-pointer"
+            style={{ width: '50%' }}
+            onClick={addBodyPositionClick}
           >
-            <AppendViewIcon className="w-full h-full hover:opacity-100 " />
+            <div
+              style={{
+                stroke: 'var(--color-primary)',
+                strokeWidth: 0.5,
+                color: 'var(--color-text)',
+              }}
+            >
+              <AppendViewIcon className="w-full h-full hover:opacity-100 " />
+            </div>
           </div>
-        </div>
+        </Tooltip>
       )}
 
       <AppendViewModal open={isAppendModalOpen} onCancel={handleModalClose} />