Files
aiops/backend/static/assets/ResourceVisualEditor-BN2gGuH7.js
T

2 lines
44 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{r as i,j as e}from"./vendor-codemirror-B1SGo4xl.js";import{B as E}from"./index-Dungj95X.js";import{p as F,c as ee,g as le,M as ue,d as xe,b as me,e as pe,f as he,y as be}from"./PodFileBrowser-B-U8iHmY.js";import{I as f}from"./input-CXoUQQLm.js";import{L as T}from"./label-CMpUoC87.js";import{T as te}from"./textarea-BxfjmLq5.js";import{S as G,a as W,b as U,c as H,d as Y}from"./select-CiTqGGhE.js";import{u as ge}from"./use-toast-DNZLibQY.js";import{k as $,d as ve}from"./index-drGq01ok.js";import{D as ke,f as Re,N as Ee,j as je,F as Ve,X as fe,L as A,P as L,T as O,$ as B}from"./vendor-icons-DmqcWdzX.js";function se(n,l,a){switch(n){case"services":return{apiVersion:"v1",kind:"Service",metadata:{name:a,namespace:l},spec:{type:"ClusterIP",selector:{},ports:[{name:"http",port:80,targetPort:80,protocol:"TCP"}]}};case"ingresses":return{apiVersion:"networking.k8s.io/v1",kind:"Ingress",metadata:{name:a,namespace:l},spec:{ingressClassName:"nginx",rules:[{host:"",http:{paths:[{path:"/",pathType:"Prefix",backend:{service:{name:"",port:{number:80}}}}]}}]}};case"configmaps":return{apiVersion:"v1",kind:"ConfigMap",metadata:{name:a,namespace:l},data:{}};case"secrets":return{apiVersion:"v1",kind:"Secret",metadata:{name:a,namespace:l},type:"Opaque",data:{}};case"pvcs":return{apiVersion:"v1",kind:"PersistentVolumeClaim",metadata:{name:a,namespace:l},spec:{accessModes:["ReadWriteOnce"],resources:{requests:{storage:"1Gi"}}}};case"deployments":return{apiVersion:"apps/v1",kind:"Deployment",metadata:{name:a||"my-app",namespace:l,labels:{app:a||"my-app"}},spec:{replicas:1,selector:{matchLabels:{app:a||"my-app"}},template:{metadata:{labels:{app:a||"my-app"}},spec:{containers:[{name:"main",image:"nginx:latest",ports:[{containerPort:80,protocol:"TCP"}],resources:{requests:{cpu:"100m",memory:"128Mi"},limits:{cpu:"500m",memory:"512Mi"}}}]}}}};default:return{apiVersion:"v1",kind:"Unknown",metadata:{name:a,namespace:l}}}}function Ae({clusterCode:n,namespace:l,resource:a,name:k,onClose:j,onSaved:y,isCreate:h=!1}){const{toast:u}=ge(),[R,g]=i.useState(!0),[v,V]=i.useState(!1),[N,w]=i.useState(""),[b,t]=i.useState(null),[c,m]=i.useState("visual"),[C,M]=i.useState(""),[I,o]=i.useState(""),[x,s]=i.useState(!1),[r,p]=i.useState(!1),[S,P]=i.useState(!1),X=i.useCallback(async()=>{g(!0);try{if(h){const Q=se(a,l,k||""),Z=await F(Q);t(Q),M(Z),o(Z),w(""),s(!0);return}const d=await $.getResourceYaml(n,l,a,k);w(d);const{manifest:z,yaml:_}=await ee(d);M(_),o(_),s(!1),p(!1),t(z),z||(m("yaml"),u({title:"可视化编辑不可用",description:"无法解析资源结构,已切换到 YAML 编辑模式"}))}catch(d){u({title:"加载失败",description:d.message,variant:"destructive"})}finally{g(!1)}},[n,l,a,k,h]);i.useEffect(()=>{X()},[X]);const D=async d=>{V(!0);try{const z=await F(d),_=d?.metadata?.name||k;if(h){if(!_?.trim()){u({title:"请填写名称",variant:"destructive"});return}await $.applyYAML(n,z),u({title:"创建成功",description:`${a}/${_}`})}else await $.updateResourceYaml(n,l,a,k,z),u({title:"保存成功",description:`${a}/${k} 已更新`});y?.(),j()}catch(z){u({title:h?"创建失败":"保存失败",description:z.message,variant:"destructive"})}finally{V(!1)}},re=async()=>{V(!0);try{const d=await he(I);h?(await $.applyYAML(n,d),u({title:"创建成功",description:"YAML 已应用"})):(await $.updateResourceYaml(n,l,a,k,d),u({title:"保存成功",description:`${a}/${k} 已更新`})),s(!1),M(d),o(d),h||w(d),y?.(),j()}catch(d){u({title:"保存失败",description:d.message,variant:"destructive"})}finally{V(!1)}},oe=async()=>{const d=await pe(I);if(!d){u({title:"无法解析 YAML",description:"请检查语法后继续用 YAML 模式",variant:"destructive"});return}t(d),m("visual")},ae=async()=>{if(b){const d=await F(b);M(d),o(d)}s(!1),p(!1),m("yaml")},J=()=>x?I:r?N:C,ce=async()=>{await navigator.clipboard.writeText(J()),P(!0),setTimeout(()=>P(!1),2e3)},ne=()=>{const d=be(a,l,k||b?.metadata?.name||"resource");ve(d,J()),u({title:"已下载",description:d})},de=le(a),K={configmaps:{title:"ConfigMap",icon:Ve,color:"text-blue-400"},secrets:{title:"Secret",icon:je,color:"text-amber-400"},services:{title:"Service",icon:Ee,color:"text-cyan-400"},ingresses:{title:"Ingress",icon:Re,color:"text-purple-400"},pvcs:{title:"PersistentVolumeClaim",icon:ke,color:"text-emerald-400"}},q=K[a]||K.configmaps,ie=q.icon;return e.jsx(ue,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:169:5",onClose:j,children:e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:170:7",className:"bg-[var(--dg-bg-primary)] border border-[var(--dg-border)] rounded-xl w-[90vw] max-w-3xl h-[85vh] flex flex-col shadow-2xl",onClick:d=>d.stopPropagation(),children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:175:9",className:"flex items-center justify-between p-4 border-b border-[var(--dg-border)] gap-3 shrink-0",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:176:11",className:"flex items-center gap-2 min-w-0 flex-1",children:[e.jsx(ie,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:177:13",className:`h-5 w-5 shrink-0 ${q.color}`}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:178:13",className:"min-w-0",children:[e.jsx("h2",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:179:15",className:"text-lg font-bold text-[var(--dg-text-primary)] truncate",children:h?`新建 ${q.title}`:`${q.title} 编辑`}),e.jsx("p",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:182:15",className:"text-xs text-[var(--dg-text-muted)] truncate",title:h?`${l} · ${n}`:`${k} · ${l} · ${n}`,children:h?`${l} · ${n}`:`${k} · ${l} · ${n}`})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:190:11",className:"flex items-center gap-2 shrink-0",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:192:13",className:"flex rounded-lg border border-[var(--dg-border)] overflow-hidden",children:[e.jsx("button",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:193:15",className:`px-3 py-1.5 text-xs font-medium transition-colors ${c==="visual"?"bg-blue-600 text-white":"bg-transparent text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-tertiary)]"}`,onClick:()=>{c==="yaml"?oe():m("visual")},disabled:!b&&c!=="yaml",children:"可视化编辑"}),e.jsx("button",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:198:15",className:`px-3 py-1.5 text-xs font-medium transition-colors ${c==="yaml"?"bg-blue-600 text-white":"bg-transparent text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-tertiary)]"}`,onClick:()=>{c==="visual"?ae():m("yaml")},children:"YAML 编辑"})]}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:203:13",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)]",onClick:j,children:e.jsx(fe,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:203:119",className:"h-4 w-4"})})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:208:9",className:"flex-1 min-h-0 p-4 flex flex-col overflow-hidden",children:R?e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:210:13",className:"flex items-center justify-center h-full py-20",children:e.jsx(A,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:210:76",className:"h-6 w-6 animate-spin text-[var(--dg-text-muted)]"})}):c==="yaml"?e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:212:13",className:"flex flex-col flex-1 min-h-0 gap-3",children:[e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:213:15",className:"flex justify-end shrink-0",children:e.jsx(xe,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:214:17",editing:x,saving:v,copied:S,showRaw:r,compact:!0,readOnly:de.readOnly,showRawToggle:!h&&!!N,onCopy:ce,onDownload:ne,onEdit:()=>{o(C),s(!0),p(!1)},onCancel:async()=>{if(s(!1),h){const z=se(a,l,k||""),_=await F(z);M(_),o(_);return}const{yaml:d}=await ee(N);M(d),o(d)},onSave:re,onToggleRaw:()=>p(d=>!d)})}),e.jsx(me,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:242:15",value:x?I:r?N:C,editing:x,fill:!0,fontSize:"12px",onChange:d=>x&&o(d)})]}):b?e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:251:13",className:"flex-1 min-h-0 flex flex-col overflow-hidden",children:[a==="configmaps"&&e.jsx(ye,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:252:45",manifest:b,onSave:D,saving:v,isCreate:h}),a==="secrets"&&e.jsx(Ne,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:253:42",manifest:b,onSave:D,saving:v,isCreate:h}),a==="services"&&e.jsx(we,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:254:43",manifest:b,onSave:D,saving:v,isCreate:h}),a==="ingresses"&&e.jsx(Se,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:255:44",manifest:b,clusterCode:n,onSave:D,saving:v,isCreate:h}),a==="pvcs"&&e.jsx(Ce,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:256:39",manifest:b,onSave:D,saving:v,isCreate:h}),!["configmaps","secrets","services","ingresses","pvcs"].includes(a)&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:258:17",className:"flex-1 flex items-center justify-center text-center text-[var(--dg-text-muted)]",children:e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:259:19",children:[e.jsx("p",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:260:21",children:"该资源类型暂不支持可视化编辑"}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:261:21",variant:"outline",size:"sm",className:"mt-4",onClick:()=>m("yaml"),children:"切换到 YAML 编辑"})]})})]}):e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:267:13",className:"text-center py-12 text-[var(--dg-text-muted)]",children:[e.jsx("p",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:268:15",children:"无法解析资源结构"}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:269:15",variant:"outline",size:"sm",className:"mt-4",onClick:()=>m("yaml"),children:"切换到 YAML 编辑"})]})})]})})}function ye({manifest:n,onSave:l,saving:a,isCreate:k}){const j=n?.data||{},[y,h]=i.useState(n?.metadata?.name||""),[u,R]=i.useState(Object.entries(j).map(([t,c])=>({key:t,value:String(c)}))),[g,v]=i.useState(!1),V=(t,c,m)=>{const C=[...u];C[t]={...C[t],[c]:m},R(C)},N=()=>R([...u,{key:"",value:""}]),w=t=>R(u.filter((c,m)=>m!==t)),b=()=>{const t={};u.forEach(c=>{c.key.trim()&&(t[c.key.trim()]=c.value)}),l({...n,metadata:{...n.metadata,name:y.trim()},data:t})};return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:307:5",className:"flex flex-col h-full",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:308:7",className:"shrink-0",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:309:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"名称"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:310:9",value:y,onChange:t=>h(t.target.value),readOnly:!k,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:313:7",className:"flex-1 min-h-0 flex flex-col mt-3",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:314:9",className:"flex items-center justify-between mb-2 shrink-0",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:315:11",className:"text-[var(--dg-text-secondary)] text-sm",children:"配置数据 (键值对)"}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:316:11",className:"flex gap-1",children:[e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:317:13",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:()=>v(!g),children:g?"折叠全部":"展开全部"}),e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:320:13",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:N,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:320:90",className:"h-3 w-3 mr-1"}),"添加"]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:323:9",className:"flex-1 min-h-0 overflow-y-auto pr-1 space-y-2 border border-[var(--dg-border)] rounded-lg bg-[var(--dg-bg-secondary)] p-2",children:[u.map((t,c)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:325:13",className:"flex items-start gap-2 p-2 rounded-lg border border-[var(--dg-border)] bg-[var(--dg-bg-tertiary)]",children:[e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:326:15",value:t.key,onChange:m=>V(c,"key",m.target.value),placeholder:"键名 (如 LOG_LEVEL)",className:"flex-1 font-mono text-xs h-8 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(te,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:332:15",value:t.value,onChange:m=>V(c,"value",m.target.value),placeholder:"值",rows:g||t.value.length>300?10:t.value.length>100?6:3,className:"flex-[2] font-mono text-xs min-h-[70px] max-h-[420px] resize-y bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] leading-relaxed"}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:339:15",variant:"ghost",size:"icon",className:"h-8 w-8 text-red-400 hover:text-red-300 shrink-0",onClick:()=>w(c),children:e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:340:17",className:"h-3.5 w-3.5"})})]},c)),u.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:345:13",className:"text-center py-8 text-[var(--dg-text-muted)] text-xs",children:"暂无配置数据,点击「添加」创建"})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:350:7",className:"shrink-0 flex justify-end gap-2 pt-3 mt-2 border-t border-[var(--dg-border)]",children:e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:351:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:b,disabled:a,children:[a?e.jsx(A,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:352:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(B,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:352:77",className:"h-3.5 w-3.5 mr-1"}),"保存配置"]})})]})}function Ne({manifest:n,onSave:l,saving:a,isCreate:k}){const j=n?.data||{},[y,h]=i.useState(n?.metadata?.name||""),[u,R]=i.useState(!1),[g,v]=i.useState(Object.entries(j).map(([t,c])=>{const m=String(c);try{const C=atob(m);return{key:t,value:C,encoded:!0}}catch{return{key:t,value:m,encoded:!1}}})),V=(t,c,m)=>{const C=[...g];C[t]={...C[t],[c]:m},v(C)},N=()=>v([...g,{key:"",value:"",encoded:!0}]),w=t=>v(g.filter((c,m)=>m!==t)),b=()=>{const t={};g.forEach(c=>{c.key.trim()&&(t[c.key.trim()]=c.encoded?btoa(c.value):c.value)}),l({...n,metadata:{...n.metadata,name:y.trim()},data:t})};return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:402:5",className:"flex flex-col h-full",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:403:7",className:"shrink-0 grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:404:9",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:405:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"名称"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:406:11",value:y,onChange:t=>h(t.target.value),readOnly:!k,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:408:9",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:409:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"类型"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:410:11",value:n?.type||"Opaque",readOnly:!0,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:414:7",className:"flex-1 min-h-0 flex flex-col mt-3",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:415:9",className:"flex items-center justify-between mb-2 shrink-0",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:416:11",className:"text-[var(--dg-text-secondary)] text-sm",children:"密钥数据 (已自动解码 Base64)"}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:417:11",className:"flex gap-1",children:[e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:418:13",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:()=>R(!u),children:u?"折叠全部":"展开全部"}),e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:421:13",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:N,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:421:90",className:"h-3 w-3 mr-1"}),"添加"]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:424:9",className:"flex-1 min-h-0 overflow-y-auto pr-1 space-y-2 border border-[var(--dg-border)] rounded-lg bg-[var(--dg-bg-secondary)] p-2",children:[g.map((t,c)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:426:13",className:"flex items-start gap-2 p-2 rounded-lg border border-[var(--dg-border)] bg-[var(--dg-bg-tertiary)]",children:[e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:427:15",value:t.key,onChange:m=>V(c,"key",m.target.value),placeholder:"键名 (如 password)",className:"flex-1 font-mono text-xs h-8 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(te,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:433:15",value:t.value,onChange:m=>V(c,"value",m.target.value),placeholder:"明文值",rows:u||t.value.length>300?10:t.value.length>100?6:3,className:"flex-[2] font-mono text-xs min-h-[70px] max-h-[420px] resize-y bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] leading-relaxed"}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:440:15",variant:"ghost",size:"icon",className:"h-8 w-8 text-red-400 hover:text-red-300 shrink-0",onClick:()=>w(c),children:e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:441:17",className:"h-3.5 w-3.5"})})]},c)),g.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:446:13",className:"text-center py-8 text-[var(--dg-text-muted)] text-xs",children:"暂无密钥数据,点击「添加」创建"})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:451:7",className:"shrink-0 flex justify-end gap-2 pt-3 mt-2 border-t border-[var(--dg-border)]",children:e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:452:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:b,disabled:a,children:[a?e.jsx(A,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:453:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(B,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:453:77",className:"h-3.5 w-3.5 mr-1"}),"保存密钥"]})})]})}function we({manifest:n,onSave:l,saving:a,isCreate:k}){const j=n?.spec||{},[y,h]=i.useState(n?.metadata?.name||""),[u,R]=i.useState(j.type||"ClusterIP"),[g,v]=i.useState((j.ports||[]).map(o=>({name:o.name||"",port:String(o.port||""),targetPort:String(o.targetPort||""),protocol:o.protocol||"TCP",nodePort:o.nodePort?String(o.nodePort):""}))),[V,N]=i.useState(Object.entries(j.selector||{}).map(([o,x])=>({key:o,value:String(x)}))),w=(o,x,s)=>{const r=[...g];r[o]={...r[o],[x]:s},v(r)},b=()=>v([...g,{name:"",port:"",targetPort:"",protocol:"TCP",nodePort:""}]),t=o=>v(g.filter((x,s)=>s!==o)),c=(o,x,s)=>{const r=[...V];r[o]={...r[o],[x]:s},N(r)},m=()=>N([...V,{key:"",value:""}]),C=o=>N(V.filter((x,s)=>s!==o)),M=()=>{const o={...j};o.type=u,o.ports=g.map(s=>{const r={port:parseInt(s.port)||80,targetPort:parseInt(s.targetPort)||parseInt(s.port)||80,protocol:s.protocol};return s.name&&(r.name=s.name),s.nodePort&&u==="NodePort"&&(r.nodePort=parseInt(s.nodePort)),r});const x={};V.forEach(s=>{s.key.trim()&&(x[s.key.trim()]=s.value)}),o.selector=x,l({...n,metadata:{...n.metadata,name:y.trim()},spec:o})},I=[{value:"ClusterIP",label:"ClusterIP"},{value:"NodePort",label:"NodePort"},{value:"LoadBalancer",label:"LoadBalancer"}];return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:523:5",className:"flex flex-col h-full",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:524:7",className:"shrink-0",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:525:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"服务名称"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:526:9",value:y,onChange:o=>h(o.target.value),readOnly:!k,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:528:7",className:"shrink-0 mt-3",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:529:9",className:"text-[var(--dg-text-secondary)] text-xs mb-2 block",children:"服务类型"}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:530:9",className:"flex rounded-lg border border-[var(--dg-border)] overflow-hidden w-fit",children:I.map(o=>e.jsx("button",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:532:13",type:"button",className:`px-3 py-1.5 text-xs transition-colors ${u===o.value?"bg-blue-600 text-white":"text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-tertiary)]"}`,onClick:()=>R(o.value),children:o.label},o.value))})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:545:7",className:"flex-1 min-h-0 overflow-y-auto mt-3 pr-1 space-y-3",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:546:9",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:547:11",className:"flex items-center justify-between mb-2",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:548:13",className:"text-[var(--dg-text-secondary)] text-sm",children:"端口映射"}),e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:549:13",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:b,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:549:91",className:"h-3 w-3 mr-1"}),"添加端口"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:551:11",className:"space-y-2 border border-[var(--dg-border)] rounded-lg p-2 bg-[var(--dg-bg-secondary)]",children:[g.map((o,x)=>e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:553:13",className:"overflow-x-auto",children:e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:554:13",className:"grid grid-cols-[minmax(80px,1fr)_80px_80px_80px_80px_32px] gap-2 items-center min-w-[480px]",children:[e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:555:15",value:o.name,onChange:s=>w(x,"name",s.target.value),placeholder:"名称",className:"font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:556:15",value:o.port,onChange:s=>w(x,"port",s.target.value),placeholder:"端口",type:"number",className:"font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:557:15",value:o.targetPort,onChange:s=>w(x,"targetPort",s.target.value),placeholder:"目标",type:"number",className:"font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsxs(G,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:558:15",value:o.protocol,onValueChange:s=>w(x,"protocol",s),children:[e.jsx(W,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:559:17",className:"h-7 text-xs bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(U,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:559:139"})}),e.jsxs(H,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:560:17",children:[e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:560:32",value:"TCP",children:"TCP"}),e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:560:72",value:"UDP",children:"UDP"})]})]}),u==="NodePort"?e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:563:17",value:o.nodePort,onChange:s=>w(x,"nodePort",s.target.value),placeholder:"NodePort",type:"number",className:"font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}):e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:564:19"}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:565:15",variant:"ghost",size:"icon",className:"h-7 w-7 text-red-400 hover:text-red-300",onClick:()=>t(x),children:e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:565:133",className:"h-3 w-3"})})]})},x)),g.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:569:34",className:"text-center py-4 text-[var(--dg-text-muted)] text-xs",children:"暂无端口,点击「添加端口」"})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:574:9",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:575:11",className:"flex items-center justify-between mb-2",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:576:13",className:"text-[var(--dg-text-secondary)] text-sm",children:"选择器 (Selector)"}),e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:577:13",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:m,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:577:95",className:"h-3 w-3 mr-1"}),"添加标签"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:579:11",className:"space-y-2",children:[V.map((o,x)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:581:15",className:"flex items-center gap-2 min-w-0",children:[e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:582:17",value:o.key,onChange:s=>c(x,"key",s.target.value),placeholder:"键 (如 app)",className:"flex-1 min-w-0 font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx("span",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:583:17",className:"text-[var(--dg-text-muted)] text-xs shrink-0",children:"="}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:584:17",value:o.value,onChange:s=>c(x,"value",s.target.value),placeholder:"值 (如 nginx)",className:"flex-1 min-w-0 font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:585:17",variant:"ghost",size:"icon",className:"h-7 w-7 shrink-0 text-red-400 hover:text-red-300",onClick:()=>C(x),children:e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:585:148",className:"h-3 w-3"})})]},x)),V.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:588:39",className:"text-center py-4 text-[var(--dg-text-muted)] text-xs",children:"暂无选择器"})]})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:593:7",className:"shrink-0 flex justify-end gap-2 pt-3 mt-2 border-t border-[var(--dg-border)]",children:e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:594:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:M,disabled:a,children:[a?e.jsx(A,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:595:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(B,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:595:77",className:"h-3.5 w-3.5 mr-1"}),"保存 Service"]})})]})}function Se({manifest:n,clusterCode:l,onSave:a,saving:k,isCreate:j}){const y=n?.spec||{},[h,u]=i.useState(n?.metadata?.name||""),[R,g]=i.useState(y.ingressClassName||"nginx"),[v,V]=i.useState([]),[N,w]=i.useState(!1);i.useEffect(()=>{l&&(w(!0),$.getIngressClasses(l).then(s=>{const r=Array.isArray(s)?s:s?.list||s||[];if(V(r),j&&(!y.ingressClassName||y.ingressClassName==="nginx")&&r.length>0){const p=r.find(S=>S.name?.toLowerCase().includes("nginx"))||r[0];p?.name&&g(p.name)}}).catch(()=>{}).finally(()=>w(!1)))},[l]);const[b,t]=i.useState((y.rules||[]).map(s=>({host:s.host||"",paths:s.http?.backend?.servicePort!=null?[{path:"/",pathType:"Prefix",serviceName:s.http?.backend?.serviceName||"",servicePort:String(s.http?.backend?.servicePort||"80")}]:(s.http?.paths||[]).map(r=>({path:r.path||"/",pathType:r.pathType||"Prefix",serviceName:r.backend?.service?.name||r.backend?.serviceName||"",servicePort:String(r.backend?.service?.port?.number??r.backend?.servicePort??"80")}))}))),c=(s,r)=>{const p=[...b];p[s]={...p[s],host:r},t(p)},m=()=>t([...b,{host:"",paths:[{path:"/",pathType:"Prefix",serviceName:"",servicePort:"80"}]}]),C=s=>t(b.filter((r,p)=>p!==s)),M=(s,r,p,S)=>{const P=[...b];P[s].paths[r]={...P[s].paths[r],[p]:S},t(P)},I=s=>{const r=[...b];r[s].paths.push({path:"/",pathType:"Prefix",serviceName:"",servicePort:"80"}),t(r)},o=(s,r)=>{const p=[...b];p[s].paths=p[s].paths.filter((S,P)=>P!==r),t(p)},x=()=>{const s=b.map(p=>({host:p.host,http:{paths:p.paths.map(S=>({path:S.path,pathType:S.pathType,backend:{service:{name:S.serviceName,port:{number:parseInt(S.servicePort)||80}}}}))}})),r={...y,rules:s};R.trim()?r.ingressClassName=R.trim():delete r.ingressClassName,a({...n,metadata:{...n.metadata,name:h.trim()},spec:r})};return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:687:5",className:"flex flex-col h-full min-h-0",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:688:7",className:"shrink-0 grid grid-cols-1 sm:grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:689:9",className:"min-w-0",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:690:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"名称"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:691:11",value:h,onChange:s=>u(s.target.value),readOnly:!j,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:693:9",className:"min-w-0",children:[e.jsxs(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:694:11",className:"text-[var(--dg-text-secondary)] text-xs flex items-center gap-1",children:["Ingress Class",e.jsx("span",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:696:13",className:"text-[10px] text-[var(--dg-text-muted)]",children:"(可选)"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:699:11",className:"space-y-1 mt-1",children:[e.jsxs(G,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:700:13",value:R||"",onValueChange:s=>{s&&s!=="__manual__"&&g(s)},children:[e.jsx(W,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:708:15",className:"h-8 text-xs bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(U,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:709:17",placeholder:N?"加载中...":"选择或输入 IngressClass"})}),e.jsxs(H,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:711:15",children:[v.length>0?v.map(s=>e.jsxs(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:714:21",value:s.name,children:[s.name," ",s.controller?e.jsxs("span",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:715:50",className:"text-[var(--dg-text-muted)] text-[10px]",children:["(",s.controller,")"]}):""]},s.name)):!N&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:719:38",className:"px-2 py-1.5 text-xs text-[var(--dg-text-muted)]",children:"未发现 IngressClass,请手动输入"}),R&&!v.some(s=>s.name===R)&&e.jsxs(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:723:19",value:R,children:[R," (手动输入)"]}),e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:725:17",value:"__manual__",children:"—— 继续手动输入 ——"})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:730:13",className:"text-[10px] text-[var(--dg-text-muted)] flex items-center gap-1",children:["手工输入:",e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:732:15",value:R,onChange:s=>g(s.target.value),placeholder:"alb / nginx / my-ingress-class",className:"flex-1 font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:741:13",className:"text-[10px] text-[var(--dg-text-muted)] leading-tight",children:["您的集群中可能有多个 IngressController,您可在此指定当前 Ingress 对应哪个 IngressController。",e.jsx("br",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:742:84"}),"从 IngressClass 列表选择,或手工输入名称。"]}),(v.length===0||R)&&e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:747:15",className:"text-[10px] text-[var(--dg-text-muted)]",children:["常见:",e.jsx("span",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:748:20",className:"font-mono",children:"alb"})," → ingress.k8s.alibabacloud/alb    ",e.jsx("span",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:748:103",className:"font-mono",children:"nginx"})," → k8s.io/ingress-nginx"]})]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:754:7",className:"flex-1 min-h-0 flex flex-col mt-3",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:755:9",className:"flex items-center justify-between mb-2 shrink-0",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:756:11",className:"text-[var(--dg-text-secondary)] text-sm",children:"路由规则"}),e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:757:11",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:m,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:757:89",className:"h-3 w-3 mr-1"}),"添加 Host"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:759:9",className:"flex-1 min-h-0 overflow-y-auto pr-1 space-y-3 border border-[var(--dg-border)] rounded-lg p-2 bg-[var(--dg-bg-secondary)]",children:[b.map((s,r)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:761:13",className:"p-3 rounded-lg border border-[var(--dg-border)] bg-[var(--dg-bg-tertiary)] space-y-2 min-w-0",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:762:15",className:"flex items-center gap-2 min-w-0",children:[e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:763:17",value:s.host,onChange:p=>c(r,p.target.value),placeholder:"域名 (如 api.example.com)",className:"flex-1 min-w-0 font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",title:s.host}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:770:17",variant:"ghost",size:"icon",className:"h-7 w-7 shrink-0 text-red-400 hover:text-red-300",onClick:()=>C(r),children:e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:770:145",className:"h-3 w-3"})})]}),s.paths.map((p,S)=>e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:773:17",className:"overflow-x-auto pl-4",children:e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:774:19",className:"grid grid-cols-[minmax(80px,1fr)_100px_minmax(80px,1fr)_60px_28px] gap-1.5 items-center min-w-[420px]",children:[e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:775:21",value:p.path,onChange:P=>M(r,S,"path",P.target.value),placeholder:"路径 /",className:"font-mono text-xs h-7 min-w-0 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsxs(G,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:776:21",value:p.pathType,onValueChange:P=>M(r,S,"pathType",P),children:[e.jsx(W,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:777:23",className:"h-7 text-xs bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(U,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:777:145"})}),e.jsxs(H,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:778:23",children:[e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:778:38",value:"Prefix",children:"Prefix"}),e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:778:84",value:"Exact",children:"Exact"})]})]}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:780:21",value:p.serviceName,onChange:P=>M(r,S,"serviceName",P.target.value),placeholder:"Service",className:"font-mono text-xs h-7 min-w-0 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:781:21",value:p.servicePort,onChange:P=>M(r,S,"servicePort",P.target.value),placeholder:"端口",type:"number",className:"font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:782:21",variant:"ghost",size:"icon",className:"h-7 w-7 text-red-400 hover:text-red-300",onClick:()=>o(r,S),children:e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:782:144",className:"h-3 w-3"})})]})},S)),e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:786:15",variant:"ghost",size:"sm",className:"h-6 text-xs text-[var(--dg-text-muted)]",onClick:()=>I(r),children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:786:129",className:"h-3 w-3 mr-1"}),"添加路径"]})]},r)),b.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:789:34",className:"text-center py-4 text-[var(--dg-text-muted)] text-xs",children:"暂无路由规则,点击「添加 Host」"})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:792:7",className:"shrink-0 flex justify-end gap-2 pt-3 mt-2 border-t border-[var(--dg-border)]",children:e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:793:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:x,disabled:k,children:[k?e.jsx(A,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:794:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(B,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:794:77",className:"h-3.5 w-3.5 mr-1"}),"保存 Ingress"]})})]})}function Ce({manifest:n,onSave:l,saving:a,isCreate:k}){const j=n?.spec||{},y=j.resources?.requests||{},[h,u]=i.useState(n?.metadata?.name||""),[R,g]=i.useState(y.storage||"1Gi"),[v,V]=i.useState(j.accessModes?.[0]||"ReadWriteOnce"),[N,w]=i.useState(j.storageClassName||""),b=()=>{l({...n,metadata:{...n.metadata,name:h.trim()},spec:{...j,accessModes:[v],storageClassName:N||void 0,resources:{requests:{storage:R}}}})};return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:827:5",className:"flex flex-col h-full",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:828:7",className:"shrink-0",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:829:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"名称"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:830:9",value:h,onChange:t=>u(t.target.value),readOnly:!k,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:832:7",className:"grid grid-cols-2 gap-4 mt-3 shrink-0",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:833:9",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:834:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"存储大小"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:835:11",value:R,onChange:t=>g(t.target.value),placeholder:"如 10Gi",className:"mt-1 font-mono text-xs h-8 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx("p",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:841:11",className:"text-[10px] text-[var(--dg-text-muted)] mt-1",children:"单位:Gi (GiB), Mi (MiB), Ti (TiB)"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:843:9",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:844:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"访问模式"}),e.jsxs(G,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:845:11",value:v,onValueChange:V,children:[e.jsx(W,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:846:13",className:"mt-1 h-8 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] text-xs",children:e.jsx(U,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:847:15"})}),e.jsxs(H,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:849:13",children:[e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:850:15",value:"ReadWriteOnce",children:"ReadWriteOnce (单节点读写)"}),e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:851:15",value:"ReadOnlyMany",children:"ReadOnlyMany (多节点只读)"}),e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:852:15",value:"ReadWriteMany",children:"ReadWriteMany (多节点读写)"})]})]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:857:7",className:"shrink-0 mt-1",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:858:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"StorageClass"}),e.jsx(f,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:859:9",value:N,onChange:t=>w(t.target.value),placeholder:"留空使用默认 StorageClass",className:"mt-1 font-mono text-xs h-8 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:867:7",className:"flex-1"}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:869:7",className:"shrink-0 flex justify-end gap-2 pt-3 mt-2 border-t border-[var(--dg-border)]",children:e.jsxs(E,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:870:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:b,disabled:a,children:[a?e.jsx(A,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:871:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(B,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:871:77",className:"h-3.5 w-3.5 mr-1"}),"保存 PVC"]})})]})}export{Ae as R,se as c};