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,
|
2025-04-26 08:57:23 +08:00
|
|
|
|
fetchUserinfo,
|
2025-04-24 13:43:37 +08:00
|
|
|
|
refreshTokenApi,
|
|
|
|
|
} from '@/api/v1/system/adminUser';
|
2024-09-27 16:57:42 +08:00
|
|
|
|
import { useMultiTagsStoreHook } from '../multiTags';
|
2024-09-26 22:05:24 +08:00
|
|
|
|
import { type DataInfo, removeToken, setToken, userKey } from '@/utils/auth';
|
2024-10-05 19:19:35 +08:00
|
|
|
|
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;
|
|
|
|
|
},
|
2024-10-05 19:19:35 +08:00
|
|
|
|
|
2025-04-24 13:43:37 +08:00
|
|
|
|
/** 获取用户信息 */
|
|
|
|
|
async getUserinfo() {
|
2025-04-26 08:57:23 +08:00
|
|
|
|
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 {};
|
|
|
|
|
},
|
2024-10-22 13:34:01 +08:00
|
|
|
|
|
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;
|
|
|
|
|
},
|
2024-10-05 19:19:35 +08:00
|
|
|
|
|
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
|
|
|
|
}
|