|
@@ -0,0 +1,76 @@
|
|
|
+import { createSlice, PayloadAction } from '@reduxjs/toolkit';
|
|
|
+import emitter from '../../utils/eventEmitter';
|
|
|
+
|
|
|
+enum GeneratorStatus {
|
|
|
+ GENERATOR_SYNC_ERR = -1, // 错误状态
|
|
|
+ GENERATOR_RAD_OFF, // 手闸抬起
|
|
|
+ GENERATOR_RAD_PREPARE, // 手闸一档按下
|
|
|
+ GENERATOR_RAD_READY, // 手闸二档按下
|
|
|
+ GENERATOR_RAD_XRAYON, // 发生器点片出线
|
|
|
+ GENERATOR_RAD_XRAYOFF, // 发生器点片结束出线
|
|
|
+ GENERATOR_FLU_OFF, // 脚闸抬起
|
|
|
+ GENERATOR_FLU_READY, // 脚闸踩下
|
|
|
+ GENERATOR_FLU_XRAYON, // 透视出线
|
|
|
+ GENERATOR_FLU_XRAYOFF, // 透视结束出线
|
|
|
+ GENERATOR_FLU_CINE_READY, // 电影模式准备
|
|
|
+ GENERATOR_SYNC_MAX, // 状态最大值(枚举边界)
|
|
|
+}
|
|
|
+
|
|
|
+interface DeviceAreaState {
|
|
|
+ generatorStatus: GeneratorStatus;
|
|
|
+ exposureStatus: 'ready' | 'not_ready';
|
|
|
+ tabletStatus: 'exposing' | 'ready' | 'error';
|
|
|
+}
|
|
|
+
|
|
|
+const initialState: DeviceAreaState = {
|
|
|
+ generatorStatus: GeneratorStatus.GENERATOR_RAD_OFF, // Default to idle state
|
|
|
+ exposureStatus: 'not_ready',
|
|
|
+ tabletStatus: 'ready',
|
|
|
+};
|
|
|
+
|
|
|
+const deviceAreaSlice = createSlice({
|
|
|
+ name: 'deviceArea',
|
|
|
+ initialState,
|
|
|
+ reducers: {
|
|
|
+ setGeneratorStatus: (state, action: PayloadAction<GeneratorStatus>) => {
|
|
|
+ state.generatorStatus = action.payload;
|
|
|
+ },
|
|
|
+ setExposureStatus: (
|
|
|
+ state,
|
|
|
+ action: PayloadAction<'ready' | 'not_ready'>
|
|
|
+ ) => {
|
|
|
+ state.exposureStatus = action.payload;
|
|
|
+ },
|
|
|
+ setTabletStatus: (
|
|
|
+ state,
|
|
|
+ action: PayloadAction<'exposing' | 'ready' | 'error'>
|
|
|
+ ) => {
|
|
|
+ state.tabletStatus = action.payload;
|
|
|
+ },
|
|
|
+ },
|
|
|
+});
|
|
|
+
|
|
|
+emitter.on('DETECTOR_ACQUISITION_STARTED', () => {
|
|
|
+ deviceAreaSlice.caseReducers.setTabletStatus(
|
|
|
+ deviceAreaSlice.getInitialState(),
|
|
|
+ { type: 'setTabletStatus', payload: 'ready' }
|
|
|
+ );
|
|
|
+});
|
|
|
+
|
|
|
+emitter.on('DETECTOR_ACQUISITION_INPROGRESS', () => {
|
|
|
+ deviceAreaSlice.caseReducers.setTabletStatus(
|
|
|
+ deviceAreaSlice.getInitialState(),
|
|
|
+ { type: 'setTabletStatus', payload: 'exposing' }
|
|
|
+ );
|
|
|
+});
|
|
|
+
|
|
|
+emitter.on('DETECTOR_ACQUISITION_ERROR', () => {
|
|
|
+ deviceAreaSlice.caseReducers.setTabletStatus(
|
|
|
+ deviceAreaSlice.getInitialState(),
|
|
|
+ { type: 'setTabletStatus', payload: 'error' }
|
|
|
+ );
|
|
|
+});
|
|
|
+
|
|
|
+export const { setGeneratorStatus, setExposureStatus, setTabletStatus } =
|
|
|
+ deviceAreaSlice.actions;
|
|
|
+export default deviceAreaSlice.reducer;
|