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) {