feat(k8s): 事件页补全时间/次数/来源等字段

- 后端解析 source/reportingComponent 与 object_kind/name
- 新增 EventTable 统一展示:最后/首次时间、次数、重复跨度、类型、原因、对象、来源、消息
- Deployment 事件 Tab 与事件中心共用表格组件
This commit is contained in:
Logan.Li committed 2026-06-26 15:13:35 +08:00
1 parent ee2588fb52
commit b2939470f4
8 files changed
+323 -176

No files matched your search

@@ -1,49 +1,13 @@
// deployment-view/EventsTab.tsx — 事件 Tab // Logan.Li
import { Badge } from '@/components/ui/badge';
import {
Table, TableBody, TableCell, TableHead, TableHeader, TableRow,
} from '@/components/ui/table';
import { Loader2 } from 'lucide-react';
import { formatK8sTime } from '../k8s-yaml-utils';
import { EventTable } from '../EventTable';
import type { EventItem } from './types';
export function EventsTab({ events, loading }: { events: EventItem[]; loading: string }) {
if (loading === 'events') {
return <div className="flex items-center justify-center py-12"><Loader2 className="h-6 w-6 animate-spin text-[var(--dg-text-muted)]" /></div>;
}
if (events.length === 0) {
return <div className="text-center text-[var(--dg-text-muted)] py-12">暂无事件</div>;
}
return (
<div className="overflow-x-auto">
<Table>
<TableHeader>
<TableRow className="border-[var(--dg-border)]">
<TableHead className="text-[var(--dg-text-muted)] w-16">类型</TableHead>
<TableHead className="text-[var(--dg-text-muted)] w-24">原因</TableHead>
<TableHead className="text-[var(--dg-text-muted)]">消息</TableHead>
<TableHead className="text-[var(--dg-text-muted)] w-20">来源</TableHead>
<TableHead className="text-[var(--dg-text-muted)] w-10">次数</TableHead>
<TableHead className="text-[var(--dg-text-muted)] w-40">最后时间</TableHead>
</TableRow>
</TableHeader>
<TableBody>
{events.map((e, i) => (
<TableRow key={i} className="border-[var(--dg-border)]">
<TableCell>
<Badge variant="outline" className={e.type === 'Warning' ? 'text-[var(--dg-yellow)] border-[var(--dg-yellow)]/30' : 'text-[var(--dg-text-muted)] border-[var(--dg-border)]'}>
{e.type}
</Badge>
</TableCell>
<TableCell className="text-sm text-[var(--dg-text-secondary)]">{e.reason}</TableCell>
<TableCell className="text-sm text-[var(--dg-text-primary)] max-w-md whitespace-normal break-words">{e.message}</TableCell>
<TableCell className="text-xs text-[var(--dg-text-muted)]">{e.source}</TableCell>
<TableCell className="text-sm text-[var(--dg-text-muted)]">{e.count}</TableCell>
<TableCell className="text-xs text-[var(--dg-text-muted)]">{formatK8sTime(e.lastTimestamp)}</TableCell>
</TableRow>
))}
</TableBody>
</Table>
</div>
<EventTable
events={events}
loading={loading}
emptyText="暂无事件"
/>
);
}
@@ -19,10 +19,7 @@ export interface IngItem {
name: string; className: string; hosts: string[]; rules: any[]; age: string;
}
export interface EventItem {
type: string; reason: string; message: string; source: string;
firstTimestamp: string; lastTimestamp: string; count: number;
}
export type EventItem = import('../k8s-event-utils').NormalizedEvent;
export interface DeploymentViewProps {
clusterCode: string; namespace: string; deployment: any;