Files
aiops/backend/static/assets/KubernetesClusters-CsRHjVkA.js
T
attacker 77c234b060 feat(audit): F1+F2 告警静默规则标记完成 + 审计日志CSV导出实现
F1 告警静默规则 [done]:
- 后端 alert_silence.go: CRUD + Toggle (onetime/daily/weekly 三模式)
- 告警引擎 isSilenced 集成 (alert_engine.go)
- 前端 SilenceRuleTab + SilenceDialog
- 路由 /alerts/silences 已注册

F2 审计日志导出 [done]:
- 重写 ExportAuditLogs: 真正的 CSV 导出 (encoding/csv + UTF-8 BOM)
- 支持 module/action/username/startTime/endTime 筛选
- 导出限制 10000 条防溢出,自动记录审计日志
- JSON 格式向后兼容 (format=json)
- 前端 exportLogs 传递查询参数

同时包含累积的前期工作:
- 目录重构 internal/ -> controller/model/router (v0.55-v0.57)
- 后端分层架构 dto/repository/service/utils
- 审计模块全功能 (终端审计/操作审计/登录日志)
- asciicast v2 录制格式
- SFTP 文件浏览器
- StatStrip 紧凑统计条
- 在线会话自动刷新
- LiveMonitor WebSocket 诊断修复

验证: go build ✅ | npm run build ✅ | Docker 部署 ✅ | 10 回归端点 ✅ | CSV 导出 ✅ | 静默 CRUD ✅
2026-06-25 20:16:30 +08:00

11 lines
69 KiB
JavaScript

