208 lines
5.8 KiB
TypeScript
Raw Normal View History

2025-02-13 02:29:50 +08:00
import { defineStore } from "pinia";
import { store } from "@/store";
import type { userType } from "../types";
import { routerArrays } from "@/layout/types";
import { router, resetRouter } from "@/router";
import { storageLocal } from "@pureadmin/utils";
import { getLogin, refreshTokenApi } from "@/api/login";
import type { LoginResult } from "@/api/login";
import { useMultiTagsStoreHook } from "@/store/modules/multiTags";
import {
type UserInfo,
type UserToken,
setToken,
removeToken,
userInfoKey,
userTokenKey
} from "@/utils/auth";
export const useUserStore = defineStore({
id: "user",
state: (): userType => ({
// 用户名
username: storageLocal().getItem<UserInfo>(userInfoKey)?.username ?? "",
// 页面级别权限
permissions:
storageLocal().getItem<UserInfo>(userInfoKey)?.permissions ?? [],
// 前端生成的验证码(按实际需求替换)
verifyCode: "",
// 判断登录页面显示哪个组件0登录默认、1手机登录、2二维码登录、3注册、4忘记密码,1,2预留暂不开发
currentPage: 0,
/**用户头像 */
avatar: storageLocal().getItem<UserInfo>(userInfoKey)?.avatar ?? "",
/**用户数据库ID */
id: storageLocal().getItem<UserInfo>(userInfoKey)?.id ?? "",
/**用户Token */
accessToken:
storageLocal().getItem<UserToken>(userTokenKey)?.accessToken ?? "",
/**用户刷新Token*/
refreshToken:
storageLocal().getItem<UserToken>(userTokenKey)?.refreshToken ?? "",
/**过期时间 */
expires: storageLocal().getItem<UserToken>(userTokenKey)?.expiresTime ?? 0,
// 是否勾选了登录页的免登录
isRemembered: false,
// 登录页的免登录存储几天默认2天
loginDay: 2,
/***
*
*/
phone: storageLocal().getItem<UserInfo>(userInfoKey)?.phone ?? "",
/***
*
*/
email: storageLocal().getItem<UserInfo>(userInfoKey)?.email ?? "",
/***
*
*/
nickname: storageLocal().getItem<UserInfo>(userInfoKey)?.nickname ?? "",
/***
*
*/
gender: storageLocal().getItem<UserInfo>(userInfoKey)?.gender ?? 0,
/***
*
*/
roles: storageLocal().getItem<UserInfo>(userInfoKey)?.roles ?? [],
/***
* ID
*/
department_id:
storageLocal().getItem<UserInfo>(userInfoKey)?.department_id ?? ""
}),
actions: {
/** 存储用户名 */
SET_USERNAME(username: string) {
this.username = username;
},
/** 存储权限 */
SET_PERMISSIONS(permissions: Array<string>) {
this.permissions = permissions;
},
/** 存储前端生成的验证码 */
SET_VERIFYCODE(verifyCode: string) {
this.verifyCode = verifyCode;
},
/** 存储登录页面显示哪个组件 */
SET_CURRENTPAGE(value: number) {
this.currentPage = value;
},
/**存储用户头像 */
SET_AVATAR(value: string) {
this.avatar = value;
},
/**存储用户数据库ID */
SET_ID(value: string) {
this.id = value;
},
/**存储用户Token */
SET_ACCESSTOKEN(value: string) {
this.accessToken = value;
},
/**存储用户刷新Token */
SET_REFRESHTOKEN(value: string) {
this.refreshToken = value;
},
/**存储用户Token过期时间戳 */
SET_EXPIRES(value: number) {
this.expires = value;
},
/** 存储是否勾选了登录页的免登录 */
SET_ISREMEMBERED(bool: boolean) {
this.isRemembered = bool;
},
/** 设置登录页的免登录存储几天 */
SET_LOGINDAY(value: number) {
this.loginDay = Number(value);
},
/** 存储用户手机号 */
SET_PHONE(value: string) {
this.phone = value;
},
/** 存储用户邮箱 */
SET_EMAIL(value: string) {
this.email = value;
},
/** 存储用户昵称 */
SET_NICKNAME(value: string) {
this.nickname = value;
},
/** 存储用户性别 */
SET_GENDER(value: number) {
this.gender = value;
},
/** 存储用户角色 */
SET_ROLES(value: Array<string>) {
this.roles = value;
},
/** 存储用户部门ID */
SET_DEPARTMENT_ID(value: string) {
this.department_id = value;
},
/** 登入 */
async loginByUsername(data: {
username: string;
password: string;
loginDay?: number;
uuid?: string;
code?: string;
}) {
return new Promise<ResponseResult<LoginResult>>((resolve, reject) => {
getLogin(data)
.then(data => {
if (data.success) {
2025-02-13 02:29:50 +08:00
setToken(data.data);
}
resolve(data);
})
.catch(error => {
reject(error);
});
});
},
/** 前端登出(不调用接口) */
logOut() {
this.username = "";
this.permissions = [];
this.verifyCode = "";
this.currentPage = 0;
this.avatar = "";
this.id = "";
this.accessToken = "";
this.refreshToken = "";
this.expires = 0;
this.isRemembered = false;
this.loginDay = 2;
this.phone = "";
this.email = "";
this.nickname = "";
this.gender = 0;
this.roles = [];
this.department_id = "";
removeToken();
useMultiTagsStoreHook().handleTags("equal", [...routerArrays]);
resetRouter();
router.push("/login");
},
/** 刷新`token` */
async handRefreshToken(data: { refreshToken: string }) {
return new Promise<ResponseResult<LoginResult>>((resolve, reject) => {
refreshTokenApi(data)
.then(data => {
if (data.success) {
2025-02-13 02:29:50 +08:00
setToken(data.data);
}
resolve(data);
})
.catch(error => {
reject(error);
});
});
}
}
});
export function useUserStoreHook() {
return useUserStore(store);
}