Files
fe_portal_frontend/src/models/user.ts

104 lines
2.1 KiB
TypeScript
Raw Normal View History

2025-07-17 11:38:51 +08:00
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<UserModelState>;
saveUserInfo: Reducer<UserModelState>;
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;