import{r as c,j as e,s as V,B as A,al as oe,aj as Re,af as Pe,ac as le,am as Te,ae as $,ag as Y,an as Ee,ah as X,ad as Ae,ai as Me,X as M,D as ue,b as de,c as Ie,d as ie,e as xe,I as B,f as Fe,W as Ge,H as Oe,L as Le,a5 as Be,a3 as ee,q as Ue,G as ze,S as $e,aK as We,aL as qe,aM as He,aN as Ve,aO as te,aP as O,U as Xe,E as Ye,v as Je,T as Ze}from"./index-DfyorCky.js";import{C as _,b as U,c as z,d as pe,a as R}from"./card-C55cvSHg.js";import{B as y}from"./badge-xNW8x0G1.js";import{k as w}from"./kubernetes-J8O09fK7.js";import{t as G}from"./index-a3ybMjbR.js";import{T as Qe,a as et,b as I,c as F}from"./tabs-CIh_yD4s.js";import{C as me}from"./circle-x-DK79Dhg2.js";import{R as tt,C as st,X as rt,Y as nt,T as at}from"./generateCategoricalChart-6v9BPbG2.js";import{A as ct,a as se}from"./AreaChart-B2zlWfdX.js";import{T as re}from"./textarea-NXY8u32k.js";import{L as E}from"./label-BK0h2apY.js";import{u as ot}from"./index-CWVNW_qu.js";import{C as lt}from"./circle-DOZr6_68.js";import{x as ut,a as dt}from"./xterm-DSqgeKvr.js";import{M as it,a as xt}from"./minimize-2-CiCQYRfn.js";import{R as H}from"./refresh-cw-DUB_tAG-.js";import{P as pt}from"./plus-CUG-9kpu.js";import{E as mt}from"./ellipsis-DU5enAwm.js";import{D as bt}from"./download-DoZfYs2h.js";import{T as ht}from"./trash-2-Dx32pOzT.js";function gt({cluster:n,onClose:x}){const[a,g]=c.useState([]),[s,u]=c.useState([]),[d,N]=c.useState([]),[k,C]=c.useState([]),[b,f]=c.useState([]),h=c.useMemo(()=>{if(!a||a.length===0)return{cpuPct:0,memPct:0};let t=0,i=0,m=0;for(const j of a){const D=j.cpu||0,o=j.cpu_usage_m?parseFloat(String(j.cpu_usage_m).replace("m","")):0,l=D>0?o/1e3/D*100:0,v=j.memory_mb||0,P=j.mem_usage_mi?parseFloat(String(j.mem_usage_mi).replace("Mi","").replace("Ki","")):0,q=j.mem_usage_mi?.includes?.("Ki")?P/1024:j.mem_usage_mi?.includes?.("Gi")?P*1024:P,L=v>0?q/v*100:0;(l>0||L>0)&&(t+=l,i+=L,m++)}return{cpuPct:m>0?t/m:0,memPct:m>0?i/m:0}},[a]),p=async t=>{try{const[i,m,j,D,o]=await Promise.all([w.getNodes(t).catch(()=>[]),w.getPods(t).catch(()=>[]),w.getDeployments(t).catch(()=>[]),w.getServices(t).catch(()=>[]),w.getIngresses(t).catch(()=>[])]),l=v=>Array.isArray(v)?v:v?.list||[];g(l(i)),u(l(m)),N(l(j)),C(l(D)),f(l(o))}catch(i){console.error("加载集群详情失败:",i)}};return c.useEffect(()=>{n?.id&&p(n.id)},[n?.id]),e.jsxs(_,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:81:5",className:"bg-slate-900 border-slate-800",children:[e.jsx(U,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:82:7",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:83:9",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:84:11",className:"flex items-center gap-3",children:[e.jsx(V,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:85:13",className:"h-6 w-6 text-blue-400"}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:86:13",children:[e.jsx(z,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:87:15",className:"text-slate-100",children:n.name}),e.jsxs(pe,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:88:15",className:"text-slate-500",children:[n.version," · ",n.node_count||0," 节点 · 创建于"," ",n.created_at?new Date(n.created_at).toLocaleDateString():"-"]})]})]}),e.jsxs(A,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:94:11",variant:"ghost",size:"sm",className:"text-slate-400 hover:text-slate-100",onClick:x,children:[e.jsx(me,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:100:13",className:"h-4 w-4 mr-2"}),"关闭"]})]})}),e.jsx(R,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:105:7",children:e.jsxs(Qe,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:106:9",defaultValue:"overview",className:"w-full",children:[e.jsxs(et,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:107:11",className:"bg-slate-800 border border-slate-700 flex-wrap h-auto",children:[e.jsx(I,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:108:13",value:"overview",className:"data-[state=active]:bg-slate-700",children:"概览"}),e.jsxs(I,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:111:13",value:"nodes",className:"data-[state=active]:bg-slate-700",children:["节点 (",a.length,")"]}),e.jsxs(I,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:114:13",value:"pods",className:"data-[state=active]:bg-slate-700",children:["Pod (",s.length,")"]}),e.jsxs(I,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:117:13",value:"deployments",className:"data-[state=active]:bg-slate-700",children:["Deployment (",d.length,")"]}),e.jsxs(I,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:120:13",value:"services",className:"data-[state=active]:bg-slate-700",children:["Service (",k.length,")"]}),e.jsxs(I,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:123:13",value:"ingresses",className:"data-[state=active]:bg-slate-700",children:["Ingress (",b.length,")"]}),e.jsx(I,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:126:13",value:"events",className:"data-[state=active]:bg-slate-700",children:"事件"})]}),e.jsx(F,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:131:11",value:"overview",className:"mt-4 space-y-4",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:132:13",className:"grid grid-cols-1 lg:grid-cols-2 gap-4",children:[e.jsxs(_,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:133:15",className:"bg-slate-800/50 border-slate-700",children:[e.jsx(U,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:134:17",className:"pb-2",children:e.jsx(z,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:135:19",className:"text-sm text-slate-400",children:"资源使用趋势"})}),e.jsxs(R,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:137:17",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:138:19",className:"h-[200px]",children:e.jsx(tt,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:139:21",width:"100%",height:"100%",children:e.jsxs(ct,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:140:23",data:[{time:"CPU",cpu:Number(h.cpuPct.toFixed(1)),memory:Number(h.memPct.toFixed(1))}],children:[e.jsxs("defs",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:143:25",children:[e.jsxs("linearGradient",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:144:27",id:"colorCpu",x1:"0",y1:"0",x2:"0",y2:"1",children:[e.jsx("stop",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:145:29",offset:"5%",stopColor:"#3b82f6",stopOpacity:.3}),e.jsx("stop",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:146:29",offset:"95%",stopColor:"#3b82f6",stopOpacity:0})]}),e.jsxs("linearGradient",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:148:27",id:"colorMemory",x1:"0",y1:"0",x2:"0",y2:"1",children:[e.jsx("stop",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:149:29",offset:"5%",stopColor:"#10b981",stopOpacity:.3}),e.jsx("stop",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:150:29",offset:"95%",stopColor:"#10b981",stopOpacity:0})]})]}),e.jsx(st,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:153:25",strokeDasharray:"3 3",stroke:"#1e293b"}),e.jsx(rt,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:154:25",dataKey:"time",stroke:"#475569",fontSize:12}),e.jsx(nt,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:155:25",stroke:"#475569",fontSize:12,domain:[0,100]}),e.jsx(at,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:156:25",contentStyle:{backgroundColor:"#0f172a",border:"1px solid #1e293b",borderRadius:"6px",color:"#f8fafc"}}),e.jsx(se,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:164:25",type:"monotone",dataKey:"cpu",stroke:"#3b82f6",fillOpacity:1,fill:"url(#colorCpu)",name:"CPU(%)"}),e.jsx(se,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:172:25",type:"monotone",dataKey:"memory",stroke:"#10b981",fillOpacity:1,fill:"url(#colorMemory)",name:"内存(%)"})]})})}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:183:19",className:"flex justify-center gap-6 mt-2 text-xs text-slate-400",children:[e.jsxs("span",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:184:21",children:["CPU: ",e.jsxs("span",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:184:32",className:"text-blue-400 font-bold",children:[h.cpuPct.toFixed(1),"%"]})]}),e.jsxs("span",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:185:21",children:["内存: ",e.jsxs("span",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:185:31",className:"text-emerald-400 font-bold",children:[h.memPct.toFixed(1),"%"]})]})]})]})]}),e.jsxs(_,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:190:15",className:"bg-slate-800/50 border-slate-700",children:[e.jsx(U,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:191:17",className:"pb-2",children:e.jsx(z,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:192:19",className:"text-sm text-slate-400",children:"资源分布"})}),e.jsx(R,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:194:17",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:195:19",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:196:21",className:"text-center p-4 rounded-lg bg-slate-800",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:197:23",className:"text-3xl font-bold text-blue-400",children:n.pod_count||0}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:198:23",className:"text-sm text-slate-500 mt-1",children:"Pod"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:200:21",className:"text-center p-4 rounded-lg bg-slate-800",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:201:23",className:"text-3xl font-bold text-emerald-400",children:n.service_count||0}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:202:23",className:"text-sm text-slate-500 mt-1",children:"Service"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:204:21",className:"text-center p-4 rounded-lg bg-slate-800",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:205:23",className:"text-3xl font-bold text-purple-400",children:n.deployment_count||0}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:206:23",className:"text-sm text-slate-500 mt-1",children:"Deployment"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:208:21",className:"text-center p-4 rounded-lg bg-slate-800",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:209:23",className:"text-3xl font-bold text-amber-400",children:n.node_count||0}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:210:23",className:"text-sm text-slate-500 mt-1",children:"节点"})]})]})})]})]})}),e.jsx(F,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:218:11",value:"nodes",className:"mt-4",children:e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:219:13",className:"border rounded-lg border-slate-700 overflow-hidden",children:e.jsxs("table",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:220:15",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:221:17",className:"bg-slate-800",children:e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:222:19",children:[e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:223:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"名称"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:224:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"角色"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:225:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"状态"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:226:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"CPU"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:227:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"内存"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:228:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"Pod"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:229:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"操作系统"})]})}),e.jsx("tbody",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:232:17",className:"divide-y divide-slate-800",children:a.length===0?e.jsx("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:234:21",children:e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:235:23",colSpan:7,className:"px-4 py-8 text-center text-slate-500",children:"暂无节点数据"})}):a.map(t=>e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:239:21",className:"hover:bg-slate-800/50",children:[e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:240:23",className:"px-4 py-3 text-sm text-slate-200",children:t.name}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:241:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:242:25",variant:"outline",className:t.role==="master"?"border-purple-500/30 text-purple-400 bg-purple-500/10":"border-blue-500/30 text-blue-400 bg-blue-500/10",children:t.role==="master"?"Master":"Worker"})}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:253:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:254:25",variant:"outline",className:(t.status||"").toLowerCase()==="ready"?"border-emerald-500/30 text-emerald-400 bg-emerald-500/10":"border-red-500/30 text-red-400 bg-red-500/10",children:(t.status||"").toLowerCase()==="ready"?"Ready":"NotReady"})}),e.jsxs("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:265:23",className:"px-4 py-3 text-sm text-slate-300",children:[t.cpu_usage_m||"0m"," / ",t.cpu,"核"]}),e.jsxs("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:268:23",className:"px-4 py-3 text-sm text-slate-300",children:[t.mem_usage_mi||"0Mi"," / ",t.memory_mb?(t.memory_mb/1024).toFixed(0)+"GB":"-"]}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:271:23",className:"px-4 py-3 text-sm text-slate-300",children:t.max_pods??0}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:272:23",className:"px-4 py-3 text-sm text-slate-400",children:t.os})]},t.id||t.name))})]})})}),e.jsx(F,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:281:11",value:"pods",className:"mt-4",children:e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:282:13",className:"border rounded-lg border-slate-700 overflow-hidden",children:e.jsxs("table",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:283:15",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:284:17",className:"bg-slate-800",children:e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:285:19",children:[e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:286:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"名称"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:287:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"命名空间"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:288:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"状态"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:289:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"重启次数"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:290:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"CPU"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:291:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"内存"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:292:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"节点"})]})}),e.jsx("tbody",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:295:17",className:"divide-y divide-slate-800",children:s.length===0?e.jsx("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:297:21",children:e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:298:23",colSpan:7,className:"px-4 py-8 text-center text-slate-500",children:"暂无Pod数据"})}):s.map(t=>e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:302:21",className:"hover:bg-slate-800/50",children:[e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:303:23",className:"px-4 py-3 text-sm text-slate-200",children:t.name}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:304:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:305:25",variant:"outline",className:"border-slate-700 text-slate-400",children:t.namespace})}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:309:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:310:25",variant:"outline",className:(t.status||"").toLowerCase()==="running"?"border-emerald-500/30 text-emerald-400 bg-emerald-500/10":(t.status||"").toLowerCase()==="pending"?"border-amber-500/30 text-amber-400 bg-amber-500/10":"border-red-500/30 text-red-400 bg-red-500/10",children:t.status})}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:323:23",className:"px-4 py-3 text-sm text-slate-300",children:t.restart_count??0}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:324:23",className:"px-4 py-3 text-sm text-slate-300",children:t.cpu_usage_m||"0m"}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:325:23",className:"px-4 py-3 text-sm text-slate-300",children:t.mem_usage_mi||"0Mi"}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:326:23",className:"px-4 py-3 text-sm text-slate-400",children:t.node_name})]},t.id||t.name))})]})})}),e.jsx(F,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:335:11",value:"deployments",className:"mt-4",children:e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:336:13",className:"border rounded-lg border-slate-700 overflow-hidden",children:e.jsxs("table",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:337:15",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:338:17",className:"bg-slate-800",children:e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:339:19",children:[e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:340:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"名称"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:341:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"命名空间"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:342:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"副本数"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:343:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"可用副本"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:344:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"镜像"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:345:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"创建时间"})]})}),e.jsx("tbody",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:348:17",className:"divide-y divide-slate-800",children:d.length===0?e.jsx("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:350:21",children:e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:351:23",colSpan:6,className:"px-4 py-8 text-center text-slate-500",children:"暂无Deployment数据"})}):d.map(t=>e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:355:21",className:"hover:bg-slate-800/50",children:[e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:356:23",className:"px-4 py-3 text-sm text-slate-200",children:t.name}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:357:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:358:25",variant:"outline",className:"border-slate-700 text-slate-400",children:t.namespace})}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:362:23",className:"px-4 py-3 text-sm text-slate-300",children:t.replicas}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:363:23",className:"px-4 py-3",children:e.jsxs("span",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:364:25",className:`text-sm ${(t.available_replicas??t.availableReplicas)===t.replicas?"text-emerald-400":"text-amber-400"}`,children:[t.available_replicas??t.availableReplicas," / ",t.replicas]})}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:368:23",className:"px-4 py-3 text-sm text-slate-400 truncate max-w-[200px]",children:t.image}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:369:23",className:"px-4 py-3 text-sm text-slate-400",children:t.created_at||t.createdAt})]},t.id||t.name))})]})})}),e.jsx(F,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:378:11",value:"services",className:"mt-4",children:e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:379:13",className:"border rounded-lg border-slate-700 overflow-hidden",children:e.jsxs("table",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:380:15",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:381:17",className:"bg-slate-800",children:e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:382:19",children:[e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:383:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"名称"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:384:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"命名空间"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:385:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"类型"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:386:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"ClusterIP"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:387:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"端口"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:388:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"Selector"})]})}),e.jsx("tbody",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:391:17",className:"divide-y divide-slate-800",children:k.length===0?e.jsx("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:393:21",children:e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:394:23",colSpan:6,className:"px-4 py-8 text-center text-slate-500",children:"暂无Service数据"})}):k.map(t=>e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:398:21",className:"hover:bg-slate-800/50",children:[e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:399:23",className:"px-4 py-3 text-sm text-slate-200",children:t.name}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:400:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:401:25",variant:"outline",className:"border-slate-700 text-slate-400",children:t.namespace})}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:405:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:406:25",variant:"outline",className:t.type==="ClusterIP"?"border-blue-500/30 text-blue-400 bg-blue-500/10":t.type==="NodePort"?"border-purple-500/30 text-purple-400 bg-purple-500/10":"border-emerald-500/30 text-emerald-400 bg-emerald-500/10",children:t.type})}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:419:23",className:"px-4 py-3 text-sm text-slate-300",children:t.cluster_ip??t.clusterIP}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:420:23",className:"px-4 py-3 text-sm text-slate-300",children:t.ports}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:421:23",className:"px-4 py-3 text-sm text-slate-400",children:t.selector})]},t.id||t.name))})]})})}),e.jsx(F,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:430:11",value:"ingresses",className:"mt-4",children:e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:431:13",className:"border rounded-lg border-slate-700 overflow-hidden",children:e.jsxs("table",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:432:15",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:433:17",className:"bg-slate-800",children:e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:434:19",children:[e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:435:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"名称"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:436:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"命名空间"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:437:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"Hosts"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:438:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"后端服务"}),e.jsx("th",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:439:21",className:"px-4 py-3 text-left text-xs font-medium text-slate-400",children:"TLS"})]})}),e.jsx("tbody",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:442:17",className:"divide-y divide-slate-800",children:b.length===0?e.jsx("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:444:21",children:e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:445:23",colSpan:5,className:"px-4 py-8 text-center text-slate-500",children:"暂无Ingress数据"})}):b.map(t=>e.jsxs("tr",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:449:21",className:"hover:bg-slate-800/50",children:[e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:450:23",className:"px-4 py-3 text-sm text-slate-200",children:t.name}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:451:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:452:25",variant:"outline",className:"border-slate-700 text-slate-400",children:t.namespace})}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:456:23",className:"px-4 py-3 text-sm text-slate-300",children:t.hosts}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:457:23",className:"px-4 py-3 text-sm text-slate-300",children:t.backend}),e.jsx("td",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:458:23",className:"px-4 py-3",children:e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:459:25",variant:"outline",className:t.tls?"border-emerald-500/30 text-emerald-400 bg-emerald-500/10":"border-slate-700 text-slate-400",children:t.tls?"已启用":"未启用"})})]},t.id||t.name))})]})})}),e.jsx(F,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:478:11",value:"events",className:"mt-4",children:e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:479:13",className:"space-y-2",children:[{type:"Normal",reason:"Started",message:"Started container nginx",time:"2分钟前"},{type:"Normal",reason:"Created",message:"Created pod nginx-deployment-xxx",time:"5分钟前"},{type:"Warning",reason:"FailedScheduling",message:"0/3 nodes are available",time:"10分钟前"},{type:"Normal",reason:"Pulling",message:'Pulling image "nginx:latest"',time:"15分钟前"},{type:"Normal",reason:"Pulled",message:"Successfully pulled image",time:"12分钟前"}].map((t,i)=>e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:487:17",className:"flex items-center gap-3 p-3 rounded-lg bg-slate-800/50",children:[e.jsx(y,{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:491:19",variant:"outline",className:t.type==="Normal"?"border-emerald-500/30 text-emerald-400 bg-emerald-500/10":"border-amber-500/30 text-amber-400 bg-amber-500/10",children:t.type}),e.jsx("span",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:501:19",className:"text-sm font-medium text-slate-300 min-w-[120px]",children:t.reason}),e.jsx("span",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:502:19",className:"text-sm text-slate-400 flex-1",children:t.message}),e.jsx("span",{"code-path":"src/components/kubernetes/KubernetesClusterDetail.tsx:503:19",className:"text-xs text-slate-500",children:t.time})]},i))})})]})})]})}var J="Radio",[Ct,be]=le(J),[kt,ft]=Ct(J),he=c.forwardRef((n,x)=>{const{__scopeRadio:a,name:g,checked:s=!1,required:u,disabled:d,value:N="on",onCheck:k,form:C,...b}=n,[f,h]=c.useState(null),p=Y(x,m=>h(m)),t=c.useRef(!1),i=f?C||!!f.closest("form"):!0;return e.jsxs(kt,{scope:a,checked:s,disabled:d,children:[e.jsx($.button,{type:"button",role:"radio","aria-checked":s,"data-state":fe(s),"data-disabled":d?"":void 0,disabled:d,value:N,...b,ref:p,onClick:X(n.onClick,m=>{s||k?.(),i&&(t.current=m.isPropagationStopped(),t.current||m.stopPropagation())})}),i&&e.jsx(ke,{control:f,bubbles:!t.current,name:g,value:N,checked:s,required:u,disabled:d,form:C,style:{transform:"translateX(-100%)"}})]})});he.displayName=J;var ge="RadioIndicator",Ce=c.forwardRef((n,x)=>{const{__scopeRadio:a,forceMount:g,...s}=n,u=ft(ge,a);return e.jsx(Ae,{present:g||u.checked,children:e.jsx($.span,{"data-state":fe(u.checked),"data-disabled":u.disabled?"":void 0,...s,ref:x})})});Ce.displayName=ge;var jt="RadioBubbleInput",ke=c.forwardRef(({__scopeRadio:n,control:x,checked:a,bubbles:g=!0,...s},u)=>{const d=c.useRef(null),N=Y(d,u),k=ot(a),C=Me(x);return c.useEffect(()=>{const b=d.current;if(!b)return;const f=window.HTMLInputElement.prototype,p=Object.getOwnPropertyDescriptor(f,"checked").set;if(k!==a&&p){const t=new Event("click",{bubbles:g});p.call(b,a),b.dispatchEvent(t)}},[k,a,g]),e.jsx($.input,{type:"radio","aria-hidden":!0,defaultChecked:a,...s,tabIndex:-1,ref:N,style:{...s.style,...C,position:"absolute",pointerEvents:"none",opacity:0,margin:0}})});ke.displayName=jt;function fe(n){return n?"checked":"unchecked"}var Kt=["ArrowUp","ArrowDown","ArrowLeft","ArrowRight"],W="RadioGroup",[Nt]=le(W,[oe,be]),je=oe(),Ke=be(),[vt,Dt]=Nt(W),Ne=c.forwardRef((n,x)=>{const{__scopeRadioGroup:a,name:g,defaultValue:s,value:u,required:d=!1,disabled:N=!1,orientation:k,dir:C,loop:b=!0,onValueChange:f,...h}=n,p=je(a),t=Re(C),[i,m]=Pe({prop:u,defaultProp:s??null,onChange:f,caller:W});return e.jsx(vt,{scope:a,name:g,required:d,disabled:N,value:i,onValueChange:m,children:e.jsx(Te,{asChild:!0,...p,orientation:k,dir:t,loop:b,children:e.jsx($.div,{role:"radiogroup","aria-required":d,"aria-orientation":k,"data-disabled":N?"":void 0,dir:t,...h,ref:x})})})});Ne.displayName=W;var ve="RadioGroupItem",De=c.forwardRef((n,x)=>{const{__scopeRadioGroup:a,disabled:g,...s}=n,u=Dt(ve,a),d=u.disabled||g,N=je(a),k=Ke(a),C=c.useRef(null),b=Y(x,C),f=u.value===s.value,h=c.useRef(!1);return c.useEffect(()=>{const p=i=>{Kt.includes(i.key)&&(h.current=!0)},t=()=>h.current=!1;return document.addEventListener("keydown",p),document.addEventListener("keyup",t),()=>{document.removeEventListener("keydown",p),document.removeEventListener("keyup",t)}},[]),e.jsx(Ee,{asChild:!0,...N,focusable:!d,active:f,children:e.jsx(he,{disabled:d,required:u.required,checked:f,...k,...s,name:u.name,ref:b,onCheck:()=>u.onValueChange(s.value),onKeyDown:X(p=>{p.key==="Enter"&&p.preventDefault()}),onFocus:X(s.onFocus,()=>{h.current&&C.current?.click()})})})});De.displayName=ve;var yt="RadioGroupIndicator",ye=c.forwardRef((n,x)=>{const{__scopeRadioGroup:a,...g}=n,s=Ke(a);return e.jsx(Ce,{...s,...g,ref:x})});ye.displayName=yt;var wt=Ne,St=De,_t=ye;function Rt({className:n,...x}){return e.jsx(wt,{"code-path":"src/components/ui/radio-group.tsx:14:5","data-slot":"radio-group",className:M("grid gap-3",n),...x})}function ne({className:n,...x}){return e.jsx(St,{"code-path":"src/components/ui/radio-group.tsx:27:5","data-slot":"radio-group-item",className:M("border-input text-primary focus-visible:border-ring focus-visible:ring-ring/50 aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive dark:bg-input/30 aspect-square size-4 shrink-0 rounded-full border shadow-xs transition-[color,box-shadow] outline-none focus-visible:ring-[3px] disabled:cursor-not-allowed disabled:opacity-50",n),...x,children:e.jsx(_t,{"code-path":"src/components/ui/radio-group.tsx:35:7","data-slot":"radio-group-indicator",className:"relative flex items-center justify-center",children:e.jsx(lt,{"code-path":"src/components/ui/radio-group.tsx:39:9",className:"fill-primary absolute top-1/2 left-1/2 size-2 -translate-x-1/2 -translate-y-1/2"})})})}const ae=/^[a-zA-Z0-9]([a-zA-Z0-9-]*[a-zA-Z0-9])?$/,ce={name:"",version:"",description:"",config_type:1,api_server:"",token:"",kube_config:""};function Pt({open:n,onOpenChange:x,editingCluster:a,onSaved:g}){const[s,u]=c.useState({...ce}),[d,N]=c.useState(!1),[k,C]=c.useState(!1),[b,f]=c.useState(!1),[h,p]=c.useState("");c.useEffect(()=>{n&&(a&&a.id?w.getClusterDetail(a.id).then(o=>{const l=o||{};C(!!l.has_token),f(!!l.has_kube_config),u({name:l.name||"",version:l.version||"",description:l.description||"",config_type:Number(l.config_type??1),api_server:l.api_server||"",token:"",kube_config:""}),p("")}).catch(()=>{u({name:a.name||"",version:a.version||"",description:a.description||"",config_type:Number(a.config_type??1),api_server:a.api_server||"",token:"",kube_config:""}),p("")}):(C(!1),f(!1),u({...ce}),p("")))},[n,a]);const t=o=>{u({...s,name:o}),o.trim()?ae.test(o)?p(""):p("只允许英文、数字和连字符(-),首尾不能是连字符"):p("")},i=o=>{const l=o.match(/^\s*server:\s*(\S+)\s*$/m);return l?l[1]:""},m=o=>{const l=i(o);u(v=>({...v,kube_config:o,api_server:l||v.api_server}))},j=async()=>{if(!s.name.trim()||!ae.test(s.name.trim())){G.error("请输入有效的集群名称(英文/数字/连字符)");return}try{N(!0);const o={name:s.name.trim(),code:s.name.trim(),version:s.version,description:s.description,config_type:s.config_type,api_server:s.api_server,token:s.config_type===0?s.token:"",kube_config:s.config_type===1?s.kube_config:""};a?await w.updateCluster(a.id,o):await w.createCluster(o),x(!1),g()}catch(o){console.error("保存集群失败:",o)}finally{N(!1)}},D=d||!s.name.trim()||!!h;return e.jsx(ue,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:143:5",open:n,onOpenChange:x,children:e.jsxs(de,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:144:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] max-w-2xl",children:[e.jsxs(Ie,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:145:9",children:[e.jsx(ie,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:146:11",className:"text-[var(--dg-text-primary)]",children:a?"编辑集群":"添加集群"}),e.jsx(xe,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:149:11",className:"text-[var(--dg-text-secondary)]",children:a?"修改集群接入配置":"配置新的 Kubernetes 集群接入信息"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:153:9",className:"space-y-4 py-2 max-h-[60vh] overflow-y-auto pr-1",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:154:11",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:155:13",className:"space-y-2",children:[e.jsx(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:156:15",className:"text-[var(--dg-text-secondary)]",children:"集群名称"}),e.jsx(B,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:157:15",value:s.name,onChange:o=>t(o.target.value),placeholder:"如: prod-cluster",className:`bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)] ${h?"border-red-500":""}`}),h&&e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:163:29",className:"text-xs text-red-400",children:h}),e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:164:15",className:"text-xs text-[var(--dg-text-muted)]",children:"只允许英文、数字和连字符(-),首尾不能是连字符。名称将作为集群唯一标识。"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:168:13",className:"space-y-2",children:[e.jsx(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:169:15",className:"text-[var(--dg-text-secondary)]",children:"版本(可选)"}),e.jsx(B,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:170:15",value:s.version,onChange:o=>u({...s,version:o.target.value}),placeholder:"如: 1.28.0",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:179:11",className:"space-y-2",children:[e.jsx(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:180:13",className:"text-[var(--dg-text-secondary)]",children:"描述"}),e.jsx(B,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:181:13",value:s.description,onChange:o=>u({...s,description:o.target.value}),placeholder:"集群用途描述",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:189:11",className:"space-y-2",children:[e.jsx(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:190:13",className:"text-[var(--dg-text-secondary)]",children:"接入方式"}),e.jsxs(Rt,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:191:13",value:String(s.config_type),onValueChange:o=>u({...s,config_type:Number(o)}),className:"flex gap-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:196:15",className:"flex items-center gap-2 px-3 py-2 rounded-md border border-[var(--dg-border)] cursor-pointer hover:bg-[var(--dg-bg-hover)]",children:[e.jsx(ne,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:197:17",value:"0",id:"ct-0"}),e.jsx(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:198:17",htmlFor:"ct-0",className:"cursor-pointer text-[var(--dg-text-primary)] font-normal",children:"Token"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:200:15",className:"flex items-center gap-2 px-3 py-2 rounded-md border border-[var(--dg-border)] cursor-pointer hover:bg-[var(--dg-bg-hover)]",children:[e.jsx(ne,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:201:17",value:"1",id:"ct-1"}),e.jsx(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:202:17",htmlFor:"ct-1",className:"cursor-pointer text-[var(--dg-text-primary)] font-normal",children:"Kubeconfig"})]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:207:11",className:"space-y-2",children:[e.jsx(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:208:13",className:"text-[var(--dg-text-secondary)]",children:"API Server"}),e.jsx(B,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:209:13",value:s.api_server,onChange:o=>u({...s,api_server:o.target.value}),placeholder:"https://10.0.0.1:6443",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),s.config_type===0?e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:218:13",className:"space-y-2",children:[e.jsxs(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:219:15",className:"text-[var(--dg-text-secondary)]",children:["Token ",k&&e.jsx("span",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:220:36",className:"text-emerald-400 text-xs ml-1",children:"✓ 已配置(留空不修改)"})]}),e.jsx(re,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:222:15",value:s.token,onChange:o=>u({...s,token:o.target.value}),placeholder:k?"已配置,输入新值覆盖...":"粘贴 Service Account Token...",rows:4,className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)] font-mono text-xs"})]}):e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:231:13",className:"space-y-2",children:[e.jsxs(E,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:232:15",className:"text-[var(--dg-text-secondary)]",children:["Kubeconfig ",b&&e.jsx("span",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:233:46",className:"text-emerald-400 text-xs ml-1",children:"✓ 已配置(留空不修改)"})]}),e.jsx(re,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:235:15",value:s.kube_config,onChange:o=>m(o.target.value),placeholder:b?"已配置,输入新值覆盖...":`apiVersion: v1
kind: Config
clusters:
- cluster:
server: https://10.0.0.1:6443
...`,rows:10,className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)] font-mono text-xs"}),!b&&e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:243:17",className:"text-xs text-[var(--dg-text-muted)]",children:"粘贴 kubeconfig 内容后将自动解析 API Server 地址"})]})]}),e.jsxs(Fe,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:250:9",children:[e.jsx(A,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:251:11",variant:"outline",onClick:()=>{x(!1)},className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",children:"取消"}),e.jsx(A,{"code-path":"src/components/kubernetes/KubernetesClusterDialog.tsx:258:11",onClick:j,disabled:D,className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",children:d?"保存中...":a?"保存":"添加"})]})]})})}function Tt({open:n,onOpenChange:x,clusterId:a,clusterName:g}){const s=c.useRef(null),u=c.useRef(null),d=c.useRef(null),N=c.useRef(null),[k,C]=c.useState(!1),[b,f]=c.useState(!1),[h,p]=c.useState("");return c.useEffect(()=>{n||f(!1)},[n]),c.useEffect(()=>{if(!n||!a)return;const t=new ut.Terminal({cursorBlink:!0,fontSize:14,fontFamily:'Menlo, Monaco, "Courier New", monospace',allowProposedApi:!0,theme:{background:"#0f172a",foreground:"#e2e8f0",cursor:"#38bdf8",selectionBackground:"#1e40af",black:"#1e293b",red:"#ef4444",green:"#10b981",yellow:"#f59e0b",blue:"#3b82f6",magenta:"#a855f7",cyan:"#06b6d4",white:"#e2e8f0",brightBlack:"#475569",brightRed:"#f87171",brightGreen:"#34d399",brightYellow:"#fbbf24",brightBlue:"#60a5fa",brightMagenta:"#c084fc",brightCyan:"#22d3ee",brightWhite:"#f8fafc"}}),i=new dt.FitAddon;t.loadAddon(i),u.current=t,N.current=i;const j=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}`,D=Ge.getState().token||"",o=`${j.replace(/^http/,"ws").replace("/api/v1","")}/ws/kubectl?token=${encodeURIComponent(D)}&id=${a}`,l=new WebSocket(o);return d.current=l,t.onData(v=>{l.readyState===WebSocket.OPEN&&l.send(JSON.stringify({status:0,data:v}))}),l.onmessage=v=>{try{const P=JSON.parse(v.data);P.status===0&&typeof P.data=="string"&&t.write(P.data)}catch{typeof v.data=="string"&&t.write(v.data)}},l.onopen=()=>{C(!0),p(""),s.current&&(t.open(s.current),requestAnimationFrame(()=>{try{i.fit()}catch{}}),setTimeout(()=>{try{t.focus()}catch{}},150))},l.onclose=()=>{C(!1),t.write(`\r
\x1B[31m[连接已断开]\x1B[0m\r
`)},l.onerror=()=>{p("WebSocket 连接失败"),t.write(`\r
\x1B[31m[连接发生错误]\x1B[0m\r
`)},()=>{try{(l.readyState===WebSocket.OPEN||l.readyState===WebSocket.CONNECTING)&&l.close(),t.dispose()}catch{}u.current=null,d.current=null,C(!1)}},[n,a]),c.useEffect(()=>{if(!n)return;const t=s.current;if(!t)return;let i;const m=new ResizeObserver(()=>{clearTimeout(i),i=setTimeout(()=>{if(N.current&&u.current&&d.current)try{N.current.fit(),u.current.focus();const{cols:j,rows:D}=u.current;d.current.readyState===WebSocket.OPEN&&d.current.send(JSON.stringify({status:1,cols:j,rows:D}))}catch{}},60)});return m.observe(t),()=>{clearTimeout(i),m.disconnect()}},[n]),e.jsx(ue,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:161:5",open:n,onOpenChange:x,children:e.jsxs(de,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:162:7",showCloseButton:!1,onOpenAutoFocus:t=>t.preventDefault(),className:M("bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] p-0 gap-0","!duration-0 !transition-none",b?"!max-w-none !w-screen !h-screen !rounded-none !translate-x-0 !translate-y-0 !left-0 !top-0":""),style:b?{maxWidth:"100vw",width:"100vw",height:"100vh"}:{maxWidth:"900px",width:"90vw"},children:[e.jsxs(ie,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:174:9",className:"sr-only",children:["kubectl — ",g]}),e.jsx(xe,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:175:9",className:"sr-only",children:"Kubernetes 集群命令行终端"}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:178:9",className:"flex items-center justify-between px-4 py-2 border-b border-[var(--dg-border)]",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:179:11",className:"flex items-center gap-2 text-sm",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:180:13",className:M("w-2 h-2 rounded-full",k?"bg-emerald-400":h?"bg-red-400":"bg-yellow-400")}),e.jsx(Oe,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:181:13",className:"h-4 w-4 text-blue-400"}),e.jsxs("span",{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:182:13",className:"text-[var(--dg-text-primary)] font-medium",children:["kubectl — ",g]}),!k&&!h&&e.jsx(Le,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:183:38",className:"h-3 w-3 animate-spin text-[var(--dg-text-muted)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:185:11",className:"flex items-center gap-1",children:[e.jsx("button",{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:186:13",onClick:()=>f(!b),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:b?e.jsx(it,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:190:29",className:"h-4 w-4"}):e.jsx(xt,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:190:65",className:"h-4 w-4"})}),e.jsx("button",{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:192:13",onClick:()=>x(!1),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:e.jsx(Be,{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:196:15",className:"h-4 w-4"})})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/KubectlTerminal.tsx:202:9",ref:s,className:"bg-[#0f172a]",style:{height:b?"calc(100vh - 49px)":"480px"}})]})})}function Qt(){const[n,x]=c.useState([]),[a,g]=c.useState(!0),[s,u]=c.useState(null),[d,N]=c.useState(""),[k,C]=c.useState(!1),[b,f]=c.useState(null),[h,p]=c.useState(null),[t,i]=c.useState(!1),[m,j]=c.useState(null),[D,o]=c.useState(!1),l=async()=>{try{g(!0);const r=await w.getClusters();x(r?.list||[])}catch(r){console.error("加载集群列表失败:",r),x([])}finally{g(!1)}};c.useEffect(()=>{l()},[]);const[,v]=c.useState(null),P=()=>{l().then(()=>{b||setTimeout(async()=>{const K=(await w.getClusters())?.list||[];K.length>0&&L(K[K.length-1].id,!0)},500)})},q=async r=>{try{await w.deleteCluster(r),l()}catch(K){console.error("删除集群失败:",K)}},L=async(r,K)=>{try{K||G.info("正在同步集群资源...");const T=await w.syncCluster(r);K||G.success(T?.message||"同步完成"),l()}catch(T){K||G.error(T?.message||"同步失败")}},we=async()=>{if(!m)return;const r=m.code||String(m.id);try{o(!0),G.info(`正在导出 ${m.name} 所有命名空间的资源...`),await w.exportAllResources(r),G.success("导出完成,已开始下载"),j(null)}catch(K){G.error(K?.message||"导出失败")}finally{o(!1)}},Z=n.filter(r=>(r.name||"").toLowerCase().includes(d.toLowerCase())||(r.version||"").includes(d)),Se=r=>{switch(r){case"healthy":return e.jsxs(y,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:138:11",variant:"outline",className:"border-emerald-500/30 text-emerald-400 bg-emerald-500/10",children:[e.jsx(ee,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:139:13",className:"h-3 w-3 mr-1"}),"健康"]});case"warning":return e.jsxs(y,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:145:11",variant:"outline",className:"border-amber-500/30 text-amber-400 bg-amber-500/10",children:[e.jsx(Ze,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:146:13",className:"h-3 w-3 mr-1"}),"警告"]});case"error":return e.jsxs(y,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:152:11",variant:"outline",className:"border-red-500/30 text-red-400 bg-red-500/10",children:[e.jsx(me,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:153:13",className:"h-3 w-3 mr-1"}),"异常"]});default:return null}},Q=s?n.find(r=>r.id===s):null;return e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:165:5",className:"space-y-6",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:167:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:168:9",children:[e.jsx("h1",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:169:11",className:"text-2xl font-bold text-slate-100",children:"集群列表"}),e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:170:11",className:"text-sm text-slate-500 mt-1",children:"管理Kubernetes集群资源"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:172:9",className:"flex items-center gap-2",children:[e.jsxs(A,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:173:11",variant:"outline",className:"border-slate-700 text-slate-300 hover:text-slate-100 hover:bg-slate-800",onClick:l,children:[e.jsx(H,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:178:13",className:M("h-4 w-4 mr-2",a&&"animate-spin")}),"刷新"]}),e.jsxs(A,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:181:11",className:"bg-blue-600 hover:bg-blue-700 text-white",onClick:()=>{f(null),C(!0)},children:[e.jsx(pt,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:182:13",className:"h-4 w-4 mr-2"}),"添加集群"]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:189:7",className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[e.jsx(_,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:190:9",className:"bg-slate-900 border-slate-800",children:e.jsx(R,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:191:11",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:192:13",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:193:15",children:[e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:194:17",className:"text-sm text-slate-500",children:"集群总数"}),e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:195:17",className:"text-2xl font-bold text-slate-100",children:n.length})]}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:197:15",className:"p-3 rounded-lg bg-blue-500/10 text-blue-400",children:e.jsx(V,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:198:17",className:"h-5 w-5"})})]})})}),e.jsx(_,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:203:9",className:"bg-slate-900 border-slate-800",children:e.jsx(R,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:204:11",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:205:13",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:206:15",children:[e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:207:17",className:"text-sm text-slate-500",children:"健康集群"}),e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:208:17",className:"text-2xl font-bold text-emerald-400",children:n.filter(r=>r.status==="healthy").length})]}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:212:15",className:"p-3 rounded-lg bg-emerald-500/10 text-emerald-400",children:e.jsx(ee,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:213:17",className:"h-5 w-5"})})]})})}),e.jsx(_,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:218:9",className:"bg-slate-900 border-slate-800",children:e.jsx(R,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:219:11",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:220:13",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:221:15",children:[e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:222:17",className:"text-sm text-slate-500",children:"总节点数"}),e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:223:17",className:"text-2xl font-bold text-slate-100",children:n.reduce((r,K)=>r+(K.node_count||0),0)})]}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:227:15",className:"p-3 rounded-lg bg-purple-500/10 text-purple-400",children:e.jsx(Ue,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:228:17",className:"h-5 w-5"})})]})})}),e.jsx(_,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:233:9",className:"bg-slate-900 border-slate-800",children:e.jsx(R,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:234:11",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:235:13",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:236:15",children:[e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:237:17",className:"text-sm text-slate-500",children:"总Pod数"}),e.jsx("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:238:17",className:"text-2xl font-bold text-slate-100",children:n.reduce((r,K)=>r+(K.pod_count||0),0)})]}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:242:15",className:"p-3 rounded-lg bg-cyan-500/10 text-cyan-400",children:e.jsx(ze,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:243:17",className:"h-5 w-5"})})]})})})]}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:251:7",className:"flex items-center gap-3",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:252:9",className:"relative w-80",children:[e.jsx($e,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:253:11",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-500"}),e.jsx(B,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:254:11",placeholder:"搜索集群名称或版本...",value:d,onChange:r=>N(r.target.value),className:"pl-9 h-9 bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500"})]})}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:264:7",className:"grid grid-cols-1 lg:grid-cols-2 xl:grid-cols-3 gap-4",children:a?e.jsx(_,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:266:11",className:"bg-slate-900 border-slate-800 col-span-full",children:e.jsxs(R,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:267:13",className:"p-12 text-center text-slate-500",children:[e.jsx(H,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:268:15",className:"h-6 w-6 animate-spin mx-auto mb-3"}),"加载中..."]})}):Z.length===0?e.jsx(_,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:273:11",className:"bg-slate-900 border-slate-800 col-span-full",children:e.jsx(R,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:274:13",className:"p-12 text-center text-slate-500",children:"暂无集群数据"})}):Z.map(r=>{const K=Number(r.cpu_usage||0),T=Number(r.memory_usage||0),_e=K>0||T>0;return e.jsxs(_,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:282:15",className:M("bg-slate-900 border-slate-800 cursor-pointer transition-all",s===r.id?"border-blue-500 ring-1 ring-blue-500/30":"hover:border-slate-700"),onClick:()=>u(r.id),children:[e.jsx(U,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:292:17",className:"pb-3",children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:293:19",className:"flex items-start justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:294:21",className:"flex items-center gap-3",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:295:23",className:"w-10 h-10 rounded-lg bg-blue-500/10 flex items-center justify-center",children:e.jsx(V,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:296:25",className:"h-5 w-5 text-blue-400"})}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:298:23",children:[e.jsx(z,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:299:25",className:"text-base text-slate-100",children:r.name}),e.jsx(pe,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:300:25",className:"text-slate-500",children:r.version})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:303:21",className:"flex items-center gap-1",children:[Se(r.status),e.jsxs(We,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:305:23",children:[e.jsx(qe,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:306:25",asChild:!0,children:e.jsx(A,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:307:27",variant:"ghost",size:"icon",className:"h-8 w-8 text-slate-400 hover:text-slate-100",onClick:S=>S.stopPropagation(),children:e.jsx(mt,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:313:29",className:"h-4 w-4"})})}),e.jsxs(He,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:316:25",align:"end",className:"w-48 bg-slate-800 border-slate-700",children:[e.jsx(Ve,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:317:27",className:"text-slate-300",children:"操作"}),e.jsx(te,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:318:27",className:"bg-slate-700"}),e.jsxs(O,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:319:27",className:"text-slate-300 focus:bg-slate-700 focus:text-slate-100",children:[e.jsx(Xe,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:320:29",className:"h-4 w-4 mr-2"}),"查看详情"]}),e.jsxs(O,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:323:27",className:"text-slate-300 focus:bg-slate-700 focus:text-slate-100",onClick:S=>{S.stopPropagation(),f(r),C(!0)},children:[e.jsx(Ye,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:331:29",className:"h-4 w-4 mr-2"}),"配置"]}),e.jsxs(O,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:334:27",className:"text-cyan-400 focus:bg-slate-700 focus:text-cyan-300",onClick:S=>{S.stopPropagation(),L(r.id)},children:[e.jsx(H,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:341:29",className:"h-4 w-4 mr-2"}),"同步"]}),e.jsxs(O,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:344:27",className:"text-emerald-400 focus:bg-slate-700 focus:text-emerald-300",onClick:S=>{S.stopPropagation(),p({id:r.id,name:r.name}),i(!0)},children:[e.jsx(Je,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:352:29",className:"h-4 w-4 mr-2"}),"kubectl"]}),e.jsxs(O,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:355:27",className:"text-blue-400 focus:bg-slate-700 focus:text-blue-300",onClick:S=>{S.stopPropagation(),j(r)},children:[e.jsx(bt,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:362:29",className:"h-4 w-4 mr-2"}),"导出资源"]}),e.jsx(te,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:365:27",className:"bg-slate-700"}),e.jsxs(O,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:366:27",className:"text-red-400 focus:bg-slate-700 focus:text-red-400",onClick:S=>{S.stopPropagation(),q(r.id)},children:[e.jsx(ht,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:373:29",className:"h-4 w-4 mr-2"}),"删除"]})]})]})]})]})}),e.jsxs(R,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:381:17",className:"pt-0",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:382:19",className:"grid grid-cols-4 gap-2 mb-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:383:21",className:"text-center p-2 rounded-lg bg-slate-800/50",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:384:23",className:"text-lg font-semibold text-slate-200",children:r.node_count||0}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:385:23",className:"text-xs text-slate-500",children:"节点"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:387:21",className:"text-center p-2 rounded-lg bg-slate-800/50",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:388:23",className:"text-lg font-semibold text-slate-200",children:r.pod_count||0}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:389:23",className:"text-xs text-slate-500",children:"Pod"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:391:21",className:"text-center p-2 rounded-lg bg-slate-800/50",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:392:23",className:"text-lg font-semibold text-slate-200",children:r.service_count||0}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:393:23",className:"text-xs text-slate-500",children:"Service"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:395:21",className:"text-center p-2 rounded-lg bg-slate-800/50",children:[e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:396:23",className:"text-lg font-semibold text-slate-200",children:r.deployment_count||0}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:397:23",className:"text-xs text-slate-500",children:"Deployment"})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:400:19",className:"space-y-2",children:_e?e.jsxs(e.Fragment,{children:[e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:403:25",className:"flex items-center gap-2",children:[e.jsx("span",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:404:27",className:"text-xs text-slate-500 w-10",children:"CPU"}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:405:27",className:"flex-1 h-1.5 bg-slate-800 rounded-full overflow-hidden",children:e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:406:29",className:M("h-full rounded-full",K>80?"bg-red-400":K>60?"bg-amber-400":"bg-emerald-400"),style:{width:`${Math.min(K,100)}%`}})}),e.jsxs("span",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:414:27",className:"text-xs text-slate-400 w-10 text-right",children:[K.toFixed(1),"%"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:416:25",className:"flex items-center gap-2",children:[e.jsx("span",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:417:27",className:"text-xs text-slate-500 w-10",children:"内存"}),e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:418:27",className:"flex-1 h-1.5 bg-slate-800 rounded-full overflow-hidden",children:e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:419:29",className:M("h-full rounded-full",T>80?"bg-red-400":T>60?"bg-amber-400":"bg-emerald-400"),style:{width:`${Math.min(T,100)}%`}})}),e.jsxs("span",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:427:27",className:"text-xs text-slate-400 w-10 text-right",children:[T.toFixed(1),"%"]})]})]}):e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:431:23",className:"text-xs text-slate-600 text-center",children:["已接入 ",r.node_count||0," 节点 · ",r.pod_count||0," Pod · 资源使用率待采集"]})})]})]},r.id)})}),Q&&e.jsx(gt,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:443:9",cluster:Q,onClose:()=>u(null)}),e.jsx(Pt,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:447:7",open:k,onOpenChange:C,editingCluster:b,onSaved:P}),h&&e.jsx(Tt,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:456:9",open:t,onOpenChange:r=>{i(r),r||p(null)},clusterId:h.id,clusterName:h.name}),m&&e.jsx("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:469:9",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:()=>j(null),children:e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:470:11",className:"bg-slate-900 border border-slate-700 rounded-lg p-5 w-96 shadow-xl",onClick:r=>r.stopPropagation(),children:[e.jsx("h3",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:471:13",className:"text-base font-semibold text-slate-100 mb-1",children:"导出集群资源"}),e.jsxs("p",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:472:13",className:"text-xs text-slate-400 mb-4",children:["导出 ",m.name," 所有命名空间的 Deployment、Service、Ingress、ConfigMap、Secret 为 tar.gz"]}),e.jsxs("div",{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:475:13",className:"flex justify-end gap-2",children:[e.jsx(A,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:476:15",variant:"outline",className:"border-slate-700 text-slate-300",onClick:()=>j(null),children:"取消"}),e.jsx(A,{"code-path":"src/components/kubernetes/KubernetesClusters.tsx:477:15",className:"bg-blue-600 hover:bg-blue-700 text-white",onClick:we,disabled:D,children:D?"导出中...":"确认导出"})]})]})})]})}export{Qt as KubernetesClusters};