You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
67 lines
1.7 KiB
67 lines
1.7 KiB
1 year ago
|
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<void>((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,
|
||
|
},
|
||
|
],
|
||
|
})
|