Files
zyt/admin/src/stores/modules/user.ts
T

113 lines
3.5 KiB
TypeScript

import { defineStore } from 'pinia'
import type { RouteRecordRaw } from 'vue-router'
import { getUserInfo, iamLogin, login, logout, workWechatLogin } from '@/api/user'
import { TOKEN_KEY } from '@/enums/cacheEnums'
import { PageEnum } from '@/enums/pageEnum'
import router, { filterAsyncRoutes } from '@/router'
import { clearAuthInfo, getToken } from '@/utils/auth'
import cache from '@/utils/cache'
export interface UserState {
token: string
userInfo: Record<string, any>
routes: RouteRecordRaw[]
perms: string[]
isPaw: number // 0=需要修改密码,1=正常
}
const useUserStore = defineStore({
id: 'user',
state: (): UserState => ({
token: getToken() || '',
// 用户信息
userInfo: {},
// 路由
routes: [],
// 权限
perms: [],
// 是否需要修改密码
isPaw: 1
}),
getters: {},
actions: {
resetState() {
this.token = ''
this.userInfo = {}
this.perms = []
this.isPaw = 1
},
login(playload: any) {
const { account, password } = playload
return new Promise((resolve, reject) => {
login({
account: account.trim(),
password: password
})
.then((data) => {
this.token = data.token
this.isPaw = data.is_paw ?? 1
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)
})
})
},
workWechatLogin(code: string) {
return new Promise((resolve, reject) => {
workWechatLogin({ code })
.then((data) => {
this.token = data.token
this.isPaw = data.is_paw ?? 1
cache.set(TOKEN_KEY, data.token)
resolve(data)
})
.catch((error) => {
reject(error)
})
})
},
async iamLogin(ticket: string) {
const data = await iamLogin(ticket)
this.token = data.token
this.isPaw = data.is_paw ?? 1
cache.set(TOKEN_KEY, data.token)
return data
},
getUserInfo() {
return new Promise((resolve, reject) => {
getUserInfo()
.then((data) => {
this.userInfo = data.user
this.perms = data.permissions
this.routes = filterAsyncRoutes(data.menu)
// 更新 isPaw 状态
this.isPaw = data.user.is_paw ?? 1
resolve(data)
})
.catch((error) => {
reject(error)
})
})
}
}
})
export default useUserStore