import Vue from 'vue' import Axios from 'axios' import store from '@/store' import Config from 'submodule/utils/config' const Base64 = require('js-base64').Base64 const message = (msg) => { if (Vue.prototype.$toast) { Vue.prototype.$toast(msg) } else if (Vue.prototype.$message) { Vue.prototype.$message({ message: msg, type: 'error', duration: 3 * 1000 }) } } 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 || store.getters.woptoken) config.headers.Identifier = (store.getters.mwxidntf || store.getters.wopidntf) } 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') { if (response.status === 200) { return response.data } else { const msg = '文件导出失败!' message(msg) return Promise.reject(msg) } } // 登录已超时,请重新登录 if (response.data.code === 2814) { message(response.data.message) store.dispatch('clear').then(() => { location.reload() // 为了重新实例化vue-router对象 避免bug }) } if (response.data.code === 0) { if (response.config.url.includes('pay/member/upload_org_pic')) { message(response.data.message) } return Promise.resolve(response.data.data) } else { message(response.data.message) return Promise.reject(response.data) } }, 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 = '连接服务器失败!' } message(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: urlObj.responseType || 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) }) }