2022-04-22 01:16:02 +08:00
|
|
|
import store from "@/store"
|
|
|
|
import { defineStore } from "pinia"
|
|
|
|
import { usePermissionStore } from "./permission"
|
2022-08-19 21:13:41 +08:00
|
|
|
import { getToken, removeToken, setToken } from "@/utils/cache/cookies"
|
2022-04-22 01:16:02 +08:00
|
|
|
import router, { resetRouter } from "@/router"
|
2022-07-01 14:59:22 +08:00
|
|
|
import { login, getUserInfo } from "@/api/login"
|
2022-04-22 01:16:02 +08:00
|
|
|
import { RouteRecordRaw } from "vue-router"
|
2022-04-21 18:20:39 +08:00
|
|
|
|
|
|
|
interface IUserState {
|
|
|
|
token: string
|
|
|
|
roles: string[]
|
|
|
|
}
|
|
|
|
|
|
|
|
export const useUserStore = defineStore({
|
2022-04-22 01:16:02 +08:00
|
|
|
id: "user",
|
2022-04-21 18:20:39 +08:00
|
|
|
state: (): IUserState => {
|
|
|
|
return {
|
2022-04-22 01:16:02 +08:00
|
|
|
token: getToken() || "",
|
2022-04-21 18:20:39 +08:00
|
|
|
roles: []
|
|
|
|
}
|
|
|
|
},
|
|
|
|
actions: {
|
|
|
|
/** 设置角色数组 */
|
|
|
|
setRoles(roles: string[]) {
|
|
|
|
this.roles = roles
|
|
|
|
},
|
|
|
|
/** 登录 */
|
2022-04-22 01:16:02 +08:00
|
|
|
login(userInfo: { username: string; password: string }) {
|
2022-04-21 18:20:39 +08:00
|
|
|
return new Promise((resolve, reject) => {
|
2022-07-01 14:59:22 +08:00
|
|
|
login({
|
2022-04-21 18:20:39 +08:00
|
|
|
username: userInfo.username.trim(),
|
|
|
|
password: userInfo.password
|
|
|
|
})
|
|
|
|
.then((res: any) => {
|
|
|
|
setToken(res.data.accessToken)
|
|
|
|
this.token = res.data.accessToken
|
|
|
|
resolve(true)
|
|
|
|
})
|
|
|
|
.catch((error) => {
|
|
|
|
reject(error)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
},
|
|
|
|
/** 获取用户详情 */
|
|
|
|
getInfo() {
|
|
|
|
return new Promise((resolve, reject) => {
|
2022-07-01 14:59:22 +08:00
|
|
|
getUserInfo()
|
2022-04-21 18:20:39 +08:00
|
|
|
.then((res: any) => {
|
|
|
|
this.roles = res.data.user.roles
|
|
|
|
resolve(res)
|
|
|
|
})
|
|
|
|
.catch((error) => {
|
|
|
|
reject(error)
|
|
|
|
})
|
|
|
|
})
|
|
|
|
},
|
|
|
|
/** 切换角色 */
|
|
|
|
async changeRoles(role: string) {
|
2022-04-22 01:16:02 +08:00
|
|
|
const token = role + "-token"
|
2022-04-21 18:20:39 +08:00
|
|
|
this.token = token
|
|
|
|
setToken(token)
|
|
|
|
await this.getInfo()
|
|
|
|
const permissionStore = usePermissionStore()
|
|
|
|
permissionStore.setRoutes(this.roles)
|
|
|
|
resetRouter()
|
|
|
|
permissionStore.dynamicRoutes.forEach((item: RouteRecordRaw) => {
|
|
|
|
router.addRoute(item)
|
|
|
|
})
|
|
|
|
},
|
|
|
|
/** 登出 */
|
|
|
|
logout() {
|
|
|
|
removeToken()
|
2022-04-22 01:16:02 +08:00
|
|
|
this.token = ""
|
2022-04-21 18:20:39 +08:00
|
|
|
this.roles = []
|
|
|
|
resetRouter()
|
|
|
|
},
|
2022-07-01 16:25:51 +08:00
|
|
|
/** 重置 Token */
|
2022-04-21 18:20:39 +08:00
|
|
|
resetToken() {
|
|
|
|
removeToken()
|
2022-04-22 01:16:02 +08:00
|
|
|
this.token = ""
|
2022-04-21 18:20:39 +08:00
|
|
|
this.roles = []
|
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
|
|
|
|
/** 在 setup 外使用 */
|
|
|
|
export function useUserStoreHook() {
|
|
|
|
return useUserStore(store)
|
|
|
|
}
|