123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960 |
- 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,只用于急诊情况
- }
- const initialState: ProductState = {
- productName: 'DROS',
- language: 'en',
- source: 'Browser',
- guest: '',
- };
- 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.language[0],
- source: 'Browser' as const,
- guest: softwareInfo.guest,
- };
- }
- );
- 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;
- },
- },
- extraReducers: (builder) => {
- builder
- .addCase(initializeProductState.fulfilled, (state, action) => {
- state.productName = action.payload.productName;
- state.language = action.payload.language;
- state.source = action.payload.source;
- })
- .addCase(initializeProductState.rejected, (state, action) => {
- console.error(
- 'Failed to initialize product state:',
- action.error,
- state
- );
- });
- },
- });
- export const { setProduct } = productSlice.actions;
- export default productSlice.reducer;
|