/** * HTTP Request Utility | HTTP 请求工具 * Axios-based request with interceptors */ import axios from 'axios' // Base URL from environment or default // Create axios instance | 创建 axios 实例 const instance = axios.create({ baseURL: "/api", timeout: 30000000 }) // Request interceptor | 请求拦截器 instance.interceptors.request.use( (config) => { return config }, (error) => { console.error('Request error:', error) return Promise.reject(error) } ) // Response interceptor | 响应拦截器 instance.interceptors.response.use( (res) => { const { data, code, message } = res.data || {} // Handle stream response | 处理流响应 if (res.config.responseType === 'stream') { return res.data } // Handle blob response | 处理 blob 响应 if (res.data instanceof Blob) { return res.data } // Success response | 成功响应 if (code === 200 || res.status === 200) { return res.data } // Error response | 错误响应 window.$message?.error(message || 'Request failed') return Promise.reject(res.data) }, (error) => { const { response } = error if (response) { const { status, data } = response const message = data?.message || data?.error?.message || error.message if (status === 401) { window.$message?.error('登录已过期,请重新进入工作台') } else if (status === 429) { window.$message?.error('请求过于频繁,请稍后再试') } else { window.$message?.error(message || '请求失败') } } else { window.$message?.error(error.message || '网络错误') } return Promise.reject(error) } ) /** * Set API base URL | 设置 API 基础 URL * @param {string} url - Base URL */ export const setBaseUrl = (url) => { instance.defaults.baseURL = url } /** * Get current base URL | 获取当前基础 URL * @returns {string} */ export const getBaseUrl = () => { return instance.defaults.baseURL } export default instance