瀏覽代碼

feat (1.54.0 -> 1.55.0): 添加采集失败时的异常提示弹框

- 在 AcquisitionTracer 组件中添加状态管理和弹框显示逻辑
- 当 acquisitionState 为 3 时显示异常进度条和提示文本
- 添加确定按钮关闭弹框,提升用户体验
- 修复 MQTT 消息处理中的 ACQUISITION_STARTED 触发逻辑,避免重复发射

改动文件:
- src/pages/exam/components/acquisitionTracer.tsx
- src/domain/mqttService.ts
- src/domain/mqttServiceForDevice.ts
dengdx 1 周之前
父節點
當前提交
eacc841550
共有 6 個文件被更改,包括 42 次插入13 次删除
  1. 16 0
      CHANGELOG.md
  2. 2 2
      config/dev.ts
  3. 1 1
      package.json
  4. 3 2
      src/domain/mqttService.ts
  5. 0 3
      src/domain/mqttServiceForDevice.ts
  6. 20 5
      src/pages/exam/components/acquisitionTracer.tsx

+ 16 - 0
CHANGELOG.md

@@ -2,6 +2,22 @@
 
 本项目的所有重要变更都将记录在此文件中。
 
+## [1.55.0] - 2026-01-06 18:58
+
+### 新增 (Added)
+
+- **添加采集失败时的异常提示弹框** - 当采集状态为异常时弹出确认弹框,提示用户采集失败并提供确定按钮
+  - 在 AcquisitionTracer 组件中添加状态管理和弹框显示逻辑
+  - 当 acquisitionState 为 3 时显示异常进度条和提示文本
+  - 添加确定按钮关闭弹框,提升用户体验
+  - 修复 MQTT 消息处理中的 ACQUISITION_STARTED 触发逻辑,避免重复发射
+
+**改动文件:**
+
+- src/pages/exam/components/acquisitionTracer.tsx
+- src/domain/mqttService.ts
+- src/domain/mqttServiceForDevice.ts
+
 ## [1.54.0] - 2026-01-06 16:57
 
 ### 新增 (Added)

+ 2 - 2
config/dev.ts

@@ -82,7 +82,7 @@ export default {
       proxy: {
         '/dr': {
           // target: 'http://192.168.110.13', // 你的后端服务地址
-          target: 'http://192.168.110.239',
+          target: 'http://192.168.110.133',
           changeOrigin: true, // 允许跨域
           // pathRewrite: {
           //   '^/dr/api': '' // 可选,用于重写路径
@@ -90,7 +90,7 @@ export default {
         },
         '/mqtt': {
           // target: 'ws://192.168.110.13:8083', // MQTT WebSocket 服务地址
-          target: 'ws://192.168.110.239:8083',
+          target: 'ws://192.168.110.133:8083',
           changeOrigin: true,
           ws: true, // 启用 WebSocket 代理
           // pathRewrite: {

+ 1 - 1
package.json

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

+ 3 - 2
src/domain/mqttService.ts

@@ -27,9 +27,10 @@ let isConnecting = false; // 连接状态标志,防止重复调用
 
 const handleMqttMessage = (message: MqttMessage) => {
   switch (message.status) {
-    case 'TASK_RecvRaw':
-      console.log('Task started: TASK_RecvRaw');
+    case 'WAIT_RAW':
+      console.log('Task started: WAIT_RAW');
       // Start loading or call the soft exposure interface
+      emitter.emit('ACQUISITION_STARTED');
       break;
     case 'SUCCESS':
       console.log('Task succeeded:', message);

+ 0 - 3
src/domain/mqttServiceForDevice.ts

@@ -115,12 +115,9 @@ const handleMqttMessage = (message: MqttMessage) => {
   if (message.CONTEXT === '0') {
     emitter.emit('GENERATOR_RAD_OFF');
   } else if (message.CONTEXT === '1') {
-    emitter.emit('ACQUISITION_STARTED');
     emitter.emit('GENERATOR_RAD_PREPARE');
   } else if (message.CONTEXT === '2') {
     emitter.emit('GENERATOR_RAD_READY');
-  } else if (message.CONTEXT === '3') {
-    emitter.emit('ACQUISITION_STARTED');
   } else if (message.CONTEXT === '4') {
     emitter.emit('GENERATOR_STATUS_STANDBY'); //发生器ready
   }

+ 20 - 5
src/pages/exam/components/acquisitionTracer.tsx

@@ -1,6 +1,6 @@
-import React from 'react';
+import React, { useState, useEffect } from 'react';
 import { useSelector } from 'react-redux';
-import { Progress, Modal } from 'antd';
+import { Progress, Modal, Button } from 'antd';
 import { RootState } from '../../../states/store';
 
 const AcquisitionTracer: React.FC = () => {
@@ -8,6 +8,16 @@ const AcquisitionTracer: React.FC = () => {
     (state: RootState) => state.generatorMonitor.acquisitionState
   );
 
+  const [isModalOpen, setIsModalOpen] = useState(false);
+
+  useEffect(() => {
+    if (acquisitionState === 1 || acquisitionState === 3) {
+      setIsModalOpen(true);
+    } else {
+      setIsModalOpen(false);
+    }
+  }, [acquisitionState]);
+
   const renderProgressBar = () => {
     switch (acquisitionState) {
       case 1:
@@ -15,7 +25,12 @@ const AcquisitionTracer: React.FC = () => {
       case 2:
         return <Progress percent={100} status="success" />;
       case 3:
-        return <Progress percent={100} status="exception" />;
+        return (
+          <div>
+            <Progress percent={100} status="exception" />
+            <p style={{ marginTop: 10 }}>采集失败,请检查设备或重试。</p>
+          </div>
+        );
       default:
         return null;
     }
@@ -24,8 +39,8 @@ const AcquisitionTracer: React.FC = () => {
   return (
     <Modal
       title="Acquisition Tracer"
-      open={acquisitionState === 1}
-      footer={null}
+      open={isModalOpen}
+      footer={acquisitionState === 3 ? [<Button key="ok" onClick={() => setIsModalOpen(false)}>确定</Button>] : null}
       centered
       style={{ top: 20 }}
     >