12 lines
108 KiB
JavaScript
12 lines
108 KiB
JavaScript
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-y0gL271F.js","./index-CwVkcMR-.js","./index-o387JJcy.css","./dashboard-bavYfUo7.js","./server-CfXcTAsg.js","./index-DK2BjZ0M.js","./deploy-C6PfjuUR.js","./automation-CscX6ZsM.js","./monitor-UHR7OKRa.js","./agent-CJbfK8cW.js","./cloud--X6XAPv_.js","./terminal-CUhviP7m.js","./approval-DOWuQTU9.js","./ai-ClyhMOu4.js"])))=>i.map(i=>d[i]);
|
||
import{i as Ke,j as e,r as t,aW as Tr,D as _e,a as Te,b as Je,c as Re,d as Me,s as ir,Y as Ae,M as Ve,P as ar,K as ve,o as Fe,B as N,a6 as $e,S as Le,e as qe,a3 as vr,$ as xe,X as ue,t as hr,L as ze,ak as Rr,ab as Mr,a8 as Br,ag as Pr,aa as Qe,ad as Ar,a9 as $r,ac as Or,as as Lr,V as zr,aS as gr,N as Hr,E as nr,aH as ur,aI as br,aJ as Sr,aK as jr,aL as We,aM as he,f as Ur}from"./index-CwVkcMR-.js";import{C as ke,a as Ee}from"./card-C5qBu7CR.js";import{I as W}from"./input-B5ad6Rfz.js";import{C as ge}from"./checkbox-CbtT7pld.js";import{b as Oe,e as se,T as Dr,a as Vr,c as de,d as Wr}from"./table-X8m9Cp5H.js";import{S as fe,a as we,b as Ce,c as Ie,d as H}from"./select-CGtvCG8I.js";import{s as te,r as Gr}from"./server-CfXcTAsg.js";import{S as Kr}from"./stat-strip-CGgDVYxa.js";import{t as J}from"./index-Dxvx0mlR.js";import{B as $}from"./badge-DgJ0w7jf.js";import{c as ye}from"./cloud--X6XAPv_.js";import{R as le}from"./refresh-cw-DM6JPbZg.js";import{S as Nr}from"./search-1PdnG-g5.js";import{x as Jr,a as qr}from"./xterm-DSqgeKvr.js";import{m as Qr,a as Xr,f as Yr}from"./xterm-utils-slbfdUHf.js";import{c as Xe,s as Zr}from"./deploy-C6PfjuUR.js";import{M as yr,a as fr}from"./minimize-2-Dk2LAAKi.js";import{F as wr}from"./folder-open-BPEM3um6.js";import{U as Ye}from"./upload-CSuL4aK-.js";import{F as dr,a as es}from"./folder-Jx79bRH4.js";import{A as rs}from"./arrow-left-B1MijWEO.js";import{D as Ze}from"./download-BgEJ-n5L.js";import{T as er}from"./trash-2-BPpnm3Sz.js";import{L as V}from"./label-mg-tHjNc.js";import{T as lr}from"./textarea-BZOXMpxW.js";import{S as ss}from"./save-CdpyeGoy.js";import{H as ts}from"./hard-drive-CGq_SnM5.js";import{E as os}from"./ellipsis-CKCIP1Mv.js";import{S as cs}from"./square-pen-C8Ol72WC.js";import{P as as}from"./plus-CaJ-dB4A.js";import"./index-CBIZnJrN.js";import"./chevron-up-DM77dvsL.js";const ns=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],rr=Ke("chevron-left",ns);const ds=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M8 13h2",key:"yr2amv"}],["path",{d:"M14 13h2",key:"un5t4a"}],["path",{d:"M8 17h2",key:"2yhykz"}],["path",{d:"M14 17h2",key:"10kma7"}]],Ge=Ke("file-spreadsheet",ds);const ls=[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],ps=Ke("folder-plus",ls);function ms({servers:s}){const x=s.filter(c=>c.status==="running").length,o=s.filter(c=>c.status==="maintenance").length,a=s.filter(c=>c.status==="stopped").length;return e.jsx(Kr,{"code-path":"src/components/server/ServerStatsStrip.tsx:14:5",items:[{label:"服务器",value:s.length,color:"blue"},{label:"运行中",value:x,color:"emerald"},{label:"维护中",value:o,color:"amber"},{label:"已停止",value:a,color:"muted"}]})}const xs=[{id:"aws",name:"AWS",color:"bg-orange-500",icon:"AWS"},{id:"aliyun",name:"阿里云",color:"bg-orange-600",icon:"AL"},{id:"tencent",name:"腾讯云",color:"bg-blue-500",icon:"TX"},{id:"huawei",name:"华为云",color:"bg-red-500",icon:"HW"},{id:"azure",name:"Azure",color:"bg-blue-600",icon:"AZ"}];function is({open:s,onClose:x}){const[o,a]=t.useState([]),[c,h]=t.useState(1),[g,u]=t.useState(""),[m,T]=t.useState(null),[S,k]=t.useState([]),[n,y]=t.useState([]),[E,M]=t.useState(""),[C,f]=t.useState(!1),[v,I]=t.useState([]),[i,O]=t.useState([]),[G,j]=t.useState(!1),[U,p]=t.useState([]),[b,R]=t.useState(!1),[w,L]=t.useState(null),[ee,re]=t.useState("22"),[pe,l]=t.useState([]),[B,K]=t.useState(""),D=async()=>{try{const r=await ye.getAccounts();a(r?.list||[])}catch(r){console.error("加载云账号失败:",r)}};t.useEffect(()=>{s&&(D(),Tr(async()=>{const{credentialApi:r}=await import("./index-y0gL271F.js");return{credentialApi:r}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13]),import.meta.url).then(({credentialApi:r})=>{r.list().then(_=>l(_?.list||[])).catch(()=>l([]))}))},[s]);const P=o.filter(r=>r.provider===g&&r.status==="active"),X=t.useCallback(async r=>{try{return(await ye.getAccountRegions(r))?.list||[]}catch{return[]}},[]),q=t.useCallback(async r=>{f(!0);try{await ye.syncRegions(r);const _=await X(r);k(_)}catch(_){throw console.error("同步区域失败:",_),_}finally{f(!1)}},[X]),A=t.useCallback(async()=>{if(!m)return;const r=await X(m.id);if(k(r),r.length===0)try{await q(m.id)}catch{}},[m,X,q]),me=t.useCallback(async()=>{if(!(!m||n.length===0)){j(!0),p([]),I([]),O([]);try{const r=await ye.discoverInstances(m.id,n);I(r?.list||[]),p(r?.errors||[])}catch(r){console.error("发现主机失败:",r),p([r?.message||"发现主机失败"])}finally{j(!1)}}},[m,n]),z=async()=>{if(!(!m||i.length===0)){R(!0);try{const r=v.filter(ae=>i.includes(ae.instance_id)),_=await ye.importInstances(m.id,r,{default_port:Number(ee)||22,credential_id:B?Number(B):void 0});L(_||{imported:0,skipped:0})}catch(r){console.error("导入失败:",r)}finally{R(!1)}}},ie=()=>{c===2&&m&&c<4?(h(3),A()):c<4&&h(c+1)},Ue=()=>{c>1&&h(c-1)},oe=()=>{n.length===S.length&&S.length>0?y([]):y(S.map(r=>r.code))},be=r=>{O(_=>_.includes(r)?_.filter(ae=>ae!==r):[..._,r])},Be=()=>{i.length===v.length&&v.length>0?O([]):O(v.map(r=>r.instance_id))},Se=()=>{x(),h(1),u(""),T(null),y([]),k([]),I([]),O([]),M(""),p([]),L(null),re("22"),K("")},De=S.filter(r=>!E||r.name?.toLowerCase().includes(E.toLowerCase())||r.code?.toLowerCase().includes(E.toLowerCase())),Pe=[{id:1,title:"公有云",icon:ir},{id:2,title:"访问凭据",icon:Ae},{id:3,title:"选择区域",icon:Ve},{id:4,title:"导入确认",icon:ar}];return e.jsx(_e,{"code-path":"src/components/server/CloudServerImport.tsx:232:5",open:s,onOpenChange:Se,children:e.jsxs(Te,{"code-path":"src/components/server/CloudServerImport.tsx:233:7",className:"max-w-3xl bg-[var(--dg-bg-primary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:[e.jsxs(Je,{"code-path":"src/components/server/CloudServerImport.tsx:234:9",children:[e.jsx(Re,{"code-path":"src/components/server/CloudServerImport.tsx:235:11",className:"text-xl",children:"导入云主机"}),e.jsx(Me,{"code-path":"src/components/server/CloudServerImport.tsx:236:11",className:"sr-only",children:"从云平台批量导入主机资产"})]}),e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:240:9",className:"flex items-center justify-center mb-6 flex-wrap gap-1",children:Pe.map((r,_)=>e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:242:13",className:"flex items-center",children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:243:15",className:`flex items-center gap-2 px-3 py-2 rounded-lg text-sm ${c===r.id?"bg-blue-600 text-white":c>r.id?"bg-emerald-600/20 text-emerald-400":"bg-[var(--dg-bg-secondary)] text-[var(--dg-text-muted)]"}`,children:[e.jsx(r.icon,{"code-path":"src/components/server/CloudServerImport.tsx:250:17",className:"h-4 w-4"}),e.jsx("span",{"code-path":"src/components/server/CloudServerImport.tsx:251:17",className:"font-medium hidden sm:inline",children:r.title}),c>r.id&&e.jsx(ve,{"code-path":"src/components/server/CloudServerImport.tsx:252:33",className:"h-3 w-3 ml-1"})]}),_<Pe.length-1&&e.jsx(Fe,{"code-path":"src/components/server/CloudServerImport.tsx:255:17",className:"h-4 w-4 text-[var(--dg-text-muted)] mx-1"})]},r.id))}),c===1&&e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:263:11",className:"space-y-4",children:[e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:264:13",className:"text-[var(--dg-text-secondary)] text-sm",children:"请选择要导入云主机的云平台"}),e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:265:13",className:"grid grid-cols-3 gap-4",children:xs.map(r=>e.jsx(ke,{"code-path":"src/components/server/CloudServerImport.tsx:267:17",className:`cursor-pointer transition-all ${g===r.id?"border-blue-500 ring-2 ring-blue-500/30 bg-[var(--dg-bg-secondary)]":"border-[var(--dg-border)] hover:border-blue-500 bg-[var(--dg-bg-secondary)]"}`,onClick:()=>u(r.id),children:e.jsxs(Ee,{"code-path":"src/components/server/CloudServerImport.tsx:276:19",className:"p-4 flex items-center gap-3",children:[e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:277:21",className:`w-10 h-10 rounded-lg ${r.color} flex items-center justify-center text-white font-bold text-sm`,children:r.icon}),e.jsx("span",{"code-path":"src/components/server/CloudServerImport.tsx:280:21",className:"font-medium text-[var(--dg-text-primary)]",children:r.name})]})},r.id))})]}),c===2&&e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:290:11",className:"space-y-4",children:[e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:291:13",className:"text-[var(--dg-text-secondary)] text-sm",children:"请选择访问凭据(AccessKey)"}),P.length>0?e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:293:15",className:"space-y-2 max-h-[300px] overflow-y-auto",children:P.map(r=>e.jsx(ke,{"code-path":"src/components/server/CloudServerImport.tsx:295:19",className:`cursor-pointer transition-all ${m?.id===r.id?"border-blue-500 ring-1 ring-blue-500/30 bg-[var(--dg-bg-secondary)]":"border-[var(--dg-border)] hover:border-blue-500 bg-[var(--dg-bg-secondary)]"}`,onClick:()=>T(r),children:e.jsxs(Ee,{"code-path":"src/components/server/CloudServerImport.tsx:304:21",className:"p-3 flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:305:23",className:"flex items-center gap-3",children:[e.jsx(Ae,{"code-path":"src/components/server/CloudServerImport.tsx:306:25",className:"h-5 w-5 text-blue-400"}),e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:307:25",children:[e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:308:27",className:"font-medium text-[var(--dg-text-primary)]",children:r.name}),e.jsxs("p",{"code-path":"src/components/server/CloudServerImport.tsx:309:27",className:"text-xs text-[var(--dg-text-muted)]",children:[(r.access_key||r.accessKey||"******").slice(0,20),"..."]})]})]}),e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:314:23",className:"text-right",children:[e.jsxs($,{"code-path":"src/components/server/CloudServerImport.tsx:315:25",className:"bg-emerald-500/20 text-emerald-400 border-0",children:[r.region_count??r.regionCount??0," 区域"]}),e.jsxs("p",{"code-path":"src/components/server/CloudServerImport.tsx:318:25",className:"text-xs text-[var(--dg-text-muted)] mt-1",children:[r.server_count??r.serverCount??0," 服务器"]})]})]})},r.id))}):e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:325:15",className:"text-center py-8 text-[var(--dg-text-muted)]",children:[e.jsx(Ae,{"code-path":"src/components/server/CloudServerImport.tsx:326:17",className:"h-12 w-12 mx-auto mb-3 opacity-50"}),e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:327:17",children:"该云平台暂无有效的访问凭据"})]})]}),c===3&&e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:335:11",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:336:13",className:"flex items-center justify-between",children:[e.jsxs("p",{"code-path":"src/components/server/CloudServerImport.tsx:337:15",className:"text-[var(--dg-text-secondary)] text-sm",children:["请选择要同步的区域",S.length>0&&e.jsxs("span",{"code-path":"src/components/server/CloudServerImport.tsx:340:19",className:"ml-2 text-[var(--dg-text-muted)]",children:["(共 ",S.length," 个区域,已选 ",n.length," 个)"]})]}),e.jsxs(N,{"code-path":"src/components/server/CloudServerImport.tsx:343:15",variant:"outline",size:"sm",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",onClick:()=>m&&q(m.id),disabled:C,children:[e.jsx(le,{"code-path":"src/components/server/CloudServerImport.tsx:350:17",className:`h-3 w-3 mr-1 ${C?"animate-spin":""}`}),C?"同步中...":"刷新区域"]})]}),C?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:356:15",className:"text-center py-12",children:[e.jsx(le,{"code-path":"src/components/server/CloudServerImport.tsx:357:17",className:"h-8 w-8 mx-auto mb-3 animate-spin text-blue-400"}),e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:358:17",className:"text-[var(--dg-text-secondary)]",children:"正在从云平台同步区域列表..."})]}):S.length===0?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:361:15",className:"text-center py-8 text-[var(--dg-text-muted)]",children:[e.jsx(Ve,{"code-path":"src/components/server/CloudServerImport.tsx:362:17",className:"h-10 w-10 mx-auto mb-3 opacity-50"}),e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:363:17",children:"暂无区域数据"}),e.jsxs(N,{"code-path":"src/components/server/CloudServerImport.tsx:364:17",variant:"outline",size:"sm",className:"mt-3 border-[var(--dg-border)] text-blue-400",onClick:()=>m&&q(m.id),children:[e.jsx(le,{"code-path":"src/components/server/CloudServerImport.tsx:370:19",className:"h-3 w-3 mr-1"}),"立即同步"]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:377:17",className:"flex items-center gap-2",children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:378:19",className:"relative flex-1",children:[e.jsx(Nr,{"code-path":"src/components/server/CloudServerImport.tsx:379:21",className:"h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-[var(--dg-text-muted)]"}),e.jsx(W,{"code-path":"src/components/server/CloudServerImport.tsx:380:21",placeholder:"搜索区域名称或编码...",value:E,onChange:r=>M(r.target.value),className:"pl-9 bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]"})]}),e.jsx(N,{"code-path":"src/components/server/CloudServerImport.tsx:387:19",variant:"outline",size:"sm",onClick:oe,className:"border-[var(--dg-border)]",children:n.length===S.length&&S.length>0?"取消全选":"全选"})]}),e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:393:17",className:"border rounded-lg border-[var(--dg-border)] overflow-hidden max-h-[300px] overflow-y-auto",children:e.jsxs("table",{"code-path":"src/components/server/CloudServerImport.tsx:394:19",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/server/CloudServerImport.tsx:395:21",className:"bg-[var(--dg-bg-secondary)] sticky top-0",children:e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:396:23",children:[e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:397:25",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)] w-10",children:e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:398:27",checked:n.length===S.length&&S.length>0,onCheckedChange:oe})}),e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:403:25",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"区域编码"}),e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:404:25",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"区域名称"}),e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:405:25",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"Endpoint"})]})}),e.jsx("tbody",{"code-path":"src/components/server/CloudServerImport.tsx:408:21",className:"divide-y divide-[var(--dg-border)]",children:De.map(r=>e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:410:25",className:`cursor-pointer hover:bg-[var(--dg-bg-hover)] ${n.includes(r.code)?"bg-blue-500/10":""}`,onClick:()=>{y(_=>_.includes(r.code)?_.filter(ae=>ae!==r.code):[..._,r.code])},children:[e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:421:27",className:"px-3 py-2",children:e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:422:29",checked:n.includes(r.code)})}),e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:424:27",className:"px-3 py-2 text-sm text-blue-400 font-mono",children:r.code}),e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:425:27",className:"px-3 py-2 text-sm text-[var(--dg-text-primary)]",children:r.name}),e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:426:27",className:"px-3 py-2 text-xs text-[var(--dg-text-muted)] font-mono truncate max-w-[200px]",children:r.endpoint||"-"})]},r.id||r.code))})]})})]})]}),c===4&&e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:439:11",className:"space-y-4",children:w?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:442:15",className:"text-center py-12",children:[e.jsx(ar,{"code-path":"src/components/server/CloudServerImport.tsx:443:17",className:"h-12 w-12 mx-auto mb-3 text-emerald-400"}),e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:444:17",className:"text-lg font-medium text-[var(--dg-text-primary)]",children:"导入完成"}),e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:445:17",className:"flex items-center justify-center gap-6 mt-4",children:[e.jsxs($,{"code-path":"src/components/server/CloudServerImport.tsx:446:19",className:"bg-emerald-500/20 text-emerald-400 border-0 text-base px-4 py-1",children:["成功导入 ",w.imported," 台"]}),w.skipped>0&&e.jsxs($,{"code-path":"src/components/server/CloudServerImport.tsx:450:21",className:"bg-amber-500/20 text-amber-400 border-0 text-base px-4 py-1",children:["跳过 ",w.skipped," 台(已存在)"]})]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:458:17",className:"flex items-center justify-between",children:[e.jsxs("p",{"code-path":"src/components/server/CloudServerImport.tsx:459:19",className:"text-[var(--dg-text-secondary)] text-sm",children:["已选 ",n.length," 个区域",v.length>0&&e.jsxs("span",{"code-path":"src/components/server/CloudServerImport.tsx:462:23",className:"ml-2",children:["· 发现 ",v.length," 台主机"]})]}),e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:465:19",className:"flex items-center gap-2",children:[v.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(N,{"code-path":"src/components/server/CloudServerImport.tsx:468:25",variant:"outline",size:"sm",onClick:Be,className:"border-[var(--dg-border)]",children:i.length===v.length&&v.length>0?"取消全选":"全选"}),e.jsxs($,{"code-path":"src/components/server/CloudServerImport.tsx:471:25",className:"bg-blue-500/20 text-blue-400 border-0",children:["已选 ",i.length," 台"]})]}),e.jsxs(N,{"code-path":"src/components/server/CloudServerImport.tsx:476:21",variant:"outline",size:"sm",onClick:me,disabled:G||n.length===0,className:"border-[var(--dg-border)] text-blue-400",children:[e.jsx(le,{"code-path":"src/components/server/CloudServerImport.tsx:483:23",className:`h-3 w-3 mr-1 ${G?"animate-spin":""}`}),G?"发现中...":v.length>0?"重新发现":"发现主机"]})]})]}),e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:490:17",className:"flex flex-wrap gap-1",children:n.map(r=>{const _=S.find(ae=>ae.code===r);return e.jsxs($,{"code-path":"src/components/server/CloudServerImport.tsx:494:23",className:"bg-[var(--dg-bg-secondary)] text-[var(--dg-text-muted)] border border-[var(--dg-border)] text-xs",children:[e.jsx(Ve,{"code-path":"src/components/server/CloudServerImport.tsx:495:25",className:"h-3 w-3 mr-1"}),_?.name||r]},r)})}),U.length>0&&e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:504:19",className:"flex items-start gap-2 p-3 rounded-lg bg-amber-500/10 border border-amber-500/30 text-amber-400 text-sm",children:[e.jsx($e,{"code-path":"src/components/server/CloudServerImport.tsx:505:21",className:"h-4 w-4 mt-0.5 flex-shrink-0"}),e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:506:21",children:[e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:507:23",className:"font-medium",children:"部分区域发现失败:"}),U.map((r,_)=>e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:509:25",className:"text-xs mt-1 opacity-80",children:r},_))]})]}),G?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:517:19",className:"text-center py-12",children:[e.jsx(le,{"code-path":"src/components/server/CloudServerImport.tsx:518:21",className:"h-8 w-8 mx-auto mb-3 animate-spin text-blue-400"}),e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:519:21",className:"text-[var(--dg-text-secondary)]",children:"正在发现云主机,请稍候..."}),e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:520:21",className:"text-xs text-[var(--dg-text-muted)] mt-1",children:"正在逐区域查询,可能需要数秒"})]}):v.length===0&&!G?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:523:19",className:"text-center py-8 text-[var(--dg-text-muted)]",children:[e.jsx(Le,{"code-path":"src/components/server/CloudServerImport.tsx:524:21",className:"h-10 w-10 mx-auto mb-3 opacity-50"}),e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:525:21",children:'点击"发现主机"按钮,开始扫描所选区域'})]}):e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:528:19",className:"border rounded-lg border-[var(--dg-border)] overflow-hidden max-h-[300px] overflow-y-auto",children:e.jsxs("table",{"code-path":"src/components/server/CloudServerImport.tsx:529:21",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/server/CloudServerImport.tsx:530:23",className:"bg-[var(--dg-bg-secondary)] sticky top-0",children:e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:531:25",children:[e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:532:27",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)] w-10",children:e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:533:29",checked:i.length===v.length&&v.length>0,onCheckedChange:Be})}),e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:538:27",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"主机名"}),e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:539:27",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"IP地址"})]})}),e.jsx("tbody",{"code-path":"src/components/server/CloudServerImport.tsx:542:23",className:"divide-y divide-[var(--dg-border)]",children:v.map(r=>e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:544:27",className:`cursor-pointer hover:bg-[var(--dg-bg-hover)] ${i.includes(r.instance_id)?"bg-blue-500/10":""}`,onClick:()=>be(r.instance_id),children:[e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:549:29",className:"px-3 py-2",children:e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:550:31",checked:i.includes(r.instance_id)})}),e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:552:29",className:"px-3 py-2 text-sm text-[var(--dg-text-primary)]",children:r.instance_name||r.hostname||"-"}),e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:553:29",className:"px-3 py-2 text-sm text-[var(--dg-text-secondary)]",children:r.private_ip||r.public_ip||"-"})]},r.instance_id))})]})}),v.length>0&&i.length>0&&e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:565:19",className:"grid grid-cols-2 gap-4 p-4 rounded-lg bg-[var(--dg-bg-secondary)] border border-[var(--dg-border)]",children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:566:21",children:[e.jsxs("label",{"code-path":"src/components/server/CloudServerImport.tsx:567:23",className:"block text-xs font-medium text-[var(--dg-text-secondary)] mb-1",children:["SSH 端口",e.jsx("span",{"code-path":"src/components/server/CloudServerImport.tsx:569:25",className:"text-[var(--dg-text-muted)] ml-1",children:"(导入时统一设置)"})]}),e.jsx(W,{"code-path":"src/components/server/CloudServerImport.tsx:571:23",type:"number",placeholder:"22",value:ee,onChange:r=>re(r.target.value),className:"w-32 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"})]}),e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:579:21",children:[e.jsxs("label",{"code-path":"src/components/server/CloudServerImport.tsx:580:23",className:"block text-xs font-medium text-[var(--dg-text-secondary)] mb-1",children:["关联凭证",e.jsx("span",{"code-path":"src/components/server/CloudServerImport.tsx:582:25",className:"text-[var(--dg-text-muted)] ml-1",children:"(可选,用于SSH远程管理)"})]}),e.jsxs("select",{"code-path":"src/components/server/CloudServerImport.tsx:584:23",value:B,onChange:r=>K(r.target.value),className:"w-full px-3 py-1.5 bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] rounded-md text-[var(--dg-text-primary)] text-xs",children:[e.jsx("option",{"code-path":"src/components/server/CloudServerImport.tsx:589:25",value:"",children:"不使用凭据"}),pe.map(r=>e.jsxs("option",{"code-path":"src/components/server/CloudServerImport.tsx:591:27",value:String(r.id),children:[r.type==="ssh_key"?"🔑":"🔒"," ",r.name]},r.id))]})]})]})]})}),e.jsxs(qe,{"code-path":"src/components/server/CloudServerImport.tsx:605:9",className:"flex justify-between items-center",children:[e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:606:11",children:c>1&&!w&&e.jsxs(N,{"code-path":"src/components/server/CloudServerImport.tsx:608:15",variant:"outline",onClick:Ue,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:[e.jsx(rr,{"code-path":"src/components/server/CloudServerImport.tsx:609:17",className:"h-4 w-4 mr-1"}),"上一步"]})}),e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:614:11",className:"flex gap-2",children:w?e.jsx(N,{"code-path":"src/components/server/CloudServerImport.tsx:616:15",onClick:Se,className:"bg-blue-600 hover:bg-blue-700",children:"完成"}):e.jsxs(e.Fragment,{children:[e.jsx(N,{"code-path":"src/components/server/CloudServerImport.tsx:621:17",variant:"outline",onClick:Se,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:"取消"}),c<4?e.jsxs(N,{"code-path":"src/components/server/CloudServerImport.tsx:625:19",onClick:ie,disabled:c===1&&!g||c===2&&!m||c===3&&n.length===0,className:"bg-blue-600 hover:bg-blue-700",children:["下一步",e.jsx(Fe,{"code-path":"src/components/server/CloudServerImport.tsx:635:21",className:"h-4 w-4 ml-1"})]}):e.jsx(N,{"code-path":"src/components/server/CloudServerImport.tsx:638:19",onClick:z,disabled:i.length===0||b,className:"bg-emerald-600 hover:bg-emerald-700",children:b?e.jsxs(e.Fragment,{children:[e.jsx(le,{"code-path":"src/components/server/CloudServerImport.tsx:645:25",className:"h-4 w-4 mr-1 animate-spin"}),"导入中..."]}):e.jsxs(e.Fragment,{children:[e.jsx(ve,{"code-path":"src/components/server/CloudServerImport.tsx:650:25",className:"h-4 w-4 mr-1"}),"确认导入 (",i.length,")"]})})]})})]})]})})}function vs({open:s,onOpenChange:x,serverId:o,serverName:a,serverIp:c,hasAuth:h=!0}){const g=t.useRef(null),u=t.useRef(null),m=t.useRef(null),T=t.useRef(null),[S,k]=t.useState(!1),[n,y]=t.useState(!1),[E,M]=t.useState([]),[C,f]=t.useState(""),[v,I]=t.useState(!1),[i,O]=t.useState(h);t.useEffect(()=>{!s||h||Xe.list().then(j=>M(j?.list||[])).catch(()=>{})},[s,h]);const G=async()=>{if(!(!C||!o))try{I(!0),await Zr.assign(o,Number(C)),J.success("凭据已关联"),O(!0)}catch(j){J.error(j?.message||"关联失败")}finally{I(!1)}};return t.useEffect(()=>{s||(O(h),f(""))},[s,h]),t.useEffect(()=>{if(!s||!o||!i)return;const j=new Jr.Terminal({cursorBlink:!0,fontSize:13,fontFamily:'Menlo, Monaco, "Courier New", monospace',allowProposedApi:!0,theme:{background:"#0a0e14",foreground:"#d6d6d6",cursor:"#d6d6d6",selectionBackground:"rgba(255,255,255,0.2)"}}),U=new qr.FitAddon;j.loadAddon(U),u.current=j,T.current=U;const p=location.protocol==="https:"?"wss":"ws",b=vr.getState().token||"",R=`${p}://${location.host}/ws/terminal?id=${o}&cols=80&rows=24&token=${encodeURIComponent(b)}`,w=new WebSocket(R);return m.current=w,j.onData(L=>{w.readyState===WebSocket.OPEN&&w.send(JSON.stringify({status:0,data:L}))}),w.onmessage=L=>{try{const ee=JSON.parse(L.data);ee.status===0&&typeof ee.data=="string"&&j.write(ee.data)}catch{j.write(typeof L.data=="string"?L.data:"")}},w.onopen=()=>{k(!0),Qr(j,U,()=>g.current,w)},w.onclose=()=>{k(!1),j.write(`\r
|
||
\x1B[31m[连接已关闭]\x1B[0m\r
|
||
`)},w.onerror=()=>{j.write(`\r
|
||
\x1B[31m[连接发生错误]\x1B[0m\r
|
||
`)},()=>{try{w.close(),j.dispose()}catch{}u.current=null,m.current=null,k(!1)}},[s,o,i]),t.useEffect(()=>{if(!s||!i)return;let j,U=0;const p=()=>{const b=g.current,R=T.current,w=u.current,L=m.current;if(!b||!R||!w){U++<30&&requestAnimationFrame(p);return}j=Xr(b,R,w,L);try{Yr(R,w,L)}catch{}};return p(),()=>j?.()},[s,i,n]),e.jsx(_e,{"code-path":"src/components/server/TerminalDialog.tsx:184:5",open:s,onOpenChange:x,children:e.jsxs(Te,{"code-path":"src/components/server/TerminalDialog.tsx:185:7",showCloseButton:!1,className:xe("bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] p-0 gap-0","!duration-0 !transition-none",n?"!max-w-none !w-screen !h-screen !rounded-none !translate-x-0 !translate-y-0 !left-0 !top-0":""),style:n?{maxWidth:"100vw",width:"100vw",height:"100vh"}:{maxWidth:"960px",width:"92vw"},children:[e.jsxs(Re,{"code-path":"src/components/server/TerminalDialog.tsx:197:9",className:"sr-only",children:["终端 - ",a]}),e.jsx(Me,{"code-path":"src/components/server/TerminalDialog.tsx:198:9",className:"sr-only",children:"SSH 终端连接"}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:200:9",className:"flex items-center justify-between px-4 py-2 border-b border-[var(--dg-border)]",children:[e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:201:11",className:"flex items-center gap-2 text-sm",children:[e.jsx("div",{"code-path":"src/components/server/TerminalDialog.tsx:202:13",className:xe("w-2 h-2 rounded-full",S?"bg-emerald-400":"bg-red-400")}),e.jsx("span",{"code-path":"src/components/server/TerminalDialog.tsx:203:13",className:"text-[var(--dg-text-primary)] font-medium",children:a}),e.jsxs("span",{"code-path":"src/components/server/TerminalDialog.tsx:204:13",className:"text-[var(--dg-text-muted)]",children:["(",c,")"]})]}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:206:11",className:"flex items-center gap-1",children:[e.jsx("button",{"code-path":"src/components/server/TerminalDialog.tsx:207:13",onClick:()=>y(!n),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:n?e.jsx(yr,{"code-path":"src/components/server/TerminalDialog.tsx:211:29",className:"h-4 w-4"}):e.jsx(fr,{"code-path":"src/components/server/TerminalDialog.tsx:211:65",className:"h-4 w-4"})}),e.jsx("button",{"code-path":"src/components/server/TerminalDialog.tsx:213:13",onClick:()=>x(!1),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:e.jsx(ue,{"code-path":"src/components/server/TerminalDialog.tsx:217:15",className:"h-4 w-4"})})]})]}),!i&&e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:223:11",className:"p-6 flex flex-col items-center justify-center gap-4",style:{height:"480px"},children:[e.jsx(hr,{"code-path":"src/components/server/TerminalDialog.tsx:224:13",className:"h-12 w-12 text-amber-400"}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:225:13",className:"text-center",children:[e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:226:15",className:"text-[var(--dg-text-primary)] font-medium mb-1",children:"服务器未配置认证凭据"}),e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:227:15",className:"text-sm text-[var(--dg-text-muted)]",children:"请选择一个凭据用于 SSH 连接"})]}),E.length===0?e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:230:15",className:"text-xs text-[var(--dg-text-muted)]",children:"暂无可用凭据,请先去「凭证配置」添加"}):e.jsxs("select",{"code-path":"src/components/server/TerminalDialog.tsx:232:15",value:C,onChange:j=>f(j.target.value),className:"w-64 px-3 py-2 bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] rounded-md text-[var(--dg-text-primary)] text-sm",children:[e.jsx("option",{"code-path":"src/components/server/TerminalDialog.tsx:237:17",value:"",children:"-- 选择凭据 --"}),E.map(j=>e.jsxs("option",{"code-path":"src/components/server/TerminalDialog.tsx:239:19",value:String(j.id),children:[j.type==="ssh_key"?"🔑":"🔒"," ",j.name]},j.id))]}),e.jsx(N,{"code-path":"src/components/server/TerminalDialog.tsx:245:13",onClick:G,disabled:!C||v,className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",children:v?"关联中...":"确认连接"})]}),i&&e.jsx("div",{"code-path":"src/components/server/TerminalDialog.tsx:256:11",ref:g,className:"xterm-terminal-host",style:{height:n?"calc(100vh - 49px)":"520px"}})]})})}const hs=s=>s<1024?`${s} B`:s<1048576?`${(s/1024).toFixed(1)} KB`:`${(s/1048576).toFixed(2)} MB`;function gs({open:s,onOpenChange:x,serverId:o,serverName:a}){const[c,h]=t.useState([]),[g,u]=t.useState([]),[m,T]=t.useState("/"),[S,k]=t.useState(!1),[n,y]=t.useState(""),[E,M]=t.useState(!1),[C,f]=t.useState(!1),v=t.useRef(null),I=t.useCallback(async p=>{if(o){k(!0),y("");try{const b=await te.listFiles(o,p),R=b?.data||b;h(R.items||[]),u(R.breadcrumbs||[]),T(R.path||p)}catch(b){y(b?.message||"加载目录失败"),h([])}finally{k(!1)}}},[o]);t.useEffect(()=>{s&&o&&(f(!1),I("/"))},[s,o,I]);const i=async p=>{if(o)try{await te.downloadFile(o,p)}catch(b){y("下载失败: "+(b?.message||""))}},O=async p=>{const b=p.target.files?.[0];if(!(!b||!o)){M(!0);try{await te.uploadFile(o,m,b),await I(m)}catch(R){y(R?.message||"上传失败")}finally{M(!1),v.current&&(v.current.value="")}}},G=async(p,b)=>{if(!(!o||!confirm(`确认删除 ${b?"目录":"文件"} "${p}"?`)))try{await te.deleteFile(o,p),await I(m)}catch(R){y(R?.message||"删除失败")}},j=async()=>{const p=prompt("输入目录名:");if(!p||!o)return;const b=m==="/"?`/${p}`:`${m}/${p}`;try{await te.mkdir(o,b),await I(m)}catch(R){y(R?.message||"创建失败")}},U=[...c].sort((p,b)=>p.is_dir!==b.is_dir?p.is_dir?-1:1:p.name.localeCompare(b.name));return e.jsx(_e,{"code-path":"src/components/server/ServerFileBrowser.tsx:145:5",open:s,onOpenChange:x,children:e.jsxs(Te,{"code-path":"src/components/server/ServerFileBrowser.tsx:146:7",showCloseButton:!1,onInteractOutside:p=>{E&&p.preventDefault()},className:xe("bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] p-0 gap-0","!duration-0 !transition-none",C?"!max-w-none !w-screen !h-screen !rounded-none":""),style:C?{maxWidth:"100vw",width:"100vw",height:"100vh"}:{maxWidth:"95vw",width:"1100px",maxHeight:"92vh"},children:[e.jsxs(Re,{"code-path":"src/components/server/ServerFileBrowser.tsx:164:9",className:"sr-only",children:["文件浏览 — ",a]}),e.jsx(Me,{"code-path":"src/components/server/ServerFileBrowser.tsx:165:9",className:"sr-only",children:"SFTP 文件管理 · 上传 · 下载 · 删除"}),e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:168:9",className:"flex items-center justify-between px-4 py-2.5 border-b border-[var(--dg-border)] shrink-0",children:[e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:169:11",className:"flex items-center gap-2 min-w-0",children:[e.jsx(wr,{"code-path":"src/components/server/ServerFileBrowser.tsx:170:13",className:"h-4 w-4 text-[var(--dg-blue)] shrink-0"}),e.jsx("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:171:13",className:"text-[var(--dg-text-primary)] font-medium text-sm truncate",children:a}),e.jsx("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:174:13",className:"text-[var(--dg-text-muted)] text-xs",children:"· SFTP 文件管理"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:176:11",className:"flex items-center gap-1",children:[e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:177:13",onClick:()=>f(!C),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",title:C?"退出全屏":"全屏",children:C?e.jsx(yr,{"code-path":"src/components/server/ServerFileBrowser.tsx:182:29",className:"h-4 w-4"}):e.jsx(fr,{"code-path":"src/components/server/ServerFileBrowser.tsx:182:65",className:"h-4 w-4"})}),e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:184:13",onClick:()=>x(!1),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:e.jsx(ue,{"code-path":"src/components/server/ServerFileBrowser.tsx:188:15",className:"h-4 w-4"})})]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:194:9",className:"flex items-center gap-2 px-4 py-2 border-b border-[var(--dg-border)] bg-[var(--dg-bg-primary)] shrink-0",children:[e.jsxs(N,{"code-path":"src/components/server/ServerFileBrowser.tsx:195:11",variant:"outline",size:"sm",className:"border-[var(--dg-border)] h-8",onClick:()=>I(m),children:[e.jsx(le,{"code-path":"src/components/server/ServerFileBrowser.tsx:197:13",className:"h-3.5 w-3.5 mr-1"}),"刷新"]}),e.jsxs("label",{"code-path":"src/components/server/ServerFileBrowser.tsx:199:11",children:[e.jsxs(N,{"code-path":"src/components/server/ServerFileBrowser.tsx:200:13",variant:"outline",size:"sm",className:"border-[var(--dg-border)] h-8 cursor-pointer",onClick:()=>v.current?.click(),disabled:E,children:[E?e.jsx(ze,{"code-path":"src/components/server/ServerFileBrowser.tsx:202:28",className:"h-3.5 w-3.5 mr-1 animate-spin"}):e.jsx(Ye,{"code-path":"src/components/server/ServerFileBrowser.tsx:202:84",className:"h-3.5 w-3.5 mr-1"}),"上传"]}),e.jsx("input",{"code-path":"src/components/server/ServerFileBrowser.tsx:205:13",ref:v,type:"file",className:"hidden",onChange:O})]}),e.jsxs(N,{"code-path":"src/components/server/ServerFileBrowser.tsx:207:11",variant:"outline",size:"sm",className:"border-[var(--dg-border)] h-8",onClick:j,children:[e.jsx(ps,{"code-path":"src/components/server/ServerFileBrowser.tsx:209:13",className:"h-3.5 w-3.5 mr-1"}),"新建目录"]}),n&&e.jsxs($,{"code-path":"src/components/server/ServerFileBrowser.tsx:212:13",variant:"outline",className:"border-red-500/30 text-red-400 ml-auto",children:[e.jsx(ue,{"code-path":"src/components/server/ServerFileBrowser.tsx:213:15",className:"h-3 w-3 mr-1 cursor-pointer",onClick:()=>y("")}),n]})]}),e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:220:9",className:"flex items-center gap-0.5 px-4 py-2 text-xs border-b border-[var(--dg-border)] bg-[var(--dg-bg-tertiary)] overflow-x-auto shrink-0",children:g.map((p,b)=>e.jsxs("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:222:13",className:"flex items-center gap-0.5",children:[b===0?e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:224:17",onClick:()=>I("/"),className:"text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] p-0.5",children:e.jsx(Rr,{"code-path":"src/components/server/ServerFileBrowser.tsx:228:19",className:"h-3.5 w-3.5"})}):e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:231:17",onClick:()=>I(p.path),className:"text-[var(--dg-blue)] hover:underline truncate max-w-[150px]",children:p.name}),b<g.length-1&&e.jsx(Fe,{"code-path":"src/components/server/ServerFileBrowser.tsx:239:17",className:"h-3 w-3 text-[var(--dg-text-muted)] shrink-0"})]},p.path))}),e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:246:9",className:"overflow-y-auto flex-1",style:{height:C?"calc(100vh - 110px)":"min(55vh, 600px)"},children:S?e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:250:13",className:"flex items-center justify-center h-full py-16",children:e.jsx(ze,{"code-path":"src/components/server/ServerFileBrowser.tsx:251:15",className:"h-6 w-6 animate-spin text-[var(--dg-blue)]"})}):U.length===0?e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:254:13",className:"flex flex-col items-center justify-center py-16 text-[var(--dg-text-muted)]",children:[e.jsx(dr,{"code-path":"src/components/server/ServerFileBrowser.tsx:255:15",className:"h-10 w-10 mb-2 opacity-30"}),e.jsx("p",{"code-path":"src/components/server/ServerFileBrowser.tsx:256:15",className:"text-sm",children:"空目录"})]}):e.jsxs("table",{"code-path":"src/components/server/ServerFileBrowser.tsx:259:13",className:"w-full text-sm",children:[e.jsx("thead",{"code-path":"src/components/server/ServerFileBrowser.tsx:260:15",className:"sticky top-0 bg-[var(--dg-bg-primary)] border-b border-[var(--dg-border)] z-10",children:e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:261:17",className:"text-left text-[var(--dg-text-muted)] text-xs",children:[e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:262:19",className:"py-2 pl-4 w-8 font-medium"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:263:19",className:"py-2 font-medium",children:"名称"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:264:19",className:"py-2 px-2 font-medium w-28 text-right",children:"大小"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:265:19",className:"py-2 px-2 font-medium w-44 hidden sm:table-cell",children:"修改时间"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:266:19",className:"py-2 px-2 font-medium w-24 hidden md:table-cell",children:"权限"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:267:19",className:"py-2 pr-4 pl-2 font-medium w-24 text-center",children:"操作"})]})}),e.jsxs("tbody",{"code-path":"src/components/server/ServerFileBrowser.tsx:270:15",children:[m!=="/"&&e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:272:19",className:"border-b border-[var(--dg-border)] hover:bg-[var(--dg-bg-hover)] cursor-pointer",onClick:()=>{const p=m.split("/").slice(0,-1).join("/")||"/";I(p)},children:[e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:277:21",className:"py-2 pl-4",children:e.jsx(rs,{"code-path":"src/components/server/ServerFileBrowser.tsx:277:47",className:"h-4 w-4 text-[var(--dg-text-muted)]"})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:278:21",className:"py-2 text-[var(--dg-text-secondary)]",colSpan:5,children:".."})]}),U.map(p=>e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:282:19",className:"border-b border-[var(--dg-border)] hover:bg-[var(--dg-bg-hover)]",children:[e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:285:21",className:"py-2 pl-4",children:p.is_dir?e.jsx(dr,{"code-path":"src/components/server/ServerFileBrowser.tsx:287:25",className:"h-4 w-4 text-amber-400"}):e.jsx(es,{"code-path":"src/components/server/ServerFileBrowser.tsx:289:25",className:"h-4 w-4 text-sky-400"})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:292:21",className:"py-2",children:p.is_dir?e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:294:25",onClick:()=>I(p.path),className:"text-[var(--dg-text-primary)] hover:text-[var(--dg-blue)] hover:underline font-medium cursor-pointer",children:p.name}):e.jsx("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:301:25",className:"text-[var(--dg-text-primary)]",children:p.name})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:304:21",className:"py-2 px-2 text-right text-[var(--dg-text-muted)]",children:p.is_dir?"-":hs(p.size)}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:307:21",className:"py-2 px-2 text-[var(--dg-text-muted)] hidden sm:table-cell",children:p.mod_time}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:308:21",className:"py-2 px-2 text-[var(--dg-text-muted)] font-mono text-xs hidden md:table-cell",children:p.mode}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:309:21",className:"py-2 pr-4 pl-2",children:e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:310:23",className:"flex items-center justify-center gap-1",children:[!p.is_dir&&e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:312:27",onClick:b=>{b.stopPropagation(),i(p.path)},className:"p-1 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)] hover:text-white",title:"下载",children:e.jsx(Ze,{"code-path":"src/components/server/ServerFileBrowser.tsx:317:29",className:"h-3.5 w-3.5"})}),e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:320:25",onClick:b=>{b.stopPropagation(),G(p.path,p.is_dir)},className:"p-1 rounded hover:bg-[var(--dg-bg-hover)] text-red-400 hover:text-red-300",title:"删除",children:e.jsx(er,{"code-path":"src/components/server/ServerFileBrowser.tsx:325:27",className:"h-3.5 w-3.5"})})]})})]},p.path))]})]})})]})})}function pr(s){const x=[];let o="",a=!1;for(let c=0;c<s.length;c++){const h=s[c];a?h==='"'?s[c+1]==='"'?(o+='"',c++):a=!1:o+=h:h==='"'?a=!0:h===","?(x.push(o),o=""):o+=h}return x.push(o),x.map(c=>c.trim())}function us(s){const x=s.replace(/\r\n/g,`
|
||
`).replace(/\r/g,`
|
||
`).split(`
|
||
`).filter(c=>c.trim());if(x.length<2)return[];const o=pr(x[0]).map(c=>c.toLowerCase()),a=[];for(let c=1;c<x.length;c++){const h=pr(x[c]),g={};o.forEach((u,m)=>{g[u]=h[m]??""}),a.push(g)}return a}function bs(s){return/^(\d{1,3}\.){3}\d{1,3}$/.test(s)&&s.split(".").every(x=>Number(x)>=0&&Number(x)<=255)}function Ss(){const s=["hostname,ip,port","web-01,192.168.1.10,22","db-01,192.168.1.20,22","cache-01,192.168.1.30,2222"].join(`
|
||
`),x=new Blob(["\uFEFF"+s],{type:"text/csv;charset=utf-8;"}),o=URL.createObjectURL(x),a=document.createElement("a");a.href=o,a.download="servers-template.csv",a.click(),URL.revokeObjectURL(o)}function js({open:s,onClose:x}){const[o,a]=t.useState(1),[c,h]=t.useState(""),[,g]=t.useState("password"),[u,m]=t.useState(null),[T,S]=t.useState(!1),[k,n]=t.useState([]),[y,E]=t.useState([]),[M,C]=t.useState(!1),[f,v]=t.useState([]),[I,i]=t.useState(""),[O,G]=t.useState("22");t.useEffect(()=>{if(!s)return;let l=!1;return(async()=>{try{const[B,K]=await Promise.all([Gr.list(),Xe.list()]);if(l)return;const D=B?.list??[];E(D.map(P=>({id:String(P.id??""),name:P.name??"",code:P.code??""}))),v(K?.list??[])}catch{l||(E([]),v([]))}})(),()=>{l=!0}},[s]);const j=async()=>{if(o===2&&u){S(!0);try{const l=await u.text(),B=us(l);if(B.length===0){J.error("文件无有效数据,请使用模板格式(首行为表头)"),S(!1);return}const K=new Set,D=B.map((P,X)=>{const q=(P.hostname??"").trim(),A=(P.ip??"").trim(),me={row:X+2,hostname:q,ip:A,port:Number(P.port)||22,username:(P.username??"").trim()||"root",os:P.os??"",cpu:Number(P.cpu)||0,memory:Number(P.memory)||0,disk:Number(P.disk)||0,tags:P.tags??"",status:"valid",message:"有效"},z=[];q||z.push("主机名缺失"),A?bs(A)||z.push("IP格式错误"):z.push("IP缺失");const ie=`${q}|${A}`;return q&&A&&K.has(ie)?z.push("重复行"):K.add(ie),z.length>0&&(me.status="error",me.message=z.join("、")),me});n(D),a(o+1)}catch{J.error("文件解析失败,请确认是 CSV 格式")}finally{S(!1)}}else a(o+1)},U=()=>{o>1&&a(o-1)},p=l=>{l.target.files&&l.target.files[0]&&m(l.target.files[0])},b=()=>{a(1),h(""),G("22"),i(""),m(null),n([])},R=async()=>{const l=k.filter(B=>B.status==="valid");if(l.length!==0){C(!0);try{const B=l.map(A=>({hostname:A.hostname,ip:A.ip,port:A.port,username:A.username,os:A.os,cpu:A.cpu,memory:A.memory,disk:A.disk,tags:A.tags})),D=await te.batchCreate({servers:B,region_id:c||void 0,credential_id:I?Number(I):void 0,default_port:Number(O)||22})??{},P=D.success??0,X=D.skipped??0,q=D.failed??0;J.success(`导入完成:成功 ${P},跳过 ${X},失败 ${q}`),b(),x()}catch(B){J.error(B?.message||"导入失败,请重试")}finally{C(!1)}}},w=()=>{x(),b()},L=k.filter(l=>l.status==="valid").length,ee=k.filter(l=>l.status==="warning").length,re=k.filter(l=>l.status==="error").length,pe=[{id:1,title:"配置"},{id:2,title:"上传"},{id:3,title:"确认"}];return e.jsx(_e,{"code-path":"src/components/server/ExcelServerImport.tsx:278:5",open:s,onOpenChange:w,children:e.jsxs(Te,{"code-path":"src/components/server/ExcelServerImport.tsx:279:7",className:"max-w-3xl bg-[var(--dg-bg-primary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:[e.jsxs(Je,{"code-path":"src/components/server/ExcelServerImport.tsx:280:9",children:[e.jsx(Re,{"code-path":"src/components/server/ExcelServerImport.tsx:281:11",className:"text-xl",children:"CSV 批量导入服务器"}),e.jsx(Me,{"code-path":"src/components/server/ExcelServerImport.tsx:282:11",className:"sr-only",children:"通过 CSV 文件批量导入服务器资产"})]}),e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:286:9",className:"flex items-center justify-center mb-6",children:pe.map((l,B)=>e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:288:13",className:"flex items-center",children:[e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:289:15",className:`flex items-center justify-center w-8 h-8 rounded-full ${o===l.id?"bg-blue-600 text-white":o>l.id?"bg-emerald-600 text-white":"bg-[var(--dg-bg-secondary)] text-[var(--dg-text-muted)]"}`,children:o>l.id?e.jsx(ve,{"code-path":"src/components/server/ExcelServerImport.tsx:296:32",className:"h-4 w-4"}):l.id}),e.jsx("span",{"code-path":"src/components/server/ExcelServerImport.tsx:298:15",className:`ml-2 text-sm ${o===l.id?"text-[var(--dg-text-primary)]":"text-[var(--dg-text-muted)]"}`,children:l.title}),B<pe.length-1&&e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:302:17",className:"w-12 h-0.5 bg-[var(--dg-border)] mx-3"})]},l.id))}),o===1&&e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:310:11",className:"space-y-6",children:[e.jsx(ke,{"code-path":"src/components/server/ExcelServerImport.tsx:312:13",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(Ee,{"code-path":"src/components/server/ExcelServerImport.tsx:313:15",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:314:17",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:315:19",className:"flex items-center gap-3",children:[e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:316:21",className:"w-10 h-10 rounded-lg bg-emerald-500/20 flex items-center justify-center",children:e.jsx(Ge,{"code-path":"src/components/server/ExcelServerImport.tsx:317:23",className:"h-5 w-5 text-emerald-400"})}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:319:21",children:[e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:320:23",className:"font-medium text-[var(--dg-text-primary)]",children:"主机导入模板"}),e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:321:23",className:"text-xs text-[var(--dg-text-muted)]",children:"下载 CSV 模板,只需填主机名、IP和端口(默认22),Agent安装后自动补全"})]})]}),e.jsxs(N,{"code-path":"src/components/server/ExcelServerImport.tsx:324:19",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",onClick:Ss,children:[e.jsx(Ze,{"code-path":"src/components/server/ExcelServerImport.tsx:325:21",className:"h-4 w-4 mr-2"}),"下载模板"]})]})})}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:333:13",children:[e.jsx("label",{"code-path":"src/components/server/ExcelServerImport.tsx:334:15",className:"block text-sm font-medium text-[var(--dg-text-secondary)] mb-2",children:"选择区域"}),e.jsxs("select",{"code-path":"src/components/server/ExcelServerImport.tsx:335:15",value:c,onChange:l=>h(l.target.value),className:"w-full px-3 py-2 bg-[var(--dg-bg-secondary)] border border-[var(--dg-border)] rounded-md text-[var(--dg-text-primary)] text-sm",children:[e.jsx("option",{"code-path":"src/components/server/ExcelServerImport.tsx:340:17",value:"",children:"请选择区域"}),y.map(l=>e.jsxs("option",{"code-path":"src/components/server/ExcelServerImport.tsx:342:19",value:l.id,children:[l.name," (",l.code,")"]},l.id))]})]}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:350:13",children:[e.jsxs("label",{"code-path":"src/components/server/ExcelServerImport.tsx:351:15",className:"block text-sm font-medium text-[var(--dg-text-secondary)] mb-2",children:["选择凭据",e.jsx("span",{"code-path":"src/components/server/ExcelServerImport.tsx:353:17",className:"text-xs text-[var(--dg-text-muted)] ml-1",children:"(可选,用于SSH连接)"})]}),f.length===0?e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:356:17",className:"text-xs text-[var(--dg-text-muted)] py-2",children:"暂无凭据,先去「凭证配置」添加 SSH 密钥或密码"}):e.jsxs("select",{"code-path":"src/components/server/ExcelServerImport.tsx:360:17",value:I,onChange:l=>i(l.target.value),className:"w-full px-3 py-2 bg-[var(--dg-bg-secondary)] border border-[var(--dg-border)] rounded-md text-[var(--dg-text-primary)] text-sm",children:[e.jsx("option",{"code-path":"src/components/server/ExcelServerImport.tsx:365:19",value:"",children:"不使用凭据(后续手动配置)"}),f.map(l=>e.jsxs("option",{"code-path":"src/components/server/ExcelServerImport.tsx:367:21",value:String(l.id),children:[l.type==="ssh_key"?"🔑":l.type==="api_token"?"🌐":"🔒"," ",l.name," (",l.type==="ssh_key"?"SSH密钥":l.type==="api_token"?"API Token":"密码",")"]},l.id))]})]}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:376:13",children:[e.jsxs("label",{"code-path":"src/components/server/ExcelServerImport.tsx:377:15",className:"block text-sm font-medium text-[var(--dg-text-secondary)] mb-2",children:["SSH 端口",e.jsx("span",{"code-path":"src/components/server/ExcelServerImport.tsx:379:17",className:"text-xs text-[var(--dg-text-muted)] ml-1",children:"(导入时统一设置,可在服务器管理页单独修改)"})]}),e.jsx(W,{"code-path":"src/components/server/ExcelServerImport.tsx:381:15",type:"number",placeholder:"22",value:O,onChange:l=>G(l.target.value),className:"w-32 bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"})]})]}),o===2&&e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:394:11",className:"space-y-6",children:[e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:395:13",className:"border-2 border-dashed border-[var(--dg-border)] rounded-lg p-8 text-center hover:border-blue-500/50 transition-colors",children:[e.jsx(Ye,{"code-path":"src/components/server/ExcelServerImport.tsx:398:15",className:"h-12 w-12 mx-auto mb-4 text-[var(--dg-text-muted)]"}),e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:399:15",className:"text-[var(--dg-text-secondary)] mb-2",children:"点击或拖拽文件到此处上传"}),e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:400:15",className:"text-xs text-[var(--dg-text-muted)] mb-4",children:'支持 CSV 格式文件(可点击左侧"下载模板"获取)'}),e.jsx(W,{"code-path":"src/components/server/ExcelServerImport.tsx:401:15",type:"file",accept:".csv,text/csv",onChange:p,className:"hidden",id:"excel-upload"}),e.jsx("label",{"code-path":"src/components/server/ExcelServerImport.tsx:408:15",htmlFor:"excel-upload",children:e.jsx(N,{"code-path":"src/components/server/ExcelServerImport.tsx:409:17",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",asChild:!0,children:e.jsx("span",{"code-path":"src/components/server/ExcelServerImport.tsx:410:19",children:"选择文件"})})})]}),u&&e.jsx(ke,{"code-path":"src/components/server/ExcelServerImport.tsx:416:15",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsxs(Ee,{"code-path":"src/components/server/ExcelServerImport.tsx:417:17",className:"p-3 flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:418:19",className:"flex items-center gap-3",children:[e.jsx(Ge,{"code-path":"src/components/server/ExcelServerImport.tsx:419:21",className:"h-8 w-8 text-emerald-400"}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:420:21",children:[e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:421:23",className:"text-sm text-[var(--dg-text-primary)]",children:u.name}),e.jsxs("p",{"code-path":"src/components/server/ExcelServerImport.tsx:422:23",className:"text-xs text-[var(--dg-text-muted)]",children:[(u.size/1024).toFixed(2)," KB"]})]})]}),e.jsx(N,{"code-path":"src/components/server/ExcelServerImport.tsx:425:19",variant:"ghost",size:"icon",className:"text-[var(--dg-text-muted)] hover:text-red-400",onClick:()=>m(null),children:e.jsx(ue,{"code-path":"src/components/server/ExcelServerImport.tsx:431:21",className:"h-4 w-4"})})]})}),T&&e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:438:15",className:"text-center py-4",children:[e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:439:17",className:"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin mx-auto mb-2"}),e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:440:17",className:"text-[var(--dg-text-secondary)] text-sm",children:"正在解析文件..."})]})]}),o===3&&e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:448:11",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:449:13",className:"flex items-center justify-between",children:[e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:450:15",className:"text-[var(--dg-text-secondary)] text-sm",children:"数据预览"}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:451:15",className:"flex items-center gap-2",children:[e.jsxs($,{"code-path":"src/components/server/ExcelServerImport.tsx:452:17",className:"bg-emerald-500/20 text-emerald-400 border-0",children:[e.jsx(ve,{"code-path":"src/components/server/ExcelServerImport.tsx:453:19",className:"h-3 w-3 mr-1"}),L," 有效"]}),ee>0&&e.jsxs($,{"code-path":"src/components/server/ExcelServerImport.tsx:457:19",className:"bg-amber-500/20 text-amber-400 border-0",children:[e.jsx($e,{"code-path":"src/components/server/ExcelServerImport.tsx:458:21",className:"h-3 w-3 mr-1"}),ee," 警告"]}),re>0&&e.jsxs($,{"code-path":"src/components/server/ExcelServerImport.tsx:463:19",className:"bg-red-500/20 text-red-400 border-0",children:[e.jsx(ue,{"code-path":"src/components/server/ExcelServerImport.tsx:464:21",className:"h-3 w-3 mr-1"}),re," 错误"]})]})]}),e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:471:13",className:"border rounded-lg border-[var(--dg-border)] overflow-hidden max-h-[350px] overflow-y-auto",children:e.jsxs("table",{"code-path":"src/components/server/ExcelServerImport.tsx:472:15",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/server/ExcelServerImport.tsx:473:17",className:"bg-[var(--dg-bg-secondary)] sticky top-0",children:e.jsxs("tr",{"code-path":"src/components/server/ExcelServerImport.tsx:474:19",children:[e.jsx("th",{"code-path":"src/components/server/ExcelServerImport.tsx:475:21",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"行号"}),e.jsx("th",{"code-path":"src/components/server/ExcelServerImport.tsx:476:21",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"主机名"}),e.jsx("th",{"code-path":"src/components/server/ExcelServerImport.tsx:477:21",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"IP地址"}),e.jsx("th",{"code-path":"src/components/server/ExcelServerImport.tsx:478:21",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)]",children:"状态"})]})}),e.jsx("tbody",{"code-path":"src/components/server/ExcelServerImport.tsx:481:17",className:"divide-y divide-[var(--dg-border)]",children:k.map(l=>e.jsxs("tr",{"code-path":"src/components/server/ExcelServerImport.tsx:483:21",className:"hover:bg-[var(--dg-bg-hover)]",children:[e.jsx("td",{"code-path":"src/components/server/ExcelServerImport.tsx:484:23",className:"px-3 py-2 text-sm text-[var(--dg-text-muted)]",children:l.row}),e.jsx("td",{"code-path":"src/components/server/ExcelServerImport.tsx:485:23",className:"px-3 py-2 text-sm text-[var(--dg-text-primary)]",children:l.hostname||"-"}),e.jsx("td",{"code-path":"src/components/server/ExcelServerImport.tsx:486:23",className:"px-3 py-2 text-sm text-[var(--dg-text-secondary)]",children:l.ip}),e.jsx("td",{"code-path":"src/components/server/ExcelServerImport.tsx:487:23",className:"px-3 py-2",children:e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:488:25",className:"flex items-center gap-1",children:[l.status==="valid"&&e.jsxs($,{"code-path":"src/components/server/ExcelServerImport.tsx:490:29",className:"bg-emerald-500/20 text-emerald-400 border-0 text-xs",children:[e.jsx(ve,{"code-path":"src/components/server/ExcelServerImport.tsx:491:31",className:"h-3 w-3 mr-1"}),l.message]}),l.status==="warning"&&e.jsxs($,{"code-path":"src/components/server/ExcelServerImport.tsx:496:29",className:"bg-amber-500/20 text-amber-400 border-0 text-xs",children:[e.jsx($e,{"code-path":"src/components/server/ExcelServerImport.tsx:497:31",className:"h-3 w-3 mr-1"}),l.message]}),l.status==="error"&&e.jsxs($,{"code-path":"src/components/server/ExcelServerImport.tsx:502:29",className:"bg-red-500/20 text-red-400 border-0 text-xs",children:[e.jsx(ue,{"code-path":"src/components/server/ExcelServerImport.tsx:503:31",className:"h-3 w-3 mr-1"}),l.message]})]})})]},l.row))})]})}),re>0&&e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:516:15",className:"p-3 rounded-lg bg-red-500/10 border border-red-500/30",children:e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:517:17",className:"flex items-center gap-2 text-red-400",children:[e.jsx($e,{"code-path":"src/components/server/ExcelServerImport.tsx:518:19",className:"h-4 w-4"}),e.jsxs("span",{"code-path":"src/components/server/ExcelServerImport.tsx:519:19",className:"text-sm",children:["存在 ",re," 条错误数据,请修正后重新上传"]})]})})]}),e.jsxs(qe,{"code-path":"src/components/server/ExcelServerImport.tsx:527:9",className:"flex justify-between items-center",children:[e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:528:11",children:o>1&&e.jsxs(N,{"code-path":"src/components/server/ExcelServerImport.tsx:530:15",variant:"outline",onClick:U,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:[e.jsx(rr,{"code-path":"src/components/server/ExcelServerImport.tsx:531:17",className:"h-4 w-4 mr-1"}),"上一步"]})}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:536:11",className:"flex gap-2",children:[e.jsx(N,{"code-path":"src/components/server/ExcelServerImport.tsx:537:13",variant:"outline",onClick:w,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:"取消"}),o<3?e.jsxs(N,{"code-path":"src/components/server/ExcelServerImport.tsx:541:15",onClick:j,disabled:o===1&&!c||o===2&&!u,className:"bg-blue-600 hover:bg-blue-700",children:["下一步",e.jsx(Fe,{"code-path":"src/components/server/ExcelServerImport.tsx:547:17",className:"h-4 w-4 ml-1"})]}):e.jsxs(N,{"code-path":"src/components/server/ExcelServerImport.tsx:550:15",onClick:R,disabled:M||re>0||L===0,className:"bg-emerald-600 hover:bg-emerald-700",children:[M?e.jsx(ze,{"code-path":"src/components/server/ExcelServerImport.tsx:556:19",className:"h-4 w-4 mr-1 animate-spin"}):e.jsx(ve,{"code-path":"src/components/server/ExcelServerImport.tsx:558:19",className:"h-4 w-4 mr-1"}),M?"导入中...":`确认导入 (${L})`]})]})]})]})})}var He="Collapsible",[Ns]=Br(He),[ys,sr]=Ns(He),Cr=t.forwardRef((s,x)=>{const{__scopeCollapsible:o,open:a,defaultOpen:c,disabled:h,onOpenChange:g,...u}=s,[m,T]=Mr({prop:a,defaultProp:c??!1,onChange:g,caller:He});return e.jsx(ys,{scope:o,disabled:h,contentId:Pr(),open:m,onOpenToggle:t.useCallback(()=>T(S=>!S),[T]),children:e.jsx(Qe.div,{"data-state":or(m),"data-disabled":h?"":void 0,...u,ref:x})})});Cr.displayName=He;var Ir="CollapsibleTrigger",Fr=t.forwardRef((s,x)=>{const{__scopeCollapsible:o,...a}=s,c=sr(Ir,o);return e.jsx(Qe.button,{type:"button","aria-controls":c.contentId,"aria-expanded":c.open||!1,"data-state":or(c.open),"data-disabled":c.disabled?"":void 0,disabled:c.disabled,...a,ref:x,onClick:Ar(s.onClick,c.onOpenToggle)})});Fr.displayName=Ir;var tr="CollapsibleContent",kr=t.forwardRef((s,x)=>{const{forceMount:o,...a}=s,c=sr(tr,s.__scopeCollapsible);return e.jsx($r,{present:o||c.open,children:({present:h})=>e.jsx(fs,{...a,ref:x,present:h})})});kr.displayName=tr;var fs=t.forwardRef((s,x)=>{const{__scopeCollapsible:o,present:a,children:c,...h}=s,g=sr(tr,o),[u,m]=t.useState(a),T=t.useRef(null),S=Or(x,T),k=t.useRef(0),n=k.current,y=t.useRef(0),E=y.current,M=g.open||u,C=t.useRef(M),f=t.useRef(void 0);return t.useEffect(()=>{const v=requestAnimationFrame(()=>C.current=!1);return()=>cancelAnimationFrame(v)},[]),Lr(()=>{const v=T.current;if(v){f.current=f.current||{transitionDuration:v.style.transitionDuration,animationName:v.style.animationName},v.style.transitionDuration="0s",v.style.animationName="none";const I=v.getBoundingClientRect();k.current=I.height,y.current=I.width,C.current||(v.style.transitionDuration=f.current.transitionDuration,v.style.animationName=f.current.animationName),m(a)}},[g.open,a]),e.jsx(Qe.div,{"data-state":or(g.open),"data-disabled":g.disabled?"":void 0,id:g.contentId,hidden:!M,...h,ref:S,style:{"--radix-collapsible-content-height":n?`${n}px`:void 0,"--radix-collapsible-content-width":E?`${E}px`:void 0,...s.style},children:M&&c})});function or(s){return s?"open":"closed"}var ws=Cr;function Cs({...s}){return e.jsx(ws,{"code-path":"src/components/ui/collapsible.tsx:6:10","data-slot":"collapsible",...s})}function Is({...s}){return e.jsx(Fr,{"code-path":"src/components/ui/collapsible.tsx:13:5","data-slot":"collapsible-trigger",...s})}function Fs({...s}){return e.jsx(kr,{"code-path":"src/components/ui/collapsible.tsx:24:5","data-slot":"collapsible-content",...s})}const mr={hostname:"",ip:"",public_ip:"",port:"22",username:"root",auth_type:"password",password:"",ssh_key:"",credential_id:null,os:"",cpu:"",memory:"",disk:"",status:"running",tags:"",description:""};function ks({open:s,onOpenChange:x,editingId:o,formData:a,setFormData:c,detailsOpen:h,setDetailsOpen:g,onSave:u,formSaving:m}){const[T,S]=t.useState([]);t.useEffect(()=>{s&&Xe.list().then(n=>{const y=Array.isArray(n)?n:n?.list||n?.data||[];S(y)}).catch(()=>S([]))},[s]);const k=n=>{const y=Number(n);if(!y){c({...a,credential_id:null});return}const E=T.find(M=>M.id===y);E&&c({...a,credential_id:y,username:E.username||"root",auth_type:E.auth_type||"password",password:"",ssh_key:""})};return e.jsx(_e,{"code-path":"src/components/server/ServerForm.tsx:135:5",open:s,onOpenChange:x,children:e.jsxs(Te,{"code-path":"src/components/server/ServerForm.tsx:136:7",className:"max-w-2xl bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] max-h-[90vh] overflow-y-auto",children:[e.jsxs(Je,{"code-path":"src/components/server/ServerForm.tsx:137:9",children:[e.jsxs(Re,{"code-path":"src/components/server/ServerForm.tsx:138:11",className:"text-[var(--dg-text-primary)] flex items-center gap-2",children:[e.jsx(Le,{"code-path":"src/components/server/ServerForm.tsx:139:13",className:"h-5 w-5 text-[var(--dg-blue)]"}),o?"编辑服务器":"添加服务器"]}),e.jsx(Me,{"code-path":"src/components/server/ServerForm.tsx:142:11",className:"text-[var(--dg-text-muted)]",children:o?"修改服务器资产信息":"录入新的服务器资产到 CMDB"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:147:9",className:"space-y-4 py-2",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:149:11",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:150:13",className:"space-y-1.5",children:[e.jsxs(V,{"code-path":"src/components/server/ServerForm.tsx:151:15",className:"text-[var(--dg-text-secondary)]",children:["主机名 ",e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:152:21",className:"text-red-400",children:"*"})]}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:154:15",placeholder:"web-server-01",value:a.hostname,onChange:n=>c({...a,hostname:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:161:13",className:"space-y-1.5",children:[e.jsxs(V,{"code-path":"src/components/server/ServerForm.tsx:162:15",className:"text-[var(--dg-text-secondary)]",children:["IP地址 ",e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:163:22",className:"text-red-400",children:"*"})]}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:165:15",placeholder:"10.0.0.1",value:a.ip,onChange:n=>c({...a,ip:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:175:11",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:176:13",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:177:15",className:"text-[var(--dg-text-secondary)]",children:"公网IP"}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:178:15",placeholder:"如 203.0.113.10",value:a.public_ip,onChange:n=>c({...a,public_ip:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:185:13",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:186:15",className:"text-[var(--dg-text-secondary)]",children:"SSH端口"}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:187:15",type:"number",placeholder:"22",value:a.port,onChange:n=>c({...a,port:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:198:11",className:"space-y-1.5",children:[e.jsxs(V,{"code-path":"src/components/server/ServerForm.tsx:199:13",className:"text-[var(--dg-text-secondary)] flex items-center gap-1.5",children:[e.jsx(Ae,{"code-path":"src/components/server/ServerForm.tsx:200:15",className:"h-3.5 w-3.5"})," SSH 凭证",!o&&!a.credential_id&&e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:201:57",className:"text-red-400 ml-1",children:"*"})]}),e.jsxs(fe,{"code-path":"src/components/server/ServerForm.tsx:203:13",value:a.credential_id?String(a.credential_id):"",onValueChange:k,children:[e.jsx(we,{"code-path":"src/components/server/ServerForm.tsx:207:15",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(Ce,{"code-path":"src/components/server/ServerForm.tsx:208:17",placeholder:"选择已有凭证..."})}),e.jsxs(Ie,{"code-path":"src/components/server/ServerForm.tsx:210:15",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:211:17",value:"__manual",children:"手动输入(不关联凭证)"}),T.map(n=>e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:213:19",value:String(n.id),children:e.jsxs("span",{"code-path":"src/components/server/ServerForm.tsx:214:21",className:"flex items-center gap-2",children:[e.jsx(hr,{"code-path":"src/components/server/ServerForm.tsx:215:23",className:"h-3 w-3 text-blue-400"}),n.name," (",n.username,"@",n.auth_type==="key"?"密钥":"密码",")"]})},n.id))]})]}),a.credential_id&&e.jsx("p",{"code-path":"src/components/server/ServerForm.tsx:223:15",className:"text-[10px] text-green-400/70",children:"已关联凭证,登录信息从凭证自动获取"})]}),!a.credential_id&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:230:15",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:231:17",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:232:19",className:"text-[var(--dg-text-secondary)]",children:"登录用户"}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:233:19",placeholder:"root",value:a.username,onChange:n=>c({...a,username:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:240:17",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:241:19",className:"text-[var(--dg-text-secondary)]",children:"认证方式"}),e.jsxs(fe,{"code-path":"src/components/server/ServerForm.tsx:242:19",value:a.auth_type,onValueChange:n=>c({...a,auth_type:n}),children:[e.jsx(we,{"code-path":"src/components/server/ServerForm.tsx:246:21",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(Ce,{"code-path":"src/components/server/ServerForm.tsx:247:23"})}),e.jsxs(Ie,{"code-path":"src/components/server/ServerForm.tsx:249:21",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:250:23",value:"password",children:"密码认证"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:251:23",value:"key",children:"密钥认证"})]})]})]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:257:15",className:"space-y-1.5",children:[e.jsxs(V,{"code-path":"src/components/server/ServerForm.tsx:258:17",className:"text-[var(--dg-text-secondary)]",children:[a.auth_type==="key"?"SSH 私钥":"登录密码",!o&&e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:260:34",className:"text-red-400 ml-1",children:"*"}),o&&e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:261:33",className:"text-[var(--dg-text-muted)] ml-1 text-xs",children:"(留空则不修改)"})]}),e.jsx(lr,{"code-path":"src/components/server/ServerForm.tsx:263:17",placeholder:a.auth_type==="key"?"粘贴 SSH 私钥内容...":"输入登录密码...",value:a.password,onChange:n=>c({...a,password:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)] min-h-[50px] font-mono text-sm"})]})]}),e.jsxs(Cs,{"code-path":"src/components/server/ServerForm.tsx:274:11",open:h,onOpenChange:g,children:[e.jsx(Is,{"code-path":"src/components/server/ServerForm.tsx:275:13",asChild:!0,children:e.jsxs(N,{"code-path":"src/components/server/ServerForm.tsx:276:15",variant:"ghost",size:"sm",className:"w-full justify-between text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)]",children:[e.jsxs("span",{"code-path":"src/components/server/ServerForm.tsx:281:17",className:"flex items-center gap-2",children:[e.jsx(Le,{"code-path":"src/components/server/ServerForm.tsx:282:19",className:"h-4 w-4"}),"更多详情(OS版本 / 运行状态 / CPU / 内存 / 磁盘 / 标签 / 描述)"]}),e.jsx(zr,{"code-path":"src/components/server/ServerForm.tsx:285:17",className:xe("h-4 w-4 transition-transform",h&&"rotate-180")})]})}),e.jsxs(Fs,{"code-path":"src/components/server/ServerForm.tsx:288:13",className:"space-y-4 pt-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:289:15",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:290:17",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:291:19",className:"text-[var(--dg-text-secondary)]",children:"操作系统"}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:292:19",placeholder:"如 CentOS 7.9",value:a.os,onChange:n=>c({...a,os:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:299:17",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:300:19",className:"text-[var(--dg-text-secondary)]",children:"运行状态"}),e.jsxs(fe,{"code-path":"src/components/server/ServerForm.tsx:301:19",value:a.status,onValueChange:n=>c({...a,status:n}),children:[e.jsx(we,{"code-path":"src/components/server/ServerForm.tsx:305:21",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(Ce,{"code-path":"src/components/server/ServerForm.tsx:306:23"})}),e.jsxs(Ie,{"code-path":"src/components/server/ServerForm.tsx:308:21",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:309:23",value:"running",children:"运行中"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:310:23",value:"stopped",children:"已停止"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:311:23",value:"maintenance",children:"维护中"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:312:23",value:"offline",children:"离线"})]})]})]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:317:15",className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:318:17",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:319:19",className:"text-[var(--dg-text-secondary)]",children:"CPU核数"}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:320:19",type:"number",placeholder:"4",value:a.cpu,onChange:n=>c({...a,cpu:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:328:17",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:329:19",className:"text-[var(--dg-text-secondary)]",children:"内存 (GB)"}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:330:19",type:"number",placeholder:"8",value:a.memory,onChange:n=>c({...a,memory:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:338:17",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:339:19",className:"text-[var(--dg-text-secondary)]",children:"磁盘 (GB)"}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:340:19",type:"number",placeholder:"100",value:a.disk,onChange:n=>c({...a,disk:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:349:15",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:350:17",className:"text-[var(--dg-text-secondary)]",children:"标签"}),e.jsx(W,{"code-path":"src/components/server/ServerForm.tsx:351:17",placeholder:'JSON 格式,如 {"project":"web","team":"ops"}',value:a.tags,onChange:n=>c({...a,tags:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)] font-mono text-sm"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:358:15",className:"space-y-1.5",children:[e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:359:17",className:"text-[var(--dg-text-secondary)]",children:"描述"}),e.jsx(lr,{"code-path":"src/components/server/ServerForm.tsx:360:17",placeholder:"补充说明...",value:a.description,onChange:n=>c({...a,description:n.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)] min-h-[60px]"})]})]})]})]}),e.jsxs(qe,{"code-path":"src/components/server/ServerForm.tsx:371:9",children:[e.jsx(N,{"code-path":"src/components/server/ServerForm.tsx:372:11",variant:"outline",onClick:()=>x(!1),className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:bg-[var(--dg-bg-hover)] hover:text-[var(--dg-text-primary)]",children:"取消"}),e.jsxs(N,{"code-path":"src/components/server/ServerForm.tsx:379:11",onClick:u,disabled:!a.hostname||!a.ip||m,className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",children:[m?e.jsx(ze,{"code-path":"src/components/server/ServerForm.tsx:385:15",className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(ss,{"code-path":"src/components/server/ServerForm.tsx:387:15",className:"h-4 w-4 mr-2"}),o?"保存修改":"创建"]})]})]})})}function Er(s){const x=s.tags;if(!x)return[];if(Array.isArray(x))return x;try{const o=JSON.parse(x);return Array.isArray(o)?o:typeof o=="object"&&o!==null?Object.entries(o).map(([a,c])=>`${a}:${String(c)}`):[String(o)]}catch{return String(x).split(",").map(o=>o.trim()).filter(Boolean)}}function Es(s){switch(s){case"running":return e.jsxs($,{"code-path":"src/components/server/serverHelpers.tsx:31:9",variant:"outline",className:"border-emerald-500/30 text-emerald-400 bg-emerald-500/10",children:[e.jsx("div",{"code-path":"src/components/server/serverHelpers.tsx:32:11",className:"w-1.5 h-1.5 rounded-full bg-emerald-400 mr-1.5 animate-pulse"}),"运行中"]});case"stopped":return e.jsx($,{"code-path":"src/components/server/serverHelpers.tsx:38:9",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-muted)] bg-[var(--dg-bg-tertiary)]",children:"已停止"});case"maintenance":return e.jsxs($,{"code-path":"src/components/server/serverHelpers.tsx:44:9",variant:"outline",className:"border-amber-500/30 text-amber-400 bg-amber-500/10",children:[e.jsx("div",{"code-path":"src/components/server/serverHelpers.tsx:45:11",className:"w-1.5 h-1.5 rounded-full bg-amber-400 mr-1.5"}),"维护中"]});case"offline":return e.jsx($,{"code-path":"src/components/server/serverHelpers.tsx:51:9",variant:"outline",className:"border-red-500/30 text-red-400 bg-red-500/10",children:"离线"});default:return null}}function xr(s){return s>80?"bg-red-400":s>60?"bg-amber-400":"bg-emerald-400"}function _s({server:s,selected:x,onToggleSelect:o,onOpenTerminal:a,onOpenEdit:c,onOpenFiles:h,onDelete:g}){const{hasPermission:u}=gr(),m=Number(s.cpu_usage||0),T=Number(s.memory_usage||0),S=Er(s),k=s.memory?Math.round(s.memory/1024):0,n=s.tcp_established||0,y=s.tcp_time_wait||0;s.net_rx_bps,s.net_tx_bps;const E=s.disk_read_bps||0,M=s.disk_write_bps||0,C=f=>f>=1e6?(f/1e6).toFixed(1)+"MB/s":f>=1e3?(f/1e3).toFixed(1)+"KB/s":f.toFixed(0)+"B/s";return e.jsxs(Oe,{"code-path":"src/components/server/ServerTableRow.tsx:58:5",className:"border-[var(--dg-border)] hover:bg-[var(--dg-bg-tertiary)]/50",children:[e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:59:7",children:e.jsx(ge,{"code-path":"src/components/server/ServerTableRow.tsx:60:9",checked:x,onCheckedChange:()=>o(s.id),className:"border-[var(--dg-border)]"})}),e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:66:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:67:9",className:"flex items-center gap-2",children:[e.jsx(Le,{"code-path":"src/components/server/ServerTableRow.tsx:68:11",className:"h-4 w-4 text-[var(--dg-text-muted)]"}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:69:11",children:[e.jsx("p",{"code-path":"src/components/server/ServerTableRow.tsx:70:13",className:"font-medium text-[var(--dg-text-primary)]",children:s.hostname}),e.jsx("p",{"code-path":"src/components/server/ServerTableRow.tsx:71:13",className:"text-xs text-[var(--dg-text-muted)]",children:s.os})]})]})}),e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:75:7",children:e.jsx("code",{"code-path":"src/components/server/ServerTableRow.tsx:76:9",className:"text-sm text-[var(--dg-text-secondary)] bg-[var(--dg-bg-tertiary)] px-2 py-0.5 rounded",children:s.ip})}),e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:80:7",children:s.public_ip?e.jsx("code",{"code-path":"src/components/server/ServerTableRow.tsx:82:11",className:"text-sm text-[var(--dg-cyan)] bg-[var(--dg-cyan)]/10 px-2 py-0.5 rounded",children:s.public_ip}):e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:86:11",className:"text-sm text-[var(--dg-text-muted)]",children:"-"})}),e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:89:7",children:Es(s.status)}),e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:90:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:91:9",className:"text-sm text-[var(--dg-text-secondary)]",children:[e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:92:11",className:"text-[var(--dg-text-muted)]",children:[s.cpu,"核"]}),e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:93:11",className:"mx-1 text-[var(--dg-text-muted)] opacity-50",children:"/"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:94:11",className:"text-[var(--dg-text-muted)]",children:[k,"GB"]}),e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:95:11",className:"mx-1 text-[var(--dg-text-muted)] opacity-50",children:"/"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:96:11",className:"text-[var(--dg-text-muted)]",children:[s.disk,"GB"]})]})}),e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:99:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:100:9",className:"space-y-1",children:[e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:101:11",className:"flex items-center gap-2",children:[e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:102:13",className:"text-xs text-[var(--dg-text-muted)] w-8",children:"CPU"}),e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:103:13",className:"w-16 h-1.5 bg-[var(--dg-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:104:15",className:xe("h-full rounded-full",xr(m)),style:{width:`${m}%`}})}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:109:13",className:"text-xs text-[var(--dg-text-secondary)]",children:[m.toFixed(1),"%"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:111:11",className:"flex items-center gap-2",children:[e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:112:13",className:"text-xs text-[var(--dg-text-muted)] w-8",children:"内存"}),e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:113:13",className:"w-16 h-1.5 bg-[var(--dg-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:114:15",className:xe("h-full rounded-full",xr(T)),style:{width:`${T}%`}})}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:119:13",className:"text-xs text-[var(--dg-text-secondary)]",children:[T.toFixed(1),"%"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:121:11",className:"flex items-center gap-1 text-xs text-[var(--dg-text-muted)] pt-0.5",children:[e.jsx(Hr,{"code-path":"src/components/server/ServerTableRow.tsx:122:13",className:"h-3 w-3"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:123:13",children:[n,"连接"]}),y>0&&e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:124:27",className:"text-[var(--dg-orange)]",children:["(",y,"TW)"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:126:11",className:"flex items-center gap-1 text-xs text-[var(--dg-text-muted)]",children:[e.jsx(ts,{"code-path":"src/components/server/ServerTableRow.tsx:127:13",className:"h-3 w-3"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:128:13",children:["读",C(E),"/写",C(M)]})]})]})}),e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:132:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:133:9",className:"flex flex-wrap gap-1",children:[S.slice(0,3).map(f=>e.jsx($,{"code-path":"src/components/server/ServerTableRow.tsx:135:13",variant:"outline",className:"text-xs border-[var(--dg-border)] text-[var(--dg-text-secondary)] bg-[var(--dg-bg-tertiary)]/50",children:f},f)),S.length>3&&e.jsxs($,{"code-path":"src/components/server/ServerTableRow.tsx:144:13",variant:"outline",className:"text-xs border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:["+",S.length-3]})]})}),e.jsx(se,{"code-path":"src/components/server/ServerTableRow.tsx:150:7",className:"text-right",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:151:9",className:"flex items-center justify-end gap-1",children:[u("server:webshell")&&e.jsx(N,{"code-path":"src/components/server/ServerTableRow.tsx:153:11",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-[var(--dg-blue)]",onClick:()=>a(s),title:"终端登录",children:e.jsx(nr,{"code-path":"src/components/server/ServerTableRow.tsx:154:13",className:"h-4 w-4"})}),(u("server:update")||u("server:delete")||u("server:webshell"))&&e.jsxs(ur,{"code-path":"src/components/server/ServerTableRow.tsx:158:11",children:[e.jsx(br,{"code-path":"src/components/server/ServerTableRow.tsx:159:13",asChild:!0,children:e.jsx(N,{"code-path":"src/components/server/ServerTableRow.tsx:160:15",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)]",children:e.jsx(os,{"code-path":"src/components/server/ServerTableRow.tsx:161:17",className:"h-4 w-4"})})}),e.jsxs(Sr,{"code-path":"src/components/server/ServerTableRow.tsx:164:13",align:"end",className:"w-48 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(jr,{"code-path":"src/components/server/ServerTableRow.tsx:165:15",className:"text-[var(--dg-text-secondary)]",children:"操作"}),e.jsx(We,{"code-path":"src/components/server/ServerTableRow.tsx:166:15",className:"bg-[var(--dg-border)]"}),u("server:update")&&e.jsxs(he,{"code-path":"src/components/server/ServerTableRow.tsx:168:15",className:"text-[var(--dg-text-secondary)] focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)] cursor-pointer",onClick:()=>c(s),children:[e.jsx(cs,{"code-path":"src/components/server/ServerTableRow.tsx:172:17",className:"h-4 w-4 mr-2"}),"编辑"]}),u("server:webshell")&&e.jsxs(he,{"code-path":"src/components/server/ServerTableRow.tsx:177:15",className:"text-[var(--dg-text-secondary)] focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)] cursor-pointer",onClick:()=>a(s),children:[e.jsx(nr,{"code-path":"src/components/server/ServerTableRow.tsx:181:17",className:"h-4 w-4 mr-2"}),"终端"]}),u("server:update")&&e.jsxs(he,{"code-path":"src/components/server/ServerTableRow.tsx:186:15",className:"text-[var(--dg-text-secondary)] focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)] cursor-pointer",onClick:()=>h?.(s),children:[e.jsx(wr,{"code-path":"src/components/server/ServerTableRow.tsx:190:17",className:"h-4 w-4 mr-2"}),"文件"]}),u("server:delete")&&e.jsxs(e.Fragment,{children:[e.jsx(We,{"code-path":"src/components/server/ServerTableRow.tsx:196:15",className:"bg-[var(--dg-border)]"}),e.jsxs(he,{"code-path":"src/components/server/ServerTableRow.tsx:197:15",className:"text-red-400 focus:bg-[var(--dg-bg-hover)] focus:text-red-400 cursor-pointer",onClick:()=>g(s.id),children:[e.jsx(er,{"code-path":"src/components/server/ServerTableRow.tsx:201:17",className:"h-4 w-4 mr-2"}),"删除"]})]})]})]})]})})]})}function lt(){const s=Ur(),{hasPermission:x}=gr(),[o,a]=t.useState([]),[c,h]=t.useState(!0),[g,u]=t.useState([]),[m,T]=t.useState(""),[S,k]=t.useState("all"),[n,y]=t.useState(!1),[E,M]=t.useState(!1),[C,f]=t.useState(!1),[v,I]=t.useState(null),[i,O]=t.useState(mr),[G,j]=t.useState(!1),[U,p]=t.useState(!1),[b,R]=t.useState(!1),[w,L]=t.useState(null),[ee,re]=t.useState(!1),[pe,l]=t.useState(null),[B,K]=t.useState(1),[D,P]=t.useState(10),[X,q]=t.useState(0),A=d=>{L({id:d.id,name:d.hostname,ip:d.ip,hasAuth:d.has_auth??!0}),R(!0)},me=d=>{l({id:d.id,name:d.hostname}),re(!0)},z=async(d,Y)=>{try{h(!0);const ne=d??m,Z=Y??S,Q={page:B,page_size:D};ne&&(Q.keyword=ne),Z&&Z!=="all"&&(Q.status=Z);const ce=await te.getServers(Q);a(ce?.list||[]),q(ce?.total||0)}catch(ne){console.error("加载服务器列表失败:",ne),a([])}finally{h(!1)}},ie=d=>{T(d),K(1)},Ue=d=>{k(d),K(1)};t.useEffect(()=>{z()},[B,D]);const oe=t.useRef(null),be=t.useRef(null);t.useEffect(()=>{const d=vr.getState().token;if(!d)return;const ne=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws/metrics?token=${d}`,Z=()=>{if(oe.current?.readyState===WebSocket.OPEN)return;const Q=new WebSocket(ne);oe.current=Q,Q.onopen=()=>{},Q.onmessage=ce=>{try{const F=JSON.parse(ce.data);F.type==="metrics_update"&&a(je=>je.map(Ne=>Ne.hostname===F.hostname?{...Ne,cpu_usage:F.cpu_usage,memory_usage:F.memory_usage,disk_usage:F.disk_usage,status:F.status,tcp_established:F.tcp_established,tcp_time_wait:F.tcp_time_wait,net_rx_bps:F.net_rx_bps,net_tx_bps:F.net_tx_bps,disk_read_bps:F.disk_read_bps,disk_write_bps:F.disk_write_bps}:Ne))}catch{}},Q.onclose=()=>{oe.current=null,be.current=setTimeout(Z,3e3)},Q.onerror=ce=>{console.error("[MetricsWS] 连接错误:",ce),Q.close()}};return Z(),()=>{be.current&&clearTimeout(be.current),oe.current&&(oe.current.onclose=null,oe.current.close(),oe.current=null)}},[]);const Be=()=>{g.length===o.length?u([]):u(o.map(d=>d.id))},Se=d=>{g.includes(d)?u(g.filter(Y=>Y!==d)):u([...g,d])},De=async d=>{const Y=o.find(Z=>String(Z.id)===String(d));if(await s({title:"删除服务器",description:`确定删除「${Y?.hostname||d}」吗?此操作不可撤销。`,confirmText:"删除",variant:"destructive"}))try{await te.deleteServer(d),J.success("服务器已删除"),z()}catch(Z){console.error("删除服务器失败:",Z),J.error("删除失败")}},Pe=async()=>{if(!(g.length===0||!await s({title:"批量删除服务器",description:`确定删除选中的 ${g.length} 台服务器吗?此操作不可撤销。`,confirmText:"批量删除",variant:"destructive"})))try{await te.batchDelete(g.map(Y=>Number(Y))),J.success(`已删除 ${g.length} 台服务器`),u([]),z()}catch(Y){console.error("批量删除失败:",Y),J.error("批量删除失败")}},r=()=>{I(null),O(mr),p(!1),f(!0)},_=d=>{I(d.id),O({hostname:d.hostname||"",ip:d.ip||"",public_ip:d.public_ip||"",port:String(d.port||22),username:d.username||"root",auth_type:d.auth_type||"password",password:"",ssh_key:"",credential_id:null,os:d.os||"",cpu:String(d.cpu||""),memory:d.memory?String(Math.round(d.memory/1024)):"",disk:String(d.disk||""),status:d.status||"running",tags:d.tags||"",description:d.description||""}),p(!1),f(!0)},ae=async()=>{if(!(!i.hostname||!i.ip))try{j(!0);const d={hostname:i.hostname,ip:i.ip,public_ip:i.public_ip||void 0,port:Number(i.port)||22,username:i.username||"root",auth_type:i.auth_type||"password",os:i.os,cpu:Number(i.cpu)||0,memory:(Number(i.memory)||0)*1024,disk:Number(i.disk)||0,status:i.status,tags:i.tags||void 0,description:i.description||void 0};i.credential_id?d.credential_id=i.credential_id:(i.password&&(d.password=i.password),i.ssh_key&&(d.ssh_key=i.ssh_key)),v?await te.updateServer(v,d):await te.createServer(d),J.success(v?"服务器已更新":"服务器已创建"),f(!1),z()}catch(d){console.error("保存服务器失败:",d),J.error("保存失败,请重试")}finally{j(!1)}},_r=()=>{if(o.length===0){J.error("没有可导出的数据");return}const d=["主机名","IP地址","公网IP","端口","操作系统","CPU(核)","内存(GB)","磁盘(GB)","状态","标签"],Y=o.map(F=>{const je=F.memory?Math.round(F.memory/1024):0,Ne=Er(F).join(";");return[F.hostname||"",F.ip||"",F.public_ip||"",F.port||22,F.os||"",F.cpu||0,je,F.disk||0,F.status||"",Ne]}),ne=[d,...Y].map(F=>F.map(je=>`"${String(je).replace(/"/g,'""')}"`).join(",")).join(`
|
||
`),Z=new Blob(["\uFEFF"+ne],{type:"text/csv;charset=utf-8;"}),Q=URL.createObjectURL(Z),ce=document.createElement("a");ce.href=Q,ce.download=`servers_${new Date().toISOString().slice(0,10)}.csv`,ce.click(),URL.revokeObjectURL(Q),J.success(`已导出 ${o.length} 台服务器`)},cr=8;return e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:373:5",className:"space-y-6",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:375:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:376:9",children:[e.jsx("h1",{"code-path":"src/components/server/ServerManager.tsx:377:11",className:"text-2xl font-bold text-[var(--dg-text-primary)]",children:"服务器管理"}),e.jsx("p",{"code-path":"src/components/server/ServerManager.tsx:378:11",className:"text-sm text-[var(--dg-text-muted)] mt-1",children:"管理云平台服务器资产"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:380:9",className:"flex items-center gap-2",children:[e.jsxs(N,{"code-path":"src/components/server/ServerManager.tsx:381:11",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",onClick:()=>z(),children:[e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:386:13",className:xe("h-4 w-4 mr-2",c&&"animate-spin")}),"刷新"]}),e.jsxs(N,{"code-path":"src/components/server/ServerManager.tsx:389:11",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",onClick:_r,children:[e.jsx(Ze,{"code-path":"src/components/server/ServerManager.tsx:394:13",className:"h-4 w-4 mr-2"}),"导出"]}),x("server:create")&&e.jsxs(ur,{"code-path":"src/components/server/ServerManager.tsx:398:11",children:[e.jsx(br,{"code-path":"src/components/server/ServerManager.tsx:399:13",asChild:!0,children:e.jsxs(N,{"code-path":"src/components/server/ServerManager.tsx:400:15",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",children:[e.jsx(Ye,{"code-path":"src/components/server/ServerManager.tsx:401:17",className:"h-4 w-4 mr-2"}),"批量导入"]})}),e.jsxs(Sr,{"code-path":"src/components/server/ServerManager.tsx:405:13",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:[e.jsx(jr,{"code-path":"src/components/server/ServerManager.tsx:406:15",children:"选择导入方式"}),e.jsx(We,{"code-path":"src/components/server/ServerManager.tsx:407:15",className:"bg-[var(--dg-border)]"}),e.jsxs(he,{"code-path":"src/components/server/ServerManager.tsx:408:15",className:"hover:bg-[var(--dg-bg-hover)] cursor-pointer focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)]",onClick:()=>y(!0),children:[e.jsx(ir,{"code-path":"src/components/server/ServerManager.tsx:412:17",className:"h-4 w-4 mr-2 text-[var(--dg-blue)]"}),"云主机导入",e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:414:17",className:"ml-2 text-xs text-[var(--dg-text-muted)]",children:"从云平台同步"})]}),e.jsxs(he,{"code-path":"src/components/server/ServerManager.tsx:416:15",className:"hover:bg-[var(--dg-bg-hover)] cursor-pointer focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)]",onClick:()=>M(!0),children:[e.jsx(Ge,{"code-path":"src/components/server/ServerManager.tsx:420:17",className:"h-4 w-4 mr-2 text-emerald-400"}),"CSV导入",e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:422:17",className:"ml-2 text-xs text-[var(--dg-text-muted)]",children:"hostname + IP 即可"})]})]})]}),x("server:create")&&e.jsxs(N,{"code-path":"src/components/server/ServerManager.tsx:428:13",className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",onClick:r,children:[e.jsx(as,{"code-path":"src/components/server/ServerManager.tsx:432:15",className:"h-4 w-4 mr-2"}),"添加服务器"]})]})]}),e.jsx(ms,{"code-path":"src/components/server/ServerManager.tsx:440:7",servers:o}),e.jsx(ke,{"code-path":"src/components/server/ServerManager.tsx:443:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsxs(Ee,{"code-path":"src/components/server/ServerManager.tsx:444:9",className:"p-0",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:446:11",className:"flex items-center justify-between flex-wrap gap-4 p-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:447:13",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:448:15",className:"relative w-64",children:[e.jsx(Nr,{"code-path":"src/components/server/ServerManager.tsx:449:17",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[var(--dg-text-muted)]"}),e.jsx(W,{"code-path":"src/components/server/ServerManager.tsx:450:17",placeholder:"搜索主机名或IP...",value:m,onChange:d=>ie(d.target.value),className:"pl-9 h-9 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)]"})]}),e.jsxs(fe,{"code-path":"src/components/server/ServerManager.tsx:457:15",value:S,onValueChange:Ue,children:[e.jsx(we,{"code-path":"src/components/server/ServerManager.tsx:458:17",className:"w-32 h-9 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(Ce,{"code-path":"src/components/server/ServerManager.tsx:459:19",placeholder:"状态"})}),e.jsxs(Ie,{"code-path":"src/components/server/ServerManager.tsx:461:17",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:462:19",value:"all",children:"全部状态"}),e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:463:19",value:"running",children:"运行中"}),e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:464:19",value:"stopped",children:"已停止"}),e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:465:19",value:"maintenance",children:"维护中"}),e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:466:19",value:"offline",children:"离线"})]})]})]}),g.length>0&&e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:471:15",className:"flex items-center gap-2",children:[e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:472:17",className:"text-sm text-[var(--dg-text-secondary)]",children:["已选择 ",g.length," 项"]}),x("server:delete")&&e.jsxs(N,{"code-path":"src/components/server/ServerManager.tsx:474:17",variant:"outline",size:"sm",className:"border-red-500/30 text-red-400 hover:bg-red-500/10",onClick:Pe,children:[e.jsx(er,{"code-path":"src/components/server/ServerManager.tsx:480:19",className:"h-4 w-4 mr-2"}),"批量删除"]})]})]}),e.jsx("div",{"code-path":"src/components/server/ServerManager.tsx:488:11",className:"border-t border-[var(--dg-border)]",children:e.jsxs(Dr,{"code-path":"src/components/server/ServerManager.tsx:489:13",children:[e.jsx(Vr,{"code-path":"src/components/server/ServerManager.tsx:490:15",children:e.jsxs(Oe,{"code-path":"src/components/server/ServerManager.tsx:491:17",className:"border-[var(--dg-border)] hover:bg-transparent",children:[e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:492:19",className:"w-12",children:e.jsx(ge,{"code-path":"src/components/server/ServerManager.tsx:493:21",checked:g.length===o.length&&o.length>0,onCheckedChange:Be,className:"border-[var(--dg-border)]"})}),e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:501:19",className:"text-[var(--dg-text-secondary)]",children:"主机名"}),e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:502:19",className:"text-[var(--dg-text-secondary)]",children:"IP地址"}),e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:503:19",className:"text-[var(--dg-text-secondary)]",children:"公网IP"}),e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:504:19",className:"text-[var(--dg-text-secondary)]",children:"状态"}),e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:505:19",className:"text-[var(--dg-text-secondary)]",children:"配置"}),e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:506:19",className:"text-[var(--dg-text-secondary)]",children:"使用率"}),e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:507:19",className:"text-[var(--dg-text-secondary)]",children:"标签"}),e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:508:19",className:"text-[var(--dg-text-secondary)] text-right",children:"操作"})]})}),e.jsx(Wr,{"code-path":"src/components/server/ServerManager.tsx:511:15",children:c?e.jsx(Oe,{"code-path":"src/components/server/ServerManager.tsx:513:19",className:"border-[var(--dg-border)]",children:e.jsxs(se,{"code-path":"src/components/server/ServerManager.tsx:514:21",colSpan:cr,className:"text-center text-[var(--dg-text-muted)] py-12",children:[e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:515:23",className:"h-5 w-5 animate-spin mx-auto mb-2"}),"加载中..."]})}):o.length===0?e.jsx(Oe,{"code-path":"src/components/server/ServerManager.tsx:520:19",className:"border-[var(--dg-border)]",children:e.jsx(se,{"code-path":"src/components/server/ServerManager.tsx:521:21",colSpan:cr,className:"text-center text-[var(--dg-text-muted)] py-12",children:"暂无服务器数据"})}):o.map(d=>e.jsx(_s,{"code-path":"src/components/server/ServerManager.tsx:527:21",server:d,selected:g.includes(d.id),onToggleSelect:Se,onOpenTerminal:A,onOpenFiles:me,onOpenEdit:_,onDelete:De},d.id))})]})}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:544:11",className:"flex items-center justify-between px-4 py-3 border-t border-[var(--dg-border)]",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:545:13",className:"flex items-center gap-2 text-sm text-[var(--dg-text-muted)]",children:[e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:546:15",children:"每页"}),e.jsxs(fe,{"code-path":"src/components/server/ServerManager.tsx:547:15",value:String(D),onValueChange:d=>{P(Number(d)),K(1)},children:[e.jsx(we,{"code-path":"src/components/server/ServerManager.tsx:548:17",className:"w-16 h-8 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] text-xs",children:e.jsx(Ce,{"code-path":"src/components/server/ServerManager.tsx:549:19"})}),e.jsxs(Ie,{"code-path":"src/components/server/ServerManager.tsx:551:17",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:552:19",value:"10",children:"10"}),e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:553:19",value:"20",children:"20"}),e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:554:19",value:"30",children:"30"})]})]}),e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:557:15",children:"条"}),e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:558:15",className:"ml-4",children:["共 ",X," 条"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:560:13",className:"flex items-center gap-1",children:[e.jsx(N,{"code-path":"src/components/server/ServerManager.tsx:561:15",variant:"outline",size:"sm",className:"h-8 border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",disabled:B<=1,onClick:()=>K(d=>Math.max(1,d-1)),children:e.jsx(rr,{"code-path":"src/components/server/ServerManager.tsx:568:17",className:"h-4 w-4"})}),e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:570:15",className:"text-sm text-[var(--dg-text-secondary)] px-2",children:[B," / ",Math.max(1,Math.ceil(X/D))]}),e.jsx(N,{"code-path":"src/components/server/ServerManager.tsx:573:15",variant:"outline",size:"sm",className:"h-8 border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",disabled:B>=Math.ceil(X/D),onClick:()=>K(d=>d+1),children:e.jsx(Fe,{"code-path":"src/components/server/ServerManager.tsx:580:17",className:"h-4 w-4"})})]})]})]})}),e.jsx(ks,{"code-path":"src/components/server/ServerManager.tsx:588:7",open:C,onOpenChange:f,editingId:v,formData:i,setFormData:O,detailsOpen:U,setDetailsOpen:p,onSave:ae,formSaving:G}),e.jsx(is,{"code-path":"src/components/server/ServerManager.tsx:601:7",open:n,onClose:()=>{y(!1),z()}}),e.jsx(js,{"code-path":"src/components/server/ServerManager.tsx:608:7",open:E,onClose:()=>{M(!1),z()}}),e.jsx(vs,{"code-path":"src/components/server/ServerManager.tsx:617:7",open:b,onOpenChange:R,serverId:w?.id??null,serverName:w?.name??"",serverIp:w?.ip??"",hasAuth:w?.hasAuth??!0}),e.jsx(gs,{"code-path":"src/components/server/ServerManager.tsx:627:7",open:ee,onOpenChange:re,serverId:pe?.id??null,serverName:pe?.name??""})]})}export{lt as ServerManager};
|