ソースを参照

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

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

改动文件:
- src/API/system/options.ts
- src/pages/system/SettingsModal/sections/Preferences/Workflow.tsx
szy 1 日 前
コミット
54d283aa1c

+ 17 - 0
CHANGELOG.md

@@ -2,6 +2,21 @@
 
 本项目的所有重要变更都将记录在此文件中.
 
+## [1.74.0] - 2026-01-19 14:43
+
+feat (1.73.0 -> 1.74.0): 重构工作流设置配置,支持命名空间键并优化API响应处理
+
+- 在 options.ts 中简化 configResponse 数据结构,去除嵌套包装
+- 在 Workflow.tsx 中为所有配置项添加命名空间前缀(如 Inspection/、Display/、System/)
+- 更新表单字段名和初始化值以匹配新的命名空间
+- 移除调试日志并清理代码结构
+- 调整数据访问逻辑以适应API变化
+
+改动文件:
+
+- src/API/system/options.ts
+- src/pages/system/SettingsModal/sections/Preferences/Workflow.tsx
+
 ## [1.73.0] - 2026-01-16 12:50
 
 feat (1.72.0 -> 1.73.0): 实现文本注解工具条功能,支持选中注解的文本编辑、缩放和删除操作
@@ -14,6 +29,7 @@ feat (1.72.0 -> 1.73.0): 实现文本注解工具条功能,支持选中注解
 - 新增TextAnnotationOperatorExample使用示例文件
 
 改动文件:
+
 - src/components/measures/TextAnnotationTool.ts
 - src/pages/view/components/viewers/stack.image.viewer.tsx
 - src/utils/textAnnotationToolManager.ts
@@ -29,6 +45,7 @@ feat (1.71.1 -> 1.72.0): 优化屏幕尺寸响应式布局,在xl屏幕尺寸
 - 在 ImageProcessingPage.tsx 中将 xl 屏幕的组件从 ImageProcessingPageMedium 改为 ImageProcessingPageLarge
 
 改动文件:
+
 - src/pages/exam/ExamPage.tsx
 - src/pages/view/ImageProcessingPage.tsx
 

+ 1 - 1
package.json

@@ -1,6 +1,6 @@
 {
   "name": "zsis",
-  "version": "1.73.0",
+  "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[];
 }
 
 // 获取配置的可选项

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

@@ -30,17 +30,7 @@ interface FieldConfig {
   Visible: boolean;
 }
 
-const listFieldBase: FieldConfig[] = [
-  { Order: '1', Display: '动物ID', FieldName: 'patient_id', Visible: true },
-  { Order: '2', Display: '动物名称', FieldName: 'patient_id', Visible: true },
-  { Order: '3', Display: '动物类型', FieldName: 'patient_id', Visible: true },
-  { Order: '4', Display: '性别', FieldName: 'patient_id', Visible: true },
-  { Order: '5', Display: '年龄', FieldName: 'patient_id', Visible: true },
-  { Order: '6', Display: '检查描述', FieldName: 'patient_id', Visible: true },
-  { Order: '7', Display: '检查时间', FieldName: 'patient_id', Visible: true },
-  { Order: '8', Display: '主人', FieldName: 'patient_id', Visible: true },
-  { Order: '9', Display: '登记号', FieldName: 'patient_id', Visible: true },
-];
+const listFieldBase: FieldConfig[] = [];
 
 const initValues = {
   // 是否自动跳转到下个视图
@@ -49,23 +39,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,
   // 是否显示解刨图像
@@ -73,10 +70,11 @@ const initValues = {
   // 是否显示曝光指示器
   'Exam/ShowExposureIndicator': false,
   // 导出图像模式
-  exportPathMode: 'default',
+  'System/ExportPathMode': 'default',
   // 导出图像路径
   'System/ExportDirectory': '',
-  doseAdjustmentEnabled: false,
+  //是否启用剂量调整功能
+  'System/DoseAdjustmentEnabled': false,
 };
 /**
  * 工作流组件
@@ -150,23 +148,23 @@ const Workflow: React.FC = () => {
 
     // 创建配置映射
     const configMap: Record<string, string> = {};
-    if (res?.data?.configs) {
-      res.data.configs.forEach((config) => {
+    if (res?.data) {
+      res.data.forEach((config) => {
         configMap[config.uri] = config.config_value;
       });
     }
 
     // 获取特殊配置项并解析
-    const workListFieldsStr = configMap['Patient/WorkListFields'] || '{}';
-    const historyListFieldsStr = configMap['Patient/HistoryListFields'] || '{}';
+    const workListFieldsStr = configMap['Patient/WorkListFields'] || '[]';
+    const historyListFieldsStr = configMap['Patient/HistoryListFields'] || '[]';
 
     setTaskListConfig(JSON.parse(workListFieldsStr));
     setHistoryListConfig(JSON.parse(historyListFieldsStr));
 
     // 过滤掉特殊配置项,只保留普通配置项用于表单
     const formFieldsConfigs = {};
-    if (res?.data?.configs) {
-      res.data.configs.forEach((config) => {
+    if (res?.data) {
+      res.data.forEach((config) => {
         if (
           config.uri !== 'Patient/WorkListFields' &&
           config.uri !== 'Patient/HistoryListFields'
@@ -176,20 +174,14 @@ const Workflow: React.FC = () => {
       });
     }
 
-    console.log('=====================>, formFieldsConfigs', formFieldsConfigs);
     form.setFieldsValue(formFieldsConfigs);
   };
 
   // 处理保存
   const handleSaveWorkFlow = async (): Promise<void> => {
     const values = await form.validateFields();
-    console.log('保存设置:', values);
-
-    // 获取表单的所有字段值
-    const formValues = form.getFieldsValue();
-
     const res = await modifyConfig({
-      ...formValues,
+      ...values,
       'Patient/WorkListFields': JSON.stringify(taskListConfig),
       'Patient/HistoryListFields': JSON.stringify(historyListConfig),
     });
@@ -214,6 +206,10 @@ const Workflow: React.FC = () => {
     getWorkFlowData();
   }, []);
 
+  const onChange = (value) => {
+    console.log('changed', value, typeof value);
+  };
+
   return (
     <div style={{ height: '100%', display: 'flex', flexDirection: 'column' }}>
       {/* 主内容区 - 分割视图 */}
