// import axios from 'axios' import Router from '@/router/index' // import store from '@/store' import urlConfig from '@/apis/url-config' import { getToken, removeMenu, removeBtn, removeToken } from '@/utils/auth' const header = { // "X-Requested-With": "XMLHttpRequest", // "X-Frame-Options": "DENY", // 告诉浏览器不要(DENY)把这个网页放在iFrame内,通常的目的就是要帮助用户对抗点击劫持。 // "Content-Type": "application/x-www-form-urlencoded; charset=UTF-8" } window.ajaxTimeout = 20000 export default async( url = '', data = {}, type = 'GET', params = {}, headers = header, onUploadProgress ) => { type = type.toLowerCase() const obj = { method: type, baseURL: '', url: urlConfig.baseURL + url, data, params, // // `onUploadProgress` 允许为上传处理进度事件 // onUploadProgress: function(progressEvent) { // // 对原生进度事件的处理 // }, // // `onDownloadProgress` 允许为下载处理进度事件 // onDownloadProgress: function(progressEvent) { // // 对原生进度事件的处理 // }, // `cancelToken` 指定用于取消请求的 cancel token // (查看后面的 Cancellation 这节了解更多) // cancelToken: new CancelToken(function (cancel) { // }), processData: true, // 告诉axios不要去处理发送的数据(重要参数) timeout: window.ajaxTimeout, headers, onUploadProgress } if (onUploadProgress && typeof onUploadProgress === 'function') { obj.onUploadProgress = onUploadProgress } // return await axios(obj) // .then(response => { // return response; // }) // .catch(res => { // return res; // }); // 请求拦截器 axios.interceptors.request.use( config => { if (!config.data.token) { config.data.token = getToken() } return config }, error => { // 错误抛到业务代码 return Promise.reject(new Error('服务器异常,请联系管理员!')) } ) // 添加响应拦截器 axios.interceptors.response.use( async response => { if (response.status === 200) { const code = response.data.code if (code >= 100 && code <= 104) { removeToken() removeMenu() removeBtn() } } return response }, error => { return Promise.reject(error.response.data) } ) return new Promise((resolve, reject) => { axios(obj) .then(response => { resolve(response.data) }) .catch(res => { if (res.response && res.response.data) { reject(res.response.data) } else { reject(res) } }) }) }