From 555e7b7e292e726c02c7e958199200eb29cd9ea0 Mon Sep 17 00:00:00 2001 From: shunli Date: Fri, 8 May 2026 23:28:48 +0800 Subject: [PATCH] =?UTF-8?q?A2-A3=20=E8=A1=A5=E5=85=85=E5=85=B3=E8=81=94?= =?UTF-8?q?=E6=98=8E=E7=BB=86=E7=A0=81=E5=80=BC=E9=98=B2=E5=9B=9E=E5=BD=92?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/pages/ReimbursementDetailPage.tsx | 4 ++-- client/tests/e2e/r111-invoice-reimbursement-guard.spec.ts | 1 + .../tests/e2e/r125-invoice-reupload-after-delete.spec.ts | 1 + scripts/qa/check-ui-design-rules.mjs | 8 ++++++++ 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/client/src/pages/ReimbursementDetailPage.tsx b/client/src/pages/ReimbursementDetailPage.tsx index 66845fba..a281c730 100644 --- a/client/src/pages/ReimbursementDetailPage.tsx +++ b/client/src/pages/ReimbursementDetailPage.tsx @@ -898,10 +898,10 @@ export function ReimbursementDetailPage() { const linkedItem = detail.items.find((item) => item.id === linkedItemId); if (!linkedItem) { - return linkedItemId; + return "未识别明细"; } - return `${linkedItem.expenseType?.name ?? linkedItem.expenseTypeId} · ${linkedItem.description ?? "未填写说明"}`; + return `${linkedItem.expenseType?.name ?? "未识别费用类型"} · ${linkedItem.description ?? "未填写说明"}`; }; return ( diff --git a/client/tests/e2e/r111-invoice-reimbursement-guard.spec.ts b/client/tests/e2e/r111-invoice-reimbursement-guard.spec.ts index 97bedb17..3980da9d 100644 --- a/client/tests/e2e/r111-invoice-reimbursement-guard.spec.ts +++ b/client/tests/e2e/r111-invoice-reimbursement-guard.spec.ts @@ -538,6 +538,7 @@ test.describe("R111 国内报销发票与附件双端体验", () => { expect(bodyText).not.toMatch(/\bdraft\b/); expect(bodyText).not.toMatch(/\bbound\b/); expect(bodyText).not.toContain("business_client_meal"); + expect(bodyText).not.toContain("expense-type-r111"); await page.screenshot({ path: screenshotPath("pc-reimbursement-detail.png"), fullPage: true }); }); diff --git a/client/tests/e2e/r125-invoice-reupload-after-delete.spec.ts b/client/tests/e2e/r125-invoice-reupload-after-delete.spec.ts index eef472d7..ef3fe916 100644 --- a/client/tests/e2e/r125-invoice-reupload-after-delete.spec.ts +++ b/client/tests/e2e/r125-invoice-reupload-after-delete.spec.ts @@ -35,6 +35,7 @@ async function expectNoRawReimbursementCodes(page: Page) { expect(bodyText).not.toMatch(/\bdraft\b/); expect(bodyText).not.toMatch(/\bbound\b/); expect(bodyText).not.toContain("business_client_meal"); + expect(bodyText).not.toContain("expense-type-r125"); } function buildMe() { diff --git a/scripts/qa/check-ui-design-rules.mjs b/scripts/qa/check-ui-design-rules.mjs index e347ed82..dd690213 100644 --- a/scripts/qa/check-ui-design-rules.mjs +++ b/scripts/qa/check-ui-design-rules.mjs @@ -232,6 +232,14 @@ function scanReimbursementRawCodeDisplay(file, source) { regex: /expenseType\?\.name\s*\?\?\s*item\.expenseTypeId/g, message: "普通报销详情不应在费用类型缺失时回退展示内部费用类型 ID。", }, + { + regex: /expenseType\?\.name\s*\?\?\s*linkedItem\.expenseTypeId/g, + message: "普通报销详情的发票关联明细不应回退展示内部费用类型 ID。", + }, + { + regex: /return\s+linkedItemId;/g, + message: "普通报销详情的发票关联明细不应回退展示内部明细 ID。", + }, ]; for (const pattern of patterns) {