admin/src/utils/request.ts

158 lines
3.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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;