From eeb5a7800f55d67b5b9637241fd2b66f9012111b Mon Sep 17 00:00:00 2001
From: shuishen <1109946754@qq.com>
Date: Wed, 04 Feb 2026 09:13:17 +0800
Subject: [PATCH] feat:反无跳转产品处理

---
 applications/drone-command/src/axios.js |  174 ++++++++++++++++++++++++++-------------------------------
 1 files changed, 80 insertions(+), 94 deletions(-)

diff --git a/applications/drone-command/src/axios.js b/applications/drone-command/src/axios.js
index 2a9d292..1e7423d 100644
--- a/applications/drone-command/src/axios.js
+++ b/applications/drone-command/src/axios.js
@@ -6,63 +6,62 @@
  * isToken是否需要token
  */
 
-import axios from 'axios';
-import store from '@/store/';
-import router from '@/router/';
-import { serialize } from '@/utils/util';
-import { getToken, removeToken, removeRefreshToken } from '@/utils/auth';
-import { isURL, validatenull } from '@/utils/validate';
-import { ElMessage } from 'element-plus';
-import website from '@/config/website';
-import { Base64 } from 'js-base64';
-import { baseUrl } from '@/config/env';
-import crypto from '@/utils/crypto';
-const adminUrl = import.meta.env.VITE_APP_DASHBOARD_URL;
+import axios from 'axios'
+import store from '@/store/'
+import router from '@/router/'
+import { serialize } from '@/utils/util'
+import { getToken, removeToken, removeRefreshToken } from '@/utils/auth'
+import { isURL, validatenull } from '@/utils/validate'
+import { ElMessage } from 'element-plus'
+import website from '@/config/website'
+import { Base64 } from 'js-base64'
+import { baseUrl } from '@/config/env'
+import crypto from '@/utils/crypto'
 // 全局未授权错误提示状态,只提示一次
-let isErrorShown = false;
+let isErrorShown = false
 
-let _retry = false;
+let _retry = false
 // 超时时间设置为10分钟,部分接口上传比较慢,如固件上传
-axios.defaults.timeout = 600000;
+axios.defaults.timeout = 600000
 //返回其他状态码
 axios.defaults.validateStatus = function (status) {
-  return status >= 200 && status <= 500; // 默认的
-};
+  return status >= 200 && status <= 500 // 默认的
+}
 //跨域请求,允许保存cookie
