You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

145 lines
3.9 KiB

// src/utils/request.js
import axios from "axios";
const baseURL = process.env.VUE_APP_BASE_API;
// 创建 axios 实例
const service = axios.create({
baseURL:baseURL, // 从环境变量中读取 API 基础地址
timeout: 60000, // 请求超时时间
headers: {
'Content-Type': 'application/x-www-form-urlencoded',
'AUTHADMIN' :localStorage.getItem("authtoken")
},
});
// 请求拦截器
service.interceptors.request.use(
(config) => {
// 在发送请求之前做一些处理,例如添加 token
// const token = localStorage.getItem("token");
const token = localStorage.getItem("authtoken");
const doctor_id = localStorage.getItem("doctor_id");
// 检查是否存在 token,如果不存在则跳转到登录页
if (!token && location.pathname != '/login' && location.href.indexOf('/login') == -1) {
// 可以根据需要决定是否提示用户
console.warn("未检测到登录信息,请重新登录");
window.location.href = "/login";
return Promise.reject(new Error("未登录"));
}
if (token) config.headers["Auth"] = `${token}`;
if (doctor_id) config.headers["DID"] = `${doctor_id}`;
return config;
},
(error) => {
// 对请求错误做些什么
return Promise.reject(error);
}
);
// 响应拦截器
service.interceptors.response.use(
(response) => {
// 对响应数据做一些处理
const res = response.data;
if (!res.status) {
// 如果返回的 status 不是 true,则视为错误
// return Promise.reject(new Error(res.info || "请求失败"));
}
return res;
},
(error) => {
// 对响应错误做些什么
if (error.response) {
switch (error.response.status) {
case 401:
// 未授权,跳转到登录页
window.location.href = "/login";
break;
case 404:
// 资源未找到
console.error("资源未找到");
break;
case 500:
// 服务器错误
console.error("服务器错误");
break;
default:
console.error("请求失败", error.message);
}
}
return Promise.reject(error);
}
);
function logout() {
localStorage.removeItem('authtoken')
localStorage.removeItem('doctor_id')
localStorage.removeItem('user_name')
localStorage.removeItem('user_type')
location.href = '/login'
}
/**
* 封装请求方法
* @param {string} method 请求方法 (GET, POST, PUT, DELETE 等)
* @param {string} url 请求地址
* @param {object} data 请求参数
* @param {object} config 其他 axios 配置
* @returns {Promise} 返回请求结果
*/
const request = (method, url, data = {}, config = {}) => {
const lowerCaseMethod = method.toLowerCase();
if (lowerCaseMethod === "get") {
// GET 请求将参数拼接到 URL 上
var res = service({
method: "get",
url,
params: data,
...config,
});
res.then(response => {
if(response && response.msg && response.msg.indexOf('您没有访问权限~~~') > -1) {
location.href = '/'
return;
}
if(response && response.msg && (response.msg.indexOf('非法操作') > -1 || response.code == 40002)) {
logout()
return;
}
}).catch(error => {
console.error('API Error:', error);
});
return res;
} else {
// 其他请求(POST, PUT, DELETE 等)将参数放在请求体中
var respost = service({
method: lowerCaseMethod,
url,
data,
...config,
});
respost.then(response => {
if(response && response.msg && response.msg.indexOf('您没有访问权限~~~') > -1) {
location.href = '/'
return;
}
if(response && response.msg && (response.msg.indexOf('非法操作') > -1 || response.code == 40002)) {
logout()
return;
}
}).catch(error => {
console.error('API Error:', error);
});
return respost;
}
};
export default request;