From 491b42a23234d1deefaa59ca24f8d3dda0b1b002 Mon Sep 17 00:00:00 2001 From: shunli Date: Sun, 10 May 2026 23:30:13 +0800 Subject: [PATCH] =?UTF-8?q?V1-V6=20=E6=94=B6=E5=8F=A3=E7=A7=BB=E5=8A=A8?= =?UTF-8?q?=E8=A7=86=E5=8F=A3=E4=B8=8E=20PDF=20=E5=8F=91=E7=A5=A8=E4=B8=8A?= =?UTF-8?q?=E4=BC=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- client/src/api/errorMessages.ts | 4 + .../src/components/mobile/MobileBottomNav.tsx | 13 +- client/src/features/navigation/schema.ts | 2 +- client/src/layouts/AppShellLayout.tsx | 29 +++- client/src/pages/MobileCapturePage.tsx | 52 +----- client/src/pages/MobilePortalPage.tsx | 2 +- .../pages/MobileReimbursementDetailPage.tsx | 61 +++----- client/src/pages/ReimbursementDetailPage.tsx | 4 +- .../pages/invoice-pool/InvoiceUploadCard.tsx | 3 +- client/src/styles/mobile-touch.css | 16 ++ client/tests/e2e/invoice-ocr-flow.spec.ts | 12 +- client/tests/e2e/main-flow.spec.ts | 6 +- .../e2e/manual/live-invoice-ocr-batch.spec.ts | 7 +- .../tests/e2e/manual/live-invoice-ocr.spec.ts | 3 +- client/tests/e2e/r105-pretrial-visual.spec.ts | 4 +- .../e2e/r108-mobile-wecom-visual.spec.ts | 4 +- ...r109-mobile-reimbursement-feedback.spec.ts | 6 +- .../tests/e2e/r110-mobile-pc-routing.spec.ts | 4 +- .../r111-invoice-reimbursement-guard.spec.ts | 42 ++--- .../e2e/r124-mobile-entry-matrix.spec.ts | 7 +- .../r5-real-device-feedback-mobile-ux.spec.ts | 148 +++++++++++++----- .../tests/e2e/r75-automation-gap-fill.spec.ts | 6 +- .../e2e/r92-mobile-invoice-usability.spec.ts | 6 +- .../reimbursement-payment-batch-flow.spec.ts | 6 +- .../reimbursement-workflow-progress.spec.ts | 6 +- client/tests/e2e/travel-payment-flow.spec.ts | 6 +- client/vite.config.ts | 2 +- docs/adr/adr-mobile-strategy.md | 6 +- docs/feature-matrix.md | 2 +- docs/mobile/pwa-regression-checklist.md | 6 +- docs/product-design-rules.md | 5 +- docs/reimbursement-invoice-rules.md | 6 +- docs/trialrun/coverage-matrix.csv | 2 +- docs/trialrun/domestic-oa-best-practices.md | 2 +- docs/trialrun/live-smoke-readiness.md | 4 +- docs/trialrun/real-device-public-checklist.md | 16 +- docs/文档索引.md | 2 +- docs/海音达OA-MVP需求规格说明书.md | 2 +- docs/需求-报销发票OCR规约.md | 6 +- ..._12-39-37-release-readiness-live-smoke.csv | 2 +- ...10_18-25-33-formal-approval-org-config.csv | 2 +- ...10_20-33-04-formal-smoke-test-accounts.csv | 2 +- ...2-44-06-r5-mobile-viewport-pdf-invoice.csv | 7 + scripts/qa/check-live-smoke-env.mjs | 33 +++- scripts/qa/create-real-device-report.mjs | 5 +- server/src/routes/invoicePool.js | 17 +- .../unit/routes/invoicePool.upload.test.js | 43 ++++- 47 files changed, 387 insertions(+), 244 deletions(-) create mode 100644 issues/2026-05-10_22-44-06-r5-mobile-viewport-pdf-invoice.csv diff --git a/client/src/api/errorMessages.ts b/client/src/api/errorMessages.ts index f1a3ac2d..67ffde29 100644 --- a/client/src/api/errorMessages.ts +++ b/client/src/api/errorMessages.ts @@ -308,6 +308,10 @@ export function mapApiErrorMessage( return "当前假种要求上传附件后才能提交。"; } + if (details?.file === "pdf_invoice_required") { + return "请上传 PDF 发票文件。"; + } + if (details?.file === "unsupported_mime_type") { return "附件类型不被当前假种接受,请重新选择。"; } diff --git a/client/src/components/mobile/MobileBottomNav.tsx b/client/src/components/mobile/MobileBottomNav.tsx index d8576955..efe5edd2 100644 --- a/client/src/components/mobile/MobileBottomNav.tsx +++ b/client/src/components/mobile/MobileBottomNav.tsx @@ -33,7 +33,10 @@ export function MobileBottomNav() { const pendingCount = pendingCountQuery.data ?? 0; return ( -