diff --git a/frontend/src/components/kubernetes/KubernetesClusters.tsx b/frontend/src/components/kubernetes/KubernetesClusters.tsx index a67fac1..c96cac8 100644 --- a/frontend/src/components/kubernetes/KubernetesClusters.tsx +++ b/frontend/src/components/kubernetes/KubernetesClusters.tsx @@ -29,6 +29,7 @@ import { Container, } from 'lucide-react'; import { kubernetesApi } from '@/services/api'; +import { toast } from 'sonner'; import type { KubernetesCluster } from '@/types'; import { KubernetesClusterDetail } from './KubernetesClusterDetail'; import { KubernetesClusterDialog } from './KubernetesClusterDialog'; @@ -65,6 +66,24 @@ export function KubernetesClusters() { loadData(); }, []); + // 新建后自动同步 + const [pendingSyncId, setPendingSyncId] = useState(null); + + const handleSaved = () => { + loadData().then(() => { + if (!editingCluster) { + // 新建集群后,等列表刷新完再取最新一条同步 + setTimeout(async () => { + const res: any = await kubernetesApi.getClusters(); + const list = res?.list || []; + if (list.length > 0) { + handleSync(list[list.length - 1].id, true); + } + }, 500); + } + }); + }; + const handleDelete = async (id: string) => { try { await kubernetesApi.deleteCluster(id); @@ -74,6 +93,17 @@ export function KubernetesClusters() { } }; + const handleSync = async (id: number | string, silent?: boolean) => { + try { + if (!silent) toast.info('正在同步集群资源...'); + const res: any = await kubernetesApi.syncCluster(id); + if (!silent) toast.success(res?.message || '同步完成'); + loadData(); + } catch (e: any) { + if (!silent) toast.error(e?.message || '同步失败'); + } + }; + const filteredClusters = clusters.filter( (cluster) => (cluster.name || '').toLowerCase().includes(searchQuery.toLowerCase()) || @@ -280,6 +310,16 @@ export function KubernetesClusters() { 配置 + { + e.stopPropagation(); + handleSync(cluster.id); + }} + > + + 同步 + { @@ -377,7 +417,7 @@ export function KubernetesClusters() { open={dialogOpen} onOpenChange={setDialogOpen} editingCluster={editingCluster} - onSaved={loadData} + onSaved={handleSaved} /> {/* kubectl 终端 */}