From 024783588e577a68c7e285dd83d1cae9bf9c0862 Mon Sep 17 00:00:00 2001
From: LiuHao <liuhaoai545@gmail.com>
Date: 星期四, 11 一月 2024 14:27:46 +0800
Subject: [PATCH] update 升级@intlify/unplugin-vue-i18n版本依赖 update i18n使用方法。 add 新增i18n vite插件。
---
src/utils/request.ts | 291 ++++++++++++++++++++++++++++++++-------------------------
1 files changed, 164 insertions(+), 127 deletions(-)
diff --git a/src/utils/request.ts b/src/utils/request.ts
index 1376fbd..6135d69 100644
--- a/src/utils/request.ts
+++ b/src/utils/request.ts
@@ -1,4 +1,4 @@
-import axios, { InternalAxiosRequestConfig } from 'axios';
+import axios, { AxiosResponse, InternalAxiosRequestConfig } from 'axios';
import { useUserStore } from '@/store/modules/user';
import { getToken } from '@/utils/auth';
import { tansParams, blobValidate } from '@/utils/ruoyi';
@@ -7,153 +7,190 @@
import { errorCode } from '@/utils/errorCode';
import { LoadingInstance } from 'element-plus/es/components/loading/src/loading';
import FileSaver from 'file-saver';
+import { getLanguage } from '@/lang';
+import { encryptBase64, encryptWithAes, generateAesKey, decryptWithAes, decryptBase64 } from '@/utils/crypto';
+import { encrypt, decrypt } from '@/utils/jsencrypt';
+const encryptHeader = 'encrypt-key';
let downloadLoadingInstance: LoadingInstance;
// 鏄惁鏄剧ず閲嶆柊鐧诲綍
export const isRelogin = { show: false };
+export const globalHeaders = () => {
+ return {
+ Authorization: 'Bearer ' + getToken(),
+ clientid: import.meta.env.VITE_APP_CLIENT_ID
+ };
+};
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
-// 瀵瑰簲鍥介檯鍖栬祫婧愭枃浠跺悗缂�
-axios.defaults.headers['Content-Language'] = 'zh_CN';
+axios.defaults.headers['clientid'] = import.meta.env.VITE_APP_CLIENT_ID;
// 鍒涘缓 axios 瀹炰緥
const service = axios.create({
- baseURL: import.meta.env.VITE_APP_BASE_API,
- timeout: 50000
+ baseURL: import.meta.env.VITE_APP_BASE_API,
+ timeout: 50000
});
// 璇锋眰鎷︽埅鍣�
service.interceptors.request.use(
- (config: InternalAxiosRequestConfig) => {
- const isToken = (config.headers || {}).isToken === false;
- // 鏄惁闇�瑕侀槻姝㈡暟鎹噸澶嶆彁浜�
- const isRepeatSubmit = !(config.headers || {}).repeatSubmit;
- if (getToken() && !isToken) {
- config.headers['Authorization'] = 'Bearer ' + getToken(); // 璁╂瘡涓姹傛惡甯﹁嚜瀹氫箟token 璇锋牴鎹疄闄呮儏鍐佃嚜琛屼慨鏀�
- }
- // get璇锋眰鏄犲皠params鍙傛暟
- if (config.method === 'get' && config.params) {
- let url = config.url + '?' + tansParams(config.params);
- url = url.slice(0, -1);
- config.params = {};
- config.url = url;
- }
+ (config: InternalAxiosRequestConfig) => {
+ // 瀵瑰簲鍥介檯鍖栬祫婧愭枃浠跺悗缂�
+ config.headers['Content-Language'] = getLanguage();
- if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
- const requestObj = {
- url: config.url,
- data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
- time: new Date().getTime()
- };
- const sessionObj = cache.session.getJSON('sessionObj');
- if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
- cache.session.setJSON('sessionObj', requestObj);
- } else {
- const s_url = sessionObj.url; // 璇锋眰鍦板潃
- const s_data = sessionObj.data; // 璇锋眰鏁版嵁
- const s_time = sessionObj.time; // 璇锋眰鏃堕棿
- const interval = 500; // 闂撮殧鏃堕棿(ms)锛屽皬浜庢鏃堕棿瑙嗕负閲嶅鎻愪氦
- if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
- const message = '鏁版嵁姝e湪澶勭悊锛岃鍕块噸澶嶆彁浜�';
- console.warn(`[${s_url}]: ` + message);
- return Promise.reject(new Error(message));
- } else {
- cache.session.setJSON('sessionObj', requestObj);
- }
- }
- }
- return config;
- },
- (error: any) => {
- console.log(error);
- return Promise.reject(error);
- }
+ const isToken = (config.headers || {}).isToken === false;
+ // 鏄惁闇�瑕侀槻姝㈡暟鎹噸澶嶆彁浜�
+ const isRepeatSubmit = (config.headers || {}).repeatSubmit === false;
+ // 鏄惁闇�瑕佸姞瀵�
+ const isEncrypt = (config.headers || {}).isEncrypt === 'true';
+ if (getToken() && !isToken) {
+ config.headers['Authorization'] = 'Bearer ' + getToken(); // 璁╂瘡涓姹傛惡甯﹁嚜瀹氫箟token 璇锋牴鎹疄闄呮儏鍐佃嚜琛屼慨鏀�
+ }
+ // get璇锋眰鏄犲皠params鍙傛暟
+ if (config.method === 'get' && config.params) {
+ let url = config.url + '?' + tansParams(config.params);
+ url = url.slice(0, -1);
+ config.params = {};
+ config.url = url;
+ }
+
+ if (!isRepeatSubmit && (config.method === 'post' || config.method === 'put')) {
+ const requestObj = {
+ url: config.url,
+ data: typeof config.data === 'object' ? JSON.stringify(config.data) : config.data,
+ time: new Date().getTime()
+ };
+ const sessionObj = cache.session.getJSON('sessionObj');
+ if (sessionObj === undefined || sessionObj === null || sessionObj === '') {
+ cache.session.setJSON('sessionObj', requestObj);
+ } else {
+ const s_url = sessionObj.url; // 璇锋眰鍦板潃
+ const s_data = sessionObj.data; // 璇锋眰鏁版嵁
+ const s_time = sessionObj.time; // 璇锋眰鏃堕棿
+ const interval = 500; // 闂撮殧鏃堕棿(ms)锛屽皬浜庢鏃堕棿瑙嗕负閲嶅鎻愪氦
+ if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
+ const message = '鏁版嵁姝e湪澶勭悊锛岃鍕块噸澶嶆彁浜�';
+ console.warn(`[${s_url}]: ` + message);
+ return Promise.reject(new Error(message));
+ } else {
+ cache.session.setJSON('sessionObj', requestObj);
+ }
+ }
+ }
+ // 褰撳紑鍚弬鏁板姞瀵�
+ if (isEncrypt && (config.method === 'post' || config.method === 'put')) {
+ // 鐢熸垚涓�涓� AES 瀵嗛挜
+ const aesKey = generateAesKey();
+ config.headers[encryptHeader] = encrypt(encryptBase64(aesKey));
+ config.data = typeof config.data === 'object' ? encryptWithAes(JSON.stringify(config.data), aesKey) : encryptWithAes(config.data, aesKey);
+ }
+ // FormData鏁版嵁鍘昏姹傚ごContent-Type
+ if (config.data instanceof FormData) {
+ delete config.headers['Content-Type'];
+ }
+ return config;
+ },
+ (error: any) => {
+ return Promise.reject(error);
+ }
);
// 鍝嶅簲鎷︽埅鍣�
service.interceptors.response.use(
- (res) => {
- // 鏈缃姸鎬佺爜鍒欓粯璁ゆ垚鍔熺姸鎬�
- const code = res.data.code || HttpStatus.SUCCESS;
- // 鑾峰彇閿欒淇℃伅
- const msg = errorCode[code] || res.data.msg || errorCode['default'];
- // 浜岃繘鍒舵暟鎹垯鐩存帴杩斿洖
- if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
- return res.data;
- }
- if (code === 401) {
- // prettier-ignore
- if (!isRelogin.show) {
- isRelogin.show = true;
- ElMessageBox.confirm('鐧诲綍鐘舵�佸凡杩囨湡锛屾偍鍙互缁х画鐣欏湪璇ラ〉闈紝鎴栬�呴噸鏂扮櫥褰�', '绯荤粺鎻愮ず', {
- confirmButtonText: '閲嶆柊鐧诲綍',
- cancelButtonText: '鍙栨秷',
- type: 'warning'
- }).then(() => {
- isRelogin.show = false;
- useUserStore().logout().then(() => {
- location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index';
- });
- }).catch(() => {
- isRelogin.show = false;
- });
- }
- return Promise.reject('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�');
- } else if (code === HttpStatus.SERVER_ERROR) {
- console.log(msg);
- ElMessage({ message: msg, type: 'error' });
- return Promise.reject(new Error(msg));
- } else if (code === HttpStatus.WARN) {
- ElMessage({ message: msg, type: 'warning' });
- return Promise.reject(new Error(msg));
- } else if (code !== HttpStatus.SUCCESS) {
- ElNotification.error({ title: msg });
- return Promise.reject('error');
- } else {
- return Promise.resolve(res.data);
- }
- },
- (error) => {
- let { message } = error;
- if (message == 'Network Error') {
- message = '鍚庣鎺ュ彛杩炴帴寮傚父';
- } else if (message.includes('timeout')) {
- message = '绯荤粺鎺ュ彛璇锋眰瓒呮椂';
- } else if (message.includes('Request failed with status code')) {
- message = '绯荤粺鎺ュ彛' + message.substr(message.length - 3) + '寮傚父';
- }
- ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
- return Promise.reject(error);
- }
+ (res: AxiosResponse) => {
+ // 鍔犲瘑鍚庣殑 AES 绉橀挜
+ const keyStr = res.headers[encryptHeader];
+ // 鍔犲瘑
+ if (keyStr != null && keyStr != '') {
+ const data = res.data;
+ // 璇锋眰浣� AES 瑙e瘑
+ const base64Str = decrypt(keyStr);
+ // base64 瑙g爜 寰楀埌璇锋眰澶寸殑 AES 绉橀挜
+ const aesKey = decryptBase64(base64Str.toString());
+ // aesKey 瑙g爜 data
+ const decryptData = decryptWithAes(data, aesKey);
+ // 灏嗙粨鏋� (寰楀埌鐨勬槸 JSON 瀛楃涓�) 杞负 JSON
+ res.data = JSON.parse(decryptData);
+ }
+ // 鏈缃姸鎬佺爜鍒欓粯璁ゆ垚鍔熺姸鎬�
+ const code = res.data.code || HttpStatus.SUCCESS;
+ // 鑾峰彇閿欒淇℃伅
+ const msg = errorCode[code] || res.data.msg || errorCode['default'];
+ // 浜岃繘鍒舵暟鎹垯鐩存帴杩斿洖
+ if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
+ return res.data;
+ }
+ if (code === 401) {
+ // prettier-ignore
+ if (!isRelogin.show) {
+ isRelogin.show = true;
+ ElMessageBox.confirm('鐧诲綍鐘舵�佸凡杩囨湡锛屾偍鍙互缁х画鐣欏湪璇ラ〉闈紝鎴栬�呴噸鏂扮櫥褰�', '绯荤粺鎻愮ず', {
+ confirmButtonText: '閲嶆柊鐧诲綍',
+ cancelButtonText: '鍙栨秷',
+ type: 'warning'
+ }).then(() => {
+ isRelogin.show = false;
+ useUserStore().logout().then(() => {
+ location.href = import.meta.env.VITE_APP_CONTEXT_PATH + 'index';
+ });
+ }).catch(() => {
+ isRelogin.show = false;
+ });
+ }
+ return Promise.reject('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�');
+ } else if (code === HttpStatus.SERVER_ERROR) {
+ ElMessage({ message: msg, type: 'error' });
+ return Promise.reject(new Error(msg));
+ } else if (code === HttpStatus.WARN) {
+ ElMessage({ message: msg, type: 'warning' });
+ return Promise.reject(new Error(msg));
+ } else if (code !== HttpStatus.SUCCESS) {
+ ElNotification.error({ title: msg });
+ return Promise.reject('error');
+ } else {
+ return Promise.resolve(res.data);
+ }
+ },
+ (error: any) => {
+ let { message } = error;
+ if (message == 'Network Error') {
+ message = '鍚庣鎺ュ彛杩炴帴寮傚父';
+ } else if (message.includes('timeout')) {
+ message = '绯荤粺鎺ュ彛璇锋眰瓒呮椂';
+ } else if (message.includes('Request failed with status code')) {
+ message = '绯荤粺鎺ュ彛' + message.substr(message.length - 3) + '寮傚父';
+ }
+ ElMessage({ message: message, type: 'error', duration: 5 * 1000 });
+ return Promise.reject(error);
+ }
);
// 閫氱敤涓嬭浇鏂规硶
export function download(url: string, params: any, fileName: string) {
- downloadLoadingInstance = ElLoading.service({ text: '姝e湪涓嬭浇鏁版嵁锛岃绋嶅��', background: 'rgba(0, 0, 0, 0.7)' });
- // prettier-ignore
- return service.post(url, params, {
- transformRequest: [
- (params) => {
- return tansParams(params);
- }
- ],
- headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
- responseType: 'blob'
- }).then(async (resp) => {
- const isLogin = blobValidate(resp);
- if (isLogin) {
- const blob = new Blob([resp as any]);
+ downloadLoadingInstance = ElLoading.service({ text: '姝e湪涓嬭浇鏁版嵁锛岃绋嶅��', background: 'rgba(0, 0, 0, 0.7)' });
+ // prettier-ignore
+ return service.post(url, params, {
+ transformRequest: [
+ (params: any) => {
+ return tansParams(params);
+ }
+ ],
+ headers: { 'Content-Type': 'application/x-www-form-urlencoded' },
+ responseType: 'blob'
+ }).then(async (resp: any) => {
+ const isLogin = blobValidate(resp);
+ if (isLogin) {
+ const blob = new Blob([resp]);
FileSaver.saveAs(blob, fileName);
- } else {
- const resText = await resp.data.text();
- const rspObj = JSON.parse(resText);
- const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
- ElMessage.error(errMsg);
- }
- downloadLoadingInstance.close();
- }).catch((r) => {
- console.error(r);
- ElMessage.error('涓嬭浇鏂囦欢鍑虹幇閿欒锛岃鑱旂郴绠$悊鍛橈紒');
- downloadLoadingInstance.close();
- });
+ } else {
+ const resText = await resp.data.text();
+ const rspObj = JSON.parse(resText);
+ const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
+ ElMessage.error(errMsg);
+ }
+ downloadLoadingInstance.close();
+ }).catch((r: any) => {
+ console.error(r);
+ ElMessage.error('涓嬭浇鏂囦欢鍑虹幇閿欒锛岃鑱旂郴绠$悊鍛橈紒');
+ downloadLoadingInstance.close();
+ });
}
// 瀵煎嚭 axios 瀹炰緥
export default service;
--
Gitblit v1.9.3