import router from '@/router' import axios from 'axios' import qs from 'qs' import Vue from 'vue' import { getWxToken, setWxToken, openError } from '@/utils/auth' import { Dialog, Notify ,Toast } from 'vant' Vue.use(Dialog).use(Notify) let pl = 'a' if (window.plus) { if (navigator.userAgent.indexOf('Android') > 0) { pl = 'a' } else { pl = 'i' } } else { pl = 'b' } let url = ''; const request = axios.create({ // baseURL: process.env.BASE_API, baseURL: 'https://oa.g107.com', timeout: 20000, headers: { 'Content-Type': 'application/x-www-form-urlencoded', 'pl': pl }, }) var bool = true; //五秒执行一次变量 request.interceptors.request.use( config => { // url = config.url; // if (getWxToken()) { // config.headers['A-Token'] = getWxToken() // } return config }, error => { Promise.reject(error) } ) request.interceptors.response.use( response => { if (response.data.code === 0) {//请求失败 Notify({ message: response.data.message, color: '#ad0000', background: '#d1d1d1', }); return Promise.reject('error') } else if (response.data.code === 2) {//未登录 localStorage.removeItem('Wx-Token') localStorage.removeItem('wx_user_info') router.replace({ name: 'courseAuth' }) // return Promise.reject('error') } else if (response.data.code === 3) {//无权限 router.replace({ name: 'courseHome' }) // return Promise.reject('error') } else if (response.data.code === 999) {//系统异常 localStorage.removeItem('Wx-Token') localStorage.removeItem('wx_user_info') router.replace({ name: 'courseAuth' }) // return Promise.reject('error') } else { return response } }, error => { if (error.message == 'interrupt') { return Promise.reject(error.message) } //五秒内只执行一次 if (bool) { if (error.message == 'timeout of 10000ms exceeded') { Notify({ type: 'warning', message: "网络连接超时,请稍后重试", duration: 3000, }); } if (error.message == 'Network Error') { Notify({ type: 'danger', message: "网络连接失败,请检查您的网络", duration: 3000, }); } bool = false setTimeout(() => { bool = true }, 5000) } return Promise.reject(error) } ) // 接口再次封装 var CancelToken = axios.CancelToken; Vue.$httpRequestList = []; //isToken 是微信的TOKEN 用来绑定 export default (type, url, data, heaStr, isToken, Content_Type) => { var Accept, ContentType var Token = '' switch (heaStr) { case undefined: Accept = 'application/json, text/plain, */*' break case '': Accept = 'application/json, text/plain, */*' break case 'v2': Accept = 'application/vnd.test.v2+json' break; case 'v3': Accept = 'application/vnd.test.v3+json' break; } if (getWxToken()) { Token = getWxToken(); }else{ return Promise.reject(new Error('No token, request aborted.')); } if (isToken) { Token = isToken } if (Content_Type == '' || Content_Type == undefined) { // ContentType = 'application/x-www-form-urlencoded' ContentType = 'application/json' } else { ContentType = Content_Type } return new Promise((resolve, reject) => { //封装ajax var aa = { method: type, url: url, headers: { 'Accept': Accept, 'A-Token': Token, 'Content-Type': ContentType }, cancelToken: new CancelToken(c => { //强行中断请求要用到的 Vue.$httpRequestList.push(c); }) } var json = (type == 'get') ? Object.assign(aa, { params: data }) : Object.assign(aa, { data: data }); var ajax = request(json).then(res => { resolve(res); }).catch(error => { //中断请求和请求出错的处理 if (error == "interrupt") { return; } else { reject(error); } }) return ajax; }) };