import Global from '../utils/global.js' let baseUrl=Global.baseUrl let tokenUrl = `${baseUrl}/blade-auth/oauth/token?tenantId=000000&username=admin&password=21232f297a57a5a743894a0e4a801fc3&grant_type=password&scope=all&type=account` let myConfig={} const refreshToken = ()=>{ return new Promise((resolve,reject)=>{ uni.request({ url: tokenUrl, method: "POST", header:{ Authorization:"Basic c2FiZXI6c2FiZXJfc2VjcmV0" }, success: (res)=>{ let token=res.data.token_type+" "+res.data.access_token let tokenExprieIn=res.data.expires_in let tokenExpireTime = Date.now() + tokenExprieIn * 1000 let data=JSON.stringify({"token":token,"tokenExpireTime":tokenExpireTime}) uni.setStorage({key: 'token',data: data}) resolve(token) }, fail: (err)=>{ reject(err) } }) }) } function getToken () { let tokenObj = {} try { tokenObj = uni.getStorageSync("token") tokenObj = tokenObj ? JSON.parse(tokenObj) : {} } catch(e) { console.error('get token from storage error') } return tokenObj } const install = async (Vue, vm) => { // 此为自定义配置参数,具体参数见上方说明 Vue.prototype.$u.http.setConfig({ baseUrl: baseUrl, loadingText: '努力加载中~', loadingTime: 800, header: { 'content-type': 'application/json;charset=UTF-8' }, }); // 请求拦截,配置Token等参数 Vue.prototype.$u.http.interceptor.request = (async (config) => { const tokenObj = getToken() config.header['Blade-Auth'] = tokenObj.token if (tokenObj.token && tokenObj.tokenExpireTime) { const now = new Date() + 0; if (now >= tokenObj.tokenExpireTime) { config.header['Blade-Auth']= await refreshToken() } } else { config.header['Blade-Auth'] = await refreshToken() } return config; }) Vue.prototype.$u.http.interceptor.response = (async (res) => { return new Promise((resolve,reject)=>{ if(res.code == 200) { return resolve(res.data); } else if(res.code == 401) { uni.showToast({ title: '授权已过期,请重新进入', icon: 'none', }) return reject(res); } else if(res.code == 500){ uni.showToast({ title:'服务器异常', icon:'none' }) return reject(res); } else { // 如果返回false,则会调用Promise的reject回调, // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值 return reject(res); } }); }) // Vue.prototype.$u.http.interceptor.response = async (res) => { // if(res.code == 200) { // return res.data; // }else if(res.code==401){ // uni.showToast({ // title:'授权已过期,请重新进入小程序', // icon:'none', // }) // return false // } // else if(res.code==500){ // uni.showToast({ // title:'服务器异常', // icon:'none' // }) // } // else { // console.log(res) // // 如果返回false,则会调用Promise的reject回调, // // 并将进入this.$u.post(url).then().catch(res=>{})的catch回调中,res为服务端的返回值 // return false; // } // } } export default { install }