From 28ea77ec45bd860e23c0edfb6ee81a7d6599b25f Mon Sep 17 00:00:00 2001
From: web <candymxq888@outlook.com>
Date: 星期六, 12 四月 2025 19:11:02 +0800
Subject: [PATCH] fix:修改配置文件

---
 src/utils/requestPolling.js |  112 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 112 insertions(+), 0 deletions(-)

diff --git a/src/utils/requestPolling.js b/src/utils/requestPolling.js
new file mode 100644
index 0000000..4bd710a
--- /dev/null
+++ b/src/utils/requestPolling.js
@@ -0,0 +1,112 @@
+import axios from 'axios'
+import { ElNotification , ElMessageBox, ElMessage, ElLoading } from 'element-plus'
+import {getToken, removeToken} from '@/utils/auth'
+import errorCode from '@/utils/errorCode'
+import { tansParams, blobValidate } from '@/utils/ruoyi'
+import cache from '@/plugins/cache'
+// import { saveAs } from 'file-saver'
+// import useUserStore from '@/store/modules/user'
+
+// let downloadLoadingInstance;
+// 是否显示重新登录
+export let isRelogin = { show: false };
+
+axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8'
+
+export const requestPolling = axios.create({
+    // axios中请求配置有baseURL选项,表示请求URL公共部分
+    //baseURL: import.meta.env.VITE_APP_BASE_API,
+    baseURL: import.meta.env.VITE_APP_PUBLIC_REQUEST_API,
+    // 超时
+    timeout: 5000
+})
+
+
+// request拦截器
+requestPolling.interceptors.request.use((config) => {
+    // 是否需要设置 token
+    const isToken = (config.headers || {}).isToken === false
+    // 是否需要防止数据重复提交
+    const isRepeatSubmit = (config.headers || {}).repeatSubmit === false
+    if (getToken() && !isToken) {
+        config.headers['token'] =  getToken() // 让每个请求携带自定义token 请根据实际情况自行修改
+    }
+    // if (localStorage.getItem('token')) {
+    //   config.headers!['token'] = localStorage.getItem('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 requestSize = Object.keys(JSON.stringify(requestObj)).length; // 请求数据大小
+        const limitSize = 5 * 1024 * 1024; // 限制存放数据5M
+        if (requestSize >= limitSize) {
+            console.warn(`[${config.url}]: ` + '请求数据大小超出允许的5M限制,无法进行防重复提交验证。')
+            return config;
+        }
+        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 = 2000;                       // 间隔时间(ms),小于此时间视为重复提交
+            // if (s_data === requestObj.data && requestObj.time - s_time < interval && s_url === requestObj.url) {
+            //   const message = '数据正在处理,请勿重复提交';
+            //   console.warn(`[${s_url}]: ` + message)
+            //   return Promise.reject(new Error(message))
+            // } else {
+            cache.session.setJSON('sessionObj', requestObj)
+            // }
+        }
+    }
+    return config
+}, error => {
+    console.log(error)
+    Promise.reject(error)
+})
+
+// 响应拦截器
+requestPolling.interceptors.response.use(res => {
+        // 未设置状态码则默认成功状态
+        const code = res.data.code || 200;
+        // 获取错误信息
+        const msg = errorCode[code] || res.data.msg || errorCode['default']
+        // 二进制数据则直接返回
+        if (res.request.responseType ===  'blob' || res.request.responseType ===  'arraybuffer') {
+            return res.data
+        }
+        if (code === 401) {
+            if (!isRelogin.show) {
+                isRelogin.show = true;
+                ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
+                    isRelogin.show = false;
+                    removeToken()
+                    window.location.reload();
+                }).catch(() => {
+                    isRelogin.show = false;
+                });
+            }
+            return Promise.reject('无效的会话,或者会话已过期,请重新登录。')
+        } else if (code === 500) {
+            return Promise.reject(new Error(msg))
+        } else if (code === 601) {
+            return Promise.reject(new Error(msg))
+        } else if (code !== 200) {
+            return Promise.reject('error')
+        } else {
+            return  Promise.resolve(res.data)
+        }
+    }
+)
+

--
Gitblit v1.9.3