"use client" import { useState } from "react" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Badge } from "@/components/ui/badge" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Checkbox } from "@/components/ui/checkbox" import { PlusCircle, Search, Tag, ArrowRight } from "lucide-react" interface TagMapping { id: string keywordId: string keyword: string tagId: string tagName: string tagCategory: string matchRule: string priority: number createdAt: Date status: "active" | "inactive" } export function UserTagMapping() { const [searchQuery, setSearchQuery] = useState("") const [selectedMappings, setSelectedMappings] = useState([]) // 模拟数据 const mappings: TagMapping[] = [ { id: "1", keywordId: "1", keyword: "数字营销", tagId: "101", tagName: "营销决策者", tagCategory: "职业角色", matchRule: "精确匹配", priority: 1, createdAt: new Date(2023, 5, 15), status: "active", }, { id: "2", keywordId: "2", keyword: "用户画像", tagId: "102", tagName: "数据分析师", tagCategory: "职业角色", matchRule: "包含匹配", priority: 2, createdAt: new Date(2023, 4, 10), status: "active", }, { id: "3", keywordId: "3", keyword: "流量获取", tagId: "103", tagName: "营销专员", tagCategory: "职业角色", matchRule: "精确匹配", priority: 3, createdAt: new Date(2023, 3, 5), status: "active", }, { id: "4", keywordId: "4", keyword: "数据可视化", tagId: "104", tagName: "技术人员", tagCategory: "职业角色", matchRule: "包含匹配", priority: 2, createdAt: new Date(2023, 2, 20), status: "inactive", }, { id: "5", keywordId: "5", keyword: "精准营销", tagId: "105", tagName: "营销经理", tagCategory: "职业角色", matchRule: "精确匹配", priority: 1, createdAt: new Date(2023, 1, 15), status: "active", }, ] // 过滤映射 const filteredMappings = mappings.filter( (mapping) => mapping.keyword.toLowerCase().includes(searchQuery.toLowerCase()) || mapping.tagName.toLowerCase().includes(searchQuery.toLowerCase()) || mapping.tagCategory.toLowerCase().includes(searchQuery.toLowerCase()), ) const toggleSelectAll = () => { if (selectedMappings.length === filteredMappings.length) { setSelectedMappings([]) } else { setSelectedMappings(filteredMappings.map((m) => m.id)) } } const toggleSelectMapping = (id: string) => { if (selectedMappings.includes(id)) { setSelectedMappings(selectedMappings.filter((m) => m !== id)) } else { setSelectedMappings([...selectedMappings, id]) } } const formatDate = (date: Date) => { return date.toLocaleDateString("zh-CN", { year: "numeric", month: "2-digit", day: "2-digit", }) } return (

用户标签映射

流量词与用户标签映射规则
setSearchQuery(e.target.value)} />
{selectedMappings.length > 0 && (
已选择 {selectedMappings.length} 项
)}
0} onCheckedChange={toggleSelectAll} aria-label="Select all" /> 流量词 映射 用户标签 标签分类 匹配规则 优先级 创建时间 状态 操作 {filteredMappings.map((mapping) => ( toggleSelectMapping(mapping.id)} aria-label={`Select ${mapping.keyword} to ${mapping.tagName} mapping`} /> {mapping.keyword} {mapping.tagName} {mapping.tagCategory} {mapping.matchRule} {mapping.priority} {formatDate(mapping.createdAt)} {mapping.status === "active" ? "已启用" : "已禁用"} ))}
) }