"use client" import { useState } from "react" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuTrigger, } from "@/components/ui/dropdown-menu" import { Checkbox } from "@/components/ui/checkbox" import { MoreHorizontal, Edit, Trash2, BarChart2, Tag } from "lucide-react" interface TrafficPool { id: string keyword: string source: string category: string volume: "high" | "medium" | "low" matchedUsers: number createdAt: Date updatedAt: Date tags: string[] } interface TrafficPoolListProps { searchQuery: string } export function TrafficPoolList({ searchQuery }: TrafficPoolListProps) { const [selectedKeywords, setSelectedKeywords] = useState([]) // 模拟数据 const keywords: TrafficPool[] = [ { id: "1", keyword: "数字营销", source: "搜索引擎", category: "营销", volume: "high", matchedUsers: 1250, createdAt: new Date(2023, 5, 15), updatedAt: new Date(2023, 6, 20), tags: ["高意向", "B端客户"], }, { id: "2", keyword: "用户画像", source: "社交媒体", category: "数据分析", volume: "high", matchedUsers: 980, createdAt: new Date(2023, 4, 10), updatedAt: new Date(2023, 6, 18), tags: ["数据分析", "企业客户"], }, { id: "3", keyword: "流量获取", source: "广告投放", category: "营销", volume: "medium", matchedUsers: 645, createdAt: new Date(2023, 3, 5), updatedAt: new Date(2023, 5, 25), tags: ["获客", "营销人员"], }, { id: "4", keyword: "数据可视化", source: "内容营销", category: "数据分析", volume: "medium", matchedUsers: 520, createdAt: new Date(2023, 2, 20), updatedAt: new Date(2023, 6, 19), tags: ["技术", "数据分析师"], }, { id: "5", keyword: "精准营销", source: "搜索引擎", category: "营销", volume: "high", matchedUsers: 1100, createdAt: new Date(2023, 1, 15), updatedAt: new Date(2023, 4, 10), tags: ["高转化", "营销经理"], }, ] // 过滤关键词 const filteredKeywords = keywords.filter( (keyword) => keyword.keyword.toLowerCase().includes(searchQuery.toLowerCase()) || keyword.source.toLowerCase().includes(searchQuery.toLowerCase()) || keyword.category.toLowerCase().includes(searchQuery.toLowerCase()) || keyword.tags.some((tag) => tag.toLowerCase().includes(searchQuery.toLowerCase())), ) const toggleSelectAll = () => { if (selectedKeywords.length === filteredKeywords.length) { setSelectedKeywords([]) } else { setSelectedKeywords(filteredKeywords.map((k) => k.id)) } } const toggleSelectKeyword = (id: string) => { if (selectedKeywords.includes(id)) { setSelectedKeywords(selectedKeywords.filter((k) => k !== id)) } else { setSelectedKeywords([...selectedKeywords, id]) } } const getVolumeBadge = (volume: string) => { switch (volume) { case "high": return case "medium": return case "low": return default: return 未知 } } const formatDate = (date: Date) => { return date.toLocaleDateString("zh-CN", { year: "numeric", month: "2-digit", day: "2-digit", }) } return (
{selectedKeywords.length > 0 && (
已选择 {selectedKeywords.length} 项
)}
0} onCheckedChange={toggleSelectAll} aria-label="Select all" /> 关键词 来源 分类 流量 匹配用户数 创建时间 更新时间 标签 操作 {filteredKeywords.map((keyword) => ( toggleSelectKeyword(keyword.id)} aria-label={`Select ${keyword.keyword}`} /> {keyword.keyword} {keyword.source} {keyword.category} {getVolumeBadge(keyword.volume)} {keyword.matchedUsers.toLocaleString()} {formatDate(keyword.createdAt)} {formatDate(keyword.updatedAt)}
{keyword.tags.map((tag) => ( {tag} ))}
操作 编辑 查看分析 管理标签 删除
))}
) }