From fe97f78b9a343ee9fa45a3531d03d73dcd1df31b Mon Sep 17 00:00:00 2001 From: qx <1084500556@qq.com> Date: 星期三, 06 八月 2025 10:15:12 +0800 Subject: [PATCH] :测试提交“ --- utils/request.js | 138 ++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 138 insertions(+), 0 deletions(-) diff --git a/utils/request.js b/utils/request.js index 14829cd..8fa9fbe 100644 --- a/utils/request.js +++ b/utils/request.js @@ -19,6 +19,13 @@ '/api/updatePhone' ] +<<<<<<< HEAD +// 鉁� 璇锋眰缂撳瓨鍜岄槻鎶栫鐞� +const pendingRequests = new Map(); // 瀛樺偍姝e湪绛夊緟鐨勮姹� +const requestCache = new Map(); // 瀛樺偍缂撳瓨鐨勮姹傜粨鏋� + +======= +>>>>>>> master const request = config => { const isToken = (config.headers || {}).isToken === false config.header = config.header || {} @@ -40,6 +47,136 @@ config.url = url } +<<<<<<< HEAD + // 鉁� 鐢熸垚鍞竴璇锋眰鏍囪瘑锛屽寘鍚� URL銆佹柟娉曞拰鍙傛暟 + const requestKey = `${config.url}_${config.method}_${JSON.stringify(config.data || {})}`; + + // 鉁� 妫�鏌ョ紦瀛� + if (requestCache.has(requestKey)) { + const cached = requestCache.get(requestKey); + if (cached.expiry > Date.now()) { + return Promise.resolve(cached.response); // 杩斿洖缂撳瓨缁撴灉 + } else { + requestCache.delete(requestKey); // 缂撳瓨杩囨湡锛屽垹闄� + } + } + + // 鉁� 闃叉姈閫昏緫锛氬鏋滅煭鏃堕棿鍐呮湁鐩稿悓璇锋眰锛屽彇娑堜箣鍓嶇殑 + if (pendingRequests.has(requestKey)) { + clearTimeout(pendingRequests.get(requestKey).timer); // 娓呴櫎涔嬪墠鐨勫畾鏃跺櫒 + } + + // 鉁� 鍒ゆ柇鏄惁闇�瑕佸姞瀵� + const isEncryptApi = encryptApiList.includes(config.url); + const isLoginRequest = config.url.includes('/login'); + + let data = config.data; + if (isEncryptApi) { + console.log('[鍔犲瘑鍓嶇殑data]', config.data); + data = encrypt(JSON.stringify(config.data)); + } else if (isLoginRequest) { + data = JSON.stringify(config.data); + } else { + data = config.data; + } + + return new Promise((resolve, reject) => { + // 鉁� 璁剧疆闃叉姈瀹氭椂鍣� + const timer = setTimeout(() => { + pendingRequests.delete(requestKey); // 璇锋眰鍙戦�佸悗绉婚櫎 + + uni.request({ + method: config.method || 'get', + timeout: config.timeout || timeout, + url: config.baseUrl || baseUrl + config.url, + data: data, + header: config.header, + responseType: config.responseType || 'text', + dataType: config.responseType === 'arraybuffer' ? undefined : 'json' + }).then(response => { + let [error, res] = response; + if (error) { + toast('鍚庣鎺ュ彛杩炴帴寮傚父'); + reject('鍚庣鎺ュ彛杩炴帴寮傚父'); + return; + } + + let resData; + try { + if (isEncryptApi) { + const decrypted = decrypt(res.data); + resData = JSON.parse(decrypted); + } else if (isLoginRequest) { + resData = typeof res.data === 'string' ? JSON.parse(res.data) : res.data; + } else { + resData = res.data; + } + } catch (e) { + console.error('鍝嶅簲瑙f瀽澶辫触:', e); + toast('鍝嶅簲鏁版嵁澶勭悊澶辫触'); + reject('鍝嶅簲鏁版嵁澶勭悊澶辫触'); + return; + } + + if (config.responseType === 'arraybuffer') { + // 鉁� 缂撳瓨 arraybuffer 绫诲瀷鍝嶅簲 + requestCache.set(requestKey, { + response: resData, + expiry: Date.now() + 5000 // 缂撳瓨 5 绉� + }); + resolve(resData); + return; + } + + const code = resData.code || 200; + const msg = errorCode[code] || resData.msg || errorCode['default']; + + if (code === 401) { + showConfirm('鐧诲綍鐘舵�佸凡杩囨湡锛屾偍鍙互缁х画鐣欏湪璇ラ〉闈紝鎴栬�呴噸鏂扮櫥褰�?').then(res => { + if (res.confirm) { + store.dispatch('LogOut').then(() => { + uni.reLaunch({ url: '/pages/login' }); + }); + } + }); + reject('鏃犳晥鐨勪細璇濓紝鎴栬�呬細璇濆凡杩囨湡锛岃閲嶆柊鐧诲綍銆�'); + } else if (code === 500) { + toast(msg); + reject(resData); + } else if (code !== 200) { + toast(msg); + reject(resData); + } else { + // 鉁� 缂撳瓨鎴愬姛鍝嶅簲 + requestCache.set(requestKey, { + response: resData, + expiry: Date.now() + 5000 // 缂撳瓨 5 绉� + }); + resolve(resData); + } + }).catch(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) + '寮傚父'; + } + toast(message); + reject(error); + }).finally(() => { + // 鉁� 娓呯悊 pendingRequests + pendingRequests.delete(requestKey); + }); + }, 500); // 鉁� 闃叉姈鏃堕棿 500ms + + pendingRequests.set(requestKey, { timer }); + }); +} + +export default request; +======= // 鉁� 鍒ゆ柇鏄惁闇�瑕佸姞瀵� const isEncryptApi = encryptApiList.includes(config.url) @@ -133,3 +270,4 @@ } export default request +>>>>>>> master -- Gitblit v1.8.0