Browse Source

feat: 退出登录优化,不再重复提示登录过期

zhangjie 11 months ago
parent
commit
d7b92ebb67
3 changed files with 31 additions and 55 deletions
  1. 2 15
      src/modules/admin/views/Admin.vue
  2. 27 18
      src/plugins/axios.js
  3. 2 22
      src/views/Home.vue

+ 2 - 15
src/modules/admin/views/Admin.vue

@@ -200,23 +200,10 @@ export default {
         type: "warning",
         type: "warning",
       })
       })
         .then(() => {
         .then(() => {
-          this.logoutAction();
+          logout();
         })
         })
         .catch(() => {});
         .catch(() => {});
     },
     },
-    async logoutAction() {
-      await logout();
-      this.$ls.clear();
-      const paramDomainCode = window.sessionStorage.getItem("paramDomainCode");
-      const routeDomainCode = window.sessionStorage.getItem("routeDomainCode");
-      if (paramDomainCode) {
-        this.$router.push({ name: "Login", query: { code: paramDomainCode } });
-      } else if (routeDomainCode) {
-        this.$router.push({ name: "Login", params: { code: routeDomainCode } });
-      } else {
-        this.$router.push({ name: "Login" });
-      }
-    },
     toSelectSchool() {
     toSelectSchool() {
       this.$router.push({ name: "SelectSchool" });
       this.$router.push({ name: "SelectSchool" });
     },
     },
@@ -224,7 +211,7 @@ export default {
       this.$refs.ResetPwd.open();
       this.$refs.ResetPwd.open();
     },
     },
     resetPwdModified() {
     resetPwdModified() {
-      this.logoutAction();
+      logout();
     },
     },
   },
   },
 };
 };

+ 27 - 18
src/plugins/axios.js

@@ -10,6 +10,8 @@ import { PLATFORM, DEVICE_ID } from "../constants/app";
 import { initSyncTime, fetchTime } from "../plugins/syncServerTime";
 import { initSyncTime, fetchTime } from "../plugins/syncServerTime";
 import { objTypeOf } from "./utils";
 import { objTypeOf } from "./utils";
 
 
+const logoutUrl = "api/admin/common/logout";
+
 // const IS_DEV = false;
 // const IS_DEV = false;
 // axios interceptors
 // axios interceptors
 var load = "";
 var load = "";
@@ -145,6 +147,11 @@ const errorCallback = (error) => {
 const errorDataCallback = (response) => {
 const errorDataCallback = (response) => {
   if (objTypeOf(response.data) === "blob") return response.data;
   if (objTypeOf(response.data) === "blob") return response.data;
 
 
+  if (response.config.url.includes(logoutUrl)) {
+    logoutHandle();
+    return;
+  }
+
   const error = response.data;
   const error = response.data;
   let message = error.message || error.error || "请求错误";
   let message = error.message || error.error || "请求错误";
   const unauthStatus = [401, 403];
   const unauthStatus = [401, 403];
@@ -171,24 +178,7 @@ const errorDataCallback = (response) => {
         unauthMsgBoxIsShow = false;
         unauthMsgBoxIsShow = false;
         if (action !== "confirm") return;
         if (action !== "confirm") return;
 
 
-        const returnUrl = Vue.ls.get("returnUrl");
-        if (returnUrl) {
-          window.location.href = returnUrl;
-          return;
-        }
-
-        Vue.ls.clear();
-        const paramDomainCode =
-          window.sessionStorage.getItem("paramDomainCode");
-        const routeDomainCode =
-          window.sessionStorage.getItem("routeDomainCode");
-        if (paramDomainCode) {
-          router.push({ name: "Login", query: { code: paramDomainCode } });
-        } else if (routeDomainCode) {
-          router.push({ name: "Login", params: { code: routeDomainCode } });
-        } else {
-          router.push({ name: "Login" });
-        }
+        logoutHandle();
       },
       },
     });
     });
   } else if (error.code === 503002) {
   } else if (error.code === 503002) {
@@ -204,6 +194,25 @@ const errorDataCallback = (response) => {
   return error;
   return error;
 };
 };
 
 
+function logoutHandle() {
+  const returnUrl = Vue.ls.get("returnUrl");
+  if (returnUrl) {
+    window.location.href = returnUrl;
+    return;
+  }
+
+  Vue.ls.clear();
+  const paramDomainCode = window.sessionStorage.getItem("paramDomainCode");
+  const routeDomainCode = window.sessionStorage.getItem("routeDomainCode");
+  if (paramDomainCode) {
+    router.push({ name: "Login", query: { code: paramDomainCode } });
+  } else if (routeDomainCode) {
+    router.push({ name: "Login", params: { code: routeDomainCode } });
+  } else {
+    router.push({ name: "Login" });
+  }
+}
+
 /**
 /**
  * response format
  * response format
  *  {
  *  {

+ 2 - 22
src/views/Home.vue

@@ -416,30 +416,10 @@ export default {
         type: "warning",
         type: "warning",
       })
       })
         .then(() => {
         .then(() => {
-          this.logoutAction();
+          logout();
         })
         })
         .catch(() => {});
         .catch(() => {});
     },
     },
-    async logoutAction() {
-      await logout();
-
-      const returnUrl = this.$ls.get("returnUrl");
-      if (returnUrl) {
-        window.location.href = returnUrl;
-        return;
-      }
-
-      this.$ls.clear();
-      const paramDomainCode = window.sessionStorage.getItem("paramDomainCode");
-      const routeDomainCode = window.sessionStorage.getItem("routeDomainCode");
-      if (paramDomainCode) {
-        this.$router.push({ name: "Login", query: { code: paramDomainCode } });
-      } else if (routeDomainCode) {
-        this.$router.push({ name: "Login", params: { code: routeDomainCode } });
-      } else {
-        this.$router.push({ name: "Login" });
-      }
-    },
     toSelectSchool() {
     toSelectSchool() {
       if (this.IS_SUPER_ADMIN) this.$router.push({ name: "SelectSchool" });
       if (this.IS_SUPER_ADMIN) this.$router.push({ name: "SelectSchool" });
       if (this.hasMoreSchool) {
       if (this.hasMoreSchool) {
@@ -451,7 +431,7 @@ export default {
       this.$refs.ResetPwd.open();
       this.$refs.ResetPwd.open();
     },
     },
     resetPwdModified() {
     resetPwdModified() {
-      this.logoutAction();
+      logout();
     },
     },
     // other
     // other
     getSubMenus(menu) {
     getSubMenus(menu) {