"use client" import { useQuery } from "@tanstack/react-query" import Link from "next/link" import { useRouter } from "next/navigation" import { VulnerabilityService } from "@/services/vulnerability.service" import { Card, CardContent, CardDescription, CardHeader, CardTitle, } from "@/components/ui/card" import { Table, TableBody, TableCell, TableHead, TableHeader, TableRow, } from "@/components/ui/table" import { Badge } from "@/components/ui/badge" import { Skeleton } from "@/components/ui/skeleton" import { IconExternalLink } from "@tabler/icons-react" import type { VulnerabilitySeverity } from "@/types/vulnerability.types" // 统一的漏洞严重程度颜色配置(与图表一致) const severityConfig: Record = { critical: { label: "严重", className: "bg-red-600 text-white hover:bg-red-600" }, high: { label: "高危", className: "bg-orange-500 text-white hover:bg-orange-500" }, medium: { label: "中危", className: "bg-yellow-500 text-white hover:bg-yellow-500" }, low: { label: "低危", className: "bg-blue-500 text-white hover:bg-blue-500" }, info: { label: "信息", className: "bg-gray-500 text-white hover:bg-gray-500" }, } function formatTime(dateStr: string) { const date = new Date(dateStr) return date.toLocaleString("zh-CN", { month: "2-digit", day: "2-digit", hour: "2-digit", minute: "2-digit", }) } export function RecentVulnerabilities() { const router = useRouter() const { data, isLoading } = useQuery({ queryKey: ["dashboard", "recent-vulnerabilities"], queryFn: () => VulnerabilityService.getAllVulnerabilities({ page: 1, pageSize: 5 }), }) const vulnerabilities = data?.results ?? [] return (
最近漏洞 最近发现的安全漏洞
查看全部
{isLoading ? (
{[...Array(5)].map((_, i) => ( ))}
) : vulnerabilities.length === 0 ? (
暂无漏洞数据
) : (
Status Source 类型 URL 发现时间 {vulnerabilities.map((vuln: any) => ( router.push(`/vulnerabilities/?id=${vuln.id}`)} > {severityConfig[vuln.severity as VulnerabilitySeverity]?.label ?? vuln.severity} {vuln.source} {vuln.vulnType} {vuln.url} {formatTime(vuln.discoveredAt)} ))}
)}
) }