deviceAreaSlice.ts 2.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. import { createSlice, PayloadAction } from '@reduxjs/toolkit';
  2. import emitter from '../../utils/eventEmitter';
  3. import store from '../store';
  4. enum GeneratorStatus {
  5. GENERATOR_SYNC_ERR = -1, // 错误状态
  6. GENERATOR_RAD_OFF, // 手闸抬起
  7. GENERATOR_RAD_PREPARE, // 手闸一档按下
  8. GENERATOR_RAD_READY, // 手闸二档按下
  9. GENERATOR_RAD_XRAYON, // 发生器点片出线
  10. GENERATOR_RAD_XRAYOFF, // 发生器点片结束出线
  11. GENERATOR_FLU_OFF, // 脚闸抬起
  12. GENERATOR_FLU_READY, // 脚闸踩下
  13. GENERATOR_FLU_XRAYON, // 透视出线
  14. GENERATOR_FLU_XRAYOFF, // 透视结束出线
  15. GENERATOR_FLU_CINE_READY, // 电影模式准备
  16. GENERATOR_SYNC_MAX, // 状态最大值(枚举边界)
  17. }
  18. interface DeviceAreaState {
  19. generatorStatus: GeneratorStatus;
  20. exposureStatus: 'ready' | 'not_ready';
  21. tabletStatus: 'exposing' | 'ready' | 'error';
  22. }
  23. const initialState: DeviceAreaState = {
  24. generatorStatus: GeneratorStatus.GENERATOR_RAD_OFF, // Default to idle state
  25. exposureStatus: 'not_ready',
  26. tabletStatus: 'ready',
  27. };
  28. const deviceAreaSlice = createSlice({
  29. name: 'deviceArea',
  30. initialState,
  31. reducers: {
  32. setGeneratorStatus: (state, action: PayloadAction<GeneratorStatus>) => {
  33. state.generatorStatus = action.payload;
  34. },
  35. setExposureStatus: (
  36. state,
  37. action: PayloadAction<'ready' | 'not_ready'>
  38. ) => {
  39. state.exposureStatus = action.payload;
  40. },
  41. setTabletStatus: (
  42. state,
  43. action: PayloadAction<'exposing' | 'ready' | 'error'>
  44. ) => {
  45. state.tabletStatus = action.payload;
  46. },
  47. },
  48. });
  49. emitter.on('DETECTOR_ACQUISITION_STARTED', () => {
  50. store.dispatch(setTabletStatus('ready'));
  51. });
  52. emitter.on('DETECTOR_ACQUISITION_INPROGRESS', () => {
  53. store.dispatch(setTabletStatus('exposing'));
  54. });
  55. emitter.on('DETECTOR_ACQUISITION_ERROR', () => {
  56. store.dispatch(setTabletStatus('error'));
  57. });
  58. emitter.on('GENERATOR_RAD_OFF', () => {
  59. store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_OFF));
  60. });
  61. emitter.on('GENERATOR_RAD_PREPARE', () => {
  62. store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_PREPARE));
  63. });
  64. emitter.on('GENERATOR_RAD_READY', () => {
  65. store.dispatch(setGeneratorStatus(GeneratorStatus.GENERATOR_RAD_READY));
  66. });
  67. emitter.on('AllReady_TRUE', () => {
  68. store.dispatch(setExposureStatus('ready'));
  69. });
  70. emitter.on('AllReady_FALSE', () => {
  71. store.dispatch(setExposureStatus('not_ready'));
  72. });
  73. export const { setGeneratorStatus, setExposureStatus, setTabletStatus } =
  74. deviceAreaSlice.actions;
  75. export { GeneratorStatus };
  76. export default deviceAreaSlice.reducer;