import axios from 'axios'; import { ElNotification, ElMessageBox, ElMessage } from 'element-plus'; import sysConfig from "@/config"; import tool from '@/utils/tool'; import router from '@/router'; axios.defaults.baseURL = '' axios.defaults.timeout = sysConfig.TIMEOUT // HTTP request 拦截器 axios.interceptors.request.use( (config) => { let token = tool.cookie.get("TOKEN"); config.headers['Authorization'] = 'Basic c2FiZXI6c2FiZXJfc2VjcmV0' if (token) { config.headers[sysConfig.TOKEN_NAME] = sysConfig.TOKEN_PREFIX + token } if (!sysConfig.REQUEST_CACHE && config.method == 'get') { config.params = config.params || {}; // config.params['_'] = new Date().getTime(); } Object.assign(config.headers, sysConfig.HEADERS) return config; }, (error) => { return Promise.reject(error); } ); //FIX 多个API同时401时疯狂弹窗BUG let MessageBox_401_show = false // HTTP response 拦截器 axios.interceptors.response.use( (response) => { if (response.data.code && response.data.code !== 200) { // ElMessage({ // message: response.data.msg, // type: 'warning', // }) // return new Error() // return new Error(); } return response; }, (error) => { if (error.response) { if (error.response.status == 404) { ElNotification.error({ title: '请求错误', message: "Status:404,正在请求不存在的服务器记录!" }); } else if (error.response.status == 500) { ElNotification.error({ title: '请求错误', message: error.response.data.message || "Status:500,服务器发生错误!" }); } else if (error.response.status == 401) { if (!MessageBox_401_show) { MessageBox_401_show = true ElMessageBox.confirm('当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。', '无权限访问', { type: 'error', closeOnClickModal: false, center: true, confirmButtonText: '重新登录', beforeClose: (action, instance, done) => { MessageBox_401_show = false done() } }).then(() => { router.replace({ path: '/login' }); }).catch(() => { }) } } else { // ElNotification.error({ // title: '请求错误', // message: error.message || `Status:${error.response.status},未知错误!` // }); } } else { ElNotification.error({ title: '请求错误', message: "请求服务器无响应!" }); } return Promise.reject(error.response); } ); function qsStringify(obj) { return Object.keys(obj) .map(key => { if (Array.isArray(obj[key])) { return obj[key] .map(arrayValue => `${encodeURIComponent(key)}=${encodeURIComponent(arrayValue)}`) .join('&'); } return `${encodeURIComponent(key)}=${encodeURIComponent(obj[key])}`; }) .join('&'); } var http = { /** get 请求 * @param {string} url 接口地址 * @param {object} params 请求参数 * @param {object} config 参数 */ get: function (url, params = {}, config = {}) { return new Promise((resolve, reject) => { axios({ method: 'get', url: url, params: params, ...config }).then((response) => { resolve(response.data); }).catch((error) => { if (error?.status == 400) { ElMessage({ message: error.data.msg, type: 'warning', }) } else { reject(error); } }) }) }, /** post 请求 request payload * @param {string} url 接口地址 * @param {object} data 请求参数 * @param {object} config 参数 */ post: function (url, data = {}, config = {}) { return new Promise((resolve, reject) => { axios({ method: 'post', url: url, data: data, ...config }).then((response) => { resolve(response.data); }).catch((error) => { if (error?.status == 400) { ElMessage({ message: error.data.msg, type: 'warning', }) } else { reject(error); } }) }) }, /** post 请求 query string parameters * @param {string} url 接口地址 * @param {object} data 请求参数 * @param {object} config 参数 */ postJ: function (url, data = {}, config = {}) { return new Promise((resolve, reject) => { axios({ method: 'post', url: url, headers: { 'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8' }, data: qsStringify(data), ...config }).then((response) => { resolve(response.data); }).catch((error) => { resolve(error.data); reject(error); }) }) }, /** put 请求 * @param {string} url 接口地址 * @param {object} data 请求参数 * @param {object} config 参数 */ put: function (url, data = {}, config = {}) { return new Promise((resolve, reject) => { axios({ method: 'put', url: url, data: data, ...config }).then((response) => { resolve(response.data); }).catch((error) => { resolve(error.data); reject(error); }) }) }, /** patch 请求 * @param {string} url 接口地址 * @param {object} data 请求参数 * @param {object} config 参数 */ patch: function (url, data = {}, config = {}) { return new Promise((resolve, reject) => { axios({ method: 'patch', url: url, data: data, ...config }).then((response) => { resolve(response.data); }).catch((error) => { reject(error); }) }) }, /** delete 请求 * @param {string} url 接口地址 * @param {object} data 请求参数 * @param {object} config 参数 */ delete: function (url, data = {}, config = {}) { return new Promise((resolve, reject) => { axios({ method: 'delete', url: url, data: data, ...config }).then((response) => { resolve(response.data); }).catch((error) => { if (error.status == 400) { ElMessage({ message: error.data.msg, type: 'warning', }) } else { reject(error); } }) }) }, /** jsonp 请求 * @param {string} url 接口地址 * @param {string} name JSONP回调函数名称 */ jsonp: function (url, name = 'jsonp') { return new Promise((resolve) => { var script = document.createElement('script') var _id = `jsonp${Math.ceil(Math.random() * 1000000)}` script.id = _id script.type = 'text/javascript' script.src = url window[name] = (response) => { resolve(response) document.getElementsByTagName('head')[0].removeChild(script) try { delete window[name]; } catch (e) { window[name] = undefined; } } document.getElementsByTagName('head')[0].appendChild(script) }) } } export default http;