import { useNavigate } from 'react-router-dom' import { Server, Cpu, HardDrive, MemoryStick, Globe, Play, Square, RotateCcw, Trash2, } from 'lucide-react' import { Container, startContainer, stopContainer, restartContainer, deleteContainer } from '../services/api' interface ContainerCardProps { container: Container onRefresh: () => void } export default function ContainerCard({ container, onRefresh }: ContainerCardProps) { const navigate = useNavigate() const containerIdentifier = container.uuid || container.id const handleAction = async (action: string) => { try { switch (action) { case 'start': await startContainer(containerIdentifier) break case 'stop': await stopContainer(containerIdentifier) break case 'restart': await restartContainer(containerIdentifier) break case 'delete': if (window.confirm(`确定要删除容器 ${container.name} 吗?此操作不可撤销。`)) { await deleteContainer(containerIdentifier) } else { return } break } onRefresh() } catch (err) { console.error('Action failed:', err) alert('操作失败') } } const statusColor = container.status === 'running' ? 'bg-green-500' : 'bg-red-500' const statusText = container.status === 'running' ? '运行中' : '已停止' return (
{/* Header */}
{statusText}
{/* Specs */}
{container.vcpu} vCPU
{container.ram_mb} MB
{container.disk_gb} GB
{formatNetworkLimit(container)}
{container.ip && (
IP: {container.ip}
)} {/* Actions */}
{container.status !== 'running' ? ( ) : ( <> )}
) } function formatNetworkLimit(container: { network_bw_mbps?: number; network_down_mbps?: number; network_up_mbps?: number }) { const down = Math.max(0, Number(container.network_down_mbps || container.network_bw_mbps || 0)) const up = Math.max(0, Number(container.network_up_mbps || container.network_bw_mbps || 0)) if (down === 0 && up === 0) return '不限速' return `下 ${down || '不限'} / 上 ${up || '不限'} Mbps` }