53 lines
1.9 KiB
JavaScript
53 lines
1.9 KiB
JavaScript
// 1. 直接使用 CDN 全局的 axios
|
||
const axios = window.axios;
|
||
|
||
// 2. 基础配置(无 export 语句)
|
||
axios.defaults.headers['Content-Type'] = 'application/json;charset=utf-8';
|
||
const service = axios.create({
|
||
baseURL: '', // 不使用baseURL前缀,直接使用完整路径
|
||
timeout: 10000
|
||
});
|
||
|
||
// 3. request 拦截器(删除所有依赖若依工具的代码)
|
||
service.interceptors.request.use(config => {
|
||
// 从 cookie 取若依的 Admin-Token(确保登录状态)
|
||
const token = document.cookie.replace(/(?:(?:^|.*;\s*)Admin-Token\s*=\s*([^;]*).*$)|^.*$/, '$1');
|
||
if (token) {
|
||
config.headers['Authorization'] = 'Bearer ' + token;
|
||
}
|
||
return config;
|
||
}, error => {
|
||
console.log(error);
|
||
return Promise.reject(error); // 必须加 return,否则吞错误
|
||
});
|
||
|
||
// 4. response 拦截器(简化,无 element-ui 依赖)
|
||
service.interceptors.response.use(res => {
|
||
// 二进制数据直接返回(如需下载可保留)
|
||
if (res.request.responseType === 'blob' || res.request.responseType === 'arraybuffer') {
|
||
return res.data;
|
||
}
|
||
// 状态码处理(用原生 alert 替代弹窗)
|
||
const code = res.data.code || 200;
|
||
if (code === 401) {
|
||
alert('登录过期,请重新登录若依系统');
|
||
return Promise.reject('登录过期');
|
||
} else if (code !== 200) {
|
||
alert('接口失败:' + (res.data.msg || '未知错误'));
|
||
return Promise.reject('接口错误');
|
||
} else {
|
||
return res.data; // 若依接口返回的 data 已处理,直接返回
|
||
}
|
||
}, error => {
|
||
// 错误提示(原生 alert)
|
||
let msg = error.message;
|
||
if (msg === "Network Error") msg = "后端连接异常";
|
||
else if (msg.includes("timeout")) msg = "请求超时";
|
||
else if (msg.includes("status code")) msg = "接口" + msg.substr(-3) + "异常";
|
||
alert(msg);
|
||
return Promise.reject(error);
|
||
});
|
||
|
||
// 5. 核心:挂载到全局 window,无任何 export
|
||
window.request = service;
|