"use client" import { useState } from "react" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Search, Plus, Filter, Download, Tag, Edit, Trash2, MoreHorizontal } from "lucide-react" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Badge } from "@/components/ui/badge" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle, } from "@/components/ui/dialog" import { Label } from "@/components/ui/label" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Checkbox } from "@/components/ui/checkbox" import { DropdownMenu, DropdownMenuContent, DropdownMenuItem, DropdownMenuTrigger } from "@/components/ui/dropdown-menu" import { TagCategoryChart } from "@/components/tag-management/tag-category-chart" import { TagUsageStats } from "@/components/tag-management/tag-usage-stats" import { TagRelationshipGraph } from "@/components/tag-management/tag-relationship-graph" interface TagItem { id: string name: string category: string type: "system" | "custom" | "derived" source: string coverage: number createdAt: string updatedAt: string } const mockTags: TagItem[] = [ { id: "1", name: "高价值用户", category: "用户价值", type: "derived", source: "RFM模型", coverage: 15.3, createdAt: "2023-05-12", updatedAt: "2023-07-15", }, { id: "2", name: "90后", category: "人口属性", type: "system", source: "注册信息", coverage: 42.7, createdAt: "2023-01-05", updatedAt: "2023-01-05", }, { id: "3", name: "游戏爱好者", category: "兴趣爱好", type: "custom", source: "行为分析", coverage: 28.4, createdAt: "2023-04-18", updatedAt: "2023-06-22", }, { id: "4", name: "流失风险高", category: "流失风险", type: "derived", source: "预测模型", coverage: 8.9, createdAt: "2023-06-30", updatedAt: "2023-07-20", }, { id: "5", name: "北京地区", category: "地理位置", type: "system", source: "IP分析", coverage: 12.5, createdAt: "2023-02-15", updatedAt: "2023-02-15", }, { id: "6", name: "周末活跃", category: "活跃时间", type: "custom", source: "行为分析", coverage: 35.2, createdAt: "2023-05-28", updatedAt: "2023-07-10", }, ] const tagCategories = ["用户价值", "人口属性", "兴趣爱好", "流失风险", "地理位置", "活跃时间", "消费能力", "渠道来源"] export default function TagManagementPage() { const [searchQuery, setSearchQuery] = useState("") const [selectedTags, setSelectedTags] = useState([]) const [isCreateDialogOpen, setIsCreateDialogOpen] = useState(false) const [newTag, setNewTag] = useState({ name: "", category: "", type: "custom", source: "", }) const handleSelectAllTags = (checked: boolean) => { if (checked) { setSelectedTags(mockTags.map((tag) => tag.id)) } else { setSelectedTags([]) } } const handleSelectTag = (tagId: string, checked: boolean) => { if (checked) { setSelectedTags([...selectedTags, tagId]) } else { setSelectedTags(selectedTags.filter((id) => id !== tagId)) } } const handleCreateTag = () => { // 这里应该是创建标签的逻辑 console.log("创建标签:", newTag) setIsCreateDialogOpen(false) setNewTag({ name: "", category: "", type: "custom", source: "", }) } const filteredTags = mockTags.filter( (tag) => tag.name.toLowerCase().includes(searchQuery.toLowerCase()) || tag.category.toLowerCase().includes(searchQuery.toLowerCase()), ) return (

标签管理

管理和组织用户标签体系

标签总数
128

较上月增加 12 个

标签覆盖率
87.5%

较上月提升 2.3%

标签使用率
76.2%

较上月提升 5.1%

标签列表 标签分析 标签关系
setSearchQuery(e.target.value)} />
标签名称 分类 类型 数据来源 覆盖率 创建时间 更新时间 操作 {filteredTags.map((tag) => ( handleSelectTag(tag.id, !!checked)} /> {tag.name} {tag.category} {tag.type === "system" ? "系统" : tag.type === "derived" ? "衍生" : "自定义"} {tag.source} {tag.coverage}% {tag.createdAt} {tag.updatedAt} 编辑 删除 ))}
标签分类分布 按分类统计标签数量 标签使用统计 标签在各系统中的使用情况
标签关系图谱 展示标签之间的关联关系
{/* 创建标签对话框 */} 创建新标签 添加新的用户标签到标签体系中
setNewTag({ ...newTag, name: e.target.value })} className="col-span-3" />
setNewTag({ ...newTag, source: e.target.value })} className="col-span-3" />
) }