import { defineStore } from "pinia";
|
import {
|
type userType,
|
store,
|
router,
|
resetRouter,
|
routerArrays,
|
storageLocal
|
} from "../utils";
|
import {
|
getLogin,
|
// refreshTokenApi,
|
getChangeLogoInExRule
|
} from "@/api/user";
|
import type { LoginData, RoleData, RoleItem } from "@/api/types";
|
import { useMultiTagsStoreHook } from "./multiTags";
|
import {
|
type DataInfo,
|
type ResponseEnterprise,
|
type CusExtendDto,
|
setToken,
|
setRoleListInfo,
|
setNowRole,
|
removeToken,
|
userKey,
|
setEnterpriseInfo
|
} from "@/utils/auth";
|
import { exRole } from "@/api/register/index";
|
import { cusExtendInfo } from "@/api/mine";
|
import type { nowRoleType } from "@/store/types";
|
import { cloneDeep } from "@pureadmin/utils";
|
import { message } from "@/utils/message";
|
|
export const useUserStore = defineStore("pure-user", {
|
state: (): userType => ({
|
// 头像
|
avatar: storageLocal().getItem<DataInfo<number>>(userKey)?.avatar ?? "",
|
// 用户名
|
username: storageLocal().getItem<DataInfo<number>>(userKey)?.username ?? "",
|
// 昵称
|
nickname: storageLocal().getItem<DataInfo<number>>(userKey)?.nickname ?? "",
|
// 当前角色列表
|
exRoles: storageLocal().getItem<DataInfo<number>>(userKey)?.exRoles ?? [],
|
// 按钮级别权限
|
permissions:
|
storageLocal().getItem<DataInfo<number>>(userKey)?.permissions ?? [],
|
// 是否勾选了登录页的免登录
|
isRemembered: false,
|
// 登录页的免登录存储几天,默认7天
|
loginDay: 1,
|
// 企业资料
|
enterpriseInfo:
|
storageLocal().getItem<CusExtendDto>("enterpriseInfo") ?? {},
|
nowRole: storageLocal().getItem<nowRoleType>("nowRole") ?? {},
|
rolesList: storageLocal().getItem<RoleItem[]>("rolesList") ?? [],
|
// 页面级别权限
|
roles: storageLocal().getItem<DataInfo<number>>(userKey)?.roles ?? [],
|
isManager:
|
storageLocal().getItem<DataInfo<number>>(userKey)?.isManager ?? false
|
}),
|
actions: {
|
/** 存储头像 */
|
SET_AVATAR(avatar: string) {
|
this.avatar = avatar;
|
},
|
/** 存储用户名 */
|
SET_USERNAME(username: string) {
|
this.username = username;
|
},
|
/** 存储昵称 */
|
SET_NICKNAME(nickname: string) {
|
this.nickname = nickname;
|
},
|
/** 存储用户角色 */
|
SET_EXROLES(exRoles: RoleItem[]) {
|
this.exRoles = exRoles;
|
},
|
/** 存储角色 */
|
SET_ROLES(roles: Array<string>) {
|
this.roles = roles;
|
},
|
/** 存储角色当前角色 */
|
SET_NOW_ROLE(nowRole: nowRoleType) {
|
this.nowRole = nowRole;
|
},
|
/** 存储角色列表 */
|
SET_EXROLES_LIST(rolesList: RoleItem[]) {
|
this.rolesList = rolesList;
|
},
|
/** 存储按钮级别权限 */
|
SET_PERMS(permissions: Array<string>) {
|
this.permissions = permissions;
|
},
|
/** 存储是否勾选了登录页的免登录 */
|
SET_ISREMEMBERED(bool: boolean) {
|
this.isRemembered = bool;
|
},
|
/** 设置登录页的免登录存储几天 */
|
SET_LOGINDAY(value: number) {
|
this.loginDay = Number(value);
|
},
|
// 设置企业资料
|
SET_ENTERPRISEINFO(enterpriseInfo: CusExtendDto) {
|
this.enterpriseInfo = enterpriseInfo;
|
},
|
SET_ISMANAGER(isManager: boolean) {
|
this.isManager = isManager;
|
},
|
/** 登入 */
|
async loginByUsername(obj) {
|
return new Promise<LoginData>((resolve, reject) => {
|
getLogin(obj)
|
.then(data => {
|
if (data?.code == 200) {
|
if (data.result.theLastLogo) {
|
const resObj = cloneDeep(data.result);
|
resObj.roles = [obj.exRuleCode];
|
setToken(resObj);
|
this.getNowRole(obj.exRuleCode);
|
}
|
}
|
resolve(data);
|
})
|
.catch(error => {
|
reject(error);
|
});
|
});
|
},
|
/** 获取角色列表 */
|
async getRoleList() {
|
return new Promise<RoleData>((resolve, reject) => {
|
exRole()
|
.then(data => {
|
if (data?.code == 200) {
|
setRoleListInfo(data.result);
|
if (this.nowRole.code) {
|
this.getNowRole(this.nowRole.code);
|
}
|
}
|
resolve(data);
|
})
|
.catch(error => {
|
reject(error);
|
});
|
});
|
},
|
/** 获取当前角色 */
|
async getNowRole(code) {
|
return new Promise(resolve => {
|
const data = this.rolesList.find(item => {
|
return item.code == code;
|
});
|
if (data?.code) {
|
setNowRole(data);
|
resolve(data);
|
}
|
});
|
},
|
/** 切换角色 */
|
async changeLogoInExRule(obj) {
|
return new Promise<LoginData>((resolve, reject) => {
|
getChangeLogoInExRule(obj)
|
.then(async data => {
|
if (data?.code == 200) {
|
const resObj = cloneDeep(data.result);
|
resObj.roles = [obj.ruleCode];
|
setToken(resObj);
|
this.getNowRole(obj.ruleCode);
|
await this.getCusExtendInfo();
|
resolve(data);
|
} else {
|
message(data?.message, { type: "warning" });
|
}
|
})
|
.catch(error => {
|
reject(error);
|
});
|
});
|
},
|
async getCusExtendInfo() {
|
return new Promise<ResponseEnterprise>((resolve, reject) => {
|
cusExtendInfo()
|
.then(data => {
|
setEnterpriseInfo(data.result);
|
if (data?.code == 200) {
|
const resData = cloneDeep(data);
|
resData.result.username = data.result?.enterpriseName;
|
resolve(resData);
|
}
|
})
|
.catch(error => {
|
reject(error);
|
});
|
});
|
},
|
/** 前端登出(不调用接口) */
|
logOut() {
|
this.username = "";
|
this.exRoles = [];
|
this.roles = [];
|
this.permissions = [];
|
removeToken();
|
useMultiTagsStoreHook().handleTags("equal", [...routerArrays]);
|
resetRouter();
|
router.push("/index");
|
},
|
/** 刷新`token` */
|
async handRefreshToken() {
|
// return new Promise<RefreshTokenResult>((resolve, reject) => {
|
// refreshTokenApi(data)
|
// .then(data => {
|
// if (data) {
|
// setToken(data.data);
|
// resolve(data);
|
// }
|
// })
|
// .catch(error => {
|
// reject(error);
|
// });
|
// });
|
}
|
}
|
});
|
|
export function useUserStoreHook() {
|
return useUserStore(store);
|
}
|