fix: align track API path rewrite with Vite for ideship
All checks were successful
Build and Deploy Front / deploy (push) Successful in 5m40s

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
zzh 2026-09-30 17:49:05 +08:00
parent ef74985ad9
commit 07f241ab64

View File

@ -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}/... */ /** 生产:遗留路径 → https://api.ideship.com/{itfx|track|admin}/... */
export function rewriteBrowserApiPath(url: string): string { export function rewriteBrowserApiPath(url: string): string {
if (!url || import.meta.env.DEV) return url if (!url || import.meta.env.DEV) return url
@ -63,14 +92,13 @@ export function rewriteBrowserApiPath(url: string): string {
const origin = prodApiOrigin() const origin = prodApiOrigin()
// 已是绝对 PATHBASE 相对路径 → 挂到 api 域名 // 已是绝对 PATHBASE 相对路径 → 挂到 api 域名
if ( if (path.startsWith('/itfx/') || path === '/itfx') {
path.startsWith('/itfx/') || return `${origin}${path}`
path === '/itfx' || }
path.startsWith('/track/') || if (path.startsWith('/track/') || path === '/track') {
path === '/track' || return normalizeTrackPathbase(path, origin)
path.startsWith('/admin/') || }
path === '/admin' if (path.startsWith('/admin/') || path === '/admin') {
) {
return `${origin}${path}` return `${origin}${path}`
} }
@ -93,11 +121,15 @@ export function rewriteBrowserApiPath(url: string): string {
} }
if (path.startsWith('/Track')) { if (path.startsWith('/Track')) {
return `${origin}/track${path}` return rewriteTrackApiPath(path, origin)
} }
if (path.startsWith('/trackApi/')) { 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 return path