import type { Dispatch, SetStateAction } from 'react'; import { ChevronDown, ChevronRight, Edit3, Plus } from 'lucide-react'; import type { ClientSmsSignature } from '@/api/adminApi'; import { Button, DeleteRiskAction, Pagination } from '@/components/ui'; import { AuditStatusTag, CarrierReportCount, formatSignatureName, readDrainagePayload, signatureCardVisual, } from './signature.helpers'; import type { DrainageInfo } from './signature.types'; type EnterpriseSignaturesTableProps = { appliedDrainageKeyword: string; currentPage: number; expandedSignatureId: string; filteredSignatures: ClientSmsSignature[]; loadData: () => Promise; onAddDrainage: (signature: ClientSmsSignature) => void; setDeleteTarget: Dispatch>; onEditDrainage: (signature: ClientSmsSignature, item: DrainageInfo) => void; onOpenDrainageReport: (signature: ClientSmsSignature, item: DrainageInfo) => void; setExpandedSignatureId: Dispatch>; setPage: Dispatch>; onEditSignature: (signature: ClientSmsSignature) => void; onOpenSignatureReport: (signature: ClientSmsSignature) => void; total: number; totalPages: number; visibleSignatures: ClientSmsSignature[]; }; export function EnterpriseSignaturesTable({ appliedDrainageKeyword, currentPage, expandedSignatureId, filteredSignatures, loadData, onAddDrainage, setDeleteTarget, onEditDrainage, onOpenDrainageReport, setExpandedSignatureId, setPage, onEditSignature, onOpenSignatureReport, total, totalPages, visibleSignatures, }: EnterpriseSignaturesTableProps) { return (
{visibleSignatures.map((signature) => { const payload = readDrainagePayload(signature); const visibleDrainageLinks = appliedDrainageKeyword ? payload.links.filter((item) => `${item.siteName} ${item.url} ${item.remark}`.includes(appliedDrainageKeyword), ) : payload.links; const cardVisual = signatureCardVisual(signature.auditStatus, signature.carrierReportSummary); const expanded = expandedSignatureId === signature.id || Boolean(appliedDrainageKeyword); const signatureTooltip = [ `签名:${formatSignatureName(signature.name)}`, `企业:${signature.tenant?.name ?? signature.tenantId}`, `应用:${signature.application?.name ?? '未绑定应用'}`, `用途:${signature.purpose || '未填写'}`, `审核状态:${signature.auditStatus}`, `创建时间:${signature.createdAt ? new Date(signature.createdAt).toLocaleString('zh-CN') : '未知'}`, `更新时间:${signature.updatedAt ? new Date(signature.updatedAt).toLocaleString('zh-CN') : '未知'}`, ].join('\n'); return (
{formatSignatureName(signature.name)}
{signature.tenant?.name ?? signature.tenantId}
{signature.application?.name ?? '-'}
{payload.links.length} 条
void loadData()} portal="admin" targetId={signature.id} targetType="signature" />
{expanded ? (

引流信息列表

{visibleDrainageLinks.length ? (
引流url或号码 审核状态 移动 联通 电信 操作
{visibleDrainageLinks.map((item) => { const summary = signature.drainageCarrierReportSummary?.[item.id]; return (
{item.url}
); })}
) : (

暂无引流信息

)}
) : null}
); })} = totalPages} onNext={() => setPage((value) => Math.min(totalPages, value + 1))} onPrevious={() => setPage((value) => Math.max(1, value - 1))} page={currentPage} totalPages={totalPages} onPageChange={setPage} previousDisabled={currentPage <= 1} total={total} /> {filteredSignatures.length === 0 ?
暂无企业签名
: null}
); }