"use client" import { useState } from "react" import { Search, Plus, X } from "lucide-react" import { Input } from "@/components/ui/input" import { Button } from "@/components/ui/button" import { Card } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Tabs, TabsList, TabsTrigger } from "@/components/ui/tabs" import { ScrollArea } from "@/components/ui/scroll-area" interface KeywordSelectorProps { onSelect: (keywords: string[]) => void initialSelected?: string[] } export default function KeywordSelector({ onSelect, initialSelected = [] }: KeywordSelectorProps) { const [searchQuery, setSearchQuery] = useState("") const [selectedKeywords, setSelectedKeywords] = useState(initialSelected) const [activeCategory, setActiveCategory] = useState("popular") // 模拟关键词数据 const keywordCategories = { popular: [ "电商运营", "社交媒体", "短视频", "直播带货", "私域流量", "用户增长", "品牌营销", "内容创作", "数据分析", "SEO优化", "付费推广", "用户留存", "转化率", "客户服务", "产品推荐", ], industry: [ "美妆护肤", "服装穿搭", "数码科技", "家居生活", "母婴育儿", "食品饮料", "健康养生", "教育培训", "金融理财", "旅游出行", ], scenario: [ "节日促销", "新品上市", "会员活动", "限时折扣", "满减优惠", "秒杀活动", "拼团活动", "签到奖励", "复购激励", "用户调研", ], custom: ["我的标签1", "我的标签2", "我的标签3", "自定义标签", "个性化标签"], } const filteredKeywords = searchQuery ? Object.values(keywordCategories) .flat() .filter((kw) => kw.includes(searchQuery)) : keywordCategories[activeCategory as keyof typeof keywordCategories] const handleKeywordToggle = (keyword: string) => { let newSelected if (selectedKeywords.includes(keyword)) { newSelected = selectedKeywords.filter((k) => k !== keyword) } else { newSelected = [...selectedKeywords, keyword] } setSelectedKeywords(newSelected) onSelect(newSelected) } const handleRemoveKeyword = (keyword: string) => { const newSelected = selectedKeywords.filter((k) => k !== keyword) setSelectedKeywords(newSelected) onSelect(newSelected) } return (
{/* 已选关键词展示 */} {selectedKeywords.length > 0 && (
已选关键词
{selectedKeywords.map((keyword) => ( {keyword} ))}
)} {/* 搜索框 */}
setSearchQuery(e.target.value)} className="pl-9" />
{/* 分类标签页 */} { setActiveCategory(value) setSearchQuery("") }} > 热门 行业 场景 自定义 {/* 关键词列表 */}
{filteredKeywords.map((keyword) => ( handleKeywordToggle(keyword)} >
{keyword} {selectedKeywords.includes(keyword) &&
}
))}
{/* 添加自定义关键词 */}
) }