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}
/>
);
}