| | |
| | | import { RouteRecordRaw } from 'vue-router'; |
| | | import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'; |
| | | import { isArray } from '/@/utils/is'; |
| | | import { h } from 'vue'; |
| | | |
| | | interface UserState { |
| | | userInfo: Nullable<UserInfo>; |
| | |
| | | lastUpdateTime: 0, |
| | | }), |
| | | getters: { |
| | | getUserInfo(): UserInfo { |
| | | return this.userInfo || getAuthCache<UserInfo>(USER_INFO_KEY) || {}; |
| | | getUserInfo(state): UserInfo { |
| | | return state.userInfo || getAuthCache<UserInfo>(USER_INFO_KEY) || {}; |
| | | }, |
| | | getToken(): string { |
| | | return this.token || getAuthCache<string>(TOKEN_KEY); |
| | | getToken(state): string { |
| | | return state.token || getAuthCache<string>(TOKEN_KEY); |
| | | }, |
| | | getRoleList(): RoleEnum[] { |
| | | return this.roleList.length > 0 ? this.roleList : getAuthCache<RoleEnum[]>(ROLES_KEY); |
| | | getRoleList(state): RoleEnum[] { |
| | | return state.roleList.length > 0 ? state.roleList : getAuthCache<RoleEnum[]>(ROLES_KEY); |
| | | }, |
| | | getSessionTimeout(): boolean { |
| | | return !!this.sessionTimeout; |
| | | getSessionTimeout(state): boolean { |
| | | return !!state.sessionTimeout; |
| | | }, |
| | | getLastUpdateTime(): number { |
| | | return this.lastUpdateTime; |
| | | getLastUpdateTime(state): number { |
| | | return state.lastUpdateTime; |
| | | }, |
| | | }, |
| | | actions: { |
| | | setToken(info: string | undefined) { |
| | | this.token = info; |
| | | this.token = info ? info : ''; // for null or undefined value |
| | | setAuthCache(TOKEN_KEY, info); |
| | | }, |
| | | setRoleList(roleList: RoleEnum[]) { |
| | | this.roleList = roleList; |
| | | setAuthCache(ROLES_KEY, roleList); |
| | | }, |
| | | setUserInfo(info: UserInfo) { |
| | | setUserInfo(info: UserInfo | null) { |
| | | this.userInfo = info; |
| | | this.lastUpdateTime = new Date().getTime(); |
| | | setAuthCache(USER_INFO_KEY, info); |
| | |
| | | router.addRoute(PAGE_NOT_FOUND_ROUTE as unknown as RouteRecordRaw); |
| | | permissionStore.setDynamicAddedRoute(true); |
| | | } |
| | | goHome && (await router.replace(userInfo.homePath || PageEnum.BASE_HOME)); |
| | | goHome && (await router.replace(userInfo?.homePath || PageEnum.BASE_HOME)); |
| | | } |
| | | return userInfo; |
| | | }, |
| | | async getUserInfoAction(): Promise<UserInfo> { |
| | | async getUserInfoAction(): Promise<UserInfo | null> { |
| | | if (!this.getToken) return null; |
| | | const userInfo = await getUserInfo(); |
| | | const { roles = [] } = userInfo; |
| | | if (isArray(roles)) { |
| | |
| | | * @description: logout |
| | | */ |
| | | async logout(goLogin = false) { |
| | | if (this.token) { |
| | | if (this.getToken) { |
| | | try { |
| | | await doLogout(); |
| | | } catch { |
| | |
| | | } |
| | | this.setToken(undefined); |
| | | this.setSessionTimeout(false); |
| | | this.setUserInfo(null); |
| | | goLogin && router.push(PageEnum.BASE_LOGIN); |
| | | }, |
| | | |
| | |
| | | const { t } = useI18n(); |
| | | createConfirm({ |
| | | iconType: 'warning', |
| | | title: t('sys.app.logoutTip'), |
| | | content: t('sys.app.logoutMessage'), |
| | | title: () => h('span', t('sys.app.logoutTip')), |
| | | content: () => h('span', t('sys.app.logoutMessage')), |
| | | onOk: async () => { |
| | | await this.logout(true); |
| | | }, |