import store from '@/store' import config from '@/config' import { getAccessToken, getRefreshToken, setToken, getExpiresTime } from '@/utils/auth' import { refreshToken } from '@/api/login' import errorCode from '@/utils/errorCode' import { toast, showConfirm, tansParams } from '@/utils/common' var that = this let timeout = 10000 const baseUrl = config.baseUrl + config.baseApi; // 请求队列 let requests = [] // 是否正在刷新中 let isRefreshing = false const request = config => { // 是否需要设置 token const isToken = (config.headers || {}).isToken === false config.header = config.header || {} var hastoken = getAccessToken() if (hastoken != null && !isToken) { config.header['Authorization'] = 'Bearer ' + hastoken } // 设置租户 TODO 芋艿:强制 1 先 config.header['tenant-id'] = '1'; // get请求映射params参数 if (config.params) { let url = config.url + '?' + tansParams(config.params) url = url.slice(0, -1) config.url = url } return new Promise((resolve, reject) => { uni.request({ method: config.method || 'get', timeout: config.timeout || timeout, url: config.baseUrl || baseUrl + config.url, data: config.data, // header: config.header, header: config.header, dataType: 'json' }).then(async response => { let [error, res] = response if (error) { toast('后端接口连接异常') reject('后端接口连接异常') return } const code = res.data.code || 200 const msg = errorCode[code] || res.data.msg || errorCode['default'] if (code === 401) { //token无效或已过期 // if (!isRefreshing) { // // 是否已经执行刷新 // isRefreshing = true // let token = getAccessToken(); // 获取到过期的token // try { // refreshToken({ // refreshToken: getRefreshToken() // 刷新token的令牌存在token的对象里面,需要传给后端 // }).then(reshRespore => { // // console.log(reshRespore, // // 'reshResporereshResporereshRespore'); // // 请求成功把新的token存到本地 // setToken(reshRespore.data); // // 已经刷新了token,将所有队列中的请求进行重试 // requests.forEach((item) => item(reshRespore.data // .accessToken)) // // requests = [] // // // 每个接口请求都要存入队列,等刷新完以后都需要执行 // // return new Promise((resolve) => { // // // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行 // // requests.push((token) => { // // //这一步一定要有,刷新token,因为存入的信息是旧的token // // response.config.header[ // // 'Authorization'] = // // 'Bearer ' + token; // // resolve(uni.$u.http.request(response // // .config)) //执行请求 // // }) // // that.$forceUpdate() // // }) // requests = [] // // 刷新完token后重新调用上一次的接口 // resolve(uni.$u.http.request(config)) // 执行请求 // if (reshRespore.code == 400) { // showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => { // if (res.confirm) { // uni.navigateTo({ // url: '/pages/login' // }) // } // }); // } // }) // } catch { // uni.$u.toast('未知错误') showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => { if (res.confirm) { uni.navigateTo({ url: '/pages/login' }) } }); // } finally { // // 请求成功,开启刷新标识 // isRefreshing = false // } // } else { // // 添加到请求队列中 // requests.push(token => { // config.header['Authorization'] = 'Bearer ' + token; // resolve(uni.$u.http.request(config)) // 执行请求 // }) // } } else if (code === 500) { toast(msg) reject('500') } else if (code !== 200) { toast(msg) reject(code) } resolve(res.data) }) .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