/** * API 地址。 * * ⚠️ **H5 与小程序必须用不同的策略**,写死一个值一定会在某一边出错: * * · **H5**:与接口**同域**(H5 由 nginx 托管、`/api` 由同一个 nginx 反代到后端 8080, * 见 deploy/nginx/xt.conf),所以用**相对路径(空串)**。这样: * ① 完全不经过 CORS —— 换域名也不用改配置; * ② 不会出现"手机能从 A 域名加载页面、却向后端 B 域名发请求"这种毛病。 * ⚠️ 曾经的写法是硬编码 `http://localhost:8080`,于是从公网域名打开时 * 变成了跨域请求 → 被 CORS 拦 → 页面显示"网络请求失败", * 而**从本机打开却是好的**。这个 bug 只有走真实穿透/真机才会暴露。 * * · **小程序**:没有"同域"这个概念,必须写绝对地址。 * 开发者工具里可以用 `http://localhost:8080`(需勾"不校验合法域名"); * 真机要用局域网 IP;正式版必须是 HTTPS + 已在小程序后台配好的域名。 * * 用 uni-app 的条件编译区分两端,而不是运行期判断 —— 后者会把两套地址都打进包里。 */ // #ifdef H5 /** * H5:优先取 `VITE_API_BASE`,没有才用**同源的** `location.origin`。 * * ⚠️ 为什么要有 `VITE_API_BASE` 这一档: * * `location.origin` 是"与页面同源",这在**由 nginx 托管构建产物**时是对的 * (`http://localhost` 上页面与接口同源;2026-10 之前是后端 8080 托管,现在那个端口只有 /api)。 * 但 `pnpm dev:h5` 起的是一个**独立的 vite dev server**(另一个端口)—— * 那时 `location.origin` 指的是 dev server 自己,接口就打到 dev server 上去了, * 于是只能"build 一次再看",改一行要等一次完整构建。 * * 所以 dev server 下把这个值设成**空串**(见 `.env.development`), * 让请求走相对路径 `/api/...`,再由 vite 的 `server.proxy` 转发到后端。 * * ⚠️ 另外:`uni.request` **不能**传相对路径(实测会 `request:fail`, * 而同样地址用原生 XHR/fetch 是 200)。所以空串时补上 `location.origin`, * 保持"绝对地址"这个前提不变 —— 只是那个 origin 由代理兜住。 */ const VITE_API_BASE = (import.meta.env?.VITE_API_BASE ?? '') as string export const API_BASE_URL = VITE_API_BASE !== '' ? VITE_API_BASE : (typeof location !== 'undefined' ? location.origin : '') // #endif // #ifndef H5 export const API_BASE_URL = 'http://localhost:8080' // #endif /** 主题色(与 PC 管理端同一套腾讯云 TDesign 色板,两端视觉要一致)。 */ export const THEME = { primary: '#0052D9', success: '#00A870', warning: '#ED7B2F', danger: '#E34D59', pageBg: '#F3F3F3', textPrimary: '#000000E6', textSecondary: '#00000099', textPlaceholder: '#0000004D' } as const