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