feat(types): 新增共享类型中心,包含用户、产品、订单等核心领域类型 fix(types): 修复类型定义错误,统一各模块类型引用 style(types): 优化类型文件格式和注释 docs(types): 更新类型文档和变更日志 test(types): 添加类型测试用例 build(types): 配置类型共享路径 chore(types): 清理重复类型定义文件
172 lines
3.2 KiB
TypeScript
172 lines
3.2 KiB
TypeScript
// 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: {
|
|
// 可以在这里添加订阅
|
|
},
|
|
};
|