"use client" import { useState } from "react" import { Shield, TrendingUp, TrendingDown, RefreshCw, Download } from "lucide-react" import { Card, CardContent, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Progress } from "@/components/ui/progress" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" interface QualityMetric { name: string score: number trend: "up" | "down" | "stable" change: number description: string } interface TableQuality { tableName: string completeness: number uniqueness: number timeliness: number accuracy: number overallScore: number issues: number lastCheck: string } const QUALITY_METRICS: QualityMetric[] = [ { name: "完整性", score: 96.8, trend: "up", change: 0.5, description: "字段非空率" }, { name: "唯一性", score: 99.2, trend: "stable", change: 0, description: "主键重复率" }, { name: "及时性", score: 94.5, trend: "down", change: -1.2, description: "数据更新延迟" }, { name: "准确性", score: 97.3, trend: "up", change: 0.8, description: "格式校验通过率" }, ] const TABLE_QUALITY: TableQuality[] = [ { tableName: "users", completeness: 98.5, uniqueness: 100, timeliness: 96.2, accuracy: 99.1, overallScore: 98.5, issues: 2, lastCheck: "2025-12-12 14:30:00", }, { tableName: "transactions", completeness: 99.8, uniqueness: 99.9, timeliness: 98.5, accuracy: 99.5, overallScore: 99.4, issues: 0, lastCheck: "2025-12-12 14:30:00", }, { tableName: "user_behaviors", completeness: 92.3, uniqueness: 98.5, timeliness: 89.2, accuracy: 95.6, overallScore: 93.9, issues: 8, lastCheck: "2025-12-12 14:25:00", }, { tableName: "accounts", completeness: 97.2, uniqueness: 100, timeliness: 95.8, accuracy: 98.3, overallScore: 97.8, issues: 1, lastCheck: "2025-12-12 14:30:00", }, { tableName: "tags", completeness: 100, uniqueness: 100, timeliness: 100, accuracy: 100, overallScore: 100, issues: 0, lastCheck: "2025-12-12 14:30:00", }, ] export default function DataQualityPage() { const [selectedPeriod, setSelectedPeriod] = useState("today") const [isRefreshing, setIsRefreshing] = useState(false) const [overallScore, setOverallScore] = useState(96.95) const getScoreColor = (score: number) => { if (score >= 95) return "text-green-600" if (score >= 80) return "text-yellow-600" return "text-red-600" } const getScoreBg = (score: number) => { if (score >= 95) return "bg-green-100" if (score >= 80) return "bg-yellow-100" return "bg-red-100" } const refreshData = async () => { setIsRefreshing(true) await new Promise((r) => setTimeout(r, 1500)) setOverallScore((prev) => prev + (Math.random() - 0.5) * 0.5) setIsRefreshing(false) } return (
实时监控数据质量指标
满分100分,当前处于优秀水平
{metric.description}
| 数据表 | 完整性 | 唯一性 | 及时性 | 准确性 | 总分 | 问题数 | 最后检查 |
|---|---|---|---|---|---|---|---|
{table.tableName}
|
{table.completeness}% | {table.uniqueness}% | {table.timeliness}% | {table.accuracy}% |
|
{table.issues > 0 ? (
|
{table.lastCheck} |