"use client" import { useState } from "react" import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Tabs, TabsContent, TabsList, TabsTrigger } from "@/components/ui/tabs" import { Input } from "@/components/ui/input" import { Label } from "@/components/ui/label" import { Textarea } from "@/components/ui/textarea" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Switch } from "@/components/ui/switch" import { Progress } from "@/components/ui/progress" import { Dialog, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogTitle } from "@/components/ui/dialog" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Sparkles, Play, Pause, Settings, FileText, Database, CheckCircle2, XCircle, Clock, AlertTriangle, Eye, Trash2, RefreshCw, Download, ChevronRight, Zap, Bot } from "lucide-react" // AI清洗规则数据 const aiCleaningRules = [ { id: "1", name: "手机号格式标准化", prompt: "识别并标准化所有手机号格式,去除空格、括号等特殊字符,统一为11位纯数字格式", dataSource: "用户主表", targetField: "phone", status: "running", confidence: 0.95, processedCount: 12580, totalCount: 15000, errorCount: 23, lastRun: "2024-01-15 10:30:00", needsReview: false, }, { id: "2", name: "地址信息补全", prompt: "根据已有地址信息,智能补全省市区三级地址,并标准化地址格式", dataSource: "用户主表", targetField: "address", status: "pending_review", confidence: 0.78, processedCount: 8900, totalCount: 8900, errorCount: 156, lastRun: "2024-01-15 09:15:00", needsReview: true, }, { id: "3", name: "姓名脱敏处理", prompt: "对姓名字段进行脱敏处理,保留姓氏,名字用*替代", dataSource: "交易记录表", targetField: "customer_name", status: "completed", confidence: 0.99, processedCount: 50000, totalCount: 50000, errorCount: 5, lastRun: "2024-01-14 18:00:00", needsReview: false, }, ] // 待审核数据 const pendingReviewData = [ { id: "r1", ruleId: "2", ruleName: "地址信息补全", originalValue: "北京朝阳区", aiSuggestedValue: "北京市朝阳区建国路88号", confidence: 0.72, reason: "根据用户历史订单地址推断", }, { id: "r2", ruleId: "2", ruleName: "地址信息补全", originalValue: "上海浦东", aiSuggestedValue: "上海市浦东新区陆家嘴环路1000号", confidence: 0.65, reason: "根据IP定位和常用地址推断", }, ] export default function AIDataCleaningPage() { const [activeTab, setActiveTab] = useState("rules") const [showCreateDialog, setShowCreateDialog] = useState(false) const [showReviewDialog, setShowReviewDialog] = useState(false) const [selectedReview, setSelectedReview] = useState(null) const [newRule, setNewRule] = useState({ name: "", prompt: "", dataSource: "", targetField: "", autoApprove: false, confidenceThreshold: 0.9, }) const getStatusBadge = (status: string) => { switch (status) { case "running": return 运行中 case "completed": return 已完成 case "pending_review": return 待审核 case "failed": return 失败 default: return 未知 } } const handleApprove = (id: string) => { console.log("Approved:", id) setShowReviewDialog(false) } const handleReject = (id: string) => { console.log("Rejected:", id) setShowReviewDialog(false) } return (
{/* 页面标题 */}

AI数据清洗

通过AI提示词自动识别和清洗数据,支持人工审核机制

{/* 统计卡片 */}

活跃规则

12

今日处理

71,480

待审核

156

平均置信度

92.3%

{/* 主内容区 */} 清洗规则 人工审核 156 执行历史 {aiCleaningRules.map((rule) => (

{rule.name}

{getStatusBadge(rule.status)} {rule.needsReview && ( 需要审核 )}

AI提示词: {rule.prompt}

{rule.dataSource} / {rule.targetField} 置信度: {(rule.confidence * 100).toFixed(0)}% 错误: {rule.errorCount} 最后执行: {rule.lastRun}
{rule.status === "running" && (
处理进度 {rule.processedCount.toLocaleString()} / {rule.totalCount.toLocaleString()}
)}
{rule.status === "running" ? ( ) : ( )}
))}
待审核清洗结果 AI清洗结果中置信度较低或需要人工确认的数据 规则名称 原始值 AI建议值 置信度 推理依据 操作 {pendingReviewData.map((item) => ( {item.ruleName} {item.originalValue} {item.aiSuggestedValue} = 0.7 ? "bg-yellow-100 text-yellow-700" : "bg-red-100 text-red-700"} > {(item.confidence * 100).toFixed(0)}% {item.reason}
))}
执行历史 查看AI清洗规则的历史执行记录 规则名称 执行时间 处理数量 成功率 耗时 状态 操作 手机号格式标准化 2024-01-15 10:30:00 15,000 99.8% 2分35秒 成功 地址信息补全 2024-01-15 09:15:00 8,900 98.2% 5分12秒 部分完成
{/* 创建AI清洗规则弹窗 */} 创建AI清洗规则 通过自然语言描述清洗需求,AI将自动识别和处理数据
setNewRule({...newRule, name: e.target.value})} />
setNewRule({...newRule, targetField: e.target.value})} />