import axios from 'axios' /** * baseURL 解析优先级: * 1. URL 参数 apiBase (admin 跳转过来时携带, 自动携带当前 admin 域名, * 支持一份 React 部署服务多套环境 test/pre/prod) * 2. 构建时环境变量 VITE_API_BASE_URL (兜底, 直接访问 React URL 时用) * 3. 开发默认 /videoVector (走 Vite proxy 直连本地 video-vector) */ function resolveBaseURL(): string { if (import.meta.env.VITE_FORCE_LOCAL === 'true') { console.log('[baseURL] VITE_FORCE_LOCAL=true, 强制走本地 proxy /videoVector') return '/videoVector' } const urlApiBase = new URLSearchParams(window.location.search).get('apiBase') if (urlApiBase) { console.log('[baseURL] 使用 URL 参数 apiBase:', urlApiBase) return urlApiBase } const fallback = import.meta.env.VITE_API_BASE_URL ?? '/videoVector' console.log('[baseURL] 使用兜底值:', fallback) return fallback } const baseURL = resolveBaseURL() console.log('[baseURL] 最终 baseURL:', baseURL, '| DEV:', import.meta.env.DEV, '| VITE_FORCE_LOCAL:', import.meta.env.VITE_FORCE_LOCAL) const client = axios.create({ baseURL, timeout: 60_000, withCredentials: true, // 跨域请求自动携带 admin Cookie(用于 manager-new Session 鉴权) headers: { 'Content-Type': 'application/json', }, }) // 简易错误日志(MVP 不做复杂全局拦截) client.interceptors.response.use( (resp) => resp, (err) => { console.error('[API ERROR]', err?.message, err?.response?.data) return Promise.reject(err) }, ) export default client