auth-web/src/store/system/user.ts

116 lines
3.3 KiB
TypeScript
Raw Normal View History

2024-09-26 22:05:24 +08:00
import { defineStore } from 'pinia';
import { resetRouter, router, routerArrays, storageLocal, store, type userType } from '../utils';
2025-04-24 13:43:37 +08:00
import {
fetchAssignRolesToUsers,
fetchLogin,
fetchLogout,
fetchPostEmailCode,
fetchUserinfo,
2025-04-24 13:43:37 +08:00
refreshTokenApi,
} from '@/api/v1/system/adminUser';
import { useMultiTagsStoreHook } from '../multiTags';
2024-09-26 22:05:24 +08:00
import { type DataInfo, removeToken, setToken, userKey } from '@/utils/auth';
import { message, storeMessage } from '@/utils/message';
2024-11-03 21:33:23 +08:00
import { fetchGetRoleListByUserId } from '@/api/v1/system/role';
2024-09-26 09:38:02 +08:00
export const useUserStore = defineStore({
2025-04-24 13:43:37 +08:00
id: 'system-user',
state: (): userType => ({
// 头像
avatar: storageLocal().getItem<DataInfo<number>>(userKey)?.avatar ?? '',
// 用户名
username: storageLocal().getItem<DataInfo<number>>(userKey)?.username ?? '',
// 昵称
nickname: storageLocal().getItem<DataInfo<number>>(userKey)?.nickname ?? '',
// 页面级别权限
roles: storageLocal().getItem<DataInfo<number>>(userKey)?.roles ?? [],
// 按钮级别权限
permissions: storageLocal().getItem<DataInfo<number>>(userKey)?.permissions ?? [],
// 是否勾选了登录页的免登录
isRemembered: true,
// 登录页的免登录存储几天默认7天
readMeDay: 7,
}),
actions: {
/** 登入 */
async loginByUsername(data: any) {
data = this.isRemembered ? { ...data, readMeDay: this.readMeDay } : data;
const result = await fetchLogin(data);
2024-09-26 16:58:51 +08:00
2025-04-24 13:43:37 +08:00
if (result.code === 200) {
setToken(result.data);
return true;
}
return false;
},
2024-09-26 16:58:51 +08:00
2025-04-24 13:43:37 +08:00
/** 发送邮箱验证码 */
async postEmailCode(email: string) {
const response = await fetchPostEmailCode({ email });
if (response.code === 200) {
message(response.message, { type: 'success' });
return true;
}
message(response.message, { type: 'error' });
2024-09-26 16:58:51 +08:00
2025-04-24 13:43:37 +08:00
return false;
},
2024-09-26 16:58:51 +08:00
2025-04-24 13:43:37 +08:00
/** 前端登出 */
async logOut() {
const result = await fetchLogout();
if (result.code == 200) {
this.username = '';
this.roles = [];
this.permissions = [];
removeToken();
useMultiTagsStoreHook().handleTags('equal', [...routerArrays]);
resetRouter();
message(result.message, { type: 'success' });
}
2024-09-27 09:33:50 +08:00
2025-04-24 13:43:37 +08:00
await router.push('/login');
return true;
},
2024-09-26 16:58:51 +08:00
2025-04-24 13:43:37 +08:00
/** 刷新`token` */
async handRefreshToken(data: any) {
const result = await refreshTokenApi({ ...data, readMeDay: this.readMeDay });
if (result.code === 200) {
setToken(data.data);
return true;
}
message(result.message, { type: 'error' });
return false;
},
2025-04-24 13:43:37 +08:00
/** 获取用户信息 */
async getUserinfo() {
const result = await fetchUserinfo();
2025-04-24 13:43:37 +08:00
if (result.code === 200) {
const data = result.data;
setToken(data);
return data;
}
return {};
},
2025-04-24 13:43:37 +08:00
/** 根据用户id获取角色列表 */
async getRoleListByUserId(data: any) {
const result = await fetchGetRoleListByUserId(data);
if (result.code !== 200) return;
return result.data;
},
2025-04-24 13:43:37 +08:00
/** 为用户分配角色 */
async assignRolesToUsers(data: any) {
const result = await fetchAssignRolesToUsers(data);
return storeMessage(result);
},
},
2024-09-26 09:38:02 +08:00
});
export function useUserStoreHook() {
2025-04-24 13:43:37 +08:00
return useUserStore(store);
2024-09-26 09:38:02 +08:00
}