weipengfei 0181a84b01 更新
2024-05-25 15:15:08 +08:00

86 lines
2.6 KiB
TypeScript

import { defineStore } from 'pinia'
import cache from '@/utils/cache'
import type { RouteRecordRaw } from 'vue-router'
import { getUserInfo, login, logout } from '@/api/user'
import router, { filterAsyncRoutes } from '@/router'
import { TOKEN_KEY } from '@/enums/cacheEnums'
import { PageEnum } from '@/enums/pageEnum'
import { clearAuthInfo, getToken } from '@/utils/auth'
export interface UserState {
token: string
userInfo: Record<string, any>
routes: RouteRecordRaw[]
perms: string[]
}
const useUserStore = defineStore({
id: 'user',
state: (): UserState => ({
token: getToken() || '',
// 用户信息
userInfo: {},
// 路由
routes: [],
// 权限
perms: []
}),
getters: {},
actions: {
resetState() {
this.token = ''
this.userInfo = {}
this.perms = []
},
login(playload: any) {
const { account, password, is_admin } = playload
return new Promise((resolve, reject) => {
login({
account: account.trim(),
password: password,
is_admin: is_admin
})
.then((data) => {
this.token = data.token
cache.set(TOKEN_KEY, data.token)
cache.set('is_admin', is_admin)
resolve(data)
})
.catch((error) => {
reject(error)
})
})
},
logout() {
return new Promise((resolve, reject) => {
logout()
.then(async (data) => {
this.token = ''
const is_admin = cache.get('is_admin')
await router.push(is_admin==1 ? PageEnum.ADMIN_LOGIN : PageEnum.LOGIN)
clearAuthInfo()
resolve(data)
})
.catch((error) => {
reject(error)
})
})
},
getUserInfo() {
return new Promise((resolve, reject) => {
getUserInfo()
.then((data) => {
this.userInfo = data.user
this.perms = data.permissions
this.routes = filterAsyncRoutes(data.menu)
resolve(data)
})
.catch((error) => {
reject(error)
})
})
}
}
})
export default useUserStore