"use client" import { useState } from "react" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Badge } from "@/components/ui/badge" import { Button } from "@/components/ui/button" import { Input } from "@/components/ui/input" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Search, Tag, TrendingUp, Filter, Phone, Activity, Target } from "lucide-react" import { Avatar, AvatarFallback } from "@/components/ui/avatar" export default function UserPortrait() { const [searchQuery, setSearchQuery] = useState("") const userSegments = [ { name: "高价值用户", count: 128456700, percentage: 3.0, avgValue: 580, color: "purple" }, { name: "活跃用户", count: 1285670000, percentage: 30.0, avgValue: 280, color: "blue" }, { name: "沉默用户", count: 1714283500, percentage: 40.0, avgValue: 85, color: "yellow" }, { name: "流失预警", count: 857134000, percentage: 20.0, avgValue: 45, color: "orange" }, { name: "新增用户", count: 300125800, percentage: 7.0, avgValue: 120, color: "green" }, ] const tagCategories = [ { name: "基础属性", count: 485, usage: 4285670000, coverage: 100 }, { name: "行为标签", count: 328, usage: 3256780000, coverage: 76 }, { name: "兴趣偏好", count: 256, usage: 2570000000, coverage: 60 }, { name: "消费能力", count: 89, usage: 1714283500, coverage: 40 }, { name: "自定义标签", count: 100, usage: 857134000, coverage: 20 }, ] const recentUsers = [ { id: "U001285", name: "张**", phone: "138****5678", level: "S", tags: ["高净值", "美妆爱好者", "VIP客户"], value: 5800, lastActive: "2小时前", }, { id: "U002456", name: "李**", phone: "186****1234", level: "A", tags: ["活跃用户", "教育培训", "复购客户"], value: 3200, lastActive: "5小时前", }, { id: "U003789", name: "王**", phone: "159****9876", level: "B", tags: ["潜力用户", "电商购物", "新客户"], value: 1800, lastActive: "1天前", }, { id: "U004123", name: "赵**", phone: "177****5432", level: "C", tags: ["普通用户", "低频互动"], value: 850, lastActive: "3天前", }, ] const formatNumber = (num: number): string => { if (num >= 1000000000) return `${(num / 1000000000).toFixed(1)}B` if (num >= 1000000) return `${(num / 1000000).toFixed(1)}M` if (num >= 1000) return `${(num / 1000).toFixed(1)}K` return num.toString() } const getLevelColor = (level: string) => { const colors = { S: "bg-purple-100 text-purple-700 border-purple-200", A: "bg-blue-100 text-blue-700 border-blue-200", B: "bg-green-100 text-green-700 border-green-200", C: "bg-yellow-100 text-yellow-700 border-yellow-200", D: "bg-gray-100 text-gray-700 border-gray-200", } return colors[level as keyof typeof colors] || colors.D } const getSegmentColor = (color: string) => { const colors = { purple: "from-purple-500 to-purple-600", blue: "from-blue-500 to-blue-600", green: "from-green-500 to-green-600", yellow: "from-yellow-400 to-orange-500", orange: "from-orange-500 to-red-500", } return colors[color as keyof typeof colors] } return (

用户画像

用户管理、标签体系与群体分析

用户群体 标签体系 用户列表
{userSegments.map((segment, index) => ( {segment.name}
{formatNumber(segment.count)}
占比 {segment.percentage}%
人均价值
¥{segment.avgValue}
))}
用户增长趋势
用户增长趋势图表区域
{tagCategories.map((category, index) => (

{category.name}

{category.count} 个标签

覆盖率 {category.coverage}%
标签数量
{category.count}
使用用户
{formatNumber(category.usage)}
覆盖率
{category.coverage}%
))}
setSearchQuery(e.target.value)} className="pl-10 bg-white/60 backdrop-blur-md border-gray-200" />
{recentUsers.map((user) => (
{user.name[0]}
{user.name} {user.level}级
{user.phone}
{user.lastActive}
用户价值
¥{user.value}
{user.tags.map((tag, index) => ( {tag} ))}
))}
) }