Files
aiops/backend/static/assets/ResourceVisualEditor-BXksS6e2.js
T
Logan.Li a8305de0f5 fix(k8s): Deployment 存储挂载六种卷类型 YAML 双向映射
- 抽取 deployment-volume-utils,修正 PVC/NFS/CM/Secret/HostPath/EmptyDir 读写
- 保存时保留系统卷与 serviceAccount 挂载,合并用户卷与挂载点
- 挂载支持 subPath;ConfigMap/Secret items 支持 key:path 简写
2026-06-26 14:57:09 +08:00

2 lines
38 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import{r as v,j as e,R as H,y as J,o as X}from"./vendor-codemirror-C7mXSpXt.js";import{B as R}from"./index-EF2TDvxx.js";import{I as k}from"./input--Xdj49es.js";import{L as w}from"./label-DZckFZd3.js";import{T as K}from"./textarea-JgdELMPr.js";import{S as D,a as B,b as G,c as W,d as T}from"./select-DbRZUnPK.js";import{u as Q}from"./use-toast-CkA38LVP.js";import{k as I}from"./index-CYw3SC6I.js";import{p as Z,c as $,b as ee,d as se,e as te}from"./PodFileBrowser-BPio7wxi.js";import{D as re,f as oe,N as ae,j as ce,F as ne,X as de,L as z,$ as O,P as L,T as Y}from"./vendor-icons-Aso0-eeY.js";function ie(d,h,c){switch(d){case"services":return{apiVersion:"v1",kind:"Service",metadata:{name:c,namespace:h},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:c,namespace:h},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:c,namespace:h},data:{}};case"secrets":return{apiVersion:"v1",kind:"Secret",metadata:{name:c,namespace:h},type:"Opaque",data:{}};case"pvcs":return{apiVersion:"v1",kind:"PersistentVolumeClaim",metadata:{name:c,namespace:h},spec:{accessModes:["ReadWriteOnce"],resources:{requests:{storage:"1Gi"}}}};default:return{apiVersion:"v1",kind:"Unknown",metadata:{name:c,namespace:h}}}}function Ne({clusterCode:d,namespace:h,resource:c,name:V,onClose:g,onSaved:N,isCreate:b=!1}){const{toast:i}=Q(),[f,x]=v.useState(!0),[m,y]=v.useState(!1),[S,r]=v.useState(""),[t,u]=v.useState(null),[j,P]=v.useState("visual"),[l,o]=v.useState(""),p=v.useCallback(async()=>{x(!0);try{if(b){const F=ie(c,h,V||"");u(F),o(JSON.stringify(F,null,2)),r("");return}const E=await I.getResourceYaml(d,h,c,V);r(E);const{manifest:M,yaml:A}=await Z(E);o(A),u(M),M||(P("yaml"),i({title:"可视化编辑不可用",description:"无法解析资源结构,已切换到 YAML 编辑模式"}))}catch(E){i({title:"加载失败",description:E.message,variant:"destructive"})}finally{x(!1)}},[d,h,c,V,b]);v.useEffect(()=>{p()},[p]);const s=async E=>{y(!0);try{const M=await te(E),A=E?.metadata?.name||V;if(b){if(!A?.trim()){i({title:"请填写名称",variant:"destructive"});return}await I.applyYAML(d,M),i({title:"创建成功",description:`${c}/${A}`})}else await I.updateResourceYaml(d,h,c,V,M),i({title:"保存成功",description:`${c}/${V} 已更新`});N?.(),g()}catch(M){i({title:b?"创建失败":"保存失败",description:M.message,variant:"destructive"})}finally{y(!1)}},a=async()=>{y(!0);try{const E=$(l);b?(await I.applyYAML(d,E),i({title:"创建成功",description:"YAML 已应用"})):(await I.updateResourceYaml(d,h,c,V,E),i({title:"YAML 已应用",description:`${c}/${V} 更新成功`})),N?.(),g()}catch(E){i({title:"保存失败",description:E.message,variant:"destructive"})}finally{y(!1)}},n=async()=>{const E=await ee(l);if(!E){i({title:"无法解析 YAML",description:"请检查语法后继续用 YAML 模式",variant:"destructive"});return}u(E),P("visual")},C=async()=>{if(t){const E=await se(t);o($(E))}P("yaml")},q={configmaps:{title:"ConfigMap",icon:ne,color:"text-blue-400"},secrets:{title:"Secret",icon:ce,color:"text-amber-400"},services:{title:"Service",icon:ae,color:"text-cyan-400"},ingresses:{title:"Ingress",icon:oe,color:"text-purple-400"},pvcs:{title:"PersistentVolumeClaim",icon:re,color:"text-emerald-400"}},_=q[c]||q.configmaps,U=_.icon;return e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:135:5",className:"fixed inset-0 z-50 flex items-center justify-center bg-black/60",onClick:g,children:e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:136:7",className:"bg-[var(--dg-bg-primary)] border border-[var(--dg-border)] rounded-xl w-[90vw] max-w-3xl max-h-[85vh] flex flex-col shadow-2xl",onClick:E=>E.stopPropagation(),children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:138:9",className:"flex items-center justify-between p-4 border-b border-[var(--dg-border)]",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:139:11",className:"flex items-center gap-2",children:[e.jsx(U,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:140:13",className:`h-5 w-5 ${_.color}`}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:141:13",children:[e.jsx("h2",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:142:15",className:"text-lg font-bold text-[var(--dg-text-primary)]",children:b?`新建 ${_.title}`:`${_.title} 编辑`}),e.jsxs("p",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:143:15",className:"text-xs text-[var(--dg-text-muted)]",children:[b?h:V," · ",h," · ",d]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:146:11",className:"flex items-center gap-2",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:148:13",className:"flex rounded-lg border border-[var(--dg-border)] overflow-hidden",children:[e.jsx("button",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:149:15",className:`px-3 py-1.5 text-xs font-medium transition-colors ${j==="visual"?"bg-blue-600 text-white":"bg-transparent text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-tertiary)]"}`,onClick:()=>{j==="yaml"?n():P("visual")},disabled:!t&&j!=="yaml",children:"可视化编辑"}),e.jsx("button",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:154:15",className:`px-3 py-1.5 text-xs font-medium transition-colors ${j==="yaml"?"bg-blue-600 text-white":"bg-transparent text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-tertiary)]"}`,onClick:()=>{j==="visual"?C():P("yaml")},children:"YAML 编辑"})]}),e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:159:13",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)]",onClick:g,children:e.jsx(de,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:159:119",className:"h-4 w-4"})})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:164:9",className:"flex-1 overflow-auto p-4",children:f?e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:166:13",className:"flex items-center justify-center h-full py-20",children:e.jsx(z,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:166:76",className:"h-6 w-6 animate-spin text-[var(--dg-text-muted)]"})}):j==="yaml"?e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:168:13",className:"space-y-3",children:[e.jsx("p",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:169:15",className:"text-xs text-amber-400/80",children:"⚠️ YAML 编辑模式 — 修改后点击保存。已自动清理只读字段(status/managedFields/uid)"}),e.jsx(H,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:170:15",value:l,height:"550px",theme:X,extensions:[J()],onChange:E=>o(E),basicSetup:{lineNumbers:!0,foldGutter:!0,highlightActiveLine:!0,autocompletion:!0},style:{fontSize:"12px"}}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:179:15",className:"flex justify-end gap-2",children:[e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:180:17",variant:"outline",size:"sm",onClick:()=>{o($(S))},children:"重置"}),e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:181:17",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:a,disabled:m,children:[m?e.jsx(z,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:182:29",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:182:85",className:"h-3.5 w-3.5 mr-1"}),"保存"]})]})]}):t?e.jsxs(e.Fragment,{children:[c==="configmaps"&&e.jsx(le,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:189:45",manifest:t,onSave:s,saving:m,isCreate:b}),c==="secrets"&&e.jsx(ue,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:190:42",manifest:t,onSave:s,saving:m,isCreate:b}),c==="services"&&e.jsx(xe,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:191:43",manifest:t,onSave:s,saving:m,isCreate:b}),c==="ingresses"&&e.jsx(pe,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:192:44",manifest:t,onSave:s,saving:m,isCreate:b}),c==="pvcs"&&e.jsx(me,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:193:39",manifest:t,onSave:s,saving:m,isCreate:b}),!["configmaps","secrets","services","ingresses","pvcs"].includes(c)&&e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:195:17",className:"text-center py-12 text-[var(--dg-text-muted)]",children:[e.jsx("p",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:196:19",children:"该资源类型暂不支持可视化编辑"}),e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:197:19",variant:"outline",size:"sm",className:"mt-4",onClick:()=>P("yaml"),children:"切换到 YAML 编辑"})]})]}):e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:202:13",className:"text-center py-12 text-[var(--dg-text-muted)]",children:[e.jsx("p",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:203:15",children:"无法解析资源结构"}),e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:204:15",variant:"outline",size:"sm",className:"mt-4",onClick:()=>P("yaml"),children:"切换到 YAML 编辑"})]})})]})})}function le({manifest:d,onSave:h,saving:c,isCreate:V}){const g=d?.data||{},[N,b]=v.useState(d?.metadata?.name||""),[i,f]=v.useState(Object.entries(g).map(([r,t])=>({key:r,value:String(t)}))),x=(r,t,u)=>{const j=[...i];j[r]={...j[r],[t]:u},f(j)},m=()=>f([...i,{key:"",value:""}]),y=r=>f(i.filter((t,u)=>u!==r)),S=()=>{const r={};i.forEach(t=>{t.key.trim()&&(r[t.key.trim()]=t.value)}),h({...d,metadata:{...d.metadata,name:N.trim()},data:r})};return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:241:5",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:242:7",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:243:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"名称"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:244:9",value:N,onChange:r=>b(r.target.value),readOnly:!V,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:246:7",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:247:9",className:"flex items-center justify-between mb-2",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:248:11",className:"text-[var(--dg-text-secondary)] text-sm",children:"配置数据 (键值对)"}),e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:249:11",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:m,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:249:88",className:"h-3 w-3 mr-1"}),"添加"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:251:9",className:"space-y-2 max-h-[45vh] overflow-y-auto pr-1",children:[i.map((r,t)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:253:13",className:"flex items-start gap-2 p-2 rounded-lg border border-[var(--dg-border)] bg-[var(--dg-bg-secondary)]",children:[e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:254:15",value:r.key,onChange:u=>x(t,"key",u.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(K,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:260:15",value:r.value,onChange:u=>x(t,"value",u.target.value),placeholder:"值",className:"flex-[2] font-mono text-xs min-h-[36px] max-h-[120px] bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:266:15",variant:"ghost",size:"icon",className:"h-8 w-8 text-red-400 hover:text-red-300 shrink-0",onClick:()=>y(t),children:e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:267:17",className:"h-3.5 w-3.5"})})]},t)),i.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:272:13",className:"text-center py-8 text-[var(--dg-text-muted)] text-xs",children:"暂无配置数据,点击「添加」创建"})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:276:7",className:"flex justify-end gap-2 pt-2 border-t border-[var(--dg-border)]",children:e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:277:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:S,disabled:c,children:[c?e.jsx(z,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:278:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:278:77",className:"h-3.5 w-3.5 mr-1"}),"保存配置"]})})]})}function ue({manifest:d,onSave:h,saving:c,isCreate:V}){const g=d?.data||{},[N,b]=v.useState(d?.metadata?.name||""),[i,f]=v.useState(Object.entries(g).map(([r,t])=>{const u=String(t);try{const j=atob(u);return{key:r,value:j,encoded:!0}}catch{return{key:r,value:u,encoded:!1}}})),x=(r,t,u)=>{const j=[...i];j[r]={...j[r],[t]:u},f(j)},m=()=>f([...i,{key:"",value:"",encoded:!0}]),y=r=>f(i.filter((t,u)=>u!==r)),S=()=>{const r={};i.forEach(t=>{t.key.trim()&&(r[t.key.trim()]=t.encoded?btoa(t.value):t.value)}),h({...d,metadata:{...d.metadata,name:N.trim()},data:r})};return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:327:5",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:328:7",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:329:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"名称"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:330:9",value:N,onChange:r=>b(r.target.value),readOnly:!V,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:332:7",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:333:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"类型"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:334:9",value:d?.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:336:7",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:337:9",className:"flex items-center justify-between mb-2",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:338:11",className:"text-[var(--dg-text-secondary)] text-sm",children:"密钥数据 (已自动解码 Base64)"}),e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:339:11",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:m,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:339:88",className:"h-3 w-3 mr-1"}),"添加"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:341:9",className:"space-y-2 max-h-[45vh] overflow-y-auto pr-1",children:[i.map((r,t)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:343:13",className:"flex items-start gap-2 p-2 rounded-lg border border-[var(--dg-border)] bg-[var(--dg-bg-secondary)]",children:[e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:344:15",value:r.key,onChange:u=>x(t,"key",u.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(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:350:15",value:r.value,onChange:u=>x(t,"value",u.target.value),placeholder:"明文值",className:"flex-[2] font-mono text-xs h-8 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:356:15",variant:"ghost",size:"icon",className:"h-8 w-8 text-red-400 hover:text-red-300 shrink-0",onClick:()=>y(t),children:e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:357:17",className:"h-3.5 w-3.5"})})]},t)),i.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:362:13",className:"text-center py-8 text-[var(--dg-text-muted)] text-xs",children:"暂无密钥数据,点击「添加」创建"})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:366:7",className:"flex justify-end gap-2 pt-2 border-t border-[var(--dg-border)]",children:e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:367:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:S,disabled:c,children:[c?e.jsx(z,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:368:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:368:77",className:"h-3.5 w-3.5 mr-1"}),"保存密钥"]})})]})}function xe({manifest:d,onSave:h,saving:c,isCreate:V}){const g=d?.spec||{},[N,b]=v.useState(d?.metadata?.name||""),[i,f]=v.useState(g.type||"ClusterIP"),[x,m]=v.useState((g.ports||[]).map(s=>({name:s.name||"",port:String(s.port||""),targetPort:String(s.targetPort||""),protocol:s.protocol||"TCP",nodePort:s.nodePort?String(s.nodePort):""}))),[y,S]=v.useState(Object.entries(g.selector||{}).map(([s,a])=>({key:s,value:String(a)}))),r=(s,a,n)=>{const C=[...x];C[s]={...C[s],[a]:n},m(C)},t=()=>m([...x,{name:"",port:"",targetPort:"",protocol:"TCP",nodePort:""}]),u=s=>m(x.filter((a,n)=>n!==s)),j=(s,a,n)=>{const C=[...y];C[s]={...C[s],[a]:n},S(C)},P=()=>S([...y,{key:"",value:""}]),l=s=>S(y.filter((a,n)=>n!==s)),o=()=>{const s={...g};s.type=i,s.ports=x.map(n=>{const C={port:parseInt(n.port)||80,targetPort:parseInt(n.targetPort)||parseInt(n.port)||80,protocol:n.protocol};return n.name&&(C.name=n.name),n.nodePort&&i==="NodePort"&&(C.nodePort=parseInt(n.nodePort)),C});const a={};y.forEach(n=>{n.key.trim()&&(a[n.key.trim()]=n.value)}),s.selector=a,h({...d,metadata:{...d.metadata,name:N.trim()},spec:s})},p=[{value:"ClusterIP",label:"ClusterIP"},{value:"NodePort",label:"NodePort"},{value:"LoadBalancer",label:"LoadBalancer"}];return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:438:5",className:"space-y-5",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:439:7",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:440:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"服务名称"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:441:9",value:N,onChange:s=>b(s.target.value),readOnly:!V,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:443:7",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:444:9",className:"text-[var(--dg-text-secondary)] text-xs mb-2 block",children:"服务类型"}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:445:9",className:"flex rounded-lg border border-[var(--dg-border)] overflow-hidden w-fit",children:p.map(s=>e.jsx("button",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:447:13",type:"button",className:`px-3 py-1.5 text-xs transition-colors ${i===s.value?"bg-blue-600 text-white":"text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-tertiary)]"}`,onClick:()=>f(s.value),children:s.label},s.value))})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:460:7",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:461:9",className:"flex items-center justify-between mb-2",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:462:11",className:"text-[var(--dg-text-secondary)] text-sm",children:"端口映射"}),e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:463:11",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:t,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:463:89",className:"h-3 w-3 mr-1"}),"添加端口"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:465:9",className:"space-y-2",children:[x.map((s,a)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:467:13",className:"grid grid-cols-[1fr_80px_80px_80px_80px_32px] gap-2 items-center",children:[e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:468:15",value:s.name,onChange:n=>r(a,"name",n.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(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:469:15",value:s.port,onChange:n=>r(a,"port",n.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(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:470:15",value:s.targetPort,onChange:n=>r(a,"targetPort",n.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(D,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:471:15",value:s.protocol,onValueChange:n=>r(a,"protocol",n),children:[e.jsx(B,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:472:17",className:"h-7 text-xs bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(G,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:472:139"})}),e.jsxs(W,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:473:17",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:473:32",value:"TCP",children:"TCP"}),e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:473:72",value:"UDP",children:"UDP"})]})]}),i==="NodePort"?e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:476:17",value:s.nodePort,onChange:n=>r(a,"nodePort",n.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:477:19"}),e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:478:15",variant:"ghost",size:"icon",className:"h-7 w-7 text-red-400 hover:text-red-300",onClick:()=>u(a),children:e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:478:133",className:"h-3 w-3"})})]},a)),x.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:481:34",className:"text-center py-4 text-[var(--dg-text-muted)] text-xs",children:"暂无端口,点击「添加端口」"})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:486:7",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:487:9",className:"flex items-center justify-between mb-2",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:488:11",className:"text-[var(--dg-text-secondary)] text-sm",children:"选择器 (Selector)"}),e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:489:11",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:P,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:489:93",className:"h-3 w-3 mr-1"}),"添加标签"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:491:9",className:"space-y-2",children:[y.map((s,a)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:493:13",className:"flex items-center gap-2",children:[e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:494:15",value:s.key,onChange:n=>j(a,"key",n.target.value),placeholder:"键 (如 app)",className:"flex-1 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:495:15",className:"text-[var(--dg-text-muted)] text-xs",children:"="}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:496:15",value:s.value,onChange:n=>j(a,"value",n.target.value),placeholder:"值 (如 nginx)",className:"flex-1 font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:497:15",variant:"ghost",size:"icon",className:"h-7 w-7 text-red-400 hover:text-red-300",onClick:()=>l(a),children:e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:497:137",className:"h-3 w-3"})})]},a)),y.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:500:37",className:"text-center py-4 text-[var(--dg-text-muted)] text-xs",children:"暂无选择器"})]})]}),e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:504:7",className:"flex justify-end gap-2 pt-2 border-t border-[var(--dg-border)]",children:e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:505:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:o,disabled:c,children:[c?e.jsx(z,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:506:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:506:77",className:"h-3.5 w-3.5 mr-1"}),"保存 Service"]})})]})}function pe({manifest:d,onSave:h,saving:c,isCreate:V}){const g=d?.spec||{},[N,b]=v.useState(d?.metadata?.name||""),[i,f]=v.useState(g.ingressClassName||"nginx"),[x,m]=v.useState((g.rules||[]).map(l=>({host:l.host||"",paths:l.http?.backend?.servicePort!=null?[{path:"/",pathType:"Prefix",serviceName:l.http?.backend?.serviceName||"",servicePort:String(l.http?.backend?.servicePort||"80")}]:(l.http?.paths||[]).map(o=>({path:o.path||"/",pathType:o.pathType||"Prefix",serviceName:o.backend?.service?.name||o.backend?.serviceName||"",servicePort:String(o.backend?.service?.port?.number??o.backend?.servicePort??"80")}))}))),y=(l,o)=>{const p=[...x];p[l]={...p[l],host:o},m(p)},S=()=>m([...x,{host:"",paths:[{path:"/",pathType:"Prefix",serviceName:"",servicePort:"80"}]}]),r=l=>m(x.filter((o,p)=>p!==l)),t=(l,o,p,s)=>{const a=[...x];a[l].paths[o]={...a[l].paths[o],[p]:s},m(a)},u=l=>{const o=[...x];o[l].paths.push({path:"/",pathType:"Prefix",serviceName:"",servicePort:"80"}),m(o)},j=(l,o)=>{const p=[...x];p[l].paths=p[l].paths.filter((s,a)=>a!==o),m(p)},P=()=>{const l=x.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}}}}))}})),o={...g,rules:l};i.trim()?o.ingressClassName=i.trim():delete o.ingressClassName,h({...d,metadata:{...d.metadata,name:N.trim()},spec:o})};return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:579:5",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:580:7",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:581:9",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:582:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"名称"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:583:11",value:N,onChange:l=>b(l.target.value),readOnly:!V,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:585:9",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:586:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"Ingress Class"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:587:11",value:i,onChange:l=>f(l.target.value),placeholder:"nginx / alb",className:"mt-1 font-mono text-xs h-8 bg-[var(--dg-bg-tertiary)]"})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:590:7",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:591:9",className:"flex items-center justify-between mb-2",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:592:11",className:"text-[var(--dg-text-secondary)] text-sm",children:"路由规则"}),e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:593:11",variant:"outline",size:"sm",className:"h-7 text-xs",onClick:S,children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:593:89",className:"h-3 w-3 mr-1"}),"添加 Host"]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:595:9",className:"space-y-3 max-h-[50vh] overflow-y-auto pr-1",children:[x.map((l,o)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:597:13",className:"p-3 rounded-lg border border-[var(--dg-border)] bg-[var(--dg-bg-secondary)] space-y-2",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:598:15",className:"flex items-center gap-2",children:[e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:599:17",value:l.host,onChange:p=>y(o,p.target.value),placeholder:"域名 (如 api.example.com)",className:"flex-1 font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:605:17",variant:"ghost",size:"icon",className:"h-7 w-7 text-red-400 hover:text-red-300",onClick:()=>r(o),children:e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:605:136",className:"h-3 w-3"})})]}),l.paths.map((p,s)=>e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:608:17",className:"grid grid-cols-[1fr_100px_1fr_60px_28px] gap-1.5 items-center pl-4",children:[e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:609:19",value:p.path,onChange:a=>t(o,s,"path",a.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.jsxs(D,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:610:19",value:p.pathType,onValueChange:a=>t(o,s,"pathType",a),children:[e.jsx(B,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:611:21",className:"h-7 text-xs bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(G,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:611:143"})}),e.jsxs(W,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:612:21",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:612:36",value:"Prefix",children:"Prefix"}),e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:612:82",value:"Exact",children:"Exact"})]})]}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:614:19",value:p.serviceName,onChange:a=>t(o,s,"serviceName",a.target.value),placeholder:"Service",className:"font-mono text-xs h-7 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:615:19",value:p.servicePort,onChange:a=>t(o,s,"servicePort",a.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(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:616:19",variant:"ghost",size:"icon",className:"h-7 w-7 text-red-400 hover:text-red-300",onClick:()=>j(o,s),children:e.jsx(Y,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:616:142",className:"h-3 w-3"})})]},s)),e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:619:15",variant:"ghost",size:"sm",className:"h-6 text-xs text-[var(--dg-text-muted)]",onClick:()=>u(o),children:[e.jsx(L,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:619:129",className:"h-3 w-3 mr-1"}),"添加路径"]})]},o)),x.length===0&&e.jsx("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:622: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:625:7",className:"flex justify-end gap-2 pt-2 border-t border-[var(--dg-border)]",children:e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:626:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:P,disabled:c,children:[c?e.jsx(z,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:627:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:627:77",className:"h-3.5 w-3.5 mr-1"}),"保存 Ingress"]})})]})}function me({manifest:d,onSave:h,saving:c,isCreate:V}){const g=d?.spec||{},N=g.resources?.requests||{},[b,i]=v.useState(d?.metadata?.name||""),[f,x]=v.useState(N.storage||"1Gi"),[m,y]=v.useState(g.accessModes?.[0]||"ReadWriteOnce"),[S,r]=v.useState(g.storageClassName||""),t=()=>{h({...d,metadata:{...d.metadata,name:b.trim()},spec:{...g,accessModes:[m],storageClassName:S||void 0,resources:{requests:{storage:f}}}})};return e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:660:5",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:661:7",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:662:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"名称"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:663:9",value:b,onChange:u=>i(u.target.value),readOnly:!V,className:"mt-1 font-mono text-xs bg-[var(--dg-bg-tertiary)]"})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:665:7",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:666:9",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:667:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"存储大小"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:668:11",value:f,onChange:u=>x(u.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:674: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:676:9",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:677:11",className:"text-[var(--dg-text-secondary)] text-xs",children:"访问模式"}),e.jsxs(D,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:678:11",value:m,onValueChange:y,children:[e.jsx(B,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:679: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(G,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:680:15"})}),e.jsxs(W,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:682:13",children:[e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:683:15",value:"ReadWriteOnce",children:"ReadWriteOnce (单节点读写)"}),e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:684:15",value:"ReadOnlyMany",children:"ReadOnlyMany (多节点只读)"}),e.jsx(T,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:685:15",value:"ReadWriteMany",children:"ReadWriteMany (多节点读写)"})]})]})]})]}),e.jsxs("div",{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:690:7",children:[e.jsx(w,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:691:9",className:"text-[var(--dg-text-secondary)] text-xs",children:"StorageClass"}),e.jsx(k,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:692:9",value:S,onChange:u=>r(u.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:699:7",className:"flex justify-end gap-2 pt-2 border-t border-[var(--dg-border)]",children:e.jsxs(R,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:700:9",size:"sm",className:"bg-blue-600 hover:bg-blue-700",onClick:t,disabled:c,children:[c?e.jsx(z,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:701:21",className:"h-3.5 w-3.5 animate-spin mr-1"}):e.jsx(O,{"code-path":"src/components/kubernetes/ResourceVisualEditor.tsx:701:77",className:"h-3.5 w-3.5 mr-1"}),"保存 PVC"]})})]})}export{Ne as R};