2024-05-31 09:18:45 +08:00
|
|
|
import { defineStore } from 'pinia'
|
|
|
|
import cache from '@/utils/cache'
|
|
|
|
import type { RouteRecordRaw } from 'vue-router'
|
2025-02-26 16:39:38 +08:00
|
|
|
import { getUserInfo, login, logout, getUserInfoByID } from '@/api/user'
|
2024-05-31 09:18:45 +08:00
|
|
|
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 } = playload
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
login({
|
|
|
|
account: account.trim(),
|
|
|
|
password: password
|
|
|
|
})
|
|
|
|
.then((data) => {
|
|
|
|
this.token = data.token
|
|
|
|
cache.set(TOKEN_KEY, data.token)
|
|
|
|
resolve(data)
|
|
|
|
})
|
|
|
|
.catch((error) => {
|
|
|
|
reject(error)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
},
|
|
|
|
logout() {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
logout()
|
|
|
|
.then(async (data) => {
|
|
|
|
this.token = ''
|
|
|
|
await router.push(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)
|
|
|
|
})
|
|
|
|
})
|
2025-02-26 16:39:38 +08:00
|
|
|
},
|
|
|
|
getUserInfoByID(id: number) {
|
|
|
|
return new Promise((resolve, reject) => {
|
|
|
|
getUserInfoByID({ id })
|
|
|
|
.then((data) => {
|
|
|
|
data.forEach((item) => {
|
|
|
|
item.paths = item.model_name + '/' + item.paths
|
|
|
|
})
|
|
|
|
this.routes = filterAsyncRoutes(data)
|
|
|
|
resolve(data)
|
|
|
|
})
|
|
|
|
.catch((error) => {
|
|
|
|
reject(error)
|
|
|
|
})
|
|
|
|
})
|
2024-05-31 09:18:45 +08:00
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
export default useUserStore
|