import { useEffect, useMemo, useState } from 'react'; import { Activity } from 'lucide-react'; import { Breadcrumb, Button, Table, Tag, type TableColumn } from '@/components/ui'; import { adminApi, type AdminChannel } from '@/api/adminApi'; const columns: Array> = [ { key: 'id', title: '通道编号', render: (record) => record.id }, { key: 'name', title: '通道名称', render: (record) => record.name }, { key: 'carrier', title: '运营商', render: (record) => record.carrier ?? '-' }, { key: 'gatewayHost', title: '网关地址', render: (record) => `${record.gatewayHost}:${record.gatewayPort}` }, { key: 'rateLimitPerSecond', title: '限速', render: (record) => `${record.rateLimitPerSecond} 条/秒` }, { key: 'status', title: '状态', render: (record) => {record.status === 'active' ? '运行中' : '已停用'}, }, ]; export function AdminMonitorPage() { const [channels, setChannels] = useState([]); const [monitor, setMonitor] = useState>({}); const [loading, setLoading] = useState(true); const [error, setError] = useState(''); function loadData() { setLoading(true); Promise.all([adminApi.listChannels(), adminApi.listMonitor()]) .then(([channelItems, monitorData]) => { setChannels(channelItems.filter((item) => item.status !== 'deleted')); setMonitor(monitorData); setError(''); }) .catch((reason: Error) => setError(reason.message || '监控数据加载失败')) .finally(() => setLoading(false)); } useEffect(() => { loadData(); }, []); const enabledChannels = channels.filter((item) => item.status === 'active').length; const statusGroups = Array.isArray(monitor.byStatus) ? monitor.byStatus as Array<{ status: string; _count: { _all: number } }> : []; const totalMessages = useMemo(() => statusGroups.reduce((sum, item) => sum + (item._count?._all ?? 0), 0), [statusGroups]); const deliveredMessages = useMemo(() => statusGroups.filter((item) => item.status === 'delivered').reduce((sum, item) => sum + (item._count?._all ?? 0), 0), [statusGroups]); const successRate = totalMessages > 0 ? ((deliveredMessages / totalMessages) * 100).toFixed(1) : '0.0'; return (
{loading ?

正在加载监控数据...

: null} {error ?

{error}

: null}
运行通道 {enabledChannels} 共 {channels.length} 条通道
平均成功率 {successRate}% 真实消息记录
消息总量 {totalMessages.toLocaleString('zh-CN')} 按当前查询聚合
); }