import { Copy, Eye, FileText, Pencil, Power, Send } from 'lucide-react'; import { DeleteRiskAction, Pagination, Tag } from '@/components/ui'; import { formatCents } from '@/utils/currency'; import { carrierLabelMap, carrierToneMap, statusLabelMap, statusToneMap } from './channelModel'; import type { ChannelConfirmAction, ChannelModalState, SmsChannel } from './channelTypes'; function RateBlock({ label, rate, count, tone = 'neutral' }: { label: string; rate: number; count: number; tone?: 'success' | 'warning' | 'danger' | 'neutral' }) { return (
{label} {rate}% {count.toLocaleString('zh-CN')}
); } export function ChannelTable({ channels, currentPage, total, totalPages, onPageChange, onOpenLogs, onOpenReports, onEdit, onConfirm, onTest, onDeleted, }: { channels: SmsChannel[]; currentPage: number; total: number; totalPages: number; onPageChange: (page: number | ((value: number) => number)) => void; onOpenLogs: (channel: SmsChannel) => void; onOpenReports: (channel: SmsChannel) => void; onEdit: (modal: ChannelModalState) => void; onConfirm: (action: ChannelConfirmAction) => void; onTest: (channel: SmsChannel) => void; onDeleted: () => void; }) { return (
通道信息 运营商 / 成本 状态 今日提交 今日提交 / 送达质量 操作
{channels.map((channel) => (
{channel.name} 通道 ID:{channel.id}
{carrierLabelMap[channel.carrier]} {formatCents(channel.unitPrice)} 元
{statusLabelMap[channel.status]}
{channel.total.toLocaleString('zh-CN')}
0 ? 'danger' : 'neutral'} /> = 80 ? 'success' : 'warning'} /> = 50 ? 'danger' : 'neutral'} />
))} = totalPages} onNext={() => onPageChange((value) => Math.min(totalPages, value + 1))} onPrevious={() => onPageChange((value) => Math.max(1, value - 1))} page={currentPage} totalPages={totalPages} onPageChange={onPageChange} previousDisabled={currentPage <= 1} total={total} />
); }