277 lines
6.7 KiB
JavaScript
277 lines
6.7 KiB
JavaScript
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");
|
||
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) => {
|
||
// const contentDisposition = response.headers['Content-Disposition'];
|
||
// console.log(response,677)
|
||
const token = response.headers.authorization;
|
||
if (token) {
|
||
let reToken = token.replace(/Bearer /g, "");
|
||
tool.cookie.set("TOKEN", reToken);
|
||
}
|
||
const api_code = response.data.code;
|
||
if (api_code === 401) {
|
||
if (!MessageBox_401_show) {
|
||
MessageBox_401_show = true;
|
||
ElMessageBox.confirm(response.data.message,"无权限访问",{
|
||
type: "error",
|
||
closeOnClickModal: false,
|
||
center: true,
|
||
confirmButtonText: "重新登录",
|
||
beforeClose: (action, instance, done) => {
|
||
MessageBox_401_show = false;
|
||
done();
|
||
},
|
||
}).then(() => {
|
||
// closeSock(true);
|
||
tool.cookie.remove("TOKEN");
|
||
router.replace({ path: "/login" });
|
||
})
|
||
.catch(() => {});
|
||
}
|
||
} else if (api_code === 404) {
|
||
ElNotification.error({
|
||
title: "请求错误",
|
||
message: "Status:404,正在请求不存在的接口!",
|
||
});
|
||
} else if (api_code === 500) {
|
||
ElNotification.error({
|
||
title: "请求错误",
|
||
message: response.data.msg || "Status:500,服务器发生错误!",
|
||
});
|
||
} else if (api_code === 0 || api_code !== 200) {
|
||
const contentType = response.headers.get('Content-Type');
|
||
if(contentType.includes('application/json')){
|
||
ElMessage.warning(response.data.message);
|
||
}
|
||
}
|
||
|
||
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},未知错误!`
|
||
// });
|
||
// }
|
||
// }
|
||
|
||
ElNotification.error({
|
||
title: '请求错误',
|
||
message: "请求服务器无响应!"
|
||
});
|
||
return Promise.reject(error.response);
|
||
}
|
||
);
|
||
|
||
const 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 请求
|
||
* @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) => {
|
||
reject(error);
|
||
})
|
||
})
|
||
},
|
||
|
||
/** oss 请求
|
||
* @param {string} url
|
||
* @param {{}} data
|
||
* @param {{}} config
|
||
*/
|
||
oss: function (url, data = {}, config = {}) {
|
||
return new Promise((resolve, reject) => {
|
||
axios({
|
||
method: "post",
|
||
url: url,
|
||
data: data,
|
||
...config,
|
||
})
|
||
.then((response) => {
|
||
resolve(response.data);
|
||
})
|
||
.catch((error) => {
|
||
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) => {
|
||
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) => {
|
||
reject(error);
|
||
})
|
||
})
|
||
},
|
||
|
||
/** jsonp 请求
|
||
* @param {string} url 接口地址
|
||
* @param {string} name JSONP回调函数名称
|
||
*/
|
||
jsonp: function (url, name = 'jsonp') {
|
||
return new Promise((resolve) => {
|
||
const script = document.createElement('script');
|
||
const _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;
|