lanjianrong hace 3 años
padre
commit
3e6f020548

+ 10 - 10
src/router/guard/httpGuard.ts

@@ -1,20 +1,20 @@
-import type { Router } from 'vue-router';
-import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel';
-import projectSetting from '/@/settings/projectSetting';
+import type { Router } from 'vue-router'
+import { AxiosCanceler } from '/@/utils/http/axios/axiosCancel'
+import projectSetting from '/@/settings/projectSetting'
 
 /**
  * The interface used to close the current page to complete the request when the route is switched
  * @param router
  */
 export function createHttpGuard(router: Router) {
-  const { removeAllHttpPending } = projectSetting;
-  let axiosCanceler: Nullable<AxiosCanceler>;
+  const { removeAllHttpPending } = projectSetting
+  let axiosCanceler: Nullable<AxiosCanceler>
   if (removeAllHttpPending) {
-    axiosCanceler = new AxiosCanceler();
+    axiosCanceler = new AxiosCanceler()
   }
-  router.beforeEach(async () => {
+  router.beforeEach(() => {
     // Switching the route will delete the previous request
-    axiosCanceler?.removeAllPending();
-    return true;
-  });
+    axiosCanceler?.removeAllPending()
+    return true
+  })
 }

+ 0 - 4
src/router/guard/pageLoadingGuard.ts

@@ -9,10 +9,6 @@ export function createPageLoadingGuard(router: Router) {
   const appStore = useAppStoreWidthOut()
   const { getOpenPageLoading } = useTransitionSetting()
   router.beforeEach(async to => {
-    if (!userStore.getUserInfo) {
-      await userStore.getUserInfoAction()
-      return true
-    }
     if (!userStore.getToken) {
       return true
     }

+ 34 - 34
src/router/guard/permissionGuard.ts

@@ -1,33 +1,33 @@
-import type { Router, RouteRecordRaw } from 'vue-router';
+import type { Router, RouteRecordRaw } from 'vue-router'
 
-import { usePermissionStoreWidthOut } from '/@/store/modules/permission';
+import { usePermissionStoreWidthOut } from '/@/store/modules/permission'
 
-import { PageEnum } from '/@/enums/pageEnum';
-import { useUserStoreWidthOut } from '/@/store/modules/user';
+import { PageEnum } from '/@/enums/pageEnum'
+import { useUserStoreWidthOut } from '/@/store/modules/user'
 
-import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic';
+import { PAGE_NOT_FOUND_ROUTE } from '/@/router/routes/basic'
 
-const LOGIN_PATH = PageEnum.BASE_LOGIN;
+const LOGIN_PATH = PageEnum.BASE_LOGIN
 
-const whitePathList: PageEnum[] = [LOGIN_PATH];
+export const whitePathList: PageEnum[] = [LOGIN_PATH]
 
 export function createPermissionGuard(router: Router) {
-  const userStore = useUserStoreWidthOut();
-  const permissionStore = usePermissionStoreWidthOut();
+  const userStore = useUserStoreWidthOut()
+  const permissionStore = usePermissionStoreWidthOut()
   router.beforeEach(async (to, from, next) => {
     // Jump to the 404 page after processing the login
     if (from.path === LOGIN_PATH && to.name === PAGE_NOT_FOUND_ROUTE.name) {
-      next(PageEnum.BASE_HOME);
-      return;
+      next(PageEnum.BASE_HOME)
+      return
     }
 
     // Whitelist can be directly entered
     if (whitePathList.includes(to.path as PageEnum)) {
-      next();
-      return;
+      next()
+      return
     }
 
-    const token = userStore.getToken;
+    const token = userStore.getToken
 
     // token does not exist
     if (!token) {
@@ -36,37 +36,37 @@ export function createPermissionGuard(router: Router) {
         to.meta.ignoreAuth
         // || to.name === FULL_PAGE_NOT_FOUND_ROUTE.name
       ) {
-        next();
-        return;
+        next()
+        return
       }
       // redirect login page
       const redirectData: { path: string; replace: boolean; query?: Recordable<string> } = {
         path: LOGIN_PATH,
-        replace: true,
-      };
+        replace: true
+      }
       if (to.path) {
         redirectData.query = {
           ...redirectData.query,
-          redirect: to.path,
-        };
+          redirect: to.path
+        }
       }
-      next(redirectData);
-      return;
+      next(redirectData)
+      return
     }
     if (permissionStore.getIsDynamicAddedRoute) {
-      next();
-      return;
+      next()
+      return
     }
-    const routes = await permissionStore.buildRoutesAction();
+    const routes = await permissionStore.buildRoutesAction()
 
-    routes.forEach((route) => {
-      router.addRoute((route as unknown) as RouteRecordRaw);
-    });
+    routes.forEach(route => {
+      router.addRoute(route as unknown as RouteRecordRaw)
+    })
 
-    const redirectPath = (from.query.redirect || to.path) as string;
-    const redirect = decodeURIComponent(redirectPath);
-    const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect };
-    permissionStore.setDynamicAddedRoute(true);
-    next(nextData);
-  });
+    const redirectPath = (from.query.redirect || to.path) as string
+    const redirect = decodeURIComponent(redirectPath)
+    const nextData = to.path === redirect ? { ...to, replace: true } : { path: redirect }
+    permissionStore.setDynamicAddedRoute(true)
+    next(nextData)
+  })
 }

