From 3696a8cf845194d4650c3cbcc4c86938da0addff Mon Sep 17 00:00:00 2001 From: wangdongbo <> Date: Wed, 3 Jun 2026 10:07:43 +0800 Subject: [PATCH] =?UTF-8?q?=E5=9F=BA=E7=A1=80=E8=B7=AF=E5=BE=84=E9=85=8D?= =?UTF-8?q?=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- utils/api-base-config.js | 87 ++++++++++++++++++++++++++++++++++++++++ utils/http.js | 20 ++++----- 2 files changed, 97 insertions(+), 10 deletions(-) create mode 100644 utils/api-base-config.js diff --git a/utils/api-base-config.js b/utils/api-base-config.js new file mode 100644 index 0000000..e43e436 --- /dev/null +++ b/utils/api-base-config.js @@ -0,0 +1,87 @@ +const env = __VITE_ENV__; + +export const API_CONTEXT_CACHE_KEY = "ykt_team_api_context"; + +export const CORP_API_BASE_URL_MAP = { + wwa54dfba0b5441ef1: "https://crm.gykqyy.com/ykt/", +}; + +function normalizeBaseUrl(url) { + return String(url || "").replace(/\/+$/, ""); +} + +function getDefaultBaseUrl() { + return normalizeBaseUrl(env.MP_API_BASE_URL); +} + +function readCachedContext() { + if (typeof uni === "undefined" || typeof uni.getStorageSync !== "function") { + return null; + } + try { + const cached = uni.getStorageSync(API_CONTEXT_CACHE_KEY); + if (!cached || typeof cached !== "object" || !cached.baseUrl) return null; + return { + corpId: cached.corpId || "", + baseUrl: normalizeBaseUrl(cached.baseUrl), + }; + } catch (error) { + return null; + } +} + +function writeCachedContext(context) { + if (typeof uni === "undefined" || typeof uni.setStorageSync !== "function") { + return; + } + try { + uni.setStorageSync(API_CONTEXT_CACHE_KEY, { + corpId: context.corpId || "", + baseUrl: normalizeBaseUrl(context.baseUrl), + }); + } catch (error) { + // 缓存失败不能阻断接口请求。 + } +} + +function createContext(corpId, baseUrl) { + return { + corpId: corpId || "", + baseUrl: normalizeBaseUrl(baseUrl), + }; +} + +export function resolveApiContext(corpId) { + const normalizedCorpId = String(corpId || "").trim(); + + if (normalizedCorpId) { + const configuredBaseUrl = CORP_API_BASE_URL_MAP[normalizedCorpId]; + const context = createContext( + normalizedCorpId, + configuredBaseUrl || getDefaultBaseUrl() + ); + writeCachedContext(context); + return context; + } + + const cachedContext = readCachedContext(); + if (cachedContext) return cachedContext; + + const context = createContext("", getDefaultBaseUrl()); + writeCachedContext(context); + return context; +} + +export function getApiBaseUrlByCorpId(corpId) { + return resolveApiContext(corpId).baseUrl; +} + +export function getDefaultUploadUrl() { + return `${getDefaultBaseUrl()}/upload`; +} + +export function buildApiUrl(path, corpId) { + const { baseUrl } = resolveApiContext(corpId); + const normalizedPath = String(path || "").replace(/^\/+/, ""); + return normalizedPath ? `${baseUrl}/${normalizedPath}` : baseUrl; +} diff --git a/utils/http.js b/utils/http.js index d4586b0..6b2281a 100644 --- a/utils/http.js +++ b/utils/http.js @@ -1,6 +1,5 @@ import { loading, hideLoading } from "./widget"; -const env = __VITE_ENV__; -const baseUrl = env.MP_API_BASE_URL; +import { buildApiUrl, getDefaultUploadUrl } from "./api-base-config"; const defaultOptions = { header: { @@ -58,7 +57,7 @@ async function refreshAccessToken() { try { const res = await uni.request({ - url: `${baseUrl}/auth/refresh`, + url: buildApiUrl("/auth/refresh"), method: "POST", header: { "Content-Type": "application/json", @@ -101,7 +100,7 @@ const request = async (options = {}, showLoading = true) => { const config = { ...defaultOptions, ...options, - url: baseUrl + options.url, + url: buildApiUrl(options.url, options.data.corpId), }; // 添加 token 到请求头 @@ -199,24 +198,25 @@ function removeTask(task) { export default request; -export const uploadUrl = `${baseUrl}/upload`; +export const uploadUrl = getDefaultUploadUrl(); -export function getFullPath(path) { - return `${baseUrl}/${path}`; +export function getFullPath(path, corpId) { + return buildApiUrl(path, corpId); } -export function upload(path) { +export function upload(path, corpId) { + const currentUploadUrl = buildApiUrl("/upload", corpId); return new Promise((resolve) => { uni.uploadFile({ - url: uploadUrl, // 替换为你的上传接口地址 + url: currentUploadUrl, filePath: path, name: 'file', fileType: 'image', success: (res) => { try { const url = JSON.parse(res.data).filePath; - resolve(url ? getFullPath(url) : '') + resolve(url ? getFullPath(url, corpId) : '') } catch (e) { resolve() }