// src/utils/request.ts import axios, { AxiosInstance, InternalAxiosRequestConfig } from "axios"; import { message } from "ant-design-vue"; import { useRouter, useRoute } from "vue-router"; // 从环境变量读取基础 URL const BASE_URL = import.meta.env.VITE_API_BASIC; console.log("API Basic URL:", import.meta.env.VITE_API_BASIC); console.log("All env:", import.meta.env); const router = useRouter(); // 创建 axios 实例 const request: AxiosInstance = axios.create({ baseURL: BASE_URL, timeout: 10000, // 10 秒超时 withCredentials: false, // 跨域请求时发送 cookies headers: { "Content-Type": "application/json", }, }); // 请求拦截器(可选:加 token、loading 等) request.interceptors.request.use( (config: InternalAxiosRequestConfig) => { // 例如:从 localStorage 获取 token const token = localStorage.getItem("token"); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, (error) => { return Promise.reject(error); } ); // 响应拦截器(统一处理错误、code 等) request.interceptors.response.use( (response) => { console.log("response", response); // 假设后端返回格式为 { code: 200, data: ..., message: '' } const { code, data, message } = response.data; console.log("Response Data:", response.data); if (code === 1) { return data??code; } else { // 可抛出业务错误 return Promise.reject(new Error(message || "请求失败")); } }, (error) => { // 网络错误 or 超时等 console.log(error); const res = error.response; if (res.status === 401) { message.error("登录已过期,请重新登录"); localStorage.clear(); setTimeout(() => { window.location.href = "/login"; }, 3000); } else { return Promise.reject(error.response.data); } } ); export default request;