From 07f241ab6454c47b624d01d1825c7b339e5469cb Mon Sep 17 00:00:00 2001 From: zzh <1368735060@qq.com> Date: Wed, 30 Sep 2026 17:49:05 +0800 Subject: [PATCH] fix: align track API path rewrite with Vite for ideship Co-authored-by: Cursor --- src/utils/rewriteBrowserApiPath.ts | 52 ++++++++++++++++++++++++------ 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/src/utils/rewriteBrowserApiPath.ts b/src/utils/rewriteBrowserApiPath.ts index b844f5f..eaad4cb 100644 --- a/src/utils/rewriteBrowserApiPath.ts +++ b/src/utils/rewriteBrowserApiPath.ts @@ -52,6 +52,35 @@ function isItfxSpaPath(afterApi: string): boolean { ) } +/** 与 vite.config rewriteTrackProxyPath 一致:ideship PATHBASE=/track 只需单段 Track */ +const TRACK_ROOT_SERVICES = ['Warning', 'ProviderService', 'Dictionary'] as const + +function usesIdeshipTrackPath(origin: string): boolean { + return /ideship\.com/i.test(origin) +} + +/** /Track/... → /track/...(ideship 剥掉历史双 Track) */ +function rewriteTrackApiPath(path: string, origin: string): string { + for (const name of TRACK_ROOT_SERVICES) { + const prefix = `/Track/${name}` + if (path === prefix || path.startsWith(`${prefix}/`)) { + return `${origin}/track${path.slice('/Track'.length)}` + } + } + if (usesIdeshipTrackPath(origin) && path.startsWith('/Track/Track/')) { + return `${origin}/track/Track/${path.slice('/Track/Track/'.length)}` + } + return `${origin}/track${path}` +} + +/** 已是 /track/... 时,ideship 仍规范化多余的 /Track/Track/ */ +function normalizeTrackPathbase(path: string, origin: string): string { + if (usesIdeshipTrackPath(origin) && path.startsWith('/track/Track/Track/')) { + return `${origin}/track/Track/${path.slice('/track/Track/Track/'.length)}` + } + return `${origin}${path}` +} + /** 生产:遗留路径 → https://api.ideship.com/{itfx|track|admin}/... */ export function rewriteBrowserApiPath(url: string): string { if (!url || import.meta.env.DEV) return url @@ -63,14 +92,13 @@ export function rewriteBrowserApiPath(url: string): string { const origin = prodApiOrigin() // 已是绝对 PATHBASE 相对路径 → 挂到 api 域名 - if ( - path.startsWith('/itfx/') || - path === '/itfx' || - path.startsWith('/track/') || - path === '/track' || - path.startsWith('/admin/') || - path === '/admin' - ) { + if (path.startsWith('/itfx/') || path === '/itfx') { + return `${origin}${path}` + } + if (path.startsWith('/track/') || path === '/track') { + return normalizeTrackPathbase(path, origin) + } + if (path.startsWith('/admin/') || path === '/admin') { return `${origin}${path}` } @@ -93,11 +121,15 @@ export function rewriteBrowserApiPath(url: string): string { } if (path.startsWith('/Track')) { - return `${origin}/track${path}` + return rewriteTrackApiPath(path, origin) } if (path.startsWith('/trackApi/')) { - return `${origin}/track/${path.slice('/trackApi/'.length)}` + const rest = path.slice('/trackApi/'.length) + if (usesIdeshipTrackPath(origin) && rest.startsWith('Track/Track/')) { + return `${origin}/track/Track/${rest.slice('Track/Track/'.length)}` + } + return `${origin}/track/${rest}` } return path