75 lines
2.1 KiB
TypeScript
75 lines
2.1 KiB
TypeScript
|
import { ACCOUNT_KEY, USERINFO_KEY, TOKEN_KEY } from '@/enums/cacheEnums'
|
|||
|
import {createPinia, defineStore} from 'pinia'
|
|||
|
import { createPersistedState } from 'pinia-plugin-persistedstate'
|
|||
|
|
|||
|
const pinia = createPinia()
|
|||
|
interface UserSate {
|
|||
|
userInfos: any
|
|||
|
token: string | null
|
|||
|
account: string | null
|
|||
|
temToken: string | null
|
|||
|
}
|
|||
|
export const useUserStore = defineStore({
|
|||
|
id: 'userStore',
|
|||
|
state: (): UserSate => {
|
|||
|
const TOKEN = useCookie(TOKEN_KEY)
|
|||
|
const ACCOUNT = useCookie(ACCOUNT_KEY)
|
|||
|
const USERINFO = useCookie(USERINFO_KEY)
|
|||
|
return {
|
|||
|
userInfos: USERINFO.value || null,
|
|||
|
token: TOKEN.value || null,
|
|||
|
account: ACCOUNT.value || null,
|
|||
|
temToken: null,
|
|||
|
}
|
|||
|
},
|
|||
|
getters: {
|
|||
|
isLogin: (state) => !!state.token,
|
|||
|
userInfo: (state) => state.userInfos,
|
|||
|
},
|
|||
|
actions: {
|
|||
|
setUserInfo(userInfos:any) {
|
|||
|
const USERINFO = useCookie(USERINFO_KEY)
|
|||
|
this.userInfos = userInfos
|
|||
|
Object.assign(this.userInfos, userInfos)
|
|||
|
USERINFO.value = userInfos
|
|||
|
},
|
|||
|
setAccount(account: string) {
|
|||
|
const ACCOUNT = useCookie(ACCOUNT_KEY)
|
|||
|
this.account = account
|
|||
|
ACCOUNT.value = account
|
|||
|
},
|
|||
|
login(token: string) {
|
|||
|
const TOKEN = useCookie(TOKEN_KEY)
|
|||
|
this.token = token
|
|||
|
TOKEN.value = token
|
|||
|
},
|
|||
|
logout() {
|
|||
|
const TOKEN = useCookie(TOKEN_KEY)
|
|||
|
const USERINFO = useCookie(USERINFO_KEY)
|
|||
|
this.token = null
|
|||
|
this.userInfos = null
|
|||
|
USERINFO.value = null
|
|||
|
TOKEN.value = null
|
|||
|
navigateTo({path: '/'})
|
|||
|
if(process.client) window.localStorage.clear();
|
|||
|
},
|
|||
|
},
|
|||
|
persist: process.client && { // 仅在客户端使用
|
|||
|
storage: localStorage, // localStorage 本地存储,可替换sessionStorage
|
|||
|
},
|
|||
|
})
|
|||
|
|
|||
|
const clearAllCookies = async()=> {
|
|||
|
var cookies = document.cookie.split(";");
|
|||
|
|
|||
|
for (var i = 0; i < cookies.length; i++) {
|
|||
|
var cookie = cookies[i];
|
|||
|
var eqPos = cookie.indexOf("=");
|
|||
|
var name = eqPos > -1 ? cookie.substr(0, eqPos) : cookie;
|
|||
|
document.cookie = name + "=;expires=Thu, 01 Jan 1970 00:00:00 GMT";
|
|||
|
}
|
|||
|
}
|
|||
|
// 添加持久化插件到Pinia中
|
|||
|
pinia.use(createPersistedState())
|
|||
|
|
|||
|
export default pinia
|