|
|
|
@ -5,26 +5,28 @@
@@ -5,26 +5,28 @@
|
|
|
|
|
* @create: 2022/4/9 |
|
|
|
|
*/ |
|
|
|
|
|
|
|
|
|
import type { UserInfo } from '/#/store'; |
|
|
|
|
import { defineStore } from 'pinia'; |
|
|
|
|
import { store } from '/@/store'; |
|
|
|
|
import { PageEnum } from '/@/enums/pageEnum'; |
|
|
|
|
import { ROLES_KEY, TOKEN_KEY, USER_INFO_KEY } from '/@/enums/cacheEnum'; |
|
|
|
|
import { getAuthCache, setAuthCache } from '/@/utils/auth'; |
|
|
|
|
import { GetUserInfoModel, LoginParams } from '/@/api/sys/model/userModel'; |
|
|
|
|
import { doLogout, getUserInfo, loginApi } from '/@/api/sys/user'; |
|
|
|
|
import { useI18n } from '/@/hooks/web/useI18n'; |
|
|
|
|
import { useMessage } from '/@/hooks/web/useMessage'; |
|
|
|
|
import { router } from '/@/router'; |
|
|
|
|
import { usePermissionStore } from '/@/store/modules/permission'; |
|
|
|
|
import { RouteRecordRaw } from 'vue-router'; |
|
|
|
|
import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; |
|
|
|
|
import type {UserInfo} from '/#/store'; |
|
|
|
|
import {defineStore} from 'pinia'; |
|
|
|
|
import {store} from '/@/store'; |
|
|
|
|
import {PageEnum} from '/@/enums/pageEnum'; |
|
|
|
|
import {ACCESS_TOKEN_KEY, REFRESH_TOKEN_KEY, USER_INFO_KEY} from '/@/enums/cacheEnum'; |
|
|
|
|
import {getAuthCache, setAuthCache} from '/@/utils/auth'; |
|
|
|
|
import {GetUserInfoModel, LoginParams} from '/@/api/sys/model/userModel'; |
|
|
|
|
import {doLogout, getUserInfo, loginApi} from '/@/api/sys/user'; |
|
|
|
|
import {useI18n} from '/@/hooks/web/useI18n'; |
|
|
|
|
import {useMessage} from '/@/hooks/web/useMessage'; |
|
|
|
|
import {router} from '/@/router'; |
|
|
|
|
import {usePermissionStore} from '/@/store/modules/permission'; |
|
|
|
|
import {RouteRecordRaw} from 'vue-router'; |
|
|
|
|
import {PAGE_NOT_FOUND_ROUTE} from '/@/router/routes/basic'; |
|
|
|
|
|
|
|
|
|
interface UserState { |
|
|
|
|
userInfo: Nullable<UserInfo>; |
|
|
|
|
token?: string; |
|
|
|
|
sessionTimeout?: boolean; |
|
|
|
|
roleId: string | number; |
|
|
|
|
sessionTimeout: boolean; |
|
|
|
|
roleIds: Recordable; |
|
|
|
|
permissions: Recordable; |
|
|
|
|
access_token: string; |
|
|
|
|
refresh_token: string; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
export const useUserStore = defineStore({ |
|
|
|
@ -32,64 +34,84 @@ export const useUserStore = defineStore({
@@ -32,64 +34,84 @@ export const useUserStore = defineStore({
|
|
|
|
|
state: (): UserState => ({ |
|
|
|
|
// 用户信息
|
|
|
|
|
userInfo: null, |
|
|
|
|
// token
|
|
|
|
|
token: undefined, |
|
|
|
|
// 登录是否过期
|
|
|
|
|
sessionTimeout: false, |
|
|
|
|
roleId: '', |
|
|
|
|
// 角色ID用于权限校验
|
|
|
|
|
roleIds: [], |
|
|
|
|
// 按钮权限标识用于权限校验
|
|
|
|
|
permissions: [], |
|
|
|
|
// 访问令牌
|
|
|
|
|
access_token: '', |
|
|
|
|
// 刷新令牌
|
|
|
|
|
refresh_token: '', |
|
|
|
|
}), |
|
|
|
|
getters: { |
|
|
|
|
getUserInfo(): UserInfo { |
|
|
|
|
return this.userInfo || getAuthCache<UserInfo>(USER_INFO_KEY) || {}; |
|
|
|
|
getUserInfo(): UserInfo | {[key: string]: any} { |
|
|
|
|
return this.userInfo || {}; |
|
|
|
|
}, |
|
|
|
|
getToken(): string { |
|
|
|
|
return this.token || getAuthCache<string>(TOKEN_KEY); |
|
|
|
|
getAccessToken(): string { |
|
|
|
|
return this.access_token; |
|
|
|
|
}, |
|
|
|
|
getRefreshToken(): string { |
|
|
|
|
return this.refresh_token; |
|
|
|
|
}, |
|
|
|
|
getSessionTimeout(): boolean { |
|
|
|
|
return !!this.sessionTimeout; |
|
|
|
|
}, |
|
|
|
|
getRoleIds(): Recordable { |
|
|
|
|
return this.roleIds; |
|
|
|
|
}, |
|
|
|
|
getPermissions(): Recordable { |
|
|
|
|
return this.permissions; |
|
|
|
|
}, |
|
|
|
|
}, |
|
|
|
|
actions: { |
|
|
|
|
setToken(info: string | undefined) { |
|
|
|
|
this.token = info; |
|
|
|
|
setAuthCache(TOKEN_KEY, info); |
|
|
|
|
setRoleIds(roleIds: Recordable) { |
|
|
|
|
this.roleIds = roleIds; |
|
|
|
|
}, |
|
|
|
|
setPermissions(permissions: Recordable) { |
|
|
|
|
this.permissions = permissions; |
|
|
|
|
}, |
|
|
|
|
setAccessToken(accessToken: string) { |
|
|
|
|
this.access_token = accessToken; |
|
|
|
|
setAuthCache(ACCESS_TOKEN_KEY, accessToken); |
|
|
|
|
}, |
|
|
|
|
setRoleId(roleId: string | number) { |
|
|
|
|
this.roleId = roleId; |
|
|
|
|
setAuthCache(ROLES_KEY, roleId); |
|
|
|
|
setRefreshToken(refreshToken: string) { |
|
|
|
|
this.refresh_token = refreshToken; |
|
|
|
|
setAuthCache(REFRESH_TOKEN_KEY, refreshToken); |
|
|
|
|
}, |
|
|
|
|
setUserInfo(info: UserInfo) { |
|
|
|
|
this.userInfo = info; |
|
|
|
|
setAuthCache(USER_INFO_KEY, info); |
|
|
|
|
setUserInfo(userInfo: UserInfo) { |
|
|
|
|
this.userInfo = userInfo; |
|
|
|
|
setAuthCache(USER_INFO_KEY, userInfo); |
|
|
|
|
}, |
|
|
|
|
setSessionTimeout(flag: boolean) { |
|
|
|
|
this.sessionTimeout = flag; |
|
|
|
|
}, |
|
|
|
|
resetState() { |
|
|
|
|
this.userInfo = null; |
|
|
|
|
this.token = ''; |
|
|
|
|
this.roleId = ''; |
|
|
|
|
this.sessionTimeout = false; |
|
|
|
|
this.access_token = ''; |
|
|
|
|
this.refresh_token = ''; |
|
|
|
|
this.roleIds = []; |
|
|
|
|
this.permissions = []; |
|
|
|
|
}, |
|
|
|
|
/** |
|
|
|
|
* 登录 |
|
|
|
|
*/ |
|
|
|
|
/** 登录 */ |
|
|
|
|
async login(params: LoginParams & { goHome?: boolean; }): Promise<GetUserInfoModel | null> { |
|
|
|
|
try { |
|
|
|
|
debugger; |
|
|
|
|
const { goHome = true, ...loginParams } = params; |
|
|
|
|
const data = await loginApi(loginParams); |
|
|
|
|
const { access_token } = data; |
|
|
|
|
|
|
|
|
|
// 保存令牌
|
|
|
|
|
this.setToken(access_token); |
|
|
|
|
const { access_token, refresh_token } = data; |
|
|
|
|
this.setAccessToken(access_token); |
|
|
|
|
this.setRefreshToken(refresh_token); |
|
|
|
|
// 获取用户信息
|
|
|
|
|
const userInfo = await this.getUserInfoAction(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
const sessionTimeout = this.sessionTimeout; |
|
|
|
|
if (sessionTimeout) { |
|
|
|
|
this.setSessionTimeout(false); |
|
|
|
|
} else if (goHome) { |
|
|
|
|
|
|
|
|
|
const permissionStore = usePermissionStore(); |
|
|
|
|
if (!permissionStore.isDynamicAddedRoute) { |
|
|
|
|
const routes = await permissionStore.buildRoutesAction(); |
|
|
|
@ -100,6 +122,7 @@ export const useUserStore = defineStore({
@@ -100,6 +122,7 @@ export const useUserStore = defineStore({
|
|
|
|
|
permissionStore.setDynamicAddedRoute(true); |
|
|
|
|
} |
|
|
|
|
await router.replace(userInfo.homePath || PageEnum.BASE_HOME); |
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
return userInfo; |
|
|
|
|
} catch (error) { |
|
|
|
@ -108,26 +131,25 @@ export const useUserStore = defineStore({
@@ -108,26 +131,25 @@ export const useUserStore = defineStore({
|
|
|
|
|
}, |
|
|
|
|
async getUserInfoAction(): Promise<UserInfo> { |
|
|
|
|
const userInfo = await getUserInfo(); |
|
|
|
|
// 存储用户扩展信息,便于鉴权
|
|
|
|
|
this.setUserInfo(userInfo); |
|
|
|
|
this.setRoleId(userInfo.roleId); |
|
|
|
|
this.setRoleIds(userInfo.roleIds); |
|
|
|
|
this.setPermissions(userInfo.permissions); |
|
|
|
|
return userInfo; |
|
|
|
|
}, |
|
|
|
|
/** |
|
|
|
|
* 登出 |
|
|
|
|
*/ |
|
|
|
|
/** 登出 */ |
|
|
|
|
async logout(goLogin = false) { |
|
|
|
|
try { |
|
|
|
|
await doLogout(); |
|
|
|
|
} catch { |
|
|
|
|
console.log('注销Token失败'); |
|
|
|
|
} |
|
|
|
|
this.setToken(undefined); |
|
|
|
|
this.setAccessToken(''); |
|
|
|
|
this.setRefreshToken(''); |
|
|
|
|
this.setSessionTimeout(false); |
|
|
|
|
goLogin && router.push(PageEnum.BASE_LOGIN); |
|
|
|
|
}, |
|
|
|
|
/** |
|
|
|
|
* 退出前确认 |
|
|
|
|
*/ |
|
|
|
|
/** 退出前确认 */ |
|
|
|
|
confirmLoginOut() { |
|
|
|
|
const { createConfirm } = useMessage(); |
|
|
|
|
const { t } = useI18n(); |
|
|
|
|