Browse Source

进入检查后,选中第一个体位

dengdx 3 weeks ago
parent
commit
700c068c02

+ 8 - 0
src/pages/exam/components/BodyPositionList.tsx

@@ -3,6 +3,7 @@ import { useSelector, useDispatch } from 'react-redux';
 import { useEffect } from 'react';
 import {
   setBodyPositions,
+  setSelectedBodyPosition,
   ExtendedBodyPosition,
 } from '../../../states/exam/bodyPositionListSlice';
 import { setBodyPositionDetail } from '../../../states/exam/bodyPositionDetailSlice';
@@ -49,6 +50,9 @@ const BodyPositionList: React.FC<BodyPositionListProps> = ({ layout }) => {
   const bodyPositions = useSelector(
     (state: RootState) => state.bodyPositionList.bodyPositions
   );
+  // const selectedBodyPosition = useSelector(
+  //   (state: RootState) => state.bodyPositionList.selectedBodyPosition
+  // );
   const works = useSelector((state: RootState) => state.examWorksCache.works);
 
   const addBodyPositionClick = () => {
@@ -78,6 +82,10 @@ const BodyPositionList: React.FC<BodyPositionListProps> = ({ layout }) => {
       }))
     );
     dispatch(setBodyPositions(bodyPositions));
+    //选中第一个
+    if (bodyPositions.length > 0) {
+      dispatch(setSelectedBodyPosition(bodyPositions[0]));
+    }
   }, [works, dispatch]);
 
   return (

+ 24 - 0
src/states/exam/bodyPositionDetailSlice.ts

@@ -1,4 +1,6 @@
 import { createSlice, PayloadAction } from '@reduxjs/toolkit';
+import { RootState } from '../store';
+import { setSelectedBodyPosition } from './bodyPositionListSlice';
 
 interface BodyPositionDetailState {
   view_name: string;
@@ -44,6 +46,28 @@ const bodyPositionDetailSlice = createSlice({
       };
     },
   },
+  extraReducers: (builder) => {
+    builder.addCase(setSelectedBodyPosition, (state, action) => {
+      const selectedBodyPosition = action.payload;
+      if (selectedBodyPosition) {
+        return {
+          ...state,
+          view_name: selectedBodyPosition.view_name,
+          view_description: selectedBodyPosition.view_description,
+          view_icon_name: selectedBodyPosition.view_icon_name,
+          patient_name: selectedBodyPosition.patient_name,
+          patient_id: selectedBodyPosition.patient_id,
+          registration_number: selectedBodyPosition.registration_number,
+          study_description: selectedBodyPosition.study_description,
+          body_position_image: selectedBodyPosition.body_position_image,
+          collimator_length: selectedBodyPosition.collimator_length,
+          collimator_width: selectedBodyPosition.collimator_width,
+          sid: selectedBodyPosition.sid,
+        };
+      }
+      return state;
+    });
+  },
 });
 
 export const { setBodyPositionDetail } = bodyPositionDetailSlice.actions;

+ 9 - 1
src/states/exam/bodyPositionListSlice.ts

@@ -14,10 +14,12 @@ export interface ExtendedBodyPosition extends BodyPosition {
 
 interface BodyPositionListState {
   bodyPositions: ExtendedBodyPosition[];
+  selectedBodyPosition: ExtendedBodyPosition | null;
 }
 
 const initialState: BodyPositionListState = {
   bodyPositions: [],
+  selectedBodyPosition: null,
 };
 
 const bodyPositionListSlice = createSlice({
@@ -33,9 +35,15 @@ const bodyPositionListSlice = createSlice({
     ) => {
       state.bodyPositions = action.payload;
     },
+    setSelectedBodyPosition: (
+      state,
+      action: PayloadAction<ExtendedBodyPosition | null>
+    ) => {
+      state.selectedBodyPosition = action.payload;
+    },
   },
 });
 
-export const { addBodyPosition, setBodyPositions } =
+export const { addBodyPosition, setBodyPositions, setSelectedBodyPosition } =
   bodyPositionListSlice.actions;
 export default bodyPositionListSlice.reducer;