diff --git a/client/src/pages/InvoicePoolPage.tsx b/client/src/pages/InvoicePoolPage.tsx index 58be4906..2aa54758 100644 --- a/client/src/pages/InvoicePoolPage.tsx +++ b/client/src/pages/InvoicePoolPage.tsx @@ -177,9 +177,9 @@ export function InvoicePoolPage() { if (previousStatus === "pending_ocr" && currentStatus && currentStatus !== "pending_ocr") { void queryClient.invalidateQueries({ queryKey: ["invoice-pool"] }); if (currentStatus === "available") { - toast.success("票据 OCR 已完成,可继续绑定或验真"); + toast.success("票据识别已完成,可继续绑定或验真"); } else if (currentStatus === "ocr_failed") { - toast.error(`票据 OCR 未完成:${formatInvoiceOcrErrorMessage(detailQuery.data?.ocrLastError)}`); + toast.error(`票据识别未完成:${formatInvoiceOcrErrorMessage(detailQuery.data?.ocrLastError)}`); } } @@ -268,7 +268,7 @@ export function InvoicePoolPage() { setError(""); const hasPending = result.successes.some((item) => item.data.status === "pending_ocr"); - toast.success(hasPending ? `已上传 ${result.successes.length} 个,OCR 识别中` : `已上传 ${result.successes.length} 个,可直接处理`); + toast.success(hasPending ? `已上传 ${result.successes.length} 个,识别中` : `已上传 ${result.successes.length} 个,可直接处理`); }, onSettled: () => setUploadProgress(null), onError: (err) => handleError(err, "上传失败,请稍后重试"), @@ -368,9 +368,9 @@ export function InvoicePoolPage() { onSuccess: async () => { await queryClient.invalidateQueries({ queryKey: ["invoice-pool"] }); setError(""); - toast.success("OCR 重试已触发"); + toast.success("已开始重新识别"); }, - onError: (err) => handleError(err, "OCR 重试失败,请稍后再试"), + onError: (err) => handleError(err, "重新识别失败,请稍后再试"), }); const triggerVerificationMutation = useMutation({ diff --git a/client/src/pages/MobileApprovalsPage.tsx b/client/src/pages/MobileApprovalsPage.tsx index 6fcece69..8d6a5173 100644 --- a/client/src/pages/MobileApprovalsPage.tsx +++ b/client/src/pages/MobileApprovalsPage.tsx @@ -771,66 +771,73 @@ export function MobileApprovalsPage() { - setEntityFilter(value as EntityFilter)}> - - {ENTITY_FILTER_OPTIONS.map((option) => ( - - {option.label} - - ))} - - -
setSearchInput(event.target.value)} - placeholder="搜索步骤名、业务类型、任务 ID 或业务实体 ID" + placeholder="搜索待办" /> - {taskTab === "pending" ? ( -
- - {batchMode ? ( - - ) : null} - - 当前结果 {filteredTaskCards.length} 条 - {batchMode ? `,已选 ${selectedBatchTaskIds.length} 条` : ""} - +
+ + 筛选与批量 + +
+ setEntityFilter(value as EntityFilter)}> + + {ENTITY_FILTER_OPTIONS.map((option) => ( + + {option.label} + + ))} + + + + {taskTab === "pending" ? ( +
+ + {batchMode ? ( + + ) : null} + + 当前 {filteredTaskCards.length} 条 + {batchMode ? `,已选 ${selectedBatchTaskIds.length}` : ""} + +
+ ) : ( +

仅显示最近 30 天。

+ )}
- ) : ( -

已处理页仅展示最近 30 天内的 completed 任务。

- )} +
{batchMode ? (
-
已选择 {selectedBatchTaskIds.length} 条待办,可在线串行处理或离线逐条入队。
+
已选 {selectedBatchTaskIds.length} 条
@@ -920,7 +927,7 @@ export function MobileApprovalsPage() {
{task.title}
-
任务:{task.id}
+
任务:{task.id}
{task.subtitle}
{task.isCached ?
来源:离线缓存
: null} @@ -955,7 +962,7 @@ export function MobileApprovalsPage() {
-

详情与处理

+

处理

{!selectedTaskId ?

请先选择任务。

: null} @@ -1025,13 +1032,13 @@ export function MobileApprovalsPage() {