Browse Source

为系统添加启动时初始化,拉取患者类型信息并存储

dengdx 2 months ago
parent
commit
f5ed6004ed
3 changed files with 37 additions and 0 deletions
  1. 8 0
      src/pages/demo/App.tsx
  2. 27 0
      src/pages/demo/AppInitializer.tsx
  3. 2 0
      src/states/store.ts

+ 8 - 0
src/pages/demo/App.tsx

@@ -7,14 +7,22 @@ import BasicLayout from '../../layouts/BasicLayout';
 import HomePage from './HomePage';
 import AboutPage from './AboutPage';
 import Login from '@/pages/security/Login';
+import AppInitializer from './AppInitializer';
 import type { RootState } from '@/states/store';
 
 // 登录判断组件
 const AppContent: React.FC = () => {
   const userInfo = useSelector((state: RootState) => state.userInfo);
+  const [initialized, setInitialized] = React.useState(false);
+
   if (!userInfo || userInfo.uid === 0) {
     return <Login />;
   }
+
+  if (!initialized) {
+    return <AppInitializer onInitialized={() => setInitialized(true)} />;
+  }
+
   return (
     <Router>
       <BasicLayout>

+ 27 - 0
src/pages/demo/AppInitializer.tsx

@@ -0,0 +1,27 @@
+import React, { useEffect } from 'react';
+import { useDispatch, useSelector } from 'react-redux';
+import { getPatientTypes } from '@/states/patientTypeSlice';
+import type { RootState, AppDispatch } from '@/states/store';
+
+interface AppInitializerProps {
+  onInitialized: () => void;
+}
+
+const AppInitializer: React.FC<AppInitializerProps> = ({ onInitialized }) => {
+  const dispatch = useDispatch<AppDispatch>();
+  const userInfo = useSelector((state: RootState) => state.userInfo);
+
+  useEffect(() => {
+    const fetchData = async () => {
+      if (userInfo && userInfo.token) {
+        await dispatch(getPatientTypes({ params: {}, token: userInfo.token }));
+      }
+      onInitialized();
+    };
+    fetchData();
+  }, [dispatch, userInfo, onInitialized]);
+
+  return <div>正在初始化,请稍候...</div>;
+};
+
+export default AppInitializer;

+ 2 - 0
src/states/store.ts

@@ -1,11 +1,13 @@
 import { configureStore } from '@reduxjs/toolkit';
 import userInfoReducer from './user_info';
 import viewSelectionReducer from './patient/viewSelection';
+import patientTypeReducer from './patientTypeSlice';
 
 const store = configureStore({
   reducer: {
     userInfo: userInfoReducer,
     viewSelection: viewSelectionReducer,
+    patientType: patientTypeReducer,
   },
 });