import * as base64 from "base-64" import store from '@/store' import config from '@/config' import { getToken } from '@/utils/auth' import errorCode from '@/utils/errorCode' import { toast, showConfirm, tansParams } from '@/utils/common' let timeout = 10000 const baseUrl = config.baseUrl // const Clientid = config.Clientid var confirmflag = config.confirmflag // 获取账号密码 var newObj=JSON.parse(JSON.stringify(uni.getStorageSync('account'))) var username=newObj.username; var password=newObj.password; if(newObj){ password=base64.decode(newObj.password); } var captchaEnabled=newObj.captchaEnabled; const request = config => { // 是否需要设置 token const isToken = (config.headers || {}).isToken === false config.header = config.header || {} if (getToken() && !isToken) { config.header['Authorization'] = 'Bearer ' + getToken(); // config.header['Clientid'] = Clientid } // config.header['Access-Control-Allow-Origin'] = '*' // 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, dataType: 'json' }).then(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) { uni.showLoading({ title: '加载中' }); if(confirmflag){ // 利用 return 终止函数继续运行 return false; } confirmflag = true; setTimeout(function(){ var autologin=store.state.user.autologin; if(username&&password&&!captchaEnabled&&autologin){ // 自动登录 var loginForm={ username:username, password:password, strfrom:'request' } store.dispatch('Logines', loginForm).then((res) => { setTimeout(function(){ store.dispatch('GetInfo').then(res => { uni.hideLoading() // 刷新当前页 var routes = getCurrentPages() // console.log(routes,1) if(routes.length){ var route ='/'+routes[routes.length - 1].route; var fullPath =routes[routes.length - 1].options; // console.log(fullPath,23) var options={} if(JSON.stringify(fullPath)!='{}'){ if(fullPath.data){ options=JSON.parse(decodeURIComponent(fullPath.data)) route=route+'?data='+encodeURIComponent(JSON.stringify(options)) }else{ //正常循环 var keystr='?' Object.keys(fullPath).some((key,idx) => { if(idx==0){ keystr+=key+'='+fullPath[key] }else{ keystr+='&'+key+'='+fullPath[key] } }) route=route+keystr } } uni.redirectTo({ url:route }) }else{ this.$tab.reLaunch('/pages/index/index') } }) },500) }) }else{ uni.hideLoading() showConfirm('登录状态已过期,您可以继续留在该页面,或者重新登录?').then(res => { if (res.confirm) { store.dispatch('LogOut').then(res => { uni.reLaunch({ url: '/pages/login' }) }) } }) } confirmflag = false; },2000) reject('无效的会话,或者会话已过期,请重新登录。') } 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