import { defineStore } from 'pinia' import type { UserInfoType, UserStateType } from './index.d' import { router } from '@/router' import { PageEnum } from '@/enums/pageEnum' import { ACCESS_TOKEN_KEY, USER_INFO_KEY } from '@/enums/cacheEnum' import { token } from '@/api/base/login' import type { TokenParams } from '@/api/base/login' import crypto from '@/utils/crypto' export const useUserStore = defineStore('useUserStore', { state: (): UserStateType => { return { token: null, userInfo: null, } }, getters: { getToken(): string | null { return this.token ? crypto.decryptAES(this.token, crypto.localKey) : null }, getUserInfo(): UserInfoType | null { return this.userInfo ? JSON.parse(crypto.decryptAES(this.userInfo, crypto.localKey)) : null }, }, actions: { setToken(token: string) { this.token = token }, setUserInfo(userInfo: string) { this.userInfo = userInfo }, async login(params: TokenParams) { return new Promise((resolve, reject) => { token(params).then((res) => { this.setToken(crypto.encryptAES(res.access_token, crypto.localKey)) this.setUserInfo(crypto.encryptAES(JSON.stringify(res), crypto.localKey)) resolve(res) }).catch((err) => { reject(err) }) }) }, /** * @description: logout */ async logout(goLogin = false) { this.$reset() localStorage.clear() // 清空数据 goLogin && router.push(PageEnum.BASE_LOGIN) }, }, persist: [ { paths: ['token'], key: ACCESS_TOKEN_KEY, }, { paths: ['userInfo'], key: USER_INFO_KEY, }, ], })