"use client" import { useState } from "react" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow } from "@/components/ui/table" import { Button } from "@/components/ui/button" import { Badge } from "@/components/ui/badge" import { Input } from "@/components/ui/input" import { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from "@/components/ui/select" import { Search, FileDown, Eye, RefreshCw } from "lucide-react" import { Pagination, PaginationContent, PaginationItem, PaginationLink, PaginationNext, PaginationPrevious, } from "@/components/ui/pagination" interface IntegrationRecord { id: string sourceId: string sourceName: string startTime: Date endTime: Date status: "success" | "failed" | "partial" | "running" totalRecords: number successRecords: number failedRecords: number notes: string } export function IntegrationHistory() { const [searchQuery, setSearchQuery] = useState("") const [statusFilter, setStatusFilter] = useState("all") // 模拟数据 const integrationRecords: IntegrationRecord[] = [ { id: "1", sourceId: "1", sourceName: "CRM系统用户数据", startTime: new Date(2023, 6, 15, 14, 30), endTime: new Date(2023, 6, 15, 14, 45), status: "success", totalRecords: 5280, successRecords: 5280, failedRecords: 0, notes: "完全同步成功", }, { id: "2", sourceId: "2", sourceName: "电商平台订单数据", startTime: new Date(2023, 6, 15, 10, 15), endTime: new Date(2023, 6, 15, 10, 40), status: "partial", totalRecords: 12500, successRecords: 12350, failedRecords: 150, notes: "部分记录格式错误", }, { id: "3", sourceId: "3", sourceName: "营销活动参与用户", startTime: new Date(2023, 6, 14, 9, 45), endTime: new Date(2023, 6, 14, 9, 50), status: "success", totalRecords: 875, successRecords: 875, failedRecords: 0, notes: "同步成功", }, { id: "4", sourceId: "4", sourceName: "APP用户行为数据", startTime: new Date(2023, 6, 10, 16, 20), endTime: new Date(2023, 6, 10, 16, 35), status: "failed", totalRecords: 8500, successRecords: 0, failedRecords: 8500, notes: "API连接超时", }, { id: "5", sourceId: "5", sourceName: "社交媒体用户数据", startTime: new Date(2023, 6, 15, 8, 0), endTime: new Date(2023, 6, 15, 8, 15), status: "success", totalRecords: 3200, successRecords: 3200, failedRecords: 0, notes: "同步成功", }, { id: "6", sourceId: "7", sourceName: "新用户注册数据", startTime: new Date(2023, 6, 15, 16, 0), endTime: null, status: "running", totalRecords: 0, successRecords: 0, failedRecords: 0, notes: "首次同步进行中", }, ] // 过滤记录 const filteredRecords = integrationRecords.filter((record) => { const matchesSearch = record.sourceName.toLowerCase().includes(searchQuery.toLowerCase()) const matchesStatus = statusFilter === "all" || record.status === statusFilter return matchesSearch && matchesStatus }) const formatDate = (date: Date | null) => { if (!date) return "进行中" return date.toLocaleString("zh-CN", { year: "numeric", month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", }) } const getStatusBadge = (status: IntegrationRecord["status"]) => { switch (status) { case "success": return 成功 case "failed": return 失败 case "partial": return 部分成功 case "running": return 进行中 } } return (
setSearchQuery(e.target.value)} />
数据源 开始时间 结束时间 状态 总记录数 成功数 失败数 备注 操作 {filteredRecords.map((record) => ( {record.sourceName} {formatDate(record.startTime)} {formatDate(record.endTime)} {getStatusBadge(record.status)} {record.totalRecords.toLocaleString()} {record.successRecords.toLocaleString()} {record.failedRecords.toLocaleString()} {record.notes}
))}
1 2 3
) }