| | |
| | | '/api/updatePhone' |
| | | ] |
| | | |
| | | <<<<<<< HEAD |
| | | // ✅ 请求缓存和防抖管理 |
| | | const pendingRequests = new Map(); // 存储正在等待的请求 |
| | | const requestCache = new Map(); // 存储缓存的请求结果 |
| | | |
| | | ======= |
| | | >>>>>>> master |
| | | const request = config => { |
| | | const isToken = (config.headers || {}).isToken === false |
| | | config.header = config.header || {} |
| | |
| | | config.url = url |
| | | } |
| | | |
| | | <<<<<<< HEAD |
| | | // ✅ 生成唯一请求标识,包含 URL、方法和参数 |
| | | const requestKey = `${config.url}_${config.method}_${JSON.stringify(config.data || {})}`; |
| | | |
| | |
| | | }); |
| | | } |
| | | |
| | | export default request; |
| | | export default request; |
| | | ======= |
| | | // ✅ 判断是否需要加密 |
| | | const isEncryptApi = encryptApiList.includes(config.url) |
| | | |
| | | // 登录接口示例(假如你的登录接口是 /api/login) |
| | | 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) => { |
| | | 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('响应解析失败:', e) |
| | | toast('响应数据处理失败') |
| | | reject('响应数据处理失败') |
| | | return |
| | | } |
| | | |
| | | if (config.responseType === 'arraybuffer') { |
| | | 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 { |
| | | 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) |
| | | }) |
| | | }) |
| | | } |
| | | |
| | | export default request |
| | | >>>>>>> master |