"use client" import { useState } from "react" import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { ScrollArea } from "@/components/ui/scroll-area" import { FileText, CheckCircle, XCircle, Clock, Download, RefreshCw } from "lucide-react" interface CleaningRuleLogsDialogProps { open: boolean onOpenChange: (open: boolean) => void ruleName?: string } const MOCK_LOGS = [ { id: 1, timestamp: "2025-12-16 14:35:12", level: "INFO", message: "开始执行清洗任务", details: "任务ID: task_20251216_143512", }, { id: 2, timestamp: "2025-12-16 14:35:13", level: "INFO", message: "连接源数据库成功", details: "MySQL: 10.88.182.62:3305", }, { id: 3, timestamp: "2025-12-16 14:35:15", level: "INFO", message: "读取源数据", details: "共读取 128,956 条记录", }, { id: 4, timestamp: "2025-12-16 14:35:18", level: "WARN", message: "发现异常数据", details: "25 条记录手机号格式不规范", }, { id: 5, timestamp: "2025-12-16 14:35:22", level: "INFO", message: "执行清洗规则", details: "应用规则: 手机号标准化", }, { id: 6, timestamp: "2025-12-16 14:35:45", level: "INFO", message: "数据写入完成", details: "成功写入 128,931 条, 跳过 25 条", }, { id: 7, timestamp: "2025-12-16 14:35:46", level: "INFO", message: "清洗任务完成", details: "总耗时: 34秒, 错误率: 0.02%", }, ] const EXECUTION_HISTORY = [ { id: 1, time: "2025-12-16 14:35", status: "success", processed: 128956, errors: 25, duration: "34秒" }, { id: 2, time: "2025-12-16 13:35", status: "success", processed: 125832, errors: 18, duration: "32秒" }, { id: 3, time: "2025-12-16 12:35", status: "success", processed: 130215, errors: 22, duration: "36秒" }, { id: 4, time: "2025-12-16 11:35", status: "failed", processed: 45000, errors: 1250, duration: "15秒" }, { id: 5, time: "2025-12-16 10:35", status: "success", processed: 128500, errors: 20, duration: "33秒" }, ] export function CleaningRuleLogsDialog({ open, onOpenChange, ruleName }: CleaningRuleLogsDialogProps) { const [selectedExecution, setSelectedExecution] = useState(EXECUTION_HISTORY[0]) const getLevelColor = (level: string) => { switch (level) { case "INFO": return "text-blue-600 bg-blue-50" case "WARN": return "text-amber-600 bg-amber-50" case "ERROR": return "text-red-600 bg-red-50" default: return "text-slate-600 bg-slate-50" } } return ( 执行日志 - {ruleName || "清洗规则"} 查看规则执行历史和详细日志
{/* 执行历史列表 */}

执行历史

{EXECUTION_HISTORY.map((exec) => (
setSelectedExecution(exec)} >
{exec.time} {exec.status === "success" ? ( ) : ( )}
{exec.processed.toLocaleString()} 条 / {exec.errors} 错误
{exec.duration}
))}
{/* 日志详情 */}

执行日志详情

{MOCK_LOGS.map((log) => (
{log.timestamp} {log.level}
{log.message} - {log.details}
))}
) }