perf: improve the logic related to login expiration
This commit is contained in:
@@ -5,7 +5,7 @@ import type { RouteRecordRaw } from 'vue-router';
|
||||
import { computed, ref } from 'vue';
|
||||
import { useRouter } from 'vue-router';
|
||||
|
||||
import { DEFAULT_HOME_PATH } from '@vben/constants';
|
||||
import { DEFAULT_HOME_PATH, LOGIN_PATH } from '@vben/constants';
|
||||
import { useCoreAccessStore } from '@vben-core/stores';
|
||||
|
||||
import { defineStore } from 'pinia';
|
||||
@@ -17,12 +17,10 @@ export const useAccessStore = defineStore('access', () => {
|
||||
const router = useRouter();
|
||||
const loading = ref(false);
|
||||
|
||||
const showLoginDialog = ref(false);
|
||||
function setShowLoginDialog(value: boolean) {
|
||||
showLoginDialog.value = value;
|
||||
}
|
||||
const openLoginExpiredModal = ref(false);
|
||||
|
||||
const accessToken = computed(() => coreStoreAccess.accessToken);
|
||||
const refreshToken = computed(() => coreStoreAccess.refreshToken);
|
||||
const userRoles = computed(() => coreStoreAccess.userRoles);
|
||||
const userInfo = computed(() => coreStoreAccess.userInfo);
|
||||
const accessRoutes = computed(() => coreStoreAccess.accessRoutes);
|
||||
@@ -31,6 +29,10 @@ export const useAccessStore = defineStore('access', () => {
|
||||
coreStoreAccess.setAccessMenus(menus);
|
||||
}
|
||||
|
||||
function setAccessToken(token: null | string) {
|
||||
coreStoreAccess.setAccessToken(token);
|
||||
}
|
||||
|
||||
function setAccessRoutes(routes: RouteRecordRaw[]) {
|
||||
coreStoreAccess.setAccessRoutes(routes);
|
||||
}
|
||||
@@ -70,7 +72,7 @@ export const useAccessStore = defineStore('access', () => {
|
||||
coreStoreAccess.setUserInfo(userInfo);
|
||||
coreStoreAccess.setAccessCodes(accessCodes);
|
||||
|
||||
showLoginDialog.value = false;
|
||||
openLoginExpiredModal.value = false;
|
||||
onSuccess
|
||||
? await onSuccess?.()
|
||||
: await router.push(userInfo.homePath || DEFAULT_HOME_PATH);
|
||||
@@ -85,6 +87,19 @@ export const useAccessStore = defineStore('access', () => {
|
||||
};
|
||||
}
|
||||
|
||||
async function logout() {
|
||||
coreStoreAccess.$reset();
|
||||
openLoginExpiredModal.value = false;
|
||||
|
||||
// 回登陆页带上当前路由地址
|
||||
await router.replace({
|
||||
path: LOGIN_PATH,
|
||||
query: {
|
||||
redirect: encodeURIComponent(router.currentRoute.value.fullPath),
|
||||
},
|
||||
});
|
||||
}
|
||||
|
||||
async function fetchUserInfo() {
|
||||
let userInfo: UserInfo | null = null;
|
||||
userInfo = await getUserInfo();
|
||||
@@ -102,11 +117,13 @@ export const useAccessStore = defineStore('access', () => {
|
||||
authLogin,
|
||||
fetchUserInfo,
|
||||
loading,
|
||||
logout,
|
||||
openLoginExpiredModal,
|
||||
refreshToken,
|
||||
reset,
|
||||
setAccessMenus,
|
||||
setAccessRoutes,
|
||||
setShowLoginDialog,
|
||||
showLoginDialog,
|
||||
setAccessToken,
|
||||
userInfo,
|
||||
userRoles,
|
||||
};
|
||||
|
Reference in New Issue
Block a user