Ver código fonte

feat(exam->device): synchronize the handbrake status of the device

sw 1 mês atrás
pai
commit
42bbbc4161

+ 8 - 1
src/domain/mqttServiceForDevice.ts

@@ -47,7 +47,14 @@ let mqttClient;
 
 const handleMqttMessage = (message: MqttMessage) => {
   console.log(`[mqttServiceForDevice] 收到message.CONTEXT ${message.CONTEXT}`);
-  if (message.CONTEXT === '1' || message.CONTEXT === '3') {
+  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');
   }
 };

+ 15 - 2
src/pages/exam/DeviceArea.tsx

@@ -6,6 +6,7 @@ import {
 } from '@ant-design/icons';
 import { useSelector } from 'react-redux';
 import { RootState } from '@/states/store';
+import { GeneratorStatus } from '@/states/exam/deviceAreaSlice';
 
 const DeviceArea = ({ className }: { className?: string }) => {
   const generatorStatus = useSelector(
@@ -21,8 +22,20 @@ const DeviceArea = ({ className }: { className?: string }) => {
   return (
     <Flex justify="end" align="center" className={`w-full ${className}`}>
       <Button
-        icon={<ToolOutlined className="text-red-500" />}
-        title={`发生器状态指示器: ${generatorStatus}`}
+        icon={
+          <ToolOutlined
+            className={
+              generatorStatus === GeneratorStatus.GENERATOR_RAD_OFF
+                ? 'text-green-500'
+                : generatorStatus === GeneratorStatus.GENERATOR_RAD_PREPARE
+                  ? 'text-yellow-500'
+                  : generatorStatus === GeneratorStatus.GENERATOR_RAD_READY
+                    ? 'text-yellow-500'
+                    : ''
+            }
+          />
+        }
+        title={`手闸状态指示器: ${generatorStatus}`}
       />
       <Button
         icon={<CameraOutlined />}

+ 25 - 0
src/states/exam/deviceAreaSlice.ts

@@ -57,6 +57,30 @@ emitter.on('DETECTOR_ACQUISITION_STARTED', () => {
   );
 });
 
+emitter.on('GENERATOR_RAD_OFF', () => {
+  deviceAreaSlice.caseReducers.setGeneratorStatus(
+    deviceAreaSlice.getInitialState(),
+    { type: 'setGeneratorStatus', payload: GeneratorStatus.GENERATOR_RAD_OFF }
+  );
+});
+
+emitter.on('GENERATOR_RAD_PREPARE', () => {
+  deviceAreaSlice.caseReducers.setGeneratorStatus(
+    deviceAreaSlice.getInitialState(),
+    {
+      type: 'setGeneratorStatus',
+      payload: GeneratorStatus.GENERATOR_RAD_PREPARE,
+    }
+  );
+});
+
+emitter.on('GENERATOR_RAD_READY', () => {
+  deviceAreaSlice.caseReducers.setGeneratorStatus(
+    deviceAreaSlice.getInitialState(),
+    { type: 'setGeneratorStatus', payload: GeneratorStatus.GENERATOR_RAD_READY }
+  );
+});
+
 emitter.on('DETECTOR_ACQUISITION_INPROGRESS', () => {
   deviceAreaSlice.caseReducers.setTabletStatus(
     deviceAreaSlice.getInitialState(),
@@ -73,4 +97,5 @@ emitter.on('DETECTOR_ACQUISITION_ERROR', () => {
 
 export const { setGeneratorStatus, setExposureStatus, setTabletStatus } =
   deviceAreaSlice.actions;
+export { GeneratorStatus };
 export default deviceAreaSlice.reducer;