242 lines
6.0 KiB
JavaScript
242 lines
6.0 KiB
JavaScript
import axios from 'axios';
|
||
import { ElNotification, ElMessageBox } from 'element-plus';
|
||
import sysConfig from "@/config";
|
||
import tool from '@/utils/tool';
|
||
import router from '@/router';
|
||
|
||
axios.defaults.baseURL = sysConfig.API_URL;
|
||
|
||
axios.defaults.timeout = sysConfig.TIMEOUT;
|
||
|
||
// 是否正在刷新的标记
|
||
let isRefreshing = false;
|
||
// 重试队列,每一项将是一个待执行的函数形式
|
||
let requests = [];
|
||
// HTTP request 拦截器
|
||
axios.interceptors.request.use(
|
||
(config) => {
|
||
let token = tool.cookie.get("TOKEN")?tool.cookie.get("TOKEN"):tool.data.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) => {
|
||
return response;
|
||
},
|
||
(error) => {
|
||
if (error.response) {
|
||
if (error.response.status == 401) {
|
||
if(error.response.data.err_code == 'no_active_account'){
|
||
ElNotification.warning({
|
||
title: '请求失败',
|
||
message: "账户密码错误或已禁用"
|
||
});
|
||
// if (!isRefreshing) {
|
||
// isRefreshing = true;
|
||
// axios({
|
||
// method: 'post',
|
||
// url: sysConfig.API_URL+'/auth/token/refresh/',
|
||
// headers: {
|
||
// Authorization: `Bearer ${tool.cookie.get("TOKEN")}`,
|
||
// },
|
||
// data:{refresh:tool.cookie.get("TOKEN_REFRESH")}
|
||
// }).then(res=>{
|
||
// debugger;
|
||
// console.log(res.data.access);
|
||
// // 替换本地的token
|
||
// tool.cookie.set("TOKEN", res.data.access);
|
||
// tool.data.set("TOKEN_TIME", new Date().getTime());
|
||
// error.config.headers[sysConfig.TOKEN_NAME] = sysConfig.TOKEN_PREFIX + res.data.access;
|
||
// isRefreshing = false;
|
||
// requests.forEach(cb => cb())
|
||
// //发起后将requests置空
|
||
// requests=[];
|
||
// return axios(error.config)
|
||
// }).catch(()=>{
|
||
// // refresh_token 有值 , 但是过期了, 请求失败
|
||
// router.push('/login')
|
||
// })
|
||
|
||
// }else{
|
||
// //如果正在刷新token,将发起的请求暂存在requests中
|
||
// return new Promise((resolve)=>{
|
||
// requests.push(()=>{
|
||
// resolve(axios(error.config));
|
||
// })
|
||
// })
|
||
// }
|
||
}else{
|
||
// ElMessageBox.confirm('当前用户已被登出或无权限访问当前资源,请尝试重新登录后再操作。', '无权限访问', {
|
||
// type: 'error',
|
||
// closeOnClickModal: false,
|
||
// center: true,
|
||
// confirmButtonText: '重新登录'
|
||
// }).then(() => {
|
||
router.replace({path: '/login'});
|
||
// }).catch(() => {})
|
||
}
|
||
|
||
} else {
|
||
if(error.response.data.err_msg=='人脸未匹配,请调整位置'){}else{
|
||
ElNotification.warning({
|
||
title: '请求失败',
|
||
message: error.response.data.err_msg || `Status:${error.response.status},未知错误!`
|
||
});
|
||
}
|
||
|
||
}
|
||
} else {
|
||
ElNotification.error({
|
||
title: '请求错误',
|
||
message: "请求服务器无响应!"
|
||
});
|
||
}
|
||
return Promise.reject(error.response);
|
||
}
|
||
);
|
||
|
||
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 请求
|
||
* @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);
|
||
})
|
||
})
|
||
},
|
||
|
||
/** 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) => {
|
||
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;
|