| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677 |
- import { createSlice, PayloadAction, createAsyncThunk } from '@reduxjs/toolkit';
- import { fetchSoftwareInfo } from '../API/softwareInfo';
- interface ProductState {
- productName: 'DROS' | 'VETDROS';
- language: string;
- source: 'Electron' | 'Browser' | 'Android';
- guest: string; //本质是token,只用于急诊情况
- fpd: string; // 平板探测器类型: "Simulator" 或 "Physics"
- gen: string; // 发生器类型: "Simulator" 或 "Physics"
- sn: string;
- }
- const initialState: ProductState = {
- productName: 'DROS',
- language: 'en_US',
- source: 'Browser',
- guest: '',
- fpd: '',
- gen: '',
- sn: '',
- };
- export const initializeProductState = createAsyncThunk(
- 'product/initializeProductState',
- async () => {
- const softwareInfo = await fetchSoftwareInfo();
- console.log(`加载软件系统信息:${JSON.stringify(softwareInfo)}`);
- return {
- productName: softwareInfo.product as 'DROS' | 'VETDROS',
- language: softwareInfo.current_locale,
- source: 'Browser' as const,
- guest: softwareInfo.guest,
- fpd: softwareInfo.FPD,
- gen: softwareInfo.GEN,
- sn: softwareInfo.sn,
- };
- }
- );
- const productSlice = createSlice({
- name: 'product',
- initialState,
- reducers: {
- setProduct: (state, action: PayloadAction<ProductState>) => {
- state.productName = action.payload.productName;
- state.language = action.payload.language;
- state.source = action.payload.source;
- state.guest = action.payload.guest;
- state.fpd = action.payload.fpd;
- state.gen = action.payload.gen;
- state.sn = action.payload.sn;
- },
- },
- extraReducers: (builder) => {
- builder
- .addCase(initializeProductState.fulfilled, (state, action) => {
- state.productName = action.payload.productName;
- state.language = action.payload.language;
- state.source = action.payload.source;
- state.guest = action.payload.guest;
- state.fpd = action.payload.fpd;
- state.gen = action.payload.gen;
- state.sn = action.payload.sn;
- })
- .addCase(initializeProductState.rejected, (state, action) => {
- console.error(
- 'Failed to initialize product state:',
- action.error,
- state
- );
- });
- },
- });
- export const { setProduct } = productSlice.actions;
- export default productSlice.reducer;
|