diff --git a/.trellis/spec/hyb-oa/frontend-react-vite-design.md b/.trellis/spec/hyb-oa/frontend-react-vite-design.md index 126f085a..b488ded8 100644 --- a/.trellis/spec/hyb-oa/frontend-react-vite-design.md +++ b/.trellis/spec/hyb-oa/frontend-react-vite-design.md @@ -104,6 +104,7 @@ and verification contracts. Do not copy broad aesthetic guidance from Rewriting Host to `127.0.0.1:3000` makes full-page reloads lose the session with `AUTH_005`. - Run `cd client && npm run typecheck && npm run build` for frontend changes. +- Any task that changes user-visible frontend copy must also run `node scripts/qa/check-ui-design-rules.mjs --strict` before commit and again before deployment. Treat the public bundle copy scan as a post-deploy witness, not the first place to discover forbidden user-facing terms. For reimbursement/invoice flows, regression assertions cover all four internal terms: `绑定整单`, `不绑定明细`, `发票池`, and `OCR`. ## Scenario: Playwright API Mocks Against A Production PWA Build diff --git a/client/src/features/navigation/schema.ts b/client/src/features/navigation/schema.ts index f48ccfa8..04a4739a 100644 --- a/client/src/features/navigation/schema.ts +++ b/client/src/features/navigation/schema.ts @@ -45,6 +45,7 @@ const PAGE_TITLES: Array<{ path: string; title: string; group: string }> = [ { path: "/mobile/purchase-requests", title: "移动采购", group: "移动工作台" }, { path: "/mobile/reimbursements", title: "移动报销", group: "移动工作台" }, { path: "/mobile", title: "移动首页", group: "移动工作台" }, + { path: "/system/settings", title: "管理", group: "管理" }, { path: "/settings/profile", title: "个人设置", group: "账号设置" }, { path: "/dashboard", title: "数据看板", group: "更多" }, ]; diff --git a/client/src/pages/MobileReimbursementDetailPage.tsx b/client/src/pages/MobileReimbursementDetailPage.tsx index 39069024..fa024e14 100644 --- a/client/src/pages/MobileReimbursementDetailPage.tsx +++ b/client/src/pages/MobileReimbursementDetailPage.tsx @@ -1158,7 +1158,7 @@ export function MobileReimbursementDetailPage() { /> {shouldShowOfficeElectronicsHint( - expenseTypes.find((type) => type.id === itemForm.expenseTypeId)?.code, + expenseTypes.find((type) => type.id === itemForm.expenseTypeId), itemForm.amount, ) ? (

该金额通常应选择办公电子设备。

@@ -1199,7 +1199,7 @@ export function MobileReimbursementDetailPage() {
{formatMoney(item.amount)}
{item.description ?

{item.description}

: null} - {shouldShowOfficeElectronicsHint(item.expenseType?.code, item.amount) ? ( + {shouldShowOfficeElectronicsHint(item.expenseType, item.amount) ? (

该金额通常应选择办公电子设备。

) : null} {invoiceGuardItemMessages(invoiceGuardIssues, item.id).map((message) => ( @@ -1259,7 +1259,7 @@ export function MobileReimbursementDetailPage() { {detail.invoiceAmountManualReviewRequired ? (

- 本单包含未执行 OCR 的发票,系统未自动比较相关明细金额;财务审批时需查看发票原件核对。 + 本单包含票面金额未自动读取的发票,系统未自动比较相关明细金额;财务审批时需查看发票原件核对。

) : null} @@ -1418,7 +1418,7 @@ export function MobileReimbursementDetailPage() { ) : null} {invoice.amountEvidenceStatus === "ocr_failed" ? (

- OCR 已处理但未取得票面金额,提交前需要重试识别或联系财务。 + 该发票的票面金额未能读取,暂时无法提交;请重新上传这张发票,或联系财务处理。

) : null} {canMaintainReimbursement && !invoice.linkedItemId ? ( diff --git a/client/src/pages/PaymentAccountsPage.tsx b/client/src/pages/PaymentAccountsPage.tsx index 7089c801..70b92edd 100644 --- a/client/src/pages/PaymentAccountsPage.tsx +++ b/client/src/pages/PaymentAccountsPage.tsx @@ -138,7 +138,7 @@ export function PaymentAccountsPage() { {canManage && companyState.kind === "multiple" ? (
-

检测到多条启用的公司信息,系统不会猜测付款账户应关联哪一条。请先处理公司信息。

+

检测到多条启用的公司信息,系统不会猜测付款账户应关联哪一条。请先完善公司信息。

{canManageCompanyInformation ? (