mkm 6b60ac2cf9 feat(user): 添加用户信息获取新接口并更新相关功能
- 在 user.ts 中新增 getUserInfoByID 函数,用于通过用户 ID 获取信息
- 在 user.store.ts 中添加 getUserInfoByID 方法,用于更新用户信息
- 修改 .env.development 文件,更新 API 基础 URL
- 在 header 组件中添加 menuLi 组件,调整布局结构
2025-02-26 16:39:38 +08:00

98 lines
3.0 KiB
TypeScript

import { defineStore } from 'pinia'
import cache from '@/utils/cache'
import type { RouteRecordRaw } from 'vue-router'
import { getUserInfo, login, logout, getUserInfoByID } 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 } = 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)
})
})
},
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)
})
})
}
}
})
export default useUserStore