import Axios from 'axios' import store from '@/store' import { Toast, Dialog } from 'vant' import { getLocalStorage } from '@/utils/storage' import { webParamsTransmit } from '@/utils/tools' import * as list from '@/utils/list' import Config from 'submodule/utils/config' const Base64 = require('js-base64').Base64 const axios = Axios.create({ timeout: 30000, baseURL: process.env.VUE_APP_BASE_URL }) axios.interceptors.request.use( config => { if (config.url.includes('user/register/register_v2')) { // 默认微信公众号 let service = 'mwxservice' if (store.state.app.inMiniprogram) { // 微信小程序 service = 'miniprogram' } const headers = { Authorization: 'Basic ' + Base64.encode(service + ':123456'), Identifier: Base64.encode(service + ':org:user:role') } config.headers = headers } else { config.headers.Authorization = 'Bearer ' + store.getters.mwxtoken config.headers.Identifier = store.getters.mwxidntf } store.getters.debug && console.log('axios.interceptors.request.use...', config) // 传给接口的版本号 config.headers.var = Config.vers.cur return config }, error => { return Promise.reject(error) } ) axios.interceptors.response.use( response => { store.getters.debug && console.log('axios.interceptors.response.use...', response) if (response.config.responseType === 'blob') { return response.data } if (response.data.code === 0) { if (response.config.url.includes('pay/member/upload_org_pic')) { Toast(response.data.message) } return Promise.resolve(response.data.data) } else if (response.data.code === 2814) { if (getLocalStorage('appType') == 1) { Toast(response.data.message) webParamsTransmit(1) } else { Toast(response.data.message) store.dispatch('clear').then(() => { location.reload() // 为了重新实例化vue-router对象 避免bug }) } } else if ((response.data.code === 3012 && response.data.message.includes('校验码错误')) || response.data.code == 2223) { Toast(response.data.message) return Promise.resolve(response.data) } else if (response.data.code === 8901 && !response.config.url.includes('truck_by_platform_driver')) { if (response.data.data && response.data.data.type == null) { Toast(response.data.message) return Promise.reject(response.data.message) } else { return Promise.resolve(response.data.data) } } else { if (response.config.url.includes('pay/pay/wxpay')) { Toast(response.data.message) this.$router.replace('perpayOrder') } else if (response.config.url.includes('user/truck_driver_remove/remove')) { setTimeout(() => { Dialog.alert({ title: '温馨提示', message: response.data.message }).then(() => { }) }, 0) } else if (list.notMsgArrayInterface.some(item => response.config.url.includes(item))) { // 返回报错接口里所有信息,方便根据错误码定制化显示弹窗提示 return Promise.reject(response.data) } else { Toast(response.data.message) } return Promise.reject(response.data.message) } }, err => { if (err && err.response) { switch (err.response.status) { case 400: err.message = '请求错误(400)'; break case 401: err.message = '未授权,请重新登录(401)'; break case 403: err.message = '拒绝访问(403)'; break case 404: err.message = '请求出错(404)'; break case 408: err.message = '请求超时(408)'; break case 500: err.message = '服务器错误(500)'; break case 501: err.message = '服务未实现(501)'; break case 502: err.message = '网络错误(502)'; break case 503: err.message = '服务不可用(503)'; break case 504: err.message = '网络超时(504)'; break case 505: err.message = 'HTTP版本不受支持(505)'; break default: err.message = `连接出错(${err.response.status})!` } } else { err.message = '连接服务器失败!' } Toast(err.message) return Promise.reject(err.message) } ) export default (urlObj, data = {}, method = 'POST', responseType = 'json') => { store.commit('webapi/set', { urlObj, value: Config.enums.request.before.storeValue }) return axios({ url: urlObj.realUrl, method, data, responseType }).then(res => { store.commit('webapi/set', { urlObj, value: Config.enums.request.sus.storeValue }) return res }).catch(err => { store.commit('webapi/set', { urlObj, value: Config.enums.request.err.storeValue }) return Promise.reject(err.message) }) }