import React from 'react' import { MoreVertical, Wifi, WifiOff, Settings, Trash2, Edit, Activity, Calendar } from 'lucide-react' import { formatDistanceToNow } from 'date-fns' import { zhCN } from 'date-fns/locale' import { Card, CardContent, CardHeader, CardTitle } from '../ui/card' import { Button } from '../ui/button' import { Badge } from '../ui/badge' import { StatusIndicator } from '../ui/status-indicator' import { DeviceDto, DeviceStatus } from '../../types/device' interface DeviceCardProps { device: DeviceDto onEdit?: (device: DeviceDto) => void onDelete?: (device: DeviceDto) => void onConfigure?: (device: DeviceDto) => void className?: string } export function DeviceCard({ device, onEdit, onDelete, onConfigure, className }: DeviceCardProps) { const getStatusConfig = (status: DeviceStatus) => { switch (status) { case DeviceStatus.ONLINE: return { variant: 'success' as const, icon: , text: '在线' } case DeviceStatus.OFFLINE: return { variant: 'destructive' as const, icon: , text: '离线' } case DeviceStatus.ACTIVE: return { variant: 'success' as const, icon: , text: '活跃' } case DeviceStatus.INACTIVE: return { variant: 'secondary' as const, icon: , text: '非活跃' } case DeviceStatus.MAINTENANCE: return { variant: 'warning' as const, icon: , text: '维护中' } default: return { variant: 'secondary' as const, icon: , text: '未知' } } } const statusConfig = getStatusConfig(device.status) const getLastSeenText = () => { if (!device.lastSeenAt) { return '从未连接' } return formatDistanceToNow(new Date(device.lastSeenAt), { addSuffix: true, locale: zhCN }) } const getRegisteredText = () => { return formatDistanceToNow(new Date(device.registeredAt), { addSuffix: true, locale: zhCN }) } return ( {device.deviceName || '未命名设备'} {statusConfig.icon} {statusConfig.text} {/* Dropdown menu would go here in a real implementation */} {/* Device Details */} 硬件ID {device.hardwareId} 最后连接 {getLastSeenText()} 注册时间 {getRegisteredText()} {/* Action Buttons */} {onConfigure && ( onConfigure(device)} className="flex-1" > 配置 )} {onEdit && ( onEdit(device)} className="flex-1" > 编辑 )} {onDelete && ( onDelete(device)} className="w-full text-red-600 border-red-200 hover:bg-red-50" > 删除设备 )} ) }