Files
makemd/dashboard/src/models/StateManagement.ts

172 lines
3.2 KiB
TypeScript
Raw Normal View History

// FE-OP002: 前端状态管理优化
// 使用umi的model格式
export interface UserState {
isLoggedIn: boolean;
userInfo: any;
token: string | null;
}
export interface ProductState {
list: any[];
selected: any | null;
loading: boolean;
}
export interface OrderState {
list: any[];
selected: any | null;
loading: boolean;
}
export interface AppState {
loading: boolean;
error: string | null;
}
interface State {
user: UserState;
products: ProductState;
orders: OrderState;
app: AppState;
}
const initialState: State = {
user: {
isLoggedIn: false,
userInfo: null,
token: null,
},
products: {
list: [],
selected: null,
loading: false,
},
orders: {
list: [],
selected: null,
loading: false,
},
app: {
loading: false,
error: null,
},
};
export default {
namespace: 'global',
state: initialState,
reducers: {
// User reducers
setUser(state: State, { payload }: { payload: { userInfo: any; token: string } }) {
return {
...state,
user: {
isLoggedIn: true,
userInfo: payload.userInfo,
token: payload.token,
},
};
},
logout(state: State) {
return {
...state,
user: initialState.user,
};
},
// Product reducers
setProducts(state: State, { payload }: { payload: any[] }) {
return {
...state,
products: {
...state.products,
list: payload,
},
};
},
setSelectedProduct(state: State, { payload }: { payload: any | null }) {
return {
...state,
products: {
...state.products,
selected: payload,
},
};
},
setProductsLoading(state: State, { payload }: { payload: boolean }) {
return {
...state,
products: {
...state.products,
loading: payload,
},
};
},
// Order reducers
setOrders(state: State, { payload }: { payload: any[] }) {
return {
...state,
orders: {
...state.orders,
list: payload,
},
};
},
setSelectedOrder(state: State, { payload }: { payload: any | null }) {
return {
...state,
orders: {
...state.orders,
selected: payload,
},
};
},
setOrdersLoading(state: State, { payload }: { payload: boolean }) {
return {
...state,
orders: {
...state.orders,
loading: payload,
},
};
},
// App reducers
setLoading(state: State, { payload }: { payload: boolean }) {
return {
...state,
app: {
...state.app,
loading: payload,
},
};
},
setError(state: State, { payload }: { payload: string | null }) {
return {
...state,
app: {
...state.app,
error: payload,
},
};
},
clearError(state: State) {
return {
...state,
app: {
...state.app,
error: null,
},
};
},
},
effects: {
// 可以在这里添加异步操作
},
subscriptions: {
// 可以在这里添加订阅
},
};