"use client"
import { useState } from "react"
import { Card, CardContent, CardHeader, CardTitle, CardDescription } from "@/components/ui/card"
import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs"
import { Button } from "@/components/ui/button"
import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select"
import { Badge } from "@/components/ui/badge"
import { ArrowUp, ArrowDown, Download, RefreshCw, Calendar } from "lucide-react"
import { getGrowthClass } from "@/lib/utils"
// 模拟图表组件
const LineChart = ({ data, title }: { data: any; title: string }) => (
)
const BarChart = ({ data, title }: { data: any; title: string }) => (
)
const PieChart = ({ data, title }: { data: any; title: string }) => (
)
export function DataDashboard() {
const [timeRange, setTimeRange] = useState("7d")
const [activeTab, setActiveTab] = useState("overview")
// 模拟数据
const overviewData = {
totalUsers: 1245678,
userGrowth: 12.5,
totalDataSources: 8,
dataSourceGrowth: 33.3,
totalRecords: 45678921,
recordsGrowth: 8.7,
dataQuality: 92,
dataQualityGrowth: 3.2,
}
const dataSourceStats = [
{ name: "CRM系统", records: 12500000, growth: 5.2, quality: 95 },
{ name: "交易系统", records: 8750000, growth: 12.3, quality: 90 },
{ name: "行为分析平台", records: 15800000, growth: 8.7, quality: 88 },
{ name: "社交媒体", records: 4500000, growth: 15.2, quality: 85 },
{ name: "设备管理系统", records: 3200000, growth: -2.1, quality: 93 },
]
const dataQualityIssues = [
{ type: "缺失值", count: 12500, percentage: 0.027, severity: "medium" },
{ type: "格式错误", count: 8750, percentage: 0.019, severity: "high" },
{ type: "重复数据", count: 23800, percentage: 0.052, severity: "low" },
{ type: "异常值", count: 4500, percentage: 0.01, severity: "high" },
{ type: "不一致数据", count: 9200, percentage: 0.02, severity: "medium" },
]
const formatNumber = (num: number) => {
if (num >= 1000000) {
return (num / 1000000).toFixed(1) + "M"
} else if (num >= 1000) {
return (num / 1000).toFixed(1) + "K"
}
return num.toString()
}
const getSeverityBadge = (severity: string) => {
switch (severity) {
case "high":
return 高
case "medium":
return 中
case "low":
return 低
default:
return 未知
}
}
return (
数据仪表盘
总用户数
{formatNumber(overviewData.totalUsers)}
{overviewData.userGrowth > 0 ? (
) : (
)}
{Math.abs(overviewData.userGrowth)}%
相比上一时段
数据源数量
{overviewData.totalDataSources}
{overviewData.dataSourceGrowth > 0 ? (
) : (
)}
{Math.abs(overviewData.dataSourceGrowth)}%
相比上一时段
总记录数
{formatNumber(overviewData.totalRecords)}
{overviewData.recordsGrowth > 0 ? (
) : (
)}
{Math.abs(overviewData.recordsGrowth)}%
相比上一时段
数据质量评分
{overviewData.dataQuality}/100
{overviewData.dataQualityGrowth > 0 ? (
) : (
)}
{Math.abs(overviewData.dataQualityGrowth)}%
相比上一时段
数据概览
数据源分析
数据质量
数据整合
用户数据增长趋势
近期用户数据增长情况
数据源分布
各数据源数据量占比
数据质量趋势
数据质量评分变化趋势
数据整合进度
各标识符数据整合进度
数据源统计
各数据源数据量和质量统计
| 数据源 |
记录数 |
增长率 |
质量评分 |
{dataSourceStats.map((source, index) => (
| {source.name} |
{formatNumber(source.records)} |
{source.growth > 0 ? (
) : (
)}
{Math.abs(source.growth)}%
|
{source.quality}/100 |
))}
数据源记录数对比
各数据源记录数量对比
数据源质量对比
各数据源质量评分对比
数据质量问题
主要数据质量问题统计
| 问题类型 |
问题数量 |
占比 |
严重程度 |
{dataQualityIssues.map((issue, index) => (
| {issue.type} |
{formatNumber(issue.count)} |
{(issue.percentage * 100).toFixed(2)}% |
{getSeverityBadge(issue.severity)} |
))}
数据质量问题分布
各类数据质量问题分布
数据质量趋势
数据质量随时间变化趋势
数据整合状态
基于不同标识符的数据整合状态
数据整合趋势
数据整合率随时间变化趋势
标识符覆盖率
各标识符在用户数据中的覆盖率
)
}