import axios from "axios"; import store from '@/store' import router from '@/router' 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(); let obj = { method: type, baseURL: "", url: 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 = localStorage.getItem("token") } return config; }, error => { Toast.clear(); // 错误抛到业务代码 return Promise.reject(new Error("服务器异常,请联系管理员!")); } ); // 添加响应拦截器 axios.interceptors.response.use( response => { if (response.data.status == 404 || response.data.status == 405 || response.data.status == 10011) { store.dispatch('user/logout') router.push(`/login`) } return response; }, error => { return Promise.reject(error.response.data) } ) return new Promise((resolve, reject) => { axios(obj) .then(response => { if (response && response.status === 200) { let res = response.data resolve(res); } else { reject(response); } }) .catch(res => { reject(res); }); }); };