From 2694eeb0111a37c3a852c6d7c4bbb5fbed8fe878 Mon Sep 17 00:00:00 2001 From: wren Date: Mon, 23 Mar 2026 20:39:08 +0800 Subject: [PATCH] fix: bypass Vite tree-shake for pointCode via pointCodeMap Vite's SSR build strips pointCode from ReviewPointResult return objects. Workaround: pass a separate pointCodeMap from reviews.ts and apply it in the route loader (reviews.tsx) which Vite preserves. Co-Authored-By: Claude Opus 4.6 (1M context) --- app/api/evaluation_points/reviews.ts | 8 +++++++- app/routes/reviews.tsx | 19 +++++++++++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/app/api/evaluation_points/reviews.ts b/app/api/evaluation_points/reviews.ts index 49552b7..f791517 100644 --- a/app/api/evaluation_points/reviews.ts +++ b/app/api/evaluation_points/reviews.ts @@ -786,7 +786,13 @@ export async function getReviewPoints(fileId: string, request: Request) { }; // console.log("reviewInfo-------",JSON.stringify(reviewInfo,null,2)); // data->reviewPoints stats->statistics reviewInfo->reviewInfo document->document scoring_proposals->scoringProposalsData - return { data: resultData, stats, reviewInfo, document: documentData.data, comparison_document: comparisonDocument, scoring_proposals: scoringProposalsData }; + // 构建 pointId -> code 映射(供 route loader 补充 pointCode,绕过 Vite tree-shake) + const pointCodeMap: Record = {}; + evaluationPointsData.forEach(point => { + if (point.code) pointCodeMap[String(point.id)] = String(point.code); + }); + + return { data: resultData, stats, reviewInfo, document: documentData.data, comparison_document: comparisonDocument, scoring_proposals: scoringProposalsData, pointCodeMap }; } /** diff --git a/app/routes/reviews.tsx b/app/routes/reviews.tsx index f777487..fda175e 100644 --- a/app/routes/reviews.tsx +++ b/app/routes/reviews.tsx @@ -209,6 +209,14 @@ export async function loader({ request }: LoaderFunctionArgs) { } if ('document' in reviewData && 'data' in reviewData && 'reviewInfo' in reviewData && 'stats' in reviewData) { + // 补充 pointCode(Vite tree-shake 会移除 reviews.ts 中的 pointCode) + if (reviewData.pointCodeMap) { + (reviewData.data as any[]).forEach((p: any) => { + if (!p.pointCode && p.pointId && reviewData.pointCodeMap[p.pointId]) { + p.pointCode = reviewData.pointCodeMap[p.pointId]; + } + }); + } return Response.json({ previousRoute: previousRoute, document: reviewData.document, @@ -257,6 +265,17 @@ export async function loader({ request }: LoaderFunctionArgs) { })); const allReviewPoints = [...existingPoints, ...notApplicablePoints]; + // 补充 pointCode(从统一接口的 scored results 获取 code) + const codeMap = new Map(); + (unifiedData.results || []).forEach((r: any) => { + if (r.evaluation_point_id && r.code) codeMap.set(r.evaluation_point_id, r.code); + }); + allReviewPoints.forEach((p: any) => { + if (!p.pointCode && p.pointId && codeMap.has(Number(p.pointId))) { + p.pointCode = codeMap.get(Number(p.pointId)); + } + }); + return Response.json({ previousRoute: previousRoute, document: ('document' in reviewData && !('error' in reviewData)) ? reviewData.document : null,