import type { UseMutationResult, UseQueryResult } from "@tanstack/react-query"; import type { InvoicePoolListResponse, InvoicePoolStatus } from "../../api/invoicePool"; import { StatusBadge } from "../../components/common/StatusBadge"; import { TableSkeleton } from "../../components/common/TableSkeleton"; import { Pagination } from "../../components/common/Pagination"; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "../../components/ui/dropdown-menu"; import { Button } from "../../components/ui/button"; import { formatDisplayDate } from "../../lib/displayFormat"; import { formatInvoiceOcrErrorMessage } from "../../lib/invoiceOcr"; export type InvoiceListCardProps = { listQuery: UseQueryResult; status: InvoicePoolStatus | ""; setStatus: (status: InvoicePoolStatus | "") => void; ownerScope: "own" | "all"; setOwnerScope: (scope: "own" | "all") => void; page: number; setPage: (page: number) => void; totalPages: number; detailInvoiceId: string; setDetailInvoiceId: (id: string) => void; signedUrlMutation: UseMutationResult<{ signedUrl: string; expiresAt: string }, Error, string>; }; function invoiceDisplayName(item: InvoicePoolListResponse["items"][number]) { if (item.originalName) return item.originalName; if (item.invoiceCode || item.invoiceNumber) return "已识别票据"; return "待识别票据"; } function invoiceNumberDisplay(item: InvoicePoolListResponse["items"][number]) { return [item.invoiceCode, item.invoiceNumber].filter(Boolean).join("-") || "-"; } export function InvoiceListCard({ listQuery, status, setStatus, ownerScope, setOwnerScope, page, setPage, totalPages, setDetailInvoiceId, signedUrlMutation, }: InvoiceListCardProps) { return (

票据列表

{listQuery.isLoading ? : null} {!listQuery.isLoading ? ( <>
{(listQuery.data?.items ?? []).length ? ( listQuery.data?.items.map((item) => (
{invoiceDisplayName(item)}
{item.invoiceDate ? formatDisplayDate(item.invoiceDate) : "待识别"}
发票号码
{invoiceNumberDisplay(item)}
金额
{item.totalAmount ?? "-"}
{item.status === "pending_ocr" ? `识别中,已尝试 ${item.ocrAttempts} 次` : item.status === "ocr_failed" ? `识别失败:${formatInvoiceOcrErrorMessage(item.ocrLastError)}` : "已识别"}
)) ) : (
暂无票据数据
)}
{(listQuery.data?.items ?? []).length ? ( listQuery.data?.items.map((item) => ( )) ) : ( )}
票据名称 状态 发票号码 识别状态 操作
{invoiceDisplayName(item)}
{item.invoiceDate ? formatDisplayDate(item.invoiceDate) : "待识别"}
{invoiceNumberDisplay(item)} {item.status === "pending_ocr" ? ( 识别中 (重试: {item.ocrAttempts}) ) : item.status === "ocr_failed" ? ( 识别失败 ({formatInvoiceOcrErrorMessage(item.ocrLastError)}) ) : ( 已识别 )} more_horiz setDetailInvoiceId(item.id)}> 查看详情 signedUrlMutation.mutate(item.id)}> 预览
暂无票据数据
) : null}
); }