import axios from 'axios' import qs from 'qs' import Vue from 'vue' import store from '@/store' import Router from '@/router' import { Message, MessageBox } from 'element-ui' import { getToken, removeAllToken } from '@/utils/auth' const service = axios.create({ baseURL: process.env.BASE_API, // baseURL:'https://oa.g107.com', timeout: 20000, headers: { 'Content-Type': 'application/x-www-form-urlencoded', "Cache-Control": 'no-cache', 'pl':'b' }, transformRequest: [function(data) { return qs.stringify(data) }] }) service.interceptors.request.use( config => { if (getToken()) { config.headers['A-TOKEN'] = getToken() } return config }, error => { Promise.reject(error) } ) // 50008:非法的token; 50012:其他客户端登录了; 401:Token 过期了; 2000 考勤系统的token过期 var bool = true // 五秒执行一次变量 service.interceptors.response.use( response => { const res = response.data if (res.code === 401) { MessageBox.confirm('你已被登出,请重新登录', '确定登出', { confirmButtonText: '重新登录', showClose: false, closeOnClickModal: false, closeOnPressEscape: false, showCancelButton: false, type: 'warning' }).then(() => { store.dispatch('LogOut') }).catch(() => { store.dispatch('LogOut') }) return Promise.reject(response) } else if (res.code === 0) { if (res.msg == '') { return } if (bool) { Message({ message: res.msg, duration: 1 * 3000 }) bool = false setTimeout(() => { bool = true }, 5000) } else {} return Promise.reject(response) } else if (res.code === 2001) { Message({ message: res.msg }) return Promise.reject(response) } else if (res.code === 999) { Message({ message: res.msg }) return Promise.reject(response) } else if (res.code === 3000) { Message({ message: res.msg }) return Promise.reject(response) } else if (res.code === 4444) { Message({ message: res.msg }) return Promise.reject(response) } else { return response } }, error => { if (error.message == 'interrupt') { // 是强制中断请求就拦截报错 return Promise.reject(error) } // 五秒内只执行一次 if (bool) { Message({ message: error.message == 'timeout of 20000ms exceeded' ? '请求服务器超时,请稍后重试' : '请求网络错误,请稍后重试', duration: 1 * 2000, type: 'error' }) bool = false setTimeout(() => { bool = true }, 5000) } else { console.log('不执行') } return Promise.reject(error) } ) // 接口再次封装 var CancelToken = axios.CancelToken // 中断请求 Vue.$axiosUserRequestList = [] export default (type, url, data, versions, Content_Type, transform) => { var Accept, Token, ContentType, transformRequest = '' switch (versions) { case '': Accept = 'application/json, text/plain, */*' break case undefined: Accept = 'application/json, text/plain, */*' break case 'v2': Accept = 'application/vnd.test.v2+json' break case 'v3': Accept = 'application/vnd.test.v3+json' break case 'v4': Accept = 'application/vnd.test.v4+json' break } if (Content_Type == '' || Content_Type == undefined) { ContentType = 'application/x-www-form-urlencoded' } else { ContentType = Content_Type } if (transform) { transformRequest = transform } return new Promise((resolve, reject) => { // 封装ajax var aa = { method: type, url: url, headers: { 'Accept': Accept, 'Content-Type': ContentType, }, cancelToken: new CancelToken(c => { // 强行中断请求要用到的 Vue.$axiosUserRequestList.push(c) }) } var json = (type == 'get') ? Object.assign(aa, { params: data }, transformRequest) : Object.assign(aa, { data: data }, transformRequest) var ajax = service(json).then(res => { resolve(res) }).catch(error => { // 中断请求和请求出错的处理 if (error.message == 'interrupt') { return } else { reject(error) } }) return ajax }) }