"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, Users, 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 CustomerService { 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") // 账号选择相关状态 const [accountDialogOpen, setAccountDialogOpen] = useState(false) const [accountList, setAccountList] = useState([]) const [selectedAccountIds, setSelectedAccountIds] = useState([]) const [accountPage, setAccountPage] = useState(1) const [accountTotal, setAccountTotal] = useState(0) const [accountLoading, setAccountLoading] = useState(false) // 每次 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)) }, []) // 同步初始账号 useEffect(() => { const ids = Array.isArray(initialData.accounts) ? initialData.accounts.map(String) : []; setSelectedAccountIds(ids); }, [initialData.accounts]) // 拉取账号列表 useEffect(() => { setAccountLoading(true) api.get(`/v1/workbench/account-list?page=${accountPage}&size=10`).then((res: any) => { setAccountList(res.data?.list || []) setAccountTotal(res.data?.total || 0) }).finally(() => setAccountLoading(false)) }, [accountPage]) // 账号弹窗每次打开时同步反选 useEffect(() => { if (accountDialogOpen) { const ids = Array.isArray(initialData.accounts) ? initialData.accounts.map(String) : []; setSelectedAccountIds(ids); } }, [accountDialogOpen, initialData.accounts]) 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, accounts: selectedAccountIds }) } // 弹窗内确认选择 const handleDialogConfirm = () => { if (typeof setDevices === 'function') { setDevices(selectedDeviceIds) } setDeviceDialogOpen(false) } // 账号弹窗确认 const handleAccountDialogConfirm = () => { setAccountDialogOpen(false) } return (

目标设置

{/* 设备选择 */}
0 ? `已选择${selectedDeviceIds.length}个设备` : ''} readOnly className="pl-10 cursor-pointer" onClick={() => setDeviceDialogOpen(true)} />
{/* 账号选择 */}
0 ? `已选择${selectedAccountIds.length}个账号` : ''} readOnly className="pl-10 cursor-pointer" onClick={() => setAccountDialogOpen(true)} />
{/* 已选账号/设备展示优化 */}
已选账号: {selectedAccountIds.length === 0 ? ( 未选择 ) : ( {selectedAccountIds.length} 个 )}
已选设备: {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 => ( )) )}
{/* 确认按钮 */}
{/* 账号选择弹窗 */} 选择账号
{/* 账号列表 */}
{accountLoading ? (
加载中...
) : accountList.length === 0 ? (
暂无账号
) : ( accountList.map(account => ( )) )}
{/* 分页 */}
第 {accountPage} 页 / 共 {Math.ceil(accountTotal / 10) || 1} 页
{/* 确认按钮 */}
) }