"use client" import { useState, useEffect } from "react" import { Card, CardContent } from "@/components/ui/card" import { Input } from "@/components/ui/input" import { Button } from "@/components/ui/button" import { useDebounce } from "@/hooks/use-debounce" import { Skeleton } from "@/components/ui/skeleton" // 模拟流量池数据 const mockTrafficPools = [ { id: "1", name: "抖音流量池", source: "douyin", count: 1250 }, { id: "2", name: "微信流量池", source: "wechat", count: 3420 }, { id: "3", name: "电话流量池", source: "phone", count: 890 }, { id: "4", name: "海报流量池", source: "poster", count: 1670 }, { id: "5", name: "高意向客户池", source: "mixed", count: 520 }, { id: "6", name: "新客户流量池", source: "mixed", count: 780 }, ] interface TrafficPoolSelectorProps { selectedPoolId?: string onSelect: (poolId: string, poolName: string) => void } export default function TrafficPoolSelector({ selectedPoolId, onSelect }: TrafficPoolSelectorProps) { const [searchTerm, setSearchTerm] = useState("") const [isLoading, setIsLoading] = useState(true) const [pools, setPools] = useState([]) const debouncedSearchTerm = useDebounce(searchTerm, 300) // 加载流量池数据 useEffect(() => { const fetchPools = async () => { setIsLoading(true) try { // 模拟API调用 await new Promise((resolve) => setTimeout(resolve, 800)) // 根据搜索词过滤 const filteredPools = mockTrafficPools.filter((pool) => pool.name.toLowerCase().includes(debouncedSearchTerm.toLowerCase()), ) setPools(filteredPools) } catch (error) { console.error("获取流量池数据失败:", error) setPools([]) } finally { setIsLoading(false) } } fetchPools() }, [debouncedSearchTerm]) return (
setSearchTerm(e.target.value)} className="mb-4" /> {isLoading ? (
{[1, 2, 3].map((i) => ( ))}
) : pools.length > 0 ? (
{pools.map((pool) => ( onSelect(pool.id, pool.name)} >
{pool.name}
{pool.count} 条数据
))}
) : (

未找到匹配的流量池

)}
) }