import axios from 'axios' import { Message, MessageBox } from 'element-ui' import store from '@/store' import Router from '@/router' import { getCourseId } from '@/utils/auth' import { getLocal, removeAllToken } from '@/utils/auth' import qs from 'qs' import Vue from 'vue' const service = axios.create({ // baseURL: process.env.BASE_API, baseURL:'https://oa.g107.com', // baseURL:'https://3g954g5149.picp.vip', // baseURL:'http://192.168.0.66:8081', timeout: 20000, headers: { 'Content-Type': 'application/x-www-form-urlencoded', "Cache-Control": 'no-cache', }, // transformRequest: [function(data) { // return qs.stringify(data) // }] }) service.interceptors.request.use( config => { 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 } Message({ message: res.message }) return Promise.reject(response) } else if (res.code === 999) { Message({ message: res.message }) return Promise.reject(response) } else if (res.code === 2) { Message({ message: res.message }) return Promise.reject(response) } else if (res.code === 0) { Message({ message: res.message }) return Promise.reject(response) } else if (res.code === 3) { Message({ message: res.message }) 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 }, 10000) } else { console.log('不执行') } return Promise.reject(error) } ) // 接口再次封装 var CancelToken = axios.CancelToken // 中断请求 Vue.$axiosUserRequestList = [] export default (type, url, data, versions, Content_Type, transform,isToken) => { if(!getCourseId()){ console.log('同浏览器下公道云8.0PC退出登录导致课程营销系统报错:系统异常') // return false } 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' ContentType = 'application/json' } else { ContentType = Content_Type } if (transform) { transformRequest = transform } if (getLocal('Course-Token')) { Token = getLocal('Course-Token'); } if(isToken){ Token=isToken } return new Promise((resolve, reject) => { // 封装ajax var aa = { method: type, url: url, headers: { 'Accept': Accept, 'Content-Type': ContentType, 'A-TOKEN':Token }, cancelToken: new CancelToken(c => { // 强行中断请求要用到的 Vue.$axiosUserRequestList.push(c) }) } var json = (type == 'get') ? Object.assign(aa, { params: data }) : Object.assign(aa, { data: data }) // 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 }) }