Browse Source

feat (1.58.0 -> 1.59.0): 实现图像处理页面退出反馈功能

- 在 ImageProcessingPageLarge.tsx 中添加 ExamExitFeedback 模态框组件,支持继续、保存、取消操作
- 在 businessFlowMiddlewareLogic.ts 中扩展逻辑,添加离开处理流程的判断和反馈机制

改动文件:
- src/states/businessFlowMiddlewareLogic.ts
- src/pages/view/ImageProcessingPageLarge.tsx
dengdx 6 days ago
parent
commit
84143e05e9

+ 11 - 0
CHANGELOG.md

@@ -3,6 +3,17 @@
 本项目的所有重要变更都将记录在此文件中.
 
 
+## [1.59.0] - 2026-01-07 14:44
+
+### 新增 (Added)
+
+- **实现图像处理页面退出反馈功能** - 在图像处理页面添加退出检查反馈模态框,支持继续、保存、取消操作,并扩展业务流程中间件逻辑处理离开处理流程的判断
+
+**改动文件:**
+
+- src/states/businessFlowMiddlewareLogic.ts
+- src/pages/view/ImageProcessingPageLarge.tsx
+
 ## [1.58.0] - 2026-01-07 13:52
 
 ### 新增 (Added)

+ 1 - 1
package.json

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

+ 21 - 2
src/pages/view/ImageProcessingPageLarge.tsx

@@ -1,9 +1,13 @@
 import { Flex, Layout } from 'antd';
-import { useAppSelector } from '@/states/store';
+import { RootState, useAppSelector } from '@/states/store';
 import ImageControl from './components/ImageControl';
 import OperationPanel from './components/OperationPanel';
 import BodyPositionList from '../exam/components/BodyPositionList';
 import InvertContrastModal from './components/InvertContrastModal';
+import ExamExitFeedback from '../exam/components/ExamExitFeedback';
+import { useDispatch } from 'react-redux';
+import { setFeedbackOpen } from '@/states/exam/largeScreenSlice';
+import { setBusinessFlow } from '@/states/BusinessFlowSlice';
 
 const { Content, Sider } = Layout;
 
@@ -11,7 +15,10 @@ const ImageProcessingPageLarge = () => {
   const selectedBodyPosition = useAppSelector(
     (state) => state.bodyPositionList.selectedBodyPosition
   );
-
+  const dispatch = useDispatch();
+  const isFeedbackOpen = useAppSelector(
+    (state: RootState) => state.largeScreen.isFeedbackOpen
+  );
   const patientId = selectedBodyPosition?.work?.PatientID || '';
   const patientName = selectedBodyPosition?.work?.PatientName || '';
   const patientSex = selectedBodyPosition?.work?.PatientSex || '';
@@ -52,6 +59,18 @@ const ImageProcessingPageLarge = () => {
 
         {/* 反色对比Modal */}
         <InvertContrastModal />
+        <ExamExitFeedback
+                open={isFeedbackOpen}
+                onContinue={() => {
+                  dispatch(setFeedbackOpen(false));
+                  dispatch(setBusinessFlow('exitExamSuspended'));
+                }}
+                onSave={() => {
+                  dispatch(setFeedbackOpen(false));
+                  dispatch(setBusinessFlow('exitExamCompleted'));
+                }}
+                onAbort={() => dispatch(setFeedbackOpen(false))}
+              />
       </Layout>
     </Flex>
   );

+ 9 - 4
src/states/businessFlowMiddlewareLogic.ts

@@ -281,13 +281,18 @@ const businessFlowMiddlewareLogic: Middleware =
       // 重置 viewerContainerSlice 到初始状态
       store.dispatch(resetViewerContainer());
     }
-    //退出检查的判断
-    if (
+    //退出检查的判断和退出处理的判断
+    if ((
       isExitingExam(action.payload, currentKey) &&
       action.payload !== 'exitExamCompleted' &&
       action.payload !== 'exitExamSuspended' &&
       action.payload !== 'process' // 从检查进入处理,不需要检查曝光情况
-    ) {
+    ) || 
+    isLeavingProcess(action.payload, currentKey) &&
+      action.payload !== 'exitExamCompleted' &&
+      action.payload !== 'exitExamSuspended' &&
+      action.payload !== 'exam'
+  ){
       console.log(
         `[businessFlowMiddleware] Exiting exam flow to go to : ${action.payload}`
       );
@@ -299,7 +304,7 @@ const businessFlowMiddlewareLogic: Middleware =
         store.dispatch(setFeedbackOpen(true)); //显示反馈框
         // store.dispatch({ type: 'SET_CONTINUE_BUSINESS_FLOW', payload: currentKey });
         continueBusinessFlow = action.payload; // 保存退出检查时,要去哪个业务流程
-        return; //阻止退出exam
+        return; //阻止退出exam 或者 process
       } else if (exposureStatus === 'Fully Exposed') {
         // Notify backend
         console.log(