fix: 验收包写入公司内网地址,避免 Windows 空 VITE 与 Android 假域名

Windows 补 .env.production 与 endpoints 兜底;Android 默认 host/端口改为内网,启动后重写 HttpUtil/ApiService,Urls 改为 getter。

Co-authored-by: Cursor <cursoragent@cursor.com>
Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
编码工程师
2026-08-20 16:21:40 +08:00
co-authored by Cursor multica-agent
parent 18d890ae7f
commit bbc4dce0b6
10 changed files with 76 additions and 35 deletions
+3 -2
View File
@@ -1,5 +1,6 @@
import axios from "axios";
import { ACCOUNT_URL, LIVEKIT_URL } from "@/config/endpoints";
import { getIMToken } from "@/utils/storage";
// RTC(音视频通话)令牌改由自研账号服务签发(原 OpenIM chat 服务 :10008 已下线)。
@@ -15,7 +16,7 @@ export const getRtcConnectData = async (room: string, identity: string) => {
msg: string;
data: { token: string };
}>(
`${import.meta.env.VITE_ACCOUNT_URL}/api/rtc_token`,
`${ACCOUNT_URL}/api/rtc_token`,
{ room, identity },
{ headers: { Authorization: `Bearer ${imToken}` } },
);
@@ -24,7 +25,7 @@ export const getRtcConnectData = async (room: string, identity: string) => {
}
return {
data: {
serverUrl: import.meta.env.VITE_LIVEKIT_URL as string,
serverUrl: LIVEKIT_URL,
token: res.data.token,
},
};
+11
View File
@@ -0,0 +1,11 @@
/** 公司内网接口。Vite 未注入 VITE_* 时不得变成 undefined。 */
const COMPANY_HOST = "192.168.200.11";
export const API_URL =
import.meta.env.VITE_API_URL || `http://${COMPANY_HOST}:10002`;
export const WS_URL =
import.meta.env.VITE_WS_URL || `ws://${COMPANY_HOST}:10001`;
export const ACCOUNT_URL =
import.meta.env.VITE_ACCOUNT_URL || `http://${COMPANY_HOST}:10010`;
export const LIVEKIT_URL =
import.meta.env.VITE_LIVEKIT_URL || `ws://${COMPANY_HOST}:17880`;
+3 -2
View File
@@ -19,6 +19,7 @@ import { useEffect, useRef } from "react";
import { useNavigate } from "react-router-dom";
import { CustomType } from "@/constants";
import { API_URL, WS_URL } from "@/config/endpoints";
import {
pushNewMessage,
updateOneMessage,
@@ -123,8 +124,8 @@ export function useGlobalEvent() {
const IMToken = (await getIMToken()) as string;
const IMUserID = (await getIMUserID()) as string;
try {
const apiAddr = import.meta.env.VITE_API_URL;
const wsAddr = import.meta.env.VITE_WS_URL;
const apiAddr = API_URL;
const wsAddr = WS_URL;
if (window.electronAPI) {
await IMSDK.initSDK({
platformID: window.electronAPI?.getPlatform() ?? 5,
@@ -5,6 +5,7 @@ import { useCallback, useEffect, useMemo, useState } from "react";
import { useTranslation } from "react-i18next";
import { GroupedVirtuoso } from "react-virtuoso";
import { ACCOUNT_URL } from "@/config/endpoints";
import { useContactStore } from "@/store";
import { emit } from "@/utils/events";
import { getIMToken } from "@/utils/storage";
@@ -29,7 +30,7 @@ export const MyFriends = () => {
return;
}
const { data } = await axios.get(
`${import.meta.env.VITE_ACCOUNT_URL}/api/directory`,
`${ACCOUNT_URL}/api/directory`,
{
params: { keyword: "", limit: 100 },
headers: { Authorization: `Bearer ${token}` },
+2 -1
View File
@@ -4,6 +4,7 @@ import { t } from "i18next";
import { useState } from "react";
import { useNavigate } from "react-router-dom";
import { ACCOUNT_URL } from "@/config/endpoints";
import { setIMProfile } from "@/utils/storage";
interface LoginResult {
@@ -29,7 +30,7 @@ const LoginForm = ({ onBanner }: LoginFormProps) => {
setLoading(true);
try {
const { data: res } = await axios.post<LoginResult>(
`${import.meta.env.VITE_ACCOUNT_URL}/api/login`,
`${ACCOUNT_URL}/api/login`,
{
staffNo: values.staffNo.trim(),
password: values.password,