-axios.defaults.withCredentials = true;
+axios.defaults.withCredentials = true
 
 //http request拦截
 axios.interceptors.request.use(
   config => {
     // 初始化错误提示状态
-    isErrorShown = false;
+    isErrorShown = false
     //地址为已经配置状态则不添加前缀
     if (!isURL(config.url) && !config.url.startsWith(baseUrl)) {
-      config.url = baseUrl + config.url;
+      config.url = baseUrl + config.url
     }
     //安全请求header
-    config.headers['areaCode'] = config?.params?.areaCode || store?.state?.user?.userInfo?.detail?.areaCode;
-    config.headers['Blade-Requested-With'] = 'BladeHttpRequest';
+    config.headers['areaCode'] = config?.params?.areaCode || store?.state?.user?.userInfo?.detail?.areaCode
+    config.headers['Blade-Requested-With'] = 'BladeHttpRequest'
     //headers判断是否需要
-    const authorization = config.authorization === false;
+    const authorization = config.authorization === false
     if (!authorization) {
       config.headers['Authorization'] = `Basic ${Base64.encode(
         `${website.clientId}:${website.clientSecret}`
-      )}`;
+      )}`
     }
 
     //headers判断请求是否携带token
-    const meta = config.meta || {};
-    const isToken = meta.isToken === false;
+    const meta = config.meta || {}
+    const isToken = meta.isToken === false
     //headers传递token是否加密
-    const cryptoToken = config.cryptoToken === true;
+    const cryptoToken = config.cryptoToken === true
     //判断传递数据是否加密
-    const cryptoData = config.cryptoData === true;
-    const token = getToken();
+    const cryptoData = config.cryptoData === true
+    const token = getToken()
     if (token && !isToken) {
       config.headers[website.tokenHeader] = cryptoToken
         ? 'crypto ' + crypto.encryptAES(token, crypto.cryptoKey)
-        : 'bearer ' + token;
+        : 'bearer ' + token
     }
     // 开启报文加密
     // if (cryptoData) {
@@ -77,131 +76,118 @@
     // }
     //headers中配置text请求
     if (config.text === true) {
-      config.headers['Content-Type'] = 'text/plain';
+      config.headers['Content-Type'] = 'text/plain'
     }
     //headers中配置serialize为true开启序列化
     if (config.method === 'post' && meta.isSerialize === true) {
-      config.data = serialize(config.data);
+      config.data = serialize(config.data)
     }
-    return config;
+    return config
   },
   error => {
-    return Promise.reject(error);
+    return Promise.reject(error)
   }
-);
+)
 //http response拦截
 axios.interceptors.response.use(
   res => {
-    const status = res.data.error_code || res.data.code || res.status;
-    const statusWhiteList = website.statusWhiteList || [];
-    const message = res.data.msg || res.data.error_description || res.data.message || '系统错误';
-    const config = res.config;
-    const cryptoData = config.cryptoData === true;
+    const status = res.data.error_code || res.data.code || res.status
+    const statusWhiteList = website.statusWhiteList || []
+    const message = res.data.msg || res.data.error_description || res.data.message || '系统错误'
+    const config = res.config
+    const cryptoData = config.cryptoData === true
     if (status === 511) {
       ElMessage({
         message: '请联系运维人员上传密钥证书!',
         type: 'error',
-      });
+      })
       // 获取当前路由名称
-      const currentRouteName = router.currentRoute.value.name;
+      const currentRouteName = router.currentRoute.value.name
       // 如果当前路由不是登录页,则跳转到登录页
       if (currentRouteName !== '登录页') {
         store.dispatch('FedLogOut').then(() =>
           router.push({
             path: '/login',
           })
-        );
+        )
       }
-      return Promise.reject(new Error(message));
+      return Promise.reject(new Error(message))
     }
     //如果在白名单里则自行catch逻辑处理
-    if (statusWhiteList.includes(status)) return Promise.reject(res);
+    if (statusWhiteList.includes(status)) return Promise.reject(res)
     // 如果是401并且没有重试过,尝试刷新token
     if (status === 401 && !_retry) {
       // 标记此请求已尝试刷新token
-      _retry = true;
+      _retry = true
       // 调用RefreshToken action来刷新token
       return store
         .dispatch('RefreshToken')
         .then(() => {
-          const meta = config.meta || {};
-          const isToken = meta.isToken === false;
-          const cryptoToken = config.cryptoToken === true;
+          const meta = config.meta || {}
+          const isToken = meta.isToken === false
+          const cryptoToken = config.cryptoToken === true
           // 获取刷新后的token
-          const token = getToken();
+          const token = getToken()
           if (token && !isToken) {
             config.headers[website.tokenHeader] = cryptoToken
               ? 'crypto ' + crypto.encryptAES(token, crypto.cryptoKey)
-              : 'bearer ' + token;
+              : 'bearer ' + token
           }
           // 重新发送原来的请求
-          return axios(config);
+          return axios(config)
         })
         .catch(() => {
           // 首次报错时提示
           if (!isErrorShown) {
-            isErrorShown = true;
+            isErrorShown = true
             ElMessage({
               message: message,
               type: 'error',
-            });
+            })
           }
           // 清除token信息
-          removeToken();
-          removeRefreshToken();
-          const env = import.meta.env.VITE_APP_ENV;
+          removeToken()
+          removeRefreshToken()
+          const env = import.meta.env.VITE_APP_ENV
           // 重定向到登录页
           store.dispatch('FedLogOut').then(() => router.push({
-          	path: '/login'
-          }));
-          // env === 'development'
-          //   ? store.dispatch('FedLogOut').then(() =>
-          //       router.push({
-          //         path: '/login',
-          //       })
-          //     )
-          //   : store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`));
-          return Promise.reject(new Error(message));
-        });
+            path: '/login'
+          }))
+         
+          return Promise.reject(new Error(message))
+        })
     }
     // 如果是401并且已经重试过,直接跳转到登录页面
     if (status === 401 && _retry) {
       // 首次报错时提示
       if (!isErrorShown) {
-        isErrorShown = true;
+        isErrorShown = true
         ElMessage({
           message: '用户令牌过期,请重新登录',
           type: 'error',
-        });
+        })
       }
       // 清除token信息
-      removeToken();
-      removeRefreshToken();
+      removeToken()
+      removeRefreshToken()
       // 重定向到登录页
-      //   store.dispatch('FedLogOut').then(() => router.push({
-      //   	path: '/login'
-      //   }));
-      const env = import.meta.env.VITE_APP_ENV;
-      env === 'development'
-        ? store.dispatch('FedLogOut').then(() =>
-            router.push({
-              path: '/login',
-            })
-          )
-        : store.dispatch('FedLogOut').then(() => window.location.replace(`${adminUrl}#/login`));
-      return Promise.reject(new Error(message));
+      store.dispatch('FedLogOut').then(() => router.push({
+        path: '/login'
+      }))
+
+      return Promise.reject(new Error(message))
     }
     // 如果请求为oauth2错误码则首次报错时提示
     if (status > 2000 && !validatenull(res.data.error_description)) {
       // 首次报错时提示
       if (!isErrorShown) {
-        isErrorShown = true;
+        isErrorShown = true
         ElMessage({
           message: message,
           type: 'error',
-        });
+        })
       }
-      return Promise.reject(new Error(message));
+      return Promise.reject(new Error(message))
     }
     // 如果请求为非200默认统一处理
     if (status !== 200 && status !== 0) {
@@ -209,19 +195,19 @@
         ElMessage({
           message: message,
           type: 'error',
-        });
+        })
       }
-      return Promise.reject(new Error(message));
+      return Promise.reject(new Error(message))
     }
     // 解析加密报文
     if (cryptoData) {
-      res.data = JSON.parse(crypto.decryptAES(res.data, crypto.aesKey));
+      res.data = JSON.parse(crypto.decryptAES(res.data, crypto.aesKey))
     }
-    return res;
+    return res
   },
   error => {
-    return Promise.reject(new Error(error));
+    return Promise.reject(new Error(error))
   }
-);
+)
 window._request = axios
-export default axios;
+export default axios

--
Gitblit v1.9.3