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" } const initialState: ProductState = { productName: 'DROS', language: 'en_US', source: 'Browser', guest: '', fpd: '', gen: '', }; 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, }; } ); const productSlice = createSlice({ name: 'product', initialState, reducers: { setProduct: (state, action: PayloadAction) => { 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; }, }, 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; }) .addCase(initializeProductState.rejected, (state, action) => { console.error( 'Failed to initialize product state:', action.error, state ); }); }, }); export const { setProduct } = productSlice.actions; export default productSlice.reducer;