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) => {
|
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;
|