import axios from 'axios' import { Message, MessageBox } from 'element-ui' import { removeAuth } from '@/utils/auth' // import qs from 'qs' import Lockr from 'lockr' var showLoginMessageBox = false axios.defaults.headers.post['Content-Type'] = 'application/json;charset=UTF-8' // 创建axios实例 console.log(process.env) const service = axios.create({ baseURL: process.env.BASE_API, // api 的 base_url // baseURL: 'http://192.168.0.107:8080/api', timeout: 600000 // 请求超时时间 }) // request拦截器 service.interceptors.request.use( config => { const flag = config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('application/json') !== -1 if (!flag) { const mult = config.headers['Content-Type'] && config.headers['Content-Type'].indexOf('multipart/form-data') !== -1 if (mult) { config.data = config.data } else { // config.data = qs.stringify(config.data) config.data = config.data } } config.headers['token'] = Lockr.get('Admin-Token') let url = config.url url += url.indexOf('?') >= 0 ? '&' : '?' url += 'r=' + (Math.random() * 100000 + 1) config.url = url return config }, error => { console.log(error) // Do something with request error return Promise.reject(error) } ) // response 拦截器 service.interceptors.response.use( response => { /** * code为非200是抛错 */ const res = response.data if (response.status === 200 && response.config.responseType === 'blob') { // 文件类型特殊处理 return response } else if (res && !res.ErrorCode) { return response } else if (res.ErrorCode !== 0) { // 302登录已失效 if (res.ErrorCode === 302 || res.ErrorCode === 401) { if (!showLoginMessageBox) { showLoginMessageBox = true MessageBox.confirm( '你已被登出,请重新登录', '确定登出', { showCancelButton: false, showClose: false, confirmButtonText: '重新登录', type: 'warning', callback: action => { showLoginMessageBox = false if (action === 'confirm') { removeAuth().then(() => { let rout = window.location.href let a = rout.lastIndexOf('/') rout = rout.substring(0, a) window.location.href = rout + '/login' // location.reload() // 为了重新实例化vue-router对象 避免bug }).catch(() => { location.reload() }) } } } ) } } else if (res.ErrorCode === 200) { return response } else { if (res.Message) { Message({ message: res.Message, type: 'error' }) } } return Promise.reject(res) } else { return res } }, error => { Message({ message: '网络请求失败,请稍候再试', type: 'error' }) return Promise.reject(error) } ) export default service