Browse Source

feat (1.73.0 -> 1.74.0): 重构工作流设置配置,支持命名空间键并优化API响应处理

- 在 options.ts 中简化 configResponse 数据结构,去除嵌套包装
- 在 Workflow.tsx 中为所有配置项添加命名空间前缀(如 Inspection/、Display/、System/)
- 更新表单字段名和初始化值以匹配新的命名空间
- 移除调试日志并清理代码结构
- 调整数据访问逻辑以适应API变化
szy 2 days ago
parent
commit
5e8639a75f

+ 33 - 18
CHANGELOG.md

@@ -2,37 +2,52 @@
 
 本项目的所有重要变更都将记录在此文件中.
 
-## [1.75.1] - 2026-01-21 11:00
+## [1.74.0] - 2026-01-19 14:43
 
-feat (1.75.0 -> 1.75.1): 重构系统配置API响应结构,优化工作流配置处理并更新文档
+feat (1.73.0 -> 1.74.0): 重构工作流设置配置,支持命名空间键并优化API响应处理
 
-- 在 options.ts 中重构 configResponse 数据结构,添加嵌套的 configs 数组
-- 在 Workflow.tsx 中更新配置处理逻辑,适配新的API响应格式
-- 更新 README.md 文档格式和部署命令
+- 在 options.ts 中简化 configResponse 数据结构,去除嵌套包装
+- 在 Workflow.tsx 中为所有配置项添加命名空间前缀(如 Inspection/、Display/、System/)
+- 更新表单字段名和初始化值以匹配新的命名空间
+- 移除调试日志并清理代码结构
+- 调整数据访问逻辑以适应API变化
 
 改动文件:
 
-- README.md
-- package.json
 - src/API/system/options.ts
 - src/pages/system/SettingsModal/sections/Preferences/Workflow.tsx
 
-## [1.75.0] - 2026-01-21 11:00
+## [1.73.0] - 2026-01-16 12:50
 
-feat (1.74.0 -> 1.75.0): 实现工作流设置表格拖拽排序功能
+feat (1.72.0 -> 1.73.0): 实现文本注解工具条功能,支持选中注解的文本编辑、缩放和删除操作
 
-- 集成 @dnd-kit 库,实现现代化的拖拽排序功能
-- 在 Workflow.tsx 中添加拖拽上下文、排序组件和拖拽句柄
-- 为任务清单和历史清单配置表格添加垂直拖拽排序功能
-- 新增 deploy:h5 脚本,支持 H5 应用的部署
-- 移除过时的 @cypress/webpack-preprocessor 依赖
-- 更新 package-lock.json 同步依赖变更
+- 增强TextAnnotationTool,支持配置文本框尺寸参数和导出TextAnnotation接口
+- 新增TextAnnotationOperator类,提供注解的移动、缩放、旋转、文本设置等操作接口
+- 新增TextAnnotationToolbar组件,实现文本输入框、缩放滑块和删除按钮
+- 新增TextAnnotationToolbarOverlay覆盖层,监听注解选择事件并在底部显示工具条
+- 更新堆栈图像查看器,集成工具条覆盖层组件
+- 新增TextAnnotationOperatorExample使用示例文件
 
 改动文件:
 
-- package.json
-- package-lock.json
-- src/pages/system/SettingsModal/sections/Preferences/Workflow.tsx
+- src/components/measures/TextAnnotationTool.ts
+- src/pages/view/components/viewers/stack.image.viewer.tsx
+- src/utils/textAnnotationToolManager.ts
+- src/components/measures/TextAnnotationToolbar.tsx
+- src/components/measures/TextAnnotationToolbarOverlay.tsx
+- src/utils/textAnnotationOperatorExample.ts
+
+## [1.72.0] - 2026-01-15 21:42
+
+feat (1.71.1 -> 1.72.0): 优化屏幕尺寸响应式布局,在xl屏幕尺寸下使用大屏组件提升用户体验
+
+- 在 ExamPage.tsx 中将 xl 屏幕的组件从 MediumScreen 改为 LargeScreen
+- 在 ImageProcessingPage.tsx 中将 xl 屏幕的组件从 ImageProcessingPageMedium 改为 ImageProcessingPageLarge
+
+改动文件:
+
+- src/pages/exam/ExamPage.tsx
+- src/pages/view/ImageProcessingPage.tsx
 
 ## [1.74.0] - 2026-01-21 11:00
 

+ 1 - 1
package.json

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

+ 1 - 4
src/API/system/options.ts

@@ -26,10 +26,7 @@ export interface configResponse {
   code: string;
   description: string;
   solution: string;
-  data: {
-    '@type': string;
-    configs: configItem[];
-  };
+  data: configItem[];
 }
 
 // 获取配置的可选项

