import { createSlice, PayloadAction } from '@reduxjs/toolkit'; import emitter from '../../utils/eventEmitter'; import store from '../store'; 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) => { 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', () => { store.dispatch(setTabletStatus('ready')); }); emitter.on('DETECTOR_ACQUISITION_INPROGRESS', () => { store.dispatch(setTabletStatus('exposing')); }); emitter.on('DETECTOR_ACQUISITION_ERROR', () => { store.dispatch(setTabletStatus('error')); }); emitter.on('GENERATOR_RAD_OFF', () => { store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_OFF)); }); emitter.on('GENERATOR_RAD_PREPARE', () => { store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_PREPARE)); }); emitter.on('GENERATOR_RAD_READY', () => { store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_READY)); }); emitter.on('AllReady_TRUE', () => { store.dispatch(setExposureStatus('ready')); }); emitter.on('AllReady_FALSE', () => { store.dispatch(setExposureStatus('not_ready')); }); export const { setGeneratorStatus, setExposureStatus, setTabletStatus } = deviceAreaSlice.actions; export { GeneratorStatus }; export default deviceAreaSlice.reducer;