@@ -264,18 +260,19 @@ const Workflow: React.FC = () => {
                   name="Inspection/AutoJumpToNextView"
                   rules={[
                     {
+                      type: 'number',
                       min: 0,
                       max: 60,
                       message: '延迟时间必须在0-60秒之间',
                     },
                   ]}
                 >
-                  <InputNumber stringMode 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 />
@@ -287,7 +284,7 @@ const Workflow: React.FC = () => {
             <Card title="多个任务设置" size="small">
               <Form.Item
                 label="允许同一患者的多个任务合并开始检查"
-                name="allowMergeTasks"
+                name="Inspection/AllowMergeTasks"
                 valuePropName="checked"
               >
                 <Checkbox />
@@ -298,7 +295,7 @@ const Workflow: React.FC = () => {
             <Card title="编辑APR设置" size="small">
               <Form.Item
                 label="图像采集后在检查中允许编辑曝光信息如APR、DAP"
-                name="allowEditAfterAcquisition"
+                name="Inspection/AllowEditAfterAcquisition"
                 valuePropName="checked"
               >
                 <Checkbox />
@@ -330,7 +327,7 @@ const Workflow: React.FC = () => {
             <Card title="小动物默认曝光参数" size="small">
               <Form.Item
                 label="曝光参数计算方式"
-                name="smallAnimalExposureMode"
+                name="Inspection/SmallAnimalExposureMode"
               >
                 <RadioGroup>
                   <Radio value="bodyThickness">根据体厚计算</Radio>
@@ -352,7 +349,7 @@ const Workflow: React.FC = () => {
                   </Form.Item>
                   <Form.Item
                     label="球管管电量"
-                    name="tubePower"
+                    name="Display/TubePower"
                     valuePropName="checked"
                   >
                     <Switch size="small" />
@@ -368,7 +365,7 @@ const Workflow: React.FC = () => {
                 <Col span={12}>
                   <Form.Item
                     label="探测器电量"
-                    name="detectorPower"
+                    name="Display/DetectorPower"
                     valuePropName="checked"
                   >
                     <Switch size="small" />
@@ -382,7 +379,7 @@ const Workflow: React.FC = () => {
                   </Form.Item>
                   <Form.Item
                     label="探测器温度"
-                    name="detectorTemp"
+                    name="Display/DetectorTemp"
                     valuePropName="checked"
                   >
                     <Switch size="small" />
@@ -424,9 +421,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>
@@ -443,7 +440,7 @@ const Workflow: React.FC = () => {
             <Card title="剂量调整设置" size="small">
               <Form.Item
                 label="是否启用剂量调整功能"
-                name="doseAdjustmentEnabled"
+                name="System/DoseAdjustmentEnabled"
                 valuePropName="checked"
               >
                 <Switch size="small" />
@@ -468,7 +465,6 @@ const Workflow: React.FC = () => {
               dataSource={taskListConfig}
               pagination={false}
               size="small"
-              scroll={{ y: 300 }}
             />
           </Card>
 
@@ -479,7 +475,6 @@ const Workflow: React.FC = () => {
               dataSource={historyListConfig}
               pagination={false}
               size="small"
-              scroll={{ y: 400 }}
             />
           </Card>
         </div>