import type { Effect, Reducer } from 'umi'; import { getUserinfo, Logout } from '@/servers/api/login'; export type SupplierUser = { email?: string; mobile?: string; name?: string; sex?: string; status?: number; userId?: string; userName?: string; }; export type User = { userId: string; userName: string; userType: string; }; export type UserInfo = { userId: string; fullName: string; loginName: string; userType: string; authorityList: { roleId: string, roleName: string, roleCode: string, roleScope: string }[]; }; export type UserModelState = { supplierUser?: SupplierUser; user?: User; token?: string; userInfo?: UserInfo; }; export type UserModelType = { namespace: 'user'; state: UserModelState; effects: { fetchUserInfo: Effect; logout: Effect; }; reducers: { saveLoginUser: Reducer; saveUserInfo: Reducer; clearUserInfo: Reducer; }; }; const UserModel: UserModelType = { namespace: 'user', state: { supplierUser: {}, // 登录返回的供应商用户信息 user: undefined, // 登录返回的用户信息 token: sessionStorage.getItem('token') || '', // 登录返回的token userInfo: undefined, // 请求userInfo返回的用户信息 }, effects: { *fetchUserInfo(_, { call, put }) { const response = yield call(getUserinfo); yield put({ type: 'saveUserInfo', payload: response, }); }, *logout(_, { call, put }) { yield call(Logout); yield put({ type: 'clearUserInfo' }); }, }, reducers: { clearUserInfo(state) { return { ...state, userInfo: undefined, token: '', supplierUser: {}, user: {}, }; }, saveLoginUser(state, action) { return { ...state, supplierUser: action.payload.supplierUser || {}, user: action.payload.user || {}, token: action.payload.token || '', }; }, saveUserInfo(state, action) { return { ...state, userInfo: action.payload || {}, }; }, } }; export default UserModel;