From d521592efbdc595908bf074fdd165e2fa7b6e9be Mon Sep 17 00:00:00 2001
From: linwe <872216996@qq.com>
Date: Thu, 05 Sep 2024 10:54:33 +0800
Subject: [PATCH] 登录提示

---
 src/axios.js |  335 +++++++++++++++++++++++++++++--------------------------
 1 files changed, 178 insertions(+), 157 deletions(-)

diff --git a/src/axios.js b/src/axios.js
index e002a88..ac199bb 100644
--- a/src/axios.js
+++ b/src/axios.js
@@ -8,15 +8,30 @@
 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 {
+	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 NProgress from 'nprogress'; // progress bar
 import 'nprogress/nprogress.css'; // progress bar style
-import { Base64 } from 'js-base64';
-import { baseUrl } from '@/config/env';
+import {
+	Base64
+} from 'js-base64';
+import {
+	baseUrl
+} from '@/config/env';
 import crypto from '@/utils/crypto';
 
 // 全局未授权错误提示状态,只提示一次
@@ -25,169 +40,175 @@
 // 超时时间设置为10分钟,部分接口上传比较慢,如固件上传
 axios.defaults.timeout = 600000;
 //返回其他状态码
-axios.defaults.validateStatus = function (status) {
-  return status >= 200 && status <= 500; // 默认的
+axios.defaults.validateStatus = function(status) {
+	return status >= 200 && status <= 500; // 默认的
 };
 //跨域请求,允许保存cookie
 axios.defaults.withCredentials = true;
 // NProgress Configuration
 NProgress.configure({
-  showSpinner: false,
+	showSpinner: false,
 });
 //http request拦截
 axios.interceptors.request.use(
-  config => {
-    // start progress bar
-    NProgress.start();
-    // 初始化错误提示状态
-    isErrorShown = false;
-    //地址为已经配置状态则不添加前缀
-    if (!isURL(config.url) && !config.url.startsWith(baseUrl)) {
-      config.url = baseUrl + config.url;
-    }
-    //安全请求header
-    config.headers['Blade-Requested-With'] = 'BladeHttpRequest';
-    //headers判断是否需要
-    const authorization = config.authorization === false;
-    if (!authorization) {
-      config.headers['Authorization'] = `Basic ${Base64.encode(
+	config => {
+		// start progress bar
+		NProgress.start();
+		// 初始化错误提示状态
+		isErrorShown = false;
+		//地址为已经配置状态则不添加前缀
+		if (!isURL(config.url) && !config.url.startsWith(baseUrl)) {
+			config.url = baseUrl + config.url;
+		}
+		//安全请求header
+		config.headers['Blade-Requested-With'] = 'BladeHttpRequest';
+		//headers判断是否需要
+		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;
-    //headers传递token是否加密
-    const cryptoToken = config.cryptoToken === true;
-    //判断传递数据是否加密
-    const cryptoData = config.cryptoData === true;
-    const token = getToken();
-    if (token && !isToken) {
-      config.headers[website.tokenHeader] = cryptoToken
-        ? 'crypto ' + crypto.encryptAES(token, crypto.cryptoKey)
-        : 'bearer ' + token;
-    }
-    // 开启报文加密
-    // if (cryptoData) {
-    //   if (config.params) {
-    //     const data = crypto.encryptAES(JSON.stringify(config.params), crypto.aesKey);
-    //     config.params = { data };
-    //   }
-    //   if (config.data) {
-    //     config.text = true;
-    //     config.data = crypto.encryptAES(JSON.stringify(config.data), crypto.aesKey);
-    //   }
-    // }
-    //headers中配置text请求
-    if (config.text === true) {
-      config.headers['Content-Type'] = 'text/plain';
-    }
-    //headers中配置serialize为true开启序列化
-    if (config.method === 'post' && meta.isSerialize === true) {
-      config.data = serialize(config.data);
-    }
-    return config;
-  },
-  error => {
-    return Promise.reject(error);
-  }
+		}
+		//headers判断请求是否携带token
+		const meta = config.meta || {};
+		const isToken = meta.isToken === false;
+		//headers传递token是否加密
+		const cryptoToken = config.cryptoToken === true;
+		//判断传递数据是否加密
+		const cryptoData = config.cryptoData === true;
+		const token = getToken();
+		if (token && !isToken) {
+			config.headers[website.tokenHeader] = cryptoToken ?
+				'crypto ' + crypto.encryptAES(token, crypto.cryptoKey) :
+				'bearer ' + token;
+		}
+		// 开启报文加密
+		// if (cryptoData) {
+		//   if (config.params) {
+		//     const data = crypto.encryptAES(JSON.stringify(config.params), crypto.aesKey);
+		//     config.params = { data };
+		//   }
+		//   if (config.data) {
+		//     config.text = true;
+		//     config.data = crypto.encryptAES(JSON.stringify(config.data), crypto.aesKey);
+		//   }
+		// }
+		//headers中配置text请求
+		if (config.text === true) {
+			config.headers['Content-Type'] = 'text/plain';
+		}
+		//headers中配置serialize为true开启序列化
+		if (config.method === 'post' && meta.isSerialize === true) {
+			config.data = serialize(config.data);
+		}
+		return config;
+	},
+	error => {
+		return Promise.reject(error);
+	}
 );
 //http response拦截
 axios.interceptors.response.use(
-  res => {
-    NProgress.done();
-    const status = res.data.error_code || res.data.code || res.status;
-    const statusWhiteList = website.statusWhiteList || [];
-    const message = res.data.msg || res.data.error_description || '系统错误';
-    const config = res.config;
-    const cryptoData = config.cryptoData === true;
-    //如果在白名单里则自行catch逻辑处理
-    if (statusWhiteList.includes(status)) return Promise.reject(res);
-    // 如果是401并且没有重试过,尝试刷新token
-    if (status === 401 && !config._retry) {
-      // 标记此请求已尝试刷新token
-      config._retry = true;
-      // 调用RefreshToken action来刷新token
-      return store
-        .dispatch('RefreshToken')
-        .then(() => {
-          const meta = config.meta || {};
-          const isToken = meta.isToken === false;
-          const cryptoToken = config.cryptoToken === true;
-          // 获取刷新后的token
-          const token = getToken();
-          if (token && !isToken) {
-            config.headers[website.tokenHeader] = cryptoToken
-              ? 'crypto ' + crypto.encryptAES(token, crypto.cryptoKey)
-              : 'bearer ' + token;
-          }
-          // 重新发送原来的请求
-          return axios(config);
-        })
-        .catch(() => {
-          // 首次报错时提示
-          if (!isErrorShown) {
-            isErrorShown = true;
-            ElMessage({
-              message: '用户令牌过期,请重新登录',
-              type: 'error',
-            });
-          }
-          // 清除token信息
-          removeToken();
-          removeRefreshToken();
-          // 重定向到登录页
-          store.dispatch('FedLogOut').then(() => router.push({ path: '/login' }));
-          return Promise.reject(new Error(message));
-        });
-    }
-    // 如果是401并且已经重试过,直接跳转到登录页面
-    if (status === 401 && config._retry) {
-      // 首次报错时提示
-      if (!isErrorShown) {
-        isErrorShown = true;
-        ElMessage({
-          message: '用户令牌过期,请重新登录',
-          type: 'error',
-        });
-      }
-      // 清除token信息
-      removeToken();
-      removeRefreshToken();
-      // 重定向到登录页
-      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;
-        ElMessage({
-          message: message,
-          type: 'error',
-        });
-      }
-      return Promise.reject(new Error(message));
-    }
-    // 如果请求为非200默认统一处理
-    if (status !== 200) {
-      ElMessage({
-        message: message,
-        type: 'error',
-      });
-      return Promise.reject(new Error(message));
-    }
-    // 解析加密报文
-    if (cryptoData) {
-      res.data = JSON.parse(crypto.decryptAES(res.data, crypto.aesKey));
-    }
-    return res;
-  },
-  error => {
-    NProgress.done();
-    return Promise.reject(new Error(error));
-  }
+	res => {
+		NProgress.done();
+		const status = res.data.error_code || res.data.code || res.status;
+		const statusWhiteList = website.statusWhiteList || [];
+		const message = res.data.msg || res.data.error_description || '系统错误';
+		const config = res.config;
+		const cryptoData = config.cryptoData === true;
+		//如果在白名单里则自行catch逻辑处理
+		if (statusWhiteList.includes(status)) return Promise.reject(res);
+		// 如果是401并且没有重试过,尝试刷新token
+		if (status === 401 && !config._retry) {
+			// 标记此请求已尝试刷新token
+			config._retry = true;
+			// 调用RefreshToken action来刷新token
+			return store
+				.dispatch('RefreshToken')
+				.then(() => {
+					const meta = config.meta || {};
+					const isToken = meta.isToken === false;
+					const cryptoToken = config.cryptoToken === true;
+					// 获取刷新后的token
+					const token = getToken();
+					if (token && !isToken) {
+						config.headers[website.tokenHeader] = cryptoToken ?
+							'crypto ' + crypto.encryptAES(token, crypto.cryptoKey) :
+							'bearer ' + token;
+					}
+					// 重新发送原来的请求
+					return axios(config);
+				})
+				.catch(() => {
+					// 首次报错时提示
+					if (!isErrorShown) {
+						isErrorShown = true;
+						ElMessage({
+							message: message,
+							type: 'error',
+						});
+					}
+					// 清除token信息
+					removeToken();
+					removeRefreshToken();
+					// 重定向到登录页
+					store.dispatch('FedLogOut').then(() => router.push({
+						path: '/login'
+					}));
+					return Promise.reject(new Error(message));
+				});
+		}
+		// 如果是401并且已经重试过,直接跳转到登录页面
+		if (status === 401 && config._retry) {
+			// 首次报错时提示
+			if (!isErrorShown) {
+				isErrorShown = true;
+				ElMessage({
+					message: '用户令牌过期,请重新登录',
+					type: 'error',
+				});
+			}
+			// 清除token信息
+			removeToken();
+			removeRefreshToken();
+			// 重定向到登录页
+			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;
+				ElMessage({
+					message: message,
+					type: 'error',
+				});
+			}
+			return Promise.reject(new Error(message));
+		}
+		// 如果请求为非200默认统一处理
+		if (status !== 200) {
+			if (!isErrorShown) {
+				ElMessage({
+					message: message,
+					type: 'error',
+				});
+			}
+			return Promise.reject(new Error(message));
+		}
+		// 解析加密报文
+		if (cryptoData) {
+			res.data = JSON.parse(crypto.decryptAES(res.data, crypto.aesKey));
+		}
+		return res;
+	},
+	error => {
+		NProgress.done();
+		return Promise.reject(new Error(error));
+	}
 );
 
-export default axios;
+export default axios;
\ No newline at end of file

--
Gitblit v1.9.3