"use client" import { useState, useEffect } from "react" import { useRouter } from "next/navigation" import { Card } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { ChevronLeft, Plus, Filter, Search, RefreshCw, QrCode } from "lucide-react" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Checkbox } from "@/components/ui/checkbox" import { toast } from "@/components/ui/use-toast" import { Badge } from "@/components/ui/badge" import { Dialog, DialogContent, DialogHeader, DialogTitle } from "@/components/ui/dialog" interface Device { id: string imei: string name: string remark: string status: "online" | "offline" battery: number wechatId: string friendCount: number todayAdded: number messageCount: number lastActive: string addFriendStatus: "normal" | "abnormal" avatar?: string } export default function DevicesPage() { const router = useRouter() const [devices, setDevices] = useState([]) const [isAddDeviceOpen, setIsAddDeviceOpen] = useState(false) const [stats, setStats] = useState({ totalDevices: 42, onlineDevices: 35, }) const [searchQuery, setSearchQuery] = useState("") const [statusFilter, setStatusFilter] = useState("all") const [currentPage, setCurrentPage] = useState(1) const [selectedDevices, setSelectedDevices] = useState([]) const devicesPerPage = 10 useEffect(() => { // 模拟API调用 const fetchDevices = async () => { const mockDevices = Array.from({ length: 42 }, (_, i) => ({ id: `device-${i + 1}`, imei: `sd${123123 + i}`, name: `设备 ${i + 1}`, remark: `备注 ${i + 1}`, status: Math.random() > 0.2 ? "online" : "offline", battery: Math.floor(Math.random() * 100), wechatId: `wxid_${Math.random().toString(36).substr(2, 8)}`, friendCount: Math.floor(Math.random() * 1000), todayAdded: Math.floor(Math.random() * 50), messageCount: Math.floor(Math.random() * 200), lastActive: new Date(Date.now() - Math.random() * 86400000).toLocaleString(), addFriendStatus: Math.random() > 0.2 ? "normal" : "abnormal", avatar: "https://hebbkx1anhila5yf.public.blob.vercel-storage.com/image-kYhfQsrrByfbzefv6MEV7W7ogz0IRt.png", })) setDevices(mockDevices) } fetchDevices() }, []) const handleRefresh = () => { toast({ title: "刷新成功", description: "设备列表已更新", }) } const filteredDevices = devices.filter((device) => { const matchesSearch = device.name.toLowerCase().includes(searchQuery.toLowerCase()) || device.imei.toLowerCase().includes(searchQuery.toLowerCase()) || device.wechatId.toLowerCase().includes(searchQuery.toLowerCase()) const matchesStatus = statusFilter === "all" || device.status === statusFilter return matchesSearch && matchesStatus }) const paginatedDevices = filteredDevices.slice((currentPage - 1) * devicesPerPage, currentPage * devicesPerPage) const handleBatchDelete = () => { if (selectedDevices.length === 0) { toast({ title: "请选择设备", description: "您需要选择至少一个设备来执行批量删除操作", variant: "destructive", }) return } toast({ title: "批量删除成功", description: `已删除 ${selectedDevices.length} 个设备`, }) setSelectedDevices([]) } const handleDeviceClick = (deviceId: string) => { router.push(`/devices/${deviceId}`) } return (

设备管理

总设备数
{stats.totalDevices}
在线设备
{stats.onlineDevices}
setSearchQuery(e.target.value)} className="pl-9" />
{ if (checked) { setSelectedDevices(paginatedDevices.map((d) => d.id)) } else { setSelectedDevices([]) } }} /> 全选
{paginatedDevices.map((device) => ( handleDeviceClick(device.id)} >
{ if (checked) { setSelectedDevices([...selectedDevices, device.id]) } else { setSelectedDevices(selectedDevices.filter((id) => id !== device.id)) } }} onClick={(e) => e.stopPropagation()} />
{device.name}
{device.status === "online" ? "在线" : "离线"}
IMEI: {device.imei}
微信号: {device.wechatId}
好友数: {device.friendCount} 今日新增: +{device.todayAdded}
))}
第 {currentPage} / {Math.ceil(filteredDevices.length / devicesPerPage)} 页
添加设备

请使用设备扫描二维码进行添加
或手动输入设备ID

) }