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/ 目录。
This commit is contained in:
Logan.Li committed 2026-06-26 00:02:29 +08:00
1 parent 7fb2236b4d
commit 0b404b4611
226 files changed
+3040 -2596

No files matched your search

@@ -0,0 +1,2 @@
import{k as Ue,m as Te,x as Re,r as d,j as e,B as x,q as ne,R as Le,F as $e,y as Ae,z as Me,v as he,A as ze,E as Be}from"./index-Dmami9WE.js";import{C as V,a as W,b as y,c as S}from"./card-CIfC-8Rh.js";import{B as j}from"./badge-3UzCvU7L.js";import{T as ce,a as le,b as C,c as h,d as de,e as i}from"./table-CG4mjNfb.js";import{k as U}from"./kubernetes-D2-GnE0t.js";import{u as Oe}from"./use-toast-jvSbBx20.js";import{Y as ie,S as w,f as me,s as q,P as Fe,a as _e}from"./PodFileBrowser-BLvOIIeH.js";import{A as He}from"./arrow-left-BIbk9wFC.js";import{T as Ye}from"./tag-utZ9-UQ0.js";import{H as De}from"./hard-drive-DmC04Y5r.js";import{M as Ee}from"./minus-DRP_TSA-.js";import{P as qe}from"./plus-O65gX7Qz.js";import"./copy-CE_T92Lk.js";import"./sparkles-rPZivnlW.js";import"./save-YtnrpTd8.js";import"./select-DUbxjT0z.js";import"./index-CtCQcvyh.js";import"./chevron-up-Cq4GPopa.js";import"./xterm-DSqgeKvr.js";import"./box-88Ol5qY-.js";import"./rotate-cw-CKCO6IKE.js";import"./minimize-2-BHcbNmdK.js";import"./upload-CRLg7Pbj.js";import"./refresh-cw-CTBERyFc.js";import"./folder-B5RGB3GG.js";import"./download-Vuij9wGr.js";function n({label:t,value:m,sub:P,color:u}){return e.jsx(V,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:28:5",className:"bg-slate-900 border-slate-800",children:e.jsxs(W,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:29:7",className:"p-3",children:[e.jsx("p",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:30:9",className:"text-xs text-slate-500",children:t}),e.jsx("p",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:31:9",className:"text-base font-bold mt-0.5",style:{color:u||"#e2e8f0"},children:m}),P&&e.jsx("p",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:32:17",className:"text-[10px] text-slate-600 mt-0.5",children:P})]})})}function pe({labels:t}){const m=Object.entries(t||{});return m.length===0?e.jsx("span",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:41:36",className:"text-xs text-slate-600",children:"无"}):e.jsx("div",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:43:5",className:"flex flex-wrap gap-1.5",children:m.map(([P,u])=>e.jsxs(j,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:45:9",variant:"outline",className:"border-slate-700 text-slate-400 text-[10px] font-mono",children:[P,"=",u]},P))})}function ws(){const t=Ue(),m=Te(),P=Re(),{toast:u}=Oe(),o=t.clusterCode||"",r=t.namespace||"",c=t.name||"",p=P.pathname.includes("/DaemonSet/")?"DaemonSet":"StatefulSet",T=t.mode==="yaml"?"yaml":"view",[N,ke]=d.useState(null),[R,ue]=d.useState([]),[be,I]=d.useState(!0),[ge,L]=d.useState(!1),[v,F]=d.useState(1),[$,A]=d.useState(!1),[_,J]=d.useState(null),[H,K]=d.useState(null),[we,G]=d.useState(!1),M=d.useCallback(async()=>{I(!0);try{const[s,l]=await Promise.all([U.getResourceYaml(o,r,p.toLowerCase()+"s",c).catch(()=>""),U.getPods(o).catch(()=>[])]);let f=null;if(s&&typeof s=="string")try{f=JSON.parse(s)}catch{f={_raw:s}}else s&&typeof s=="object"&&(f=s);ke(f);const E=(Array.isArray(l)?l:l?.list||l?.data||[]).filter(O=>{const Ce=O.name||O.metadata?.name||"",re=O.namespace||O.namespace_name||"";return Ce.startsWith(c)&&(!re||re===r)});ue(E)}catch(s){console.error("load error",s)}finally{I(!1)}},[o,r,c,p]);d.useEffect(()=>{M()},[M]);const Q=s=>{s!==T&&m(`/kubernetes/${o}/namespace/${r}/workload/${s}/${p}/${c}`,{replace:!0})},je=async()=>{if(confirm(`确认重启 ${p} ${c}?
将触发滚动重启。`)){A(!0);try{p==="StatefulSet"?await U.restartStatefulSet(o,r,c):await U.restartDaemonSet(o,r,c),u({title:"重启指令已下发",description:`${p} 滚动重启已触发`}),setTimeout(M,1e3)}catch(s){u({title:"重启失败",description:s?.message||String(s),variant:"destructive"})}finally{A(!1)}}},Pe=async()=>{A(!0);try{await U.scaleStatefulSet(o,r,c,v),u({title:"扩缩容成功",description:`StatefulSet 副本数已更新为 ${v}`}),L(!1),setTimeout(M,1e3)}catch(s){u({title:"扩缩容失败",description:s?.message||String(s),variant:"destructive"})}finally{A(!1)}},k=N?.spec||{},b=N?.status||{},X=k?.template?.spec?.containers||[],Z=k?.template?.spec?.initContainers||[],z=k.replicas??1,ee=b.readyReplicas??0,Ve=b.currentReplicas??0,We=b.updatedReplicas??0,Y=b.desiredNumberScheduled??0,Ne=b.currentNumberScheduled??0,se=b.numberReady??0,fe=b.numberAvailable??0,ve=b.updatedNumberScheduled??0,g=p==="StatefulSet",B=g?ee===z&&z>0:se===Y&&Y>0,a=k.updateStrategy||{},D=a.type||"RollingUpdate",te=k.volumeClaimTemplates||[],ye=k.selector?.matchLabels||{},Se=N?.metadata?.labels||{},ae=N?.metadata?.annotations||{};return e.jsxs("div",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:183:5",className:"p-4 space-y-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:185:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:186:9",className:"flex items-center gap-3",children:[e.jsx(x,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:187:11",variant:"ghost",size:"icon",className:"h-8 w-8 text-slate-400 hover:text-slate-200",onClick:()=>m(-1),children:e.jsx(He,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:188:13",className:"h-4 w-4"})}),e.jsx(ne,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:190:11",className:"h-5 w-5 text-blue-400"}),e.jsxs("div",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:191:11",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:192:13",className:"flex items-center gap-2",children:[e.jsx("h1",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:193:15",className:"text-lg font-bold text-slate-100",children:c}),e.jsx(j,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:194:15",variant:"outline",className:"border-slate-700 text-slate-400",children:p}),e.jsx(j,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:195:15",variant:"outline",className:"border-slate-700 text-slate-400",children:r}),B?e.jsx(j,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:197:19",className:"bg-emerald-500/20 text-emerald-400 border-emerald-500/30",children:"健康"}):e.jsx(j,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:198:19",className:"bg-amber-500/20 text-amber-400 border-amber-500/30",children:"更新中"})]}),e.jsxs("p",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:200:13",className:"text-xs text-slate-500 mt-0.5",children:["集群: ",o]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:203:9",className:"flex items-center gap-2",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:205:11",className:"flex items-center gap-1 bg-slate-900 border border-slate-800 rounded-lg p-0.5",children:[e.jsx("button",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:206:13",className:`px-3 py-1 text-xs rounded transition-colors ${T==="view"?"bg-blue-500/20 text-blue-400":"text-slate-400 hover:text-slate-200"}`,onClick:()=>Q("view"),children:"查看"}),e.jsx("button",{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:210:13",className:`px-3 py-1 text-xs rounded transition-colors ${T==="yaml"?"bg-blue-500/20 text-blue-400":"text-slate-400 hover:text-slate-200"}`,onClick:()=>Q("yaml"),children:"YAML"})]}),g&&e.jsxs(x,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:217:13",variant:"outline",size:"sm",className:"h-8 border-slate-700 text-slate-300 hover:text-slate-100",onClick:()=>{F(z),L(!0)},children:[e.jsx(ne,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:219:15",className:"h-3.5 w-3.5 mr-1"}),"伸缩"]}),e.jsxs(x,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:222:11",variant:"outline",size:"sm",className:"h-8 border-slate-700 text-slate-300 hover:text-slate-100",disabled:$,onClick:je,children:[e.jsx(Le,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:224:13",className:"h-3.5 w-3.5 mr-1"}),$?"重启中...":"重启"]}),e.jsxs(x,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:226:11",variant:"outline",size:"sm",className:"h-8 border-slate-700 text-slate-300 hover:text-slate-100",onClick:()=>G(!0),children:[e.jsx($e,{"code-path":"src/components/kubernetes/WorkloadViewPage.tsx:228:13",className:"h-3.5 w-3.5 mr-1"}),"YAML"]})]})]}),be?e.jsx("div",{"code-path":"src/components/kubernetes/WorkloadViewP Line truncated