import { type userType, store, router, defineStore, resetRouter, routerArrays, storageLocal } from "../utils"; import { type UserResult, type RefreshTokenResult, getLogin, refreshTokenApi } from "@/api/user"; import { useMultiTagsStoreHook } from "./multiTags"; import { type DataInfo, setToken, removeToken, userKey } from "@/utils/auth"; export const useUserStore = defineStore({ id: "pure-user", state: (): userType => ({ // 头像 avatar: storageLocal().getItem>(userKey)?.avatar ?? "", // 用户名 username: storageLocal().getItem>(userKey)?.username ?? "", // 昵称 nickname: storageLocal().getItem>(userKey)?.nickname ?? "", // 页面级别权限 roles: storageLocal().getItem>(userKey)?.roles ?? [], // 前端生成的验证码(按实际需求替换) verifyCode: "", // 判断登录页面显示哪个组件(0:登录(默认)、1:手机登录、2:二维码登录、3:注册、4:忘记密码) currentPage: 0, // 是否勾选了登录页的免登录 isRemembered: false, // 登录页的免登录存储几天,默认7天 loginDay: 7 }), actions: { /** 存储头像 */ SET_AVATAR(avatar: string) { this.avatar = avatar; }, /** 存储用户名 */ SET_USERNAME(username: string) { this.username = username; }, /** 存储昵称 */ SET_NICKNAME(nickname: string) { this.nickname = nickname; }, /** 存储角色 */ SET_ROLES(roles: Array) { this.roles = roles; }, /** 存储前端生成的验证码 */ SET_VERIFYCODE(verifyCode: string) { this.verifyCode = verifyCode; }, /** 存储登录页面显示哪个组件 */ SET_CURRENTPAGE(value: number) { this.currentPage = value; }, /** 存储是否勾选了登录页的免登录 */ SET_ISREMEMBERED(bool: boolean) { this.isRemembered = bool; }, /** 设置登录页的免登录存储几天 */ SET_LOGINDAY(value: number) { this.loginDay = Number(value); }, /** 登入 */ async loginByUsername(data) { return new Promise((resolve, reject) => { getLogin(data) .then(data => { if (data?.success) setToken(data.data); resolve(data); }) .catch(error => { reject(error); }); }); }, /** 前端登出(不调用接口) */ logOut() { this.username = ""; this.roles = []; removeToken(); useMultiTagsStoreHook().handleTags("equal", [...routerArrays]); resetRouter(); router.push("/login"); }, /** 刷新`token` */ async handRefreshToken(data) { return new Promise((resolve, reject) => { refreshTokenApi(data) .then(data => { if (data) { setToken(data.data); resolve(data); } }) .catch(error => { reject(error); }); }); } } }); export function useUserStoreHook() { return useUserStore(store); }