"use client" import { useState, useEffect } from "react" import { Button } from "@/components/ui/button" import { Card, CardContent } from "@/components/ui/card" import { Checkbox } from "@/components/ui/checkbox" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Avatar } from "@/components/ui/avatar" import { Search, Smartphone } from "lucide-react" import { Input } from "@/components/ui/input" import { api } from "@/lib/api" import { DeviceSelectionDialog } from "@/app/components/device-selection-dialog" import { Dialog, DialogContent, DialogTitle } from "@/components/ui/dialog" interface Device { id: string name: string status: "online" | "offline" avatar?: string } interface TargetSettingsStepProps { onNext: (data: any) => void onBack: () => void initialData?: any } export default function TargetSettingsStep({ onNext, onBack, initialData = {}, setDevices }: TargetSettingsStepProps & { setDevices: (ids: string[]) => void }) { const [deviceList, setDeviceList] = useState([]) const [selectedDeviceIds, setSelectedDeviceIds] = useState([]) const [search, setSearch] = useState("") const [loading, setLoading] = useState(false) const [deviceDialogOpen, setDeviceDialogOpen] = useState(false) const [statusFilter, setStatusFilter] = useState("all") // 每次 initialData.devices 变化时,同步 selectedDeviceIds useEffect(() => { const ids = Array.isArray(initialData.devices) ? initialData.devices.map(String) : []; setSelectedDeviceIds(ids); }, [initialData.devices]) useEffect(() => { setLoading(true) api.get('/v1/devices?page=1&limit=100').then((res: any) => { setDeviceList(res.data?.list || []) }).finally(() => setLoading(false)) }, []) const filteredDevices = deviceList.filter(device => { const matchesSearch = search === "" || (device.memo || device.nickname || "").toLowerCase().includes(search.toLowerCase()) || (device.imei || "").toLowerCase().includes(search.toLowerCase()) || (device.wechatId || "").toLowerCase().includes(search.toLowerCase()) const matchesStatus = statusFilter === "all" || (statusFilter === "online" ? device.alive === 1 : device.alive !== 1) return matchesSearch && matchesStatus }) const handleSubmit = () => { onNext({ devices: selectedDeviceIds }) } // 弹窗内确认选择 const handleDialogConfirm = () => { if (typeof setDevices === 'function') { setDevices(selectedDeviceIds) } setDeviceDialogOpen(false) } return (

目标设置

{/* 设备选择 */}
0 ? `已选择${selectedDeviceIds.length}个设备` : ''} readOnly className="pl-10 cursor-pointer" onClick={() => setDeviceDialogOpen(true)} />
{/* 已选设备展示优化 */}
已选设备: {selectedDeviceIds.length === 0 ? ( 未选择 ) : ( {selectedDeviceIds.length} 个 )}
{/* 设备选择弹窗 */} 选择设备
{/* 搜索和筛选 */}
setSearch(e.target.value)} className="flex-1 rounded-lg border-gray-200 focus:border-blue-500 focus:ring-2 focus:ring-blue-100" />
{/* 设备列表 */}
{loading ? (
加载中...
) : filteredDevices.length === 0 ? (
暂无设备
) : ( filteredDevices.map(device => ( )) )}
{/* 确认按钮 */}
) }