158 lines
3.9 KiB
TypeScript
158 lines
3.9 KiB
TypeScript
import axios from 'axios';
|
||
import {ElNotification} from 'element-plus';
|
||
import sConfig from "@/config";
|
||
import tools from '@/utils/tools';
|
||
import router from '@/router';
|
||
|
||
// 请求地址
|
||
axios.defaults.baseURL = sConfig.API_URL + sConfig.API_PREFIX
|
||
// 超时时间
|
||
axios.defaults.timeout = sConfig.TIMEOUT
|
||
// 请求拦截
|
||
axios.interceptors.request.use((config) => {
|
||
let token = tools.data.get("TOKEN")
|
||
if (token) {
|
||
config.headers[sConfig.TOKEN_NAME] = sConfig.TOKEN_PREFIX + token
|
||
}
|
||
// get请求添加时间戳
|
||
if (!sConfig.REQUEST_CACHE && config.method === 'get') {
|
||
config.params = config.params || {};
|
||
config.params['_'] = new Date().getTime();
|
||
}
|
||
// 多语言
|
||
const lang = tools.data.get("APP_LANG") || 'zh-cn'
|
||
config.headers['Accept-Language'] = lang
|
||
return config;
|
||
})
|
||
//响应拦截
|
||
axios.interceptors.response.use((response) => {
|
||
// 续签逻辑
|
||
const newToken = response.headers['x-token-refresh']
|
||
const ttl = response.headers['x-token-expire']
|
||
if (newToken && ttl > 0) {
|
||
tools.data.set("TOKEN", newToken, ttl)
|
||
}
|
||
let res = response.data
|
||
if (res.code == 0) {
|
||
return Promise.resolve(res)
|
||
} else if (res.code == 1) { // 操作失败拦截
|
||
ElNotification.error({title: '操作失败', message: res.msg});
|
||
return Promise.reject(res)
|
||
} else if (res.code == 2) { // 权限不足拦截
|
||
ElNotification.error({title: '权限不足', message: res.msg});
|
||
return Promise.reject(res)
|
||
} else if (res.code == 3) { // 登录失效拦截
|
||
ElNotification.error({title: '登录失效', message: res.msg});
|
||
router.replace({path: '/login'}).then(r => {
|
||
});
|
||
}else {
|
||
ElNotification.error({
|
||
title: '请求错误',
|
||
message: `Status:${response.status},未知错误!`
|
||
});
|
||
}
|
||
}, (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 {
|
||
ElNotification.error({
|
||
title: '请求错误',
|
||
message: error.message || `Status:${error.response.status},未知错误!`
|
||
});
|
||
}
|
||
} else {
|
||
ElNotification.error({title: '请求错误', message: "请求服务器无响应!"});
|
||
}
|
||
return Promise.reject(error.response);
|
||
})
|
||
|
||
const http = {
|
||
/** get 请求
|
||
* @param url 请求地址
|
||
* @param params 参数
|
||
* @param config 配置
|
||
*/
|
||
get: function (url: string, params = {}, config = {}) {
|
||
return new Promise((resolve, reject) => {
|
||
axios({
|
||
method: 'get',
|
||
url: url,
|
||
params: params,
|
||
...config
|
||
}).then((response) => {
|
||
resolve(response);
|
||
}).catch((error) => {
|
||
reject(error);
|
||
})
|
||
})
|
||
},
|
||
|
||
/** post 请求
|
||
* @param url 请求地址
|
||
* @param data 参数
|
||
* @param config 配置
|
||
*/
|
||
post: function (url: string, data = {}, config = {}) {
|
||
return new Promise((resolve, reject) => {
|
||
axios({
|
||
method: 'post',
|
||
url: url,
|
||
data: data,
|
||
...config
|
||
}).then((response) => {
|
||
resolve(response);
|
||
}).catch((error) => {
|
||
reject(error);
|
||
})
|
||
})
|
||
},
|
||
|
||
/** put 请求
|
||
* @param url 请求地址
|
||
* @param data 参数
|
||
* @param config 配置
|
||
*/
|
||
put: function (url: string, data = {}, config = {}) {
|
||
return new Promise((resolve, reject) => {
|
||
axios({
|
||
method: 'put',
|
||
url: url,
|
||
data: data,
|
||
...config
|
||
}).then((response) => {
|
||
resolve(response);
|
||
}).catch((error) => {
|
||
reject(error);
|
||
})
|
||
})
|
||
},
|
||
|
||
/** delete 请求
|
||
* @param url 请求地址
|
||
* @param params 参数
|
||
* @param config 配置
|
||
*/
|
||
delete: function (url: string, params = {}, config = {}) {
|
||
return new Promise((resolve, reject) => {
|
||
axios({
|
||
method: 'delete',
|
||
url: url,
|
||
params: params,
|
||
...config
|
||
}).then((response) => {
|
||
resolve(response);
|
||
}).catch((error) => {
|
||
reject(error);
|
||
})
|
||
})
|
||
}
|
||
}
|
||
|
||
export default http;
|