+ 63 - 46
src/pages/system/SettingsModal/sections/Preferences/Workflow.tsx

@@ -31,17 +31,7 @@ interface FieldConfig {
   Visible: boolean;
 }
 
-const listFieldBase: FieldConfig[] = [
-  { key: '1', field: '动物ID', FieldName: 'patient_id', visible: true },
-  { key: '2', field: '动物名称', FieldName: 'patient_id', visible: true },
-  { key: '3', field: '动物类型', FieldName: 'patient_id', visible: true },
-  { key: '4', field: '性别', FieldName: 'patient_id', visible: true },
-  { key: '5', field: '年龄', FieldName: 'patient_id', visible: true },
-  { key: '6', field: '检查描述', FieldName: 'patient_id', visible: true },
-  { key: '7', field: '检查时间', FieldName: 'patient_id', visible: true },
-  { key: '8', field: '主人', FieldName: 'patient_id', visible: true },
-  { key: '9', field: '登记号', FieldName: 'patient_id', visible: true },
-];
+const listFieldBase: FieldConfig[] = [];
 
 const initValues = {
   // 是否自动跳转到下个视图
@@ -50,23 +40,30 @@ const initValues = {
   'Exam/AutoSelectExposureMode': false,
   // 自动跳转到下个视图延迟时间
   'Inspection/AutoJumpToNextView': 0,
-  suggestAPRTable: false,
-  allowMergeTasks: false,
-  allowEditAfterAcquisition: false,
+  // 提供建议的APR表
+  'Inspection/SuggestAPRTable': false,
+  // 允许同一患者的多个任务合并开始检查
+  'Inspection/AllowMergeTasks': false,
+  // 图像采集后在检查中允许编辑曝光信息如APR、DAP
+  'Inspection/AllowEditAfterAcquisition': false,
   // 是否要求拒绝原因
   'Inspection/RequireRejectReason': false,
   // 是否显示拒绝图片
   'SystemConfig/ShowRejectImage': false,
-  smallAnimalExposureMode: 'bodyThickness',
+  // 小动物默认曝光参数
+  'Inspection/SmallAnimalExposureMode': 'bodyThickness',
   // 是否显示电池状态
   'Display/BatteryStatusEnable': false,
-  tubePower: false,
+  // 是否显示球管电量
+  'Display/TubePower': false,
   // 是否显示温度状态
   'Display/TemperatureStatusEnable': false,
-  detectorPower: false,
+  // 是否显示探测器电量
+  'Display/DetectorPower': false,
   // 是否显示WIFI状态
   'Display/WIFIStatusEnable': false,
-  detectorTemp: false,
+  // 是否显示探测器温度
+  'Display/DetectorTemp': false,
   // 是否显示真实渲染图像
   'SystemConfig/IsShowRealImage': false,
   // 是否显示解刨图像
@@ -74,10 +71,11 @@ const initValues = {
   // 是否显示曝光指示器
   'Exam/ShowExposureIndicator': false,
   // 导出图像模式
-  exportPathMode: 'default',
+  'System/ExportPathMode': 'default',
   // 导出图像路径
   'System/ExportDirectory': '',
-  doseAdjustmentEnabled: false,
+  //是否启用剂量调整功能
+  'System/DoseAdjustmentEnabled': false,
 };
 /**
  * 工作流组件
@@ -148,24 +146,41 @@ const Workflow: React.FC = () => {
       message.error(res?.description || '保存失败');
       return;
     }
-    const formValues = (res?.data?.configs || []).reduce((acc, cur) => {
-      acc[cur.uri] = cur.config_value;
-      return acc;
-    }, {});
-    const {
-      'Patient/WorkListFields': workListFields = '{}',
-      'Patient/HistoryListFields': historyListFields = '{}',
-    } = formValues;
-    setTaskListConfig(JSON.parse(workListFields));
-    setHistoryListConfig(JSON.parse(historyListFields));
-    console.log('=====================>, formValues', formValues);
-    // form.setFieldsValue(formValues);
+
+    // 创建配置映射
+    const configMap: Record<string, string> = {};
+    if (res?.data) {
+      res.data.forEach((config) => {
+        configMap[config.uri] = config.config_value;
+      });
+    }
+
+    // 获取特殊配置项并解析
+    const workListFieldsStr = configMap['Patient/WorkListFields'] || '[]';
+    const historyListFieldsStr = configMap['Patient/HistoryListFields'] || '[]';
+
+    setTaskListConfig(JSON.parse(workListFieldsStr));
+    setHistoryListConfig(JSON.parse(historyListFieldsStr));
+
+    // 过滤掉特殊配置项,只保留普通配置项用于表单
+    const formFieldsConfigs = {};
+    if (res?.data) {
+      res.data.forEach((config) => {
+        if (
+          config.uri !== 'Patient/WorkListFields' &&
+          config.uri !== 'Patient/HistoryListFields'
+        ) {
+          formFieldsConfigs[config.uri] = config.config_value;
+        }
+      });
+    }
+
+    form.setFieldsValue(formFieldsConfigs);
   };
 
   // 处理保存
   const handleSaveWorkFlow = async (): Promise<void> => {
     const values = await form.validateFields();
-    console.log('保存设置:');
     const res = await modifyConfig({
       ...values,
       'Patient/WorkListFields': JSON.stringify(taskListConfig),
@@ -192,6 +207,10 @@ const Workflow: React.FC = () => {
     getWorkFlowData();
   }, []);
 
+  const onChange = (value) => {
+    console.log('changed', value, typeof value);
+  };
+
   return (
     <div style={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
       {/* 主内容区 - 分割视图 */}
@@ -249,12 +268,12 @@ const Workflow: React.FC = () => {
                     },
                   ]}
                 >
