// 服务器表格行 — 纯展示子组件(接收 props,不直接调 API) // Logan.Li import { cn } from '@/lib/utils'; import { Badge } from '@/components/ui/badge'; import { Button } from '@/components/ui/button'; import { Checkbox } from '@/components/ui/checkbox'; import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from '@/components/ui/dropdown-menu'; import { TableCell, TableRow } from '@/components/ui/table'; import { Cpu, Edit, MoreHorizontal, Server as ServerIcon, Terminal, Trash2 } from "lucide-react"; import { getStatusBadge, getTags, getUsageColor } from './serverHelpers'; interface ServerTableRowProps { server: any; selected: boolean; onToggleSelect: (id: string) => void; onOpenTerminal: (server: any) => void; onOpenEdit: (server: any) => void; onDelete: (id: string) => void; onInstallAgent: (server: any) => void; } export function ServerTableRow({ server, selected, onToggleSelect, onOpenTerminal, onOpenEdit, onDelete, onInstallAgent, }: ServerTableRowProps) { const cpuUsage = Number(server.cpu_usage || 0); const memoryUsage = Number(server.memory_usage || 0); const tags = getTags(server); const memGB = server.memory ? Math.round(server.memory / 1024) : 0; return ( onToggleSelect(server.id)} className="border-[var(--dg-border)]" />

{server.hostname}

{server.os}

{server.ip} {server.public_ip ? ( {server.public_ip} ) : ( - )} {getStatusBadge(server.status)}
{server.cpu}核 / {memGB}GB / {server.disk}GB
CPU
{cpuUsage.toFixed(1)}%
内存
{memoryUsage.toFixed(1)}%
{tags.slice(0, 3).map((tag) => ( {tag} ))} {tags.length > 3 && ( +{tags.length - 3} )}
操作 onOpenEdit(server)} > 编辑 onOpenTerminal(server)} > 终端 onInstallAgent(server)} > 安装Agent onDelete(server.id)} > 删除
); }