+ 25 - 18
src/router/guard/stateGuard.ts

@@ -1,24 +1,31 @@
-import type { Router } from 'vue-router';
-import { useAppStore } from '/@/store/modules/app';
-import { useMultipleTabStore } from '/@/store/modules/multipleTab';
-import { useUserStore } from '/@/store/modules/user';
-import { usePermissionStore } from '/@/store/modules/permission';
-import { PageEnum } from '/@/enums/pageEnum';
-import { removeTabChangeListener } from '/@/logics/mitt/routeChange';
+import type { Router } from 'vue-router'
+import { useAppStore } from '/@/store/modules/app'
+import { useMultipleTabStore } from '/@/store/modules/multipleTab'
+import { useUserStore } from '/@/store/modules/user'
+import { usePermissionStore } from '/@/store/modules/permission'
+import { PageEnum } from '/@/enums/pageEnum'
+import { removeTabChangeListener } from '/@/logics/mitt/routeChange'
 
 export function createStateGuard(router: Router) {
-  router.afterEach((to) => {
-    const tabStore = useMultipleTabStore();
-    const userStore = useUserStore();
-    const appStore = useAppStore();
-    const permissionStore = usePermissionStore();
+  // const userStore = useUserStoreWidthOut()
+  // router.beforeEach(async to => {
+
+  // })
+  router.afterEach(async to => {
+    const tabStore = useMultipleTabStore()
+    const userStore = useUserStore()
+    const appStore = useAppStore()
+    const permissionStore = usePermissionStore()
     // Just enter the login page and clear the authentication information
+    if (to.path !== PageEnum.BASE_LOGIN && !userStore.getUserInfo) {
+      await userStore.getUserInfoAction()
+    }
     if (to.path === PageEnum.BASE_LOGIN) {
-      appStore.resetAllState();
-      permissionStore.resetState();
-      tabStore.resetState();
-      userStore.resetState();
-      removeTabChangeListener();
+      appStore.resetAllState()
+      permissionStore.resetState()
+      tabStore.resetState()
+      userStore.resetState()
+      removeTabChangeListener()
     }
-  });
+  })
 }

+ 2 - 4
src/store/modules/user.ts

@@ -15,7 +15,7 @@ import {
   LoginParams
 } from '/@/api/sys/model/userModel'
 
-import { loginApi, logoutApi, getAccountGroupList, getUserInfo } from '/@/api/sys/user'
+import { loginApi, logoutApi, getAccountGroupList, getUserInfo, getXsrfToken } from '/@/api/sys/user'
 
 import { useI18n } from '/@/hooks/web/useI18n'
 import { useMessage } from '/@/hooks/web/useMessage'
@@ -71,8 +71,6 @@ export const useUserStore = defineStore({
       setAuthCache(TOKEN_KEY, info)
     },
     setRoleList(roleList: RoleEnum[]) {
-      console.log('roleList', roleList)
-
       this.rolesList = roleList
       setAuthCache(ROLES_KEY, roleList)
     },
@@ -160,7 +158,7 @@ export const useUserStore = defineStore({
     },
 
     async getToken() {
-      // await getXsrfToken('gs01')
+      await getXsrfToken()
       const token = getToken() as string
       this.setToken(token)
     },

+ 3 - 2
src/utils/http/axios/index.ts

@@ -20,8 +20,8 @@ import { useErrorLogStoreWithOut } from '/@/store/modules/errorLog'
 
 import { useI18n } from '/@/hooks/web/useI18n'
 import { joinTimestamp, formatRequestDate } from './helper'
-import { router } from '/@/router'
 import { TOKEN_KEY } from '/@/enums/cacheEnum'
+import { useUserStoreWidthOut } from '/@/store/modules/user'
 
 const globSetting = useGlobSetting()
 const urlPrefix = globSetting.urlPrefix
@@ -36,6 +36,7 @@ const transform: AxiosTransform = {
    */
   transformRequestHook: (res: AxiosResponse<Result>, options: RequestOptions) => {
     const { t } = useI18n()
+    const userStore = useUserStoreWidthOut()
     const { isTransformRequestResult, isReturnNativeResponse } = options
     // 是否返回原生响应头 比如:需要获取响应头时使用该属性
     if (isReturnNativeResponse) {
@@ -86,7 +87,7 @@ const transform: AxiosTransform = {
             okCancel: false,
             closable: false,
             okButtonProps: {
-              onClick: () => router.replace('/login')
+              onClick: async () => await userStore.logout(true)
             }
           })
         }