Files
aiops/backend/static/assets/NamespaceManagementPage-D9d9jRqO.js
T
Logan.Li 0b404b4611 refactor(frontend): API 子模块化、大组件拆分与 TanStack Query hooks
P1: kubernetes/system API 拆为子目录模块,导出工具下沉到 lib/export-utils,
    http 统一 buildApiUrl/getWsBase;HostMonitor、DeploymentEdit* 拆至子组件。

P2: 新增 hooks/api(queryKeys、useTerminalSessions、useHostMonitor),
    TerminalSessionsTab 与 HostMonitor 接入 TanStack Query。

P3: 保留 services/api 路径,未迁移至 api/ 目录。
2026-06-26 00:02:29 +08:00

2 lines
19 KiB
JavaScript

import{k as X,m as Z,r as n,j as e,n as A,o as O,q as j,B as m,L as i,D as L,w as ee,a as E,b as B,c as q,e as R,v as ae,A as se,N as te,t as H,T as $}from"./index-Dmami9WE.js";import{C as p,a as l}from"./card-CIfC-8Rh.js";import{B as z}from"./badge-3UzCvU7L.js";import{I}from"./input-NsU9nXZF.js";import{L as ne}from"./label-Ap_-SPYI.js";import{T as ce,a as re,b as N,c,d as me,e as s}from"./table-CG4mjNfb.js";import{k as P}from"./kubernetes-D2-GnE0t.js";import{R as oe}from"./refresh-cw-CTBERyFc.js";import{P as pe}from"./plus-O65gX7Qz.js";import{C as le}from"./circle-check-CVbTTFQ0.js";import{T as xe}from"./trash-2-DWVnIU6o.js";const de=new Set(["kube-system","kube-public","kube-node-lease","default","devops"]);function ye(){const{clusterCode:t}=X(),Q=Z(),[o,M]=n.useState([]),[u,f]=n.useState(!1),[b,F]=n.useState(""),[J,k]=n.useState(!1),[d,y]=n.useState(""),[v,w]=n.useState(!1),[g,h]=n.useState(null),[C,S]=n.useState(!1),x=n.useCallback(async()=>{if(t){f(!0);try{const a=await P.getNamespacesDetail(t);M(Array.isArray(a)?a:[])}catch{M([])}finally{f(!1)}}},[t]);n.useEffect(()=>{x()},[x]);const D=async()=>{if(!(!t||!d.trim())){w(!0);try{await P.createNamespace(t,d.trim()),y(""),k(!1),await x()}catch(a){alert(a?.message||"创建失败")}finally{w(!1)}}},K=async()=>{if(!(!t||!g)){S(!0);try{await P.deleteNamespace(t,g),h(null),await x()}catch(a){alert(a?.message||"删除失败")}finally{S(!1)}}},T=o.filter(a=>!b||a.name.toLowerCase().includes(b.toLowerCase())),Y=o.reduce((a,r)=>a+(r.resource_counts?.deployments||0),0),G=o.reduce((a,r)=>a+(r.resource_counts?.pods||0),0),U=o.reduce((a,r)=>a+(r.resource_counts?.services||0),0),V=o.filter(a=>a.has_resource_quota).length;return e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:108:5",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:110:7",className:"flex items-center gap-2 text-sm text-slate-500",children:[e.jsx(A,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:111:9",to:"/kubernetes",className:"hover:text-slate-300 transition-colors",children:"集群"}),e.jsx(O,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:112:9",className:"h-3 w-3"}),e.jsx(A,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:113:9",to:`/kubernetes/${t}`,className:"hover:text-slate-300 transition-colors",children:t}),e.jsx(O,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:114:9",className:"h-3 w-3"}),e.jsx("span",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:115:9",className:"text-slate-300",children:"命名空间管理"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:119:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:120:9",children:[e.jsxs("h1",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:121:11",className:"text-2xl font-bold text-slate-100 flex items-center gap-2",children:[e.jsx(j,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:122:13",className:"h-6 w-6 text-emerald-400"}),"命名空间管理"]}),e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:125:11",className:"text-sm text-slate-500 mt-1",children:"命名空间资源配额与生命周期管理"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:127:9",className:"flex items-center gap-2",children:[e.jsx(m,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:128:11",variant:"outline",size:"icon",className:"h-9 w-9 border-slate-700 text-slate-400",onClick:x,disabled:u,children:u?e.jsx(i,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:130:24",className:"h-4 w-4 animate-spin"}):e.jsx(oe,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:130:71",className:"h-4 w-4"})}),e.jsxs(L,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:132:11",open:J,onOpenChange:k,children:[e.jsx(ee,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:133:13",asChild:!0,children:e.jsxs(m,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:134:15",className:"bg-blue-600 hover:bg-blue-700",children:[e.jsx(pe,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:135:17",className:"h-4 w-4 mr-1"}),"创建命名空间"]})}),e.jsxs(E,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:138:13",children:[e.jsx(B,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:139:15",children:e.jsx(q,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:140:17",children:"创建命名空间"})}),e.jsx("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:142:15",className:"space-y-4 py-4",children:e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:143:17",className:"space-y-2",children:[e.jsx(ne,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:144:19",children:"命名空间名称"}),e.jsx(I,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:145:19",value:d,onChange:a=>y(a.target.value),placeholder:"例如: my-app",onKeyDown:a=>a.key==="Enter"&&D()}),e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:151:19",className:"text-xs text-slate-500",children:"名称需符合 DNS-1123 标准(小写字母/数字/连字符)"})]})}),e.jsxs(R,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:156:15",children:[e.jsx(m,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:157:17",variant:"outline",onClick:()=>k(!1),children:"取消"}),e.jsxs(m,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:158:17",onClick:D,disabled:v||!d.trim(),children:[v?e.jsx(i,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:159:31",className:"h-4 w-4 animate-spin mr-1"}):null,"创建"]})]})]})]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:169:7",className:"grid grid-cols-2 md:grid-cols-5 gap-3",children:[e.jsx(p,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:170:9",className:"bg-slate-900 border-slate-800",children:e.jsxs(l,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:171:11",className:"p-4 flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:172:13",children:[e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:172:18",className:"text-xs text-slate-500",children:"命名空间"}),e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:172:64",className:"text-xl font-bold text-emerald-400",children:o.length})]}),e.jsx(j,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:173:13",className:"h-6 w-6 opacity-30 text-emerald-400"})]})}),e.jsx(p,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:176:9",className:"bg-slate-900 border-slate-800",children:e.jsxs(l,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:177:11",className:"p-4 flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:178:13",children:[e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:178:18",className:"text-xs text-slate-500",children:"Deployments"}),e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:178:71",className:"text-xl font-bold text-blue-400",children:Y})]}),e.jsx(ae,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:179:13",className:"h-6 w-6 opacity-30 text-blue-400"})]})}),e.jsx(p,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:182:9",className:"bg-slate-900 border-slate-800",children:e.jsxs(l,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:183:11",className:"p-4 flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:184:13",children:[e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:184:18",className:"text-xs text-slate-500",children:"Pods"}),e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:184:64",className:"text-xl font-bold text-purple-400",children:G})]}),e.jsx(se,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:185:13",className:"h-6 w-6 opacity-30 text-purple-400"})]})}),e.jsx(p,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:188:9",className:"bg-slate-900 border-slate-800",children:e.jsxs(l,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:189:11",className:"p-4 flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:190:13",children:[e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:190:18",className:"text-xs text-slate-500",children:"Services"}),e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:190:68",className:"text-xl font-bold text-cyan-400",children:U})]}),e.jsx(te,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:191:13",className:"h-6 w-6 opacity-30 text-cyan-400"})]})}),e.jsx(p,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:194:9",className:"bg-slate-900 border-slate-800",children:e.jsxs(l,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:195:11",className:"p-4 flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:196:13",children:[e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:196:18",className:"text-xs text-slate-500",children:"配额限制"}),e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:196:64",className:"text-xl font-bold text-amber-400",children:V})]}),e.jsx(H,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:197:13",className:"h-6 w-6 opacity-30 text-amber-400"})]})})]}),e.jsx("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:203:7",className:"flex items-center gap-3",children:e.jsx(I,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:204:9",value:b,onChange:a=>F(a.target.value),placeholder:"搜索命名空间...",className:"max-w-xs bg-slate-900 border-slate-700"})}),e.jsx(p,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:213:7",className:"bg-slate-900 border-slate-800",children:e.jsx(l,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:214:9",className:"p-0",children:e.jsxs(ce,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:215:11",children:[e.jsx(re,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:216:13",children:e.jsxs(N,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:217:15",className:"border-slate-800 hover:bg-transparent",children:[e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:218:17",className:"text-slate-400",children:"名称"}),e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:219:17",className:"text-slate-400",children:"状态"}),e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:220:17",className:"text-slate-400",children:"年龄"}),e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:221:17",className:"text-slate-400 text-center",children:"Deploy"}),e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:222:17",className:"text-slate-400 text-center",children:"Pods"}),e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:223:17",className:"text-slate-400 text-center",children:"Svc"}),e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:224:17",className:"text-slate-400 text-center",children:"配额"}),e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:225:17",className:"text-slate-400",children:"标签"}),e.jsx(c,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:226:17",className:"text-slate-400 text-center",children:"操作"})]})}),e.jsx(me,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:229:13",children:u?e.jsx(N,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:231:17",children:e.jsxs(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:231:27",colSpan:9,className:"text-center text-slate-500 py-12",children:[e.jsx(i,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:232:19",className:"h-5 w-5 animate-spin mx-auto mb-2"}),"加载中..."]})}):T.length===0?e.jsx(N,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:235:17",children:e.jsxs(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:235:27",colSpan:9,className:"text-center text-slate-500 py-12",children:[e.jsx(j,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:236:19",className:"h-8 w-8 mx-auto mb-2 opacity-50"}),"暂无命名空间"]})}):T.map(a=>{const r=de.has(a.name);return e.jsxs(N,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:242:21",className:"border-slate-800 hover:bg-slate-800/30",children:[e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:243:23",className:"font-medium",children:e.jsx("button",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:244:25",className:"text-blue-400 hover:text-blue-300 hover:underline text-left",onClick:()=>Q(`/kubernetes/${t}/namespace/${a.name}`),children:a.name})}),e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:251:23",children:e.jsxs(z,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:252:25",className:a.status==="Active"?"bg-emerald-500/20 text-emerald-400":"bg-red-500/20 text-red-400",children:[a.status==="Active"?e.jsx(le,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:253:53",className:"h-3 w-3 mr-1"}):e.jsx($,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:253:97",className:"h-3 w-3 mr-1"}),a.status]})}),e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:257:23",className:"text-sm text-slate-400",children:a.age}),e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:258:23",className:"text-center text-sm text-slate-300",children:a.resource_counts?.deployments??0}),e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:259:23",className:"text-center text-sm text-slate-300",children:a.resource_counts?.pods??0}),e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:260:23",className:"text-center text-sm text-slate-300",children:a.resource_counts?.services??0}),e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:261:23",className:"text-center",children:a.has_resource_quota?e.jsxs(z,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:263:27",className:"bg-amber-500/20 text-amber-400",title:JSON.stringify(a.resource_quotas?.[0]?.status),children:[e.jsx(H,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:264:29",className:"h-3 w-3 mr-1"}),"有"]}):e.jsx("span",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:267:27",className:"text-xs text-slate-600",children:"-"})}),e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:270:23",className:"text-xs",children:a.labels&&Object.keys(a.labels).length>0?e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:272:27",className:"flex flex-wrap gap-1 max-w-[200px]",children:[Object.entries(a.labels).slice(0,3).map(([_,W])=>e.jsxs("span",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:274:31",className:"px-1.5 py-0.5 bg-slate-800 rounded text-slate-400",children:[_,"=",W]},_)),Object.keys(a.labels).length>3&&e.jsxs("span",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:277:31",className:"text-slate-600",children:["+",Object.keys(a.labels).length-3]})]}):e.jsx("span",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:281:27",className:"text-slate-600",children:"-"})}),e.jsx(s,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:284:23",className:"text-center",children:r?e.jsx("span",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:286:27",className:"text-xs text-slate-600",children:"系统"}):e.jsx(m,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:288:27",variant:"ghost",size:"icon",className:"h-7 w-7 text-red-400 hover:text-red-300 hover:bg-red-500/10",onClick:()=>h(a.name),title:"删除命名空间",children:e.jsx(xe,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:294:29",className:"h-3.5 w-3.5"})})})]},a.name)})})]})})}),e.jsx(L,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:308:7",open:!!g,onOpenChange:a=>!a&&h(null),children:e.jsxs(E,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:309:9",children:[e.jsx(B,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:310:11",children:e.jsxs(q,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:311:13",className:"text-red-400 flex items-center gap-2",children:[e.jsx($,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:312:15",className:"h-5 w-5"}),"删除命名空间"]})}),e.jsx("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:315:11",className:"space-y-3 py-4",children:e.jsxs("div",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:316:13",className:"bg-red-500/10 border border-red-500/30 rounded-lg p-3",children:[e.jsxs("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:317:15",className:"text-sm text-red-300",children:["⚠️ 即将删除命名空间 ",e.jsx("span",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:318:29",className:"font-bold",children:g})," 及其中所有资源。"]}),e.jsx("p",{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:320:15",className:"text-xs text-red-400/70 mt-1",children:"此操作不可逆,所有 Deployment/Pod/Service/ConfigMap 等资源将被永久删除。"})]})}),e.jsxs(R,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:325:11",children:[e.jsx(m,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:326:13",variant:"outline",onClick:()=>h(null),children:"取消"}),e.jsxs(m,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:327:13",variant:"destructive",onClick:K,disabled:C,children:[C?e.jsx(i,{"code-path":"src/components/kubernetes/NamespaceManagementPage.tsx:328:27",className:"h-4 w-4 animate-spin mr-1"}):null,"确认删除"]})]})]})})]})}export{ye as default};