-                  <InputNumber min={0} max={60} />
+                  <InputNumber min={0} max={60} onChange={onChange} />
                 </Form.Item>
 
                 <Form.Item
                   label="提供建议的曝光APR表"
-                  name="suggestAPRTable"
+                  name="Inspection/SuggestAPRTable"
                   valuePropName="checked"
                 >
                   <Checkbox />
@@ -266,7 +285,7 @@ const Workflow: React.FC = () => {
             <Card title="多个任务设置" size="small">
               <Form.Item
                 label="允许同一患者的多个任务合并开始检查"
-                name="allowMergeTasks"
+                name="Inspection/AllowMergeTasks"
                 valuePropName="checked"
               >
                 <Checkbox />
@@ -277,7 +296,7 @@ const Workflow: React.FC = () => {
             <Card title="编辑APR设置" size="small">
               <Form.Item
                 label="图像采集后在检查中允许编辑曝光信息如APR、DAP"
-                name="allowEditAfterAcquisition"
+                name="Inspection/AllowEditAfterAcquisition"
                 valuePropName="checked"
               >
                 <Checkbox />
@@ -309,7 +328,7 @@ const Workflow: React.FC = () => {
             <Card title="小动物默认曝光参数" size="small">
               <Form.Item
                 label="曝光参数计算方式"
-                name="smallAnimalExposureMode"
+                name="Inspection/SmallAnimalExposureMode"
               >
                 <RadioGroup>
                   <Radio value="bodyThickness">根据体厚计算</Radio>
@@ -332,7 +351,7 @@ const Workflow: React.FC = () => {
 
                   <Form.Item
                     label="球管管电量"
-                    name="tubePower"
+                    name="Display/TubePower"
                     valuePropName="checked"
                   >
                     <Switch />
@@ -349,7 +368,7 @@ const Workflow: React.FC = () => {
                 <Col span={12}>
                   <Form.Item
                     label="探测器电量"
-                    name="detectorPower"
+                    name="Display/DetectorPower"
                     valuePropName="checked"
                   >
                     <Switch />
@@ -365,7 +384,7 @@ const Workflow: React.FC = () => {
 
                   <Form.Item
                     label="探测器温度"
-                    name="detectorTemp"
+                    name="Display/DetectorTemp"
                     valuePropName="checked"
                   >
                     <Switch />
@@ -407,9 +426,9 @@ const Workflow: React.FC = () => {
             </Card>
 
             {/* 导出图像路径 */}
-            <Card title="导出图像路径" size="small" hidden>
+            <Card title="导出图像路径" size="small">
               <Space direction="vertical" style={{ width: '100%' }}>
-                <Form.Item label="路径选择" name="exportPathMode">
+                <Form.Item label="路径选择" name="System/ExportPathMode">
                   <RadioGroup>
                     <Radio value="default">默认路径</Radio>
                     <Radio value="lastUsed">上一次导出路径</Radio>
@@ -426,7 +445,7 @@ const Workflow: React.FC = () => {
             <Card title="剂量调整设置" size="small">
               <Form.Item
                 label="是否启用剂量调整功能"
-                name="doseAdjustmentEnabled"
+                name="System/DoseAdjustmentEnabled"
                 valuePropName="checked"
               >
                 <Switch />
@@ -451,7 +470,6 @@ const Workflow: React.FC = () => {
               dataSource={taskListConfig}
               pagination={false}
               size="small"
-              scroll={{ y: 300 }}
             />
           </Card>
 
@@ -462,7 +480,6 @@ const Workflow: React.FC = () => {
               dataSource={historyListConfig}
               pagination={false}
               size="small"
-              scroll={{ y: 400 }}
             />
           </Card>
         </div>