import Request from 'luch-request' import util from '../../utils/util.js' // let baseURL = 'http://192.168.1.244:9527/' let baseURL = 'https://park.58fo.com/api/' const getTokenUrl=()=>{ let tokenObj=uni.getStorageSync("tokenObj") return baseURL+`blade-auth/oauth/token?tenantId=${tokenObj.tenantId}&password=${tokenObj.password}&username=${tokenObj.username}` } //获取token const getTokenStorage = () => { let token = '' try { token = uni.getStorageSync('token') } catch (e) { } return token } //不需要加上Blade-Auth的url const WHiTE_LIST=['agency/agency/getAgencyTenantList'] const http = new Request() http.setConfig((config) => { /* 设置全局配置 */ config.baseURL = baseURL /* 根域名不同 */ config.header = { ...config.header, } return config }) http.interceptors.request.use((config) => { /* 请求之前拦截器。可以使用async await 做异步操作 */ if (!WHiTE_LIST.includes(config.url)) { config.header = { ...config.header, "Blade-Auth": getTokenStorage() } } return config }, (config) => { return Promise.reject(config) }) // 是否正在刷新的标记 let isRefreshing = false // 重试队列,每一项将是一个待执行的函数形式 let requests = [] http.interceptors.response.use(async (response) => { /* 请求之后拦截器。可以使用async await 做异步操作 */ //toekn过期处理 if (response.data.code == 401) { let {config} = response if (!isRefreshing) { isRefreshing = true let token = uni.getStorageSync('token') let url=getTokenUrl() if (url.indexOf('tenantId=undefined')>0) { uni.showModal({ content:"会话过期,请重新登录", title:"提示", showCancel:false, success(resp) { uni.clearStorageSync() uni.reLaunch({ url:"/pages/login/login" }) } }) return } let [,res] = await uni.request({ url, method: 'POST', header:{ Authorization:"Basic c2FiZXI6c2FiZXJfc2VjcmV0" }, }) //否则保存新的token token=res.data.token_type+" "+res.data.access_token uni.setStorageSync('token', token) requests.forEach(cb => cb()) // 重试完了清空这个队列 requests = [] isRefreshing = false return http.request(config) } else { return new Promise((resolve) => { // 将resolve放进队列,用一个函数形式来保存,等token刷新后直接执行 requests.push(() => { resolve(http.request(config)) }) }) } } //200 返回数据成功 0 上传文件成功 400 没有相关数据 || response.data.buildingCount 数据统计的~晕~~~~ if (response.data.code == 200 || response.data.buildingCount!=undefined || response.data.code ==400 || response.data.code ==0 || response.data.access_token!=undefined) { return response.data }else{ return Promise.reject(response) } }, (err) => { // 请求错误做点什么 uni.showToast({ icon: 'none', position: 'bottom', title: '网络异常' }) return Promise.reject(err) }) export { http }