import axios from 'axios' import { Message, MessageBox } from 'element-ui' import store from '../store/index' import qs from 'qs' import router from '@/router' import { getToken } from '@/utils/auth' // import { config } from 'vue/types/umd' axios.defaults.withCredentials = true; //允许跨域设置 var isToken = true //token标记位,用来防止多个请求token超时弹出多个重新登录框 // 创建axios实例 const service = axios.create({ baseURL: config.API_URL, // api 的 base_url //timeout: 5000 // 请求超时时间 // headers: { // crossDomain: true, // } }) // request拦截器 service.interceptors.request.use((config) => { let isKey = false //统一在header中添加token if (store.getters.token &&  !config.isLogin) { config.headers['token'] = getToken() } if (config.method == 'post' || config.method == 'put') { //----------------End--------------------------------- config.data = qs.stringify(config.data) // qs.stringify(config.params, { indices: false }) } else if (config.method == 'get') { config.paramsSerializer = params => { return qs.stringify(params, { indices: false }) } } //包含敏感字眼,拦截请求并报错,反之发送请求 if (isKey) { Message({ message: '输入内容包含敏感字符。', type: 'error', duration: 5 * 1000 }) Promise.reject('输入内容包含敏感字符。') } else { return config } }, (error) => { // Do something with request error console.log(error) // for debug Promise.reject(error) }) // respone拦截器 service.interceptors.response.use( (response) => { /** * code为非200是抛错 可结合自己业务进行修改 */ const res = response.data // const res = JSON.parse(response.data) if (res.code !== 200) { // 511:失效的token;弹出弹框,返回登录页 if (res.code === 207) { if (isToken) { isToken = false //防止下个一个token失效的请求在弹出第二个框 MessageBox.alert('你已被登出,请重新登录', '确定登出', { confirmButtonText: '重新登录', type: 'warning', callback: () => { store.dispatch('FedLogOut').then(() => { isToken = true router.replace({ name: 'login' }) // location.reload(); }); }, }); } } else { //接口失败统一报错 Message({ message: res.message, type: 'error', duration: 5 * 1000 }) } return Promise.reject(res) } else { return response.data } }, (error) => { console.log('err' + error) // for debug const res = error.response; Message({ message: res.message, type: 'error', duration: 3 * 1000 }) return Promise.reject(error) } ) export default service