/** H5 开发构建下由 vite 注入:走同源路径 + devServer 代理,无需写完整域名 */ export function apiUsesSameOrigin(): boolean { const v = import.meta.env.VITE_API_RELATIVE; return v === "1" || v === "true"; } /** * 后端 API 根地址(无协议末尾斜杠)。 * 在 `.env.development` 中配置 `VITE_API_BASE_URL`; * H5 开发可走 `VITE_API_RELATIVE` + 代理,此时为空串; * 正式包留空且无同源标记则走本地演示数据。 */ export function getApiBase(): string { if (apiUsesSameOrigin()) { return ""; } const val = import.meta.env.VITE_API_BASE_URL; if (typeof val !== "string" || !val.trim()) { return ""; } return val.trim().replace(/\/+$/, ""); } export function apiEnabled(): boolean { if (apiUsesSameOrigin()) { return true; } return getApiBase() !== ""; } /** 当前配置的 API 是否为本机回环(仅适合电脑浏览器 H5,不适合真机 App) */ export function isApiBaseLoopback(): boolean { const b = getApiBase(); return b.length > 0 && /127\.0\.0\.1|localhost/i.test(b); } /** 连接失败信息里出现本机地址时,补充说明(避免误以为后端挂了) */ export function appendLoopbackConnectHint(msg: string): string { const m = msg.trim(); if (!m) { return m; } if (/127\.0\.0\.1|localhost/i.test(m)) { return `${m} — 真机/App 上 127.0.0.1 是手机自己。请把 uniapp/.env.development 里 VITE_API_BASE_URL 改成电脑的局域网 IP(与手机同一 Wi‑Fi),例如 http://192.168.1.5:9898,保存后重新编译运行;Android 官方模拟器可用 http://10.0.2.2:9898`; } return m; }