76 lines
2.5 KiB
JavaScript
76 lines
2.5 KiB
JavaScript
import axios from "axios";
|
|
import { authToken } from "@/store/index.js"
|
|
import { MessagePlugin } from "tdesign-vue-next"
|
|
import router from "@/router/index.js"
|
|
|
|
function get_api_url() {
|
|
if (import.meta.env.MODE === 'development' || (import.meta.env.MODE === 'production' && window.location.host.indexOf('localhost') > -1)) {
|
|
return import.meta.env.VITE_API_BASEURL
|
|
}
|
|
return 'http://' + window.location.host + '/api'
|
|
}
|
|
|
|
const instance = axios.create({
|
|
baseURL: get_api_url(),
|
|
headers: {
|
|
'Content-Type': 'application/json;charset=UTF-8'
|
|
}
|
|
})
|
|
|
|
instance.interceptors.request.use(
|
|
config => {
|
|
const token = authToken.access
|
|
if (token) {
|
|
config.headers['Authorization'] = `Bearer ${token}`
|
|
}
|
|
config._err_i = config._err_i !== false; // 默认 true
|
|
return config;
|
|
},
|
|
error => {
|
|
MessagePlugin.error(error.message)
|
|
return Promise.reject(error);
|
|
}
|
|
)
|
|
|
|
instance.interceptors.response.use(
|
|
response => {
|
|
return response.data
|
|
},
|
|
error => {
|
|
let err_msg = "请求错误";
|
|
if (error.response) {
|
|
const status = error.response.status;
|
|
const url = error.config?.url || '';
|
|
switch (status) {
|
|
case 401:
|
|
if (authToken.access) { authToken.access = null }
|
|
if (authToken.refresh) { authToken.refresh = null }
|
|
if (!url.includes('/login')) {
|
|
// 避免重复跳转
|
|
if (!window.location.pathname.includes('/login')) {
|
|
router.replace('/login');
|
|
}
|
|
}
|
|
break;
|
|
default:
|
|
err_msg = error.response?.data?.err_msg || "内部错误"
|
|
}
|
|
} else if (error.request) {
|
|
err_msg = '网络连接失败,请检查网络';
|
|
}
|
|
if (error.config._err_i) {
|
|
MessagePlugin.error(err_msg);
|
|
}
|
|
return Promise.reject(error)
|
|
}
|
|
)
|
|
|
|
const http = {
|
|
get: (url, params={}, err_i=true) => instance.get(url, { params, err_i }),
|
|
post: (url, data={}, err_i=true) => instance.post(url, data, err_i),
|
|
put: (url, data={}, err_i=true) => instance.put(url, data, err_i),
|
|
delete: (url, err_i=true) => instance.delete(url, err_i),
|
|
postForm: (url, data, onProgress=null, err_i=true) => instance.post(url, data, { headers: { 'Content-Type': 'multipart/form-data' }, onUploadProgress: onProgress, err_i})
|
|
};
|
|
|
|
export default http; |