Files
aiops/backend/static/assets/ServerManager-JxMW-hQt.js
T
attacker 77c234b060 feat(audit): F1+F2 告警静默规则标记完成 + 审计日志CSV导出实现
F1 告警静默规则 [done]:
- 后端 alert_silence.go: CRUD + Toggle (onetime/daily/weekly 三模式)
- 告警引擎 isSilenced 集成 (alert_engine.go)
- 前端 SilenceRuleTab + SilenceDialog
- 路由 /alerts/silences 已注册

F2 审计日志导出 [done]:
- 重写 ExportAuditLogs: 真正的 CSV 导出 (encoding/csv + UTF-8 BOM)
- 支持 module/action/username/startTime/endTime 筛选
- 导出限制 10000 条防溢出,自动记录审计日志
- JSON 格式向后兼容 (format=json)
- 前端 exportLogs 传递查询参数

同时包含累积的前期工作:
- 目录重构 internal/ -> controller/model/router (v0.55-v0.57)
- 后端分层架构 dto/repository/service/utils
- 审计模块全功能 (终端审计/操作审计/登录日志)
- asciicast v2 录制格式
- SFTP 文件浏览器
- StatStrip 紧凑统计条
- 在线会话自动刷新
- LiveMonitor WebSocket 诊断修复

验证: go build ✅ | npm run build ✅ | Docker 部署 ✅ | 10 回归端点 ✅ | CSV 导出 ✅ | 静默 CRUD ✅
2026-06-25 20:16:30 +08:00

12 lines
110 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-CHhHmizP.js","./index-DfyorCky.js","./index-1EStmE-w.css","./dashboard-BjQPIG2G.js","./server-CjDPBaTN.js","./kubernetes-J8O09fK7.js","./deploy-B3Sg3N1U.js","./automation-mtL167W_.js","./monitor-BAaBXIsC.js","./agent-DqqIRCQX.js","./cloud-Dzoer-2i.js","./system-BgtMMm0X.js","./ai-BTgmlP5Q.js"])))=>i.map(i=>d[i]);
import{g as He,j as e,q as Ee,A as Fr,r as t,aT as kr,D as Te,b as Re,c as Ue,d as Me,e as Be,s as xr,P as $e,M as Ge,a3 as ar,a9 as ge,n as _e,B as g,S as ir,I as H,$ as Oe,f as Je,W as vr,X as Se,a5 as fe,t as hr,L as Le,af as Er,ac as _r,ak as Tr,ae as Qe,ah as Rr,ad as Mr,ag as Br,aw as Pr,h as Ar,a4 as $r,N as Or,H as cr,aK as gr,aL as ur,aM as Sr,aN as br,aO as Ke,aP as we,a as zr}from"./index-DfyorCky.js";import{C as me,a as xe}from"./card-C55cvSHg.js";import{C as ue}from"./checkbox-CH0bpj6b.js";import{b as ze,e as re,T as Lr,a as Hr,c as le,d as Ur}from"./table-5sHV4Akp.js";import{S as Ce,a as Ie,b as Fe,c as ke,d as O}from"./select-D5qUzdAs.js";import{s as se,r as Dr}from"./server-CjDPBaTN.js";import{R as Vr}from"./rotate-cw-5qcj_h_q.js";import{t as V}from"./index-a3ybMjbR.js";import{B as A}from"./badge-xNW8x0G1.js";import{c as ye}from"./cloud-Dzoer-2i.js";import{R as pe}from"./refresh-cw-DUB_tAG-.js";import{x as Wr,a as Gr}from"./xterm-DSqgeKvr.js";import{c as jr,s as Kr}from"./deploy-B3Sg3N1U.js";import{M as qr,a as Jr}from"./minimize-2-CiCQYRfn.js";import{F as Nr}from"./folder-open-IMBifk-r.js";import{U as Xe}from"./upload-Ba6rlaGS.js";import{a as nr,F as Qr}from"./folder-DoMwqvzv.js";import{A as Xr}from"./arrow-left-BDgGyrD0.js";import{D as Ye}from"./download-DoZfYs2h.js";import{T as Ze}from"./trash-2-Dx32pOzT.js";import{L}from"./label-BK0h2apY.js";import{T as dr}from"./textarea-NXY8u32k.js";import{S as Yr}from"./save-DoGGjfwC.js";import{H as Zr}from"./hard-drive-BbPmnARR.js";import{E as es}from"./ellipsis-DU5enAwm.js";import{S as rs}from"./square-pen-BxUFAe0F.js";import{P as ss}from"./plus-CUG-9kpu.js";import"./index-CWVNW_qu.js";const ts=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],er=He("chevron-left",ts);const os=[["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"}]],qe=He("file-spreadsheet",os);const as=[["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"}]],cs=He("folder-plus",as);const ns=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],ds=He("power",ns);function ls({servers:s}){const m=s.filter(o=>o.status==="running").length,a=s.filter(o=>o.status==="maintenance").length,c=s.filter(o=>o.status==="stopped").length;return e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:15:5",className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[e.jsx(me,{"code-path":"src/components/server/ServerStatsCards.tsx:16:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xe,{"code-path":"src/components/server/ServerStatsCards.tsx:17:9",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:18:11",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:19:13",children:[e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:20:15",className:"text-sm text-[var(--dg-text-muted)]",children:"服务器总数"}),e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:21:15",className:"text-2xl font-bold text-[var(--dg-text-primary)]",children:s.length})]}),e.jsx("div",{"code-path":"src/components/server/ServerStatsCards.tsx:23:13",className:"p-3 rounded-lg bg-[var(--dg-blue)]/10 text-[var(--dg-blue)]",children:e.jsx(Ee,{"code-path":"src/components/server/ServerStatsCards.tsx:24:15",className:"h-5 w-5"})})]})})}),e.jsx(me,{"code-path":"src/components/server/ServerStatsCards.tsx:29:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xe,{"code-path":"src/components/server/ServerStatsCards.tsx:30:9",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:31:11",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:32:13",children:[e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:33:15",className:"text-sm text-[var(--dg-text-muted)]",children:"运行中"}),e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:34:15",className:"text-2xl font-bold text-emerald-400",children:m})]}),e.jsx("div",{"code-path":"src/components/server/ServerStatsCards.tsx:36:13",className:"p-3 rounded-lg bg-emerald-500/10 text-emerald-400",children:e.jsx(Fr,{"code-path":"src/components/server/ServerStatsCards.tsx:37:15",className:"h-5 w-5"})})]})})}),e.jsx(me,{"code-path":"src/components/server/ServerStatsCards.tsx:42:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xe,{"code-path":"src/components/server/ServerStatsCards.tsx:43:9",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:44:11",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:45:13",children:[e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:46:15",className:"text-sm text-[var(--dg-text-muted)]",children:"维护中"}),e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:47:15",className:"text-2xl font-bold text-amber-400",children:a})]}),e.jsx("div",{"code-path":"src/components/server/ServerStatsCards.tsx:49:13",className:"p-3 rounded-lg bg-amber-500/10 text-amber-400",children:e.jsx(Vr,{"code-path":"src/components/server/ServerStatsCards.tsx:50:15",className:"h-5 w-5"})})]})})}),e.jsx(me,{"code-path":"src/components/server/ServerStatsCards.tsx:55:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xe,{"code-path":"src/components/server/ServerStatsCards.tsx:56:9",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:57:11",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:58:13",children:[e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:59:15",className:"text-sm text-[var(--dg-text-muted)]",children:"已停止"}),e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:60:15",className:"text-2xl font-bold text-[var(--dg-text-muted)]",children:c})]}),e.jsx("div",{"code-path":"src/components/server/ServerStatsCards.tsx:62:13",className:"p-3 rounded-lg bg-[var(--dg-bg-tertiary)] text-[var(--dg-text-secondary)]",children:e.jsx(ds,{"code-path":"src/components/server/ServerStatsCards.tsx:63:15",className:"h-5 w-5"})})]})})})]})}const ps=[{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 ms({open:s,onClose:m}){const[a,c]=t.useState([]),[o,i]=t.useState(1),[b,j]=t.useState(""),[x,w]=t.useState(null),[N,I]=t.useState([]),[n,y]=t.useState([]),[F,T]=t.useState(""),[u,f]=t.useState(!1),[h,v]=t.useState([]),[k,z]=t.useState([]),[$,d]=t.useState(!1),[S,_]=t.useState([]),[J,W]=t.useState(!1),[B,U]=t.useState(null),[Q,Z]=t.useState("22"),[ie,l]=t.useState([]),[R,D]=t.useState(""),ee=async()=>{try{const r=await ye.getAccounts();c(r?.list||[])}catch(r){console.error("加载云账号失败:",r)}};t.useEffect(()=>{s&&(ee(),kr(async()=>{const{credentialApi:r}=await import("./index-CHhHmizP.js");return{credentialApi:r}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12]),import.meta.url).then(({credentialApi:r})=>{r.list().then(E=>l(E?.list||[])).catch(()=>l([]))}))},[s]);const M=a.filter(r=>r.provider===b&&r.status==="active"),te=t.useCallback(async r=>{try{return(await ye.getAccountRegions(r))?.list||[]}catch{return[]}},[]),G=t.useCallback(async r=>{f(!0);try{await ye.syncRegions(r);const E=await te(r);I(E)}catch(E){throw console.error("同步区域失败:",E),E}finally{f(!1)}},[te]),P=t.useCallback(async()=>{if(!x)return;const r=await te(x.id);if(I(r),r.length===0)try{await G(x.id)}catch{}},[x,te,G]),K=t.useCallback(async()=>{if(!(!x||n.length===0)){d(!0),_([]),v([]),z([]);try{const r=await ye.discoverInstances(x.id,n);v(r?.list||[]),_(r?.errors||[])}catch(r){console.error("发现主机失败:",r),_([r?.message||"发现主机失败"])}finally{d(!1)}}},[x,n]),oe=async()=>{if(!(!x||k.length===0)){W(!0);try{const r=h.filter(ne=>k.includes(ne.instance_id)),E=await ye.importInstances(x.id,r,{default_port:Number(Q)||22,credential_id:R?Number(R):void 0});U(E||{imported:0,skipped:0})}catch(r){console.error("导入失败:",r)}finally{W(!1)}}},ve=()=>{o===2&&x&&o<4?(i(3),P()):o<4&&i(o+1)},ce=()=>{o>1&&i(o-1)},he=()=>{n.length===N.length&&N.length>0?y([]):y(N.map(r=>r.code))},Ve=r=>{z(E=>E.includes(r)?E.filter(ne=>ne!==r):[...E,r])},Pe=()=>{k.length===h.length&&h.length>0?z([]):z(h.map(r=>r.instance_id))},be=()=>{m(),i(1),j(""),w(null),y([]),I([]),v([]),z([]),T(""),_([]),U(null),Z("22"),D("")},We=N.filter(r=>!F||r.name?.toLowerCase().includes(F.toLowerCase())||r.code?.toLowerCase().includes(F.toLowerCase())),Ae=[{id:1,title:"公有云",icon:xr},{id:2,title:"访问凭据",icon:$e},{id:3,title:"选择区域",icon:Ge},{id:4,title:"导入确认",icon:ar}];return e.jsx(Te,{"code-path":"src/components/server/CloudServerImport.tsx:232:5",open:s,onOpenChange:be,children:e.jsxs(Re,{"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(Ue,{"code-path":"src/components/server/CloudServerImport.tsx:234:9",children:[e.jsx(Me,{"code-path":"src/components/server/CloudServerImport.tsx:235:11",className:"text-xl",children:"导入云主机"}),e.jsx(Be,{"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:Ae.map((r,E)=>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 ${o===r.id?"bg-blue-600 text-white":o>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}),o>r.id&&e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:252:33",className:"h-3 w-3 ml-1"})]}),E<Ae.length-1&&e.jsx(_e,{"code-path":"src/components/server/CloudServerImport.tsx:255:17",className:"h-4 w-4 text-[var(--dg-text-muted)] mx-1"})]},r.id))}),o===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:ps.map(r=>e.jsx(me,{"code-path":"src/components/server/CloudServerImport.tsx:267:17",className:`cursor-pointer transition-all ${b===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:()=>j(r.id),children:e.jsxs(xe,{"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))})]}),o===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)"}),M.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:M.map(r=>e.jsx(me,{"code-path":"src/components/server/CloudServerImport.tsx:295:19",className:`cursor-pointer transition-all ${x?.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:()=>w(r),children:e.jsxs(xe,{"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($e,{"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(A,{"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($e,{"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:"该云平台暂无有效的访问凭据"})]})]}),o===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:["请选择要同步的区域",N.length>0&&e.jsxs("span",{"code-path":"src/components/server/CloudServerImport.tsx:340:19",className:"ml-2 text-[var(--dg-text-muted)]",children:["(共 ",N.length," 个区域,已选 ",n.length," 个)"]})]}),e.jsxs(g,{"code-path":"src/components/server/CloudServerImport.tsx:343:15",variant:"outline",size:"sm",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",onClick:()=>x&&G(x.id),disabled:u,children:[e.jsx(pe,{"code-path":"src/components/server/CloudServerImport.tsx:350:17",className:`h-3 w-3 mr-1 ${u?"animate-spin":""}`}),u?"同步中...":"刷新区域"]})]}),u?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:356:15",className:"text-center py-12",children:[e.jsx(pe,{"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:"正在从云平台同步区域列表..."})]}):N.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(Ge,{"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(g,{"code-path":"src/components/server/CloudServerImport.tsx:364:17",variant:"outline",size:"sm",className:"mt-3 border-[var(--dg-border)] text-blue-400",onClick:()=>x&&G(x.id),children:[e.jsx(pe,{"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(ir,{"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(H,{"code-path":"src/components/server/CloudServerImport.tsx:380:21",placeholder:"搜索区域名称或编码...",value:F,onChange:r=>T(r.target.value),className:"pl-9 bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]"})]}),e.jsx(g,{"code-path":"src/components/server/CloudServerImport.tsx:387:19",variant:"outline",size:"sm",onClick:he,className:"border-[var(--dg-border)]",children:n.length===N.length&&N.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(ue,{"code-path":"src/components/server/CloudServerImport.tsx:398:27",checked:n.length===N.length&&N.length>0,onCheckedChange:he})}),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:We.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(E=>E.includes(r.code)?E.filter(ne=>ne!==r.code):[...E,r.code])},children:[e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:421:27",className:"px-3 py-2",children:e.jsx(ue,{"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))})]})})]})]}),o===4&&e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:439:11",className:"space-y-4",children:B?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(A,{"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:["成功导入 ",B.imported," 台"]}),B.skipped>0&&e.jsxs(A,{"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:["跳过 ",B.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," 个区域",h.length>0&&e.jsxs("span",{"code-path":"src/components/server/CloudServerImport.tsx:462:23",className:"ml-2",children:["· 发现 ",h.length," 台主机"]})]}),e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:465:19",className:"flex items-center gap-2",children:[h.length>0&&e.jsxs(e.Fragment,{children:[e.jsx(g,{"code-path":"src/components/server/CloudServerImport.tsx:468:25",variant:"outline",size:"sm",onClick:Pe,className:"border-[var(--dg-border)]",children:k.length===h.length&&h.length>0?"取消全选":"全选"}),e.jsxs(A,{"code-path":"src/components/server/CloudServerImport.tsx:471:25",className:"bg-blue-500/20 text-blue-400 border-0",children:["已选 ",k.length," 台"]})]}),e.jsxs(g,{"code-path":"src/components/server/CloudServerImport.tsx:476:21",variant:"outline",size:"sm",onClick:K,disabled:$||n.length===0,className:"border-[var(--dg-border)] text-blue-400",children:[e.jsx(pe,{"code-path":"src/components/server/CloudServerImport.tsx:483:23",className:`h-3 w-3 mr-1 ${$?"animate-spin":""}`}),$?"发现中...":h.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 E=N.find(ne=>ne.code===r);return e.jsxs(A,{"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(Ge,{"code-path":"src/components/server/CloudServerImport.tsx:495:25",className:"h-3 w-3 mr-1"}),E?.name||r]},r)})}),S.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(Oe,{"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:"部分区域发现失败:"}),S.map((r,E)=>e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:509:25",className:"text-xs mt-1 opacity-80",children:r},E))]})]}),$?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:517:19",className:"text-center py-12",children:[e.jsx(pe,{"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:"正在逐区域查询,可能需要数秒"})]}):h.length===0&&!$?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(Ee,{"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(ue,{"code-path":"src/components/server/CloudServerImport.tsx:533:29",checked:k.length===h.length&&h.length>0,onCheckedChange:Pe})}),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:h.map(r=>e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:544:27",className:`cursor-pointer hover:bg-[var(--dg-bg-hover)] ${k.includes(r.instance_id)?"bg-blue-500/10":""}`,onClick:()=>Ve(r.instance_id),children:[e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:549:29",className:"px-3 py-2",children:e.jsx(ue,{"code-path":"src/components/server/CloudServerImport.tsx:550:31",checked:k.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))})]})}),h.length>0&&k.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(H,{"code-path":"src/components/server/CloudServerImport.tsx:571:23",type:"number",placeholder:"22",value:Q,onChange:r=>Z(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:R,onChange:r=>D(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:"不使用凭据"}),ie.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(Je,{"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:o>1&&!B&&e.jsxs(g,{"code-path":"src/components/server/CloudServerImport.tsx:608:15",variant:"outline",onClick:ce,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:[e.jsx(er,{"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:B?e.jsx(g,{"code-path":"src/components/server/CloudServerImport.tsx:616:15",onClick:be,className:"bg-blue-600 hover:bg-blue-700",children:"完成"}):e.jsxs(e.Fragment,{children:[e.jsx(g,{"code-path":"src/components/server/CloudServerImport.tsx:621:17",variant:"outline",onClick:be,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:"取消"}),o<4?e.jsxs(g,{"code-path":"src/components/server/CloudServerImport.tsx:625:19",onClick:ve,disabled:o===1&&!b||o===2&&!x||o===3&&n.length===0,className:"bg-blue-600 hover:bg-blue-700",children:["下一步",e.jsx(_e,{"code-path":"src/components/server/CloudServerImport.tsx:635:21",className:"h-4 w-4 ml-1"})]}):e.jsx(g,{"code-path":"src/components/server/CloudServerImport.tsx:638:19",onClick:oe,disabled:k.length===0||J,className:"bg-emerald-600 hover:bg-emerald-700",children:J?e.jsxs(e.Fragment,{children:[e.jsx(pe,{"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(ge,{"code-path":"src/components/server/CloudServerImport.tsx:650:25",className:"h-4 w-4 mr-1"}),"确认导入 (",k.length,")"]})})]})})]})]})})}function xs({open:s,onOpenChange:m,serverId:a,serverName:c,serverIp:o,hasAuth:i=!0}){const b=t.useRef(null),j=t.useRef(null),x=t.useRef(null),w=t.useRef(null),[N,I]=t.useState(!1),[n,y]=t.useState(!1),[F,T]=t.useState([]),[u,f]=t.useState(""),[h,v]=t.useState(!1),[k,z]=t.useState(i);t.useEffect(()=>{!s||i||jr.list().then(d=>T(d?.list||[])).catch(()=>{})},[s,i]);const $=async()=>{if(!(!u||!a))try{v(!0),await Kr.assign(a,Number(u)),V.success("凭据已关联"),z(!0)}catch(d){V.error(d?.message||"关联失败")}finally{v(!1)}};return t.useEffect(()=>{s||(z(i),f(""))},[s,i]),t.useEffect(()=>{if(!s||!a||!k)return;const d=new Wr.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)"}}),S=new Gr.FitAddon;d.loadAddon(S),j.current=d,w.current=S;const _=location.protocol==="https:"?"wss":"ws",J=vr.getState().token||"",W=`${_}://${location.host}/ws/terminal?id=${a}&cols=80&rows=24&token=${encodeURIComponent(J)}`,B=new WebSocket(W);return x.current=B,d.onData(U=>{B.readyState===WebSocket.OPEN&&B.send(JSON.stringify({status:0,data:U}))}),B.onmessage=U=>{try{const Q=JSON.parse(U.data);Q.status===0&&typeof Q.data=="string"&&d.write(Q.data)}catch{d.write(typeof U.data=="string"?U.data:"")}},B.onopen=()=>{I(!0),b.current&&(d.open(b.current),requestAnimationFrame(()=>{try{S.fit(),d.focus()}catch{}}))},B.onclose=()=>{I(!1),d.write(`\r
\x1B[31m[连接已关闭]\x1B[0m\r
`)},B.onerror=()=>{d.write(`\r
\x1B[31m[连接发生错误]\x1B[0m\r
`)},()=>{try{B.close(),d.dispose()}catch{}j.current=null,x.current=null,I(!1)}},[s,a,k]),t.useEffect(()=>{if(!s)return;const d=b.current;if(!d)return;let S;const _=new ResizeObserver(()=>{clearTimeout(S),S=setTimeout(()=>{if(w.current&&j.current&&x.current)try{w.current.fit(),j.current.focus();const{cols:J,rows:W}=j.current;x.current.readyState===WebSocket.OPEN&&x.current.send(JSON.stringify({status:1,cols:J,rows:W}))}catch{}},60)});return _.observe(d),()=>{clearTimeout(S),_.disconnect()}},[s]),e.jsx(Te,{"code-path":"src/components/server/TerminalDialog.tsx:196:5",open:s,onOpenChange:m,children:e.jsxs(Re,{"code-path":"src/components/server/TerminalDialog.tsx:197:7",showCloseButton:!1,className:Se("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:"900px",width:"90vw"},children:[e.jsxs(Me,{"code-path":"src/components/server/TerminalDialog.tsx:209:9",className:"sr-only",children:["终端 - ",c]}),e.jsx(Be,{"code-path":"src/components/server/TerminalDialog.tsx:210:9",className:"sr-only",children:"SSH 终端连接"}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:212: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:213:11",className:"flex items-center gap-2 text-sm",children:[e.jsx("div",{"code-path":"src/components/server/TerminalDialog.tsx:214:13",className:Se("w-2 h-2 rounded-full",N?"bg-emerald-400":"bg-red-400")}),e.jsx("span",{"code-path":"src/components/server/TerminalDialog.tsx:215:13",className:"text-[var(--dg-text-primary)] font-medium",children:c}),e.jsxs("span",{"code-path":"src/components/server/TerminalDialog.tsx:216:13",className:"text-[var(--dg-text-muted)]",children:["(",o,")"]})]}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:218:11",className:"flex items-center gap-1",children:[e.jsx("button",{"code-path":"src/components/server/TerminalDialog.tsx:219:13",onClick:()=>y(!n),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:n?e.jsx(qr,{"code-path":"src/components/server/TerminalDialog.tsx:223:29",className:"h-4 w-4"}):e.jsx(Jr,{"code-path":"src/components/server/TerminalDialog.tsx:223:65",className:"h-4 w-4"})}),e.jsx("button",{"code-path":"src/components/server/TerminalDialog.tsx:225:13",onClick:()=>m(!1),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:e.jsx(fe,{"code-path":"src/components/server/TerminalDialog.tsx:229:15",className:"h-4 w-4"})})]})]}),!k&&e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:235: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:236:13",className:"h-12 w-12 text-amber-400"}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:237:13",className:"text-center",children:[e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:238:15",className:"text-[var(--dg-text-primary)] font-medium mb-1",children:"服务器未配置认证凭据"}),e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:239:15",className:"text-sm text-[var(--dg-text-muted)]",children:"请选择一个凭据用于 SSH 连接"})]}),F.length===0?e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:242:15",className:"text-xs text-[var(--dg-text-muted)]",children:"暂无可用凭据,请先去「凭证配置」添加"}):e.jsxs("select",{"code-path":"src/components/server/TerminalDialog.tsx:244:15",value:u,onChange:d=>f(d.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:249:17",value:"",children:"-- 选择凭据 --"}),F.map(d=>e.jsxs("option",{"code-path":"src/components/server/TerminalDialog.tsx:251:19",value:String(d.id),children:[d.type==="ssh_key"?"🔑":"🔒"," ",d.name]},d.id))]}),e.jsx(g,{"code-path":"src/components/server/TerminalDialog.tsx:257:13",onClick:$,disabled:!u||h,className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",children:h?"关联中...":"确认连接"})]}),k&&e.jsx("div",{"code-path":"src/components/server/TerminalDialog.tsx:268:11",ref:b,className:"bg-[#0a0e14]",style:{height:n?"calc(100vh - 49px)":"480px"}})]})})}const is=s=>s<1024?`${s} B`:s<1048576?`${(s/1024).toFixed(1)} KB`:`${(s/1048576).toFixed(2)} MB`;function vs({open:s,onOpenChange:m,serverId:a,serverName:c}){const[o,i]=t.useState([]),[b,j]=t.useState([]),[x,w]=t.useState("/"),[N,I]=t.useState(!1),[n,y]=t.useState(""),[F,T]=t.useState(!1),u=t.useRef(null),f=t.useCallback(async d=>{if(a){I(!0),y("");try{const S=await se.listFiles(a,d),_=S?.data||S;i(_.items||[]),j(_.breadcrumbs||[]),w(_.path||d)}catch(S){y(S?.message||"加载目录失败"),i([])}finally{I(!1)}}},[a]);t.useEffect(()=>{s&&a&&f("/")},[s,a,f]);const h=async d=>{if(a)try{await se.downloadFile(a,d)}catch{}},v=async d=>{const S=d.target.files?.[0];if(!(!S||!a)){T(!0);try{await se.uploadFile(a,x,S),await f(x)}catch(_){y(_?.message||"上传失败")}finally{T(!1),u.current&&(u.current.value="")}}},k=async(d,S)=>{if(!(!a||!confirm(`确认删除 ${S?"目录":"文件"} "${d}"?`)))try{await se.deleteFile(a,d),await f(x)}catch(_){y(_?.message||"删除失败")}},z=async()=>{const d=prompt("输入目录名:");if(!d||!a)return;const S=x==="/"?`/${d}`:`${x}/${d}`;try{await se.mkdir(a,S),await f(x)}catch(_){y(_?.message||"创建失败")}},$=[...o].sort((d,S)=>d.is_dir!==S.is_dir?d.is_dir?-1:1:d.name.localeCompare(S.name));return e.jsx(Te,{"code-path":"src/components/server/ServerFileBrowser.tsx:142:5",open:s,onOpenChange:m,children:e.jsxs(Re,{"code-path":"src/components/server/ServerFileBrowser.tsx:143:7",showOverlay:!1,className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] max-w-[95vw] max-h-[90vh] w-[900px]",children:[e.jsxs(Ue,{"code-path":"src/components/server/ServerFileBrowser.tsx:144:9",children:[e.jsxs(Me,{"code-path":"src/components/server/ServerFileBrowser.tsx:145:11",className:"text-[var(--dg-text-primary)] flex items-center gap-2",children:[e.jsx(Nr,{"code-path":"src/components/server/ServerFileBrowser.tsx:146:13",className:"h-5 w-5 text-[var(--dg-blue)]"}),"文件浏览 — ",c]}),e.jsx(Be,{"code-path":"src/components/server/ServerFileBrowser.tsx:149:11",className:"text-[var(--dg-text-secondary)]",children:"SFTP 文件管理 · 上传 · 下载 · 删除"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:155:9",className:"flex items-center gap-2 flex-wrap",children:[e.jsxs(g,{"code-path":"src/components/server/ServerFileBrowser.tsx:156:11",variant:"outline",size:"sm",className:"border-[var(--dg-border)]",onClick:()=>f(x),children:[e.jsx(pe,{"code-path":"src/components/server/ServerFileBrowser.tsx:158:13",className:"h-3.5 w-3.5 mr-1"}),"刷新"]}),e.jsxs("label",{"code-path":"src/components/server/ServerFileBrowser.tsx:160:11",children:[e.jsxs(g,{"code-path":"src/components/server/ServerFileBrowser.tsx:161:13",variant:"outline",size:"sm",className:"border-[var(--dg-border)] cursor-pointer",onClick:()=>u.current?.click(),disabled:F,children:[F?e.jsx(Le,{"code-path":"src/components/server/ServerFileBrowser.tsx:163:28",className:"h-3.5 w-3.5 mr-1 animate-spin"}):e.jsx(Xe,{"code-path":"src/components/server/ServerFileBrowser.tsx:163:84",className:"h-3.5 w-3.5 mr-1"}),"上传"]}),e.jsx("input",{"code-path":"src/components/server/ServerFileBrowser.tsx:166:13",ref:u,type:"file",className:"hidden",onChange:v})]}),e.jsxs(g,{"code-path":"src/components/server/ServerFileBrowser.tsx:168:11",variant:"outline",size:"sm",className:"border-[var(--dg-border)]",onClick:z,children:[e.jsx(cs,{"code-path":"src/components/server/ServerFileBrowser.tsx:170:13",className:"h-3.5 w-3.5 mr-1"}),"新建目录"]}),n&&e.jsxs(A,{"code-path":"src/components/server/ServerFileBrowser.tsx:173:13",variant:"outline",className:"border-red-500/30 text-red-400 ml-auto",children:[e.jsx(fe,{"code-path":"src/components/server/ServerFileBrowser.tsx:174:15",className:"h-3 w-3 mr-1 cursor-pointer",onClick:()=>y("")}),n]})]}),e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:181:9",className:"flex items-center gap-0.5 text-sm flex-wrap bg-[var(--dg-bg-tertiary)] rounded-md p-1.5 border border-[var(--dg-border)]",children:b.map((d,S)=>e.jsxs("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:183:13",className:"flex items-center gap-0.5",children:[S>0&&e.jsx(_e,{"code-path":"src/components/server/ServerFileBrowser.tsx:184:25",className:"h-3 w-3 text-[var(--dg-text-muted)]"}),e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:185:15",onClick:()=>f(d.path),className:"text-[var(--dg-blue)] hover:underline px-0.5",children:d.name})]},d.path))}),e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:196:9",className:"border border-[var(--dg-border)] rounded-md overflow-hidden",style:{maxHeight:"50vh",overflowY:"auto"},children:N?e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:198:13",className:"flex items-center justify-center py-16",children:e.jsx(Le,{"code-path":"src/components/server/ServerFileBrowser.tsx:199:15",className:"h-6 w-6 animate-spin text-[var(--dg-blue)]"})}):$.length===0?e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:202:13",className:"flex flex-col items-center justify-center py-16 text-[var(--dg-text-muted)]",children:[e.jsx(nr,{"code-path":"src/components/server/ServerFileBrowser.tsx:203:15",className:"h-10 w-10 mb-2 opacity-30"}),e.jsx("p",{"code-path":"src/components/server/ServerFileBrowser.tsx:204:15",className:"text-sm",children:"空目录"})]}):e.jsxs("table",{"code-path":"src/components/server/ServerFileBrowser.tsx:207:13",className:"w-full text-sm",children:[e.jsx("thead",{"code-path":"src/components/server/ServerFileBrowser.tsx:208:15",children:e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:209:17",className:"border-b border-[var(--dg-border)] bg-[var(--dg-bg-tertiary)]",children:[e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:210:19",className:"text-left p-2.5 text-[var(--dg-text-muted)] font-medium w-8"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:211:19",className:"text-left p-2.5 text-[var(--dg-text-muted)] font-medium",children:"名称"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:212:19",className:"text-right p-2.5 text-[var(--dg-text-muted)] font-medium w-28",children:"大小"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:213:19",className:"text-left p-2.5 text-[var(--dg-text-muted)] font-medium w-44",children:"修改时间"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:214:19",className:"text-left p-2.5 text-[var(--dg-text-muted)] font-medium w-24",children:"权限"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:215:19",className:"text-center p-2.5 text-[var(--dg-text-muted)] font-medium w-28",children:"操作"})]})}),e.jsxs("tbody",{"code-path":"src/components/server/ServerFileBrowser.tsx:218:15",children:[x!=="/"&&e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:220:19",className:"border-b border-[var(--dg-border)] hover:bg-[var(--dg-bg-hover)] cursor-pointer",onClick:()=>{const d=x.split("/").slice(0,-1).join("/")||"/";f(d)},children:[e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:225:21",className:"p-2.5",children:e.jsx(Xr,{"code-path":"src/components/server/ServerFileBrowser.tsx:225:43",className:"h-4 w-4 text-[var(--dg-text-muted)]"})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:226:21",className:"p-2.5 text-[var(--dg-text-muted)]",colSpan:5,children:".."})]}),$.map(d=>e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:230: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:233:21",className:"p-2.5",children:d.is_dir?e.jsx(nr,{"code-path":"src/components/server/ServerFileBrowser.tsx:235:25",className:"h-4 w-4 text-[var(--dg-yellow)]"}):e.jsx(Qr,{"code-path":"src/components/server/ServerFileBrowser.tsx:237:25",className:"h-4 w-4 text-[var(--dg-text-muted)]"})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:240:21",className:"p-2.5",children:d.is_dir?e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:242:25",onClick:()=>f(d.path),className:"text-[var(--dg-blue)] hover:underline font-medium",children:d.name}):e.jsx("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:249:25",className:"text-[var(--dg-text-primary)]",children:d.name})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:252:21",className:"p-2.5 text-right text-[var(--dg-text-muted)]",children:d.is_dir?"—":is(d.size)}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:255:21",className:"p-2.5 text-[var(--dg-text-muted)]",children:d.mod_time}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:256:21",className:"p-2.5 text-[var(--dg-text-muted)] font-mono text-xs",children:d.mode}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:257:21",className:"p-2.5",children:e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:258:23",className:"flex items-center justify-center gap-1",children:[!d.is_dir&&e.jsx(g,{"code-path":"src/components/server/ServerFileBrowser.tsx:260:27",variant:"ghost",size:"icon",className:"h-7 w-7",onClick:()=>h(d.path),title:"下载",children:e.jsx(Ye,{"code-path":"src/components/server/ServerFileBrowser.tsx:263:29",className:"h-3.5 w-3.5"})}),e.jsx(g,{"code-path":"src/components/server/ServerFileBrowser.tsx:266:25",variant:"ghost",size:"icon",className:"h-7 w-7 text-red-400 hover:text-red-300",onClick:()=>k(d.path,d.is_dir),title:"删除",children:e.jsx(Ze,{"code-path":"src/components/server/ServerFileBrowser.tsx:270:27",className:"h-3.5 w-3.5"})})]})})]},d.path))]})]})})]})})}function lr(s){const m=[];let a="",c=!1;for(let o=0;o<s.length;o++){const i=s[o];c?i==='"'?s[o+1]==='"'?(a+='"',o++):c=!1:a+=i:i==='"'?c=!0:i===","?(m.push(a),a=""):a+=i}return m.push(a),m.map(o=>o.trim())}function hs(s){const m=s.replace(/\r\n/g,`
`).replace(/\r/g,`
`).split(`
`).filter(o=>o.trim());if(m.length<2)return[];const a=lr(m[0]).map(o=>o.toLowerCase()),c=[];for(let o=1;o<m.length;o++){const i=lr(m[o]),b={};a.forEach((j,x)=>{b[j]=i[x]??""}),c.push(b)}return c}function gs(s){return/^(\d{1,3}\.){3}\d{1,3}$/.test(s)&&s.split(".").every(m=>Number(m)>=0&&Number(m)<=255)}function us(){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(`
`),m=new Blob(["\uFEFF"+s],{type:"text/csv;charset=utf-8;"}),a=URL.createObjectURL(m),c=document.createElement("a");c.href=a,c.download="servers-template.csv",c.click(),URL.revokeObjectURL(a)}function Ss({open:s,onClose:m}){const[a,c]=t.useState(1),[o,i]=t.useState(""),[,b]=t.useState("password"),[j,x]=t.useState(null),[w,N]=t.useState(!1),[I,n]=t.useState([]),[y,F]=t.useState([]),[T,u]=t.useState(!1),[f,h]=t.useState([]),[v,k]=t.useState(""),[z,$]=t.useState("22");t.useEffect(()=>{if(!s)return;let l=!1;return(async()=>{try{const[R,D]=await Promise.all([Dr.list(),jr.list()]);if(l)return;const ee=R?.list??[];F(ee.map(M=>({id:String(M.id??""),name:M.name??"",code:M.code??""}))),h(D?.list??[])}catch{l||(F([]),h([]))}})(),()=>{l=!0}},[s]);const d=async()=>{if(a===2&&j){N(!0);try{const l=await j.text(),R=hs(l);if(R.length===0){V.error("文件无有效数据,请使用模板格式(首行为表头)"),N(!1);return}const D=new Set,ee=R.map((M,te)=>{const G=(M.hostname??"").trim(),P=(M.ip??"").trim(),K={row:te+2,hostname:G,ip:P,port:Number(M.port)||22,username:(M.username??"").trim()||"root",os:M.os??"",cpu:Number(M.cpu)||0,memory:Number(M.memory)||0,disk:Number(M.disk)||0,tags:M.tags??"",status:"valid",message:"有效"},oe=[];G||oe.push("主机名缺失"),P?gs(P)||oe.push("IP格式错误"):oe.push("IP缺失");const ve=`${G}|${P}`;return G&&P&&D.has(ve)?oe.push("重复行"):D.add(ve),oe.length>0&&(K.status="error",K.message=oe.join("、")),K});n(ee),c(a+1)}catch{V.error("文件解析失败,请确认是 CSV 格式")}finally{N(!1)}}else c(a+1)},S=()=>{a>1&&c(a-1)},_=l=>{l.target.files&&l.target.files[0]&&x(l.target.files[0])},J=()=>{c(1),i(""),$("22"),k(""),x(null),n([])},W=async()=>{const l=I.filter(R=>R.status==="valid");if(l.length!==0){u(!0);try{const R=l.map(P=>({hostname:P.hostname,ip:P.ip,port:P.port,username:P.username,os:P.os,cpu:P.cpu,memory:P.memory,disk:P.disk,tags:P.tags})),ee=await se.batchCreate({servers:R,region_id:o||void 0,credential_id:v?Number(v):void 0,default_port:Number(z)||22})??{},M=ee.success??0,te=ee.skipped??0,G=ee.failed??0;V.success(`导入完成:成功 ${M},跳过 ${te},失败 ${G}`),J(),m()}catch(R){V.error(R?.message||"导入失败,请重试")}finally{u(!1)}}},B=()=>{m(),J()},U=I.filter(l=>l.status==="valid").length,Q=I.filter(l=>l.status==="warning").length,Z=I.filter(l=>l.status==="error").length,ie=[{id:1,title:"配置"},{id:2,title:"上传"},{id:3,title:"确认"}];return e.jsx(Te,{"code-path":"src/components/server/ExcelServerImport.tsx:278:5",open:s,onOpenChange:B,children:e.jsxs(Re,{"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(Ue,{"code-path":"src/components/server/ExcelServerImport.tsx:280:9",children:[e.jsx(Me,{"code-path":"src/components/server/ExcelServerImport.tsx:281:11",className:"text-xl",children:"CSV 批量导入服务器"}),e.jsx(Be,{"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:ie.map((l,R)=>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 ${a===l.id?"bg-blue-600 text-white":a>l.id?"bg-emerald-600 text-white":"bg-[var(--dg-bg-secondary)] text-[var(--dg-text-muted)]"}`,children:a>l.id?e.jsx(ge,{"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 ${a===l.id?"text-[var(--dg-text-primary)]":"text-[var(--dg-text-muted)]"}`,children:l.title}),R<ie.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))}),a===1&&e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:310:11",className:"space-y-6",children:[e.jsx(me,{"code-path":"src/components/server/ExcelServerImport.tsx:312:13",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xe,{"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(qe,{"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(g,{"code-path":"src/components/server/ExcelServerImport.tsx:324:19",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",onClick:us,children:[e.jsx(Ye,{"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:o,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: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:v,onChange:l=>k(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(H,{"code-path":"src/components/server/ExcelServerImport.tsx:381:15",type:"number",placeholder:"22",value:z,onChange:l=>$(l.target.value),className:"w-32 bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"})]})]}),a===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(Xe,{"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(H,{"code-path":"src/components/server/ExcelServerImport.tsx:401:15",type:"file",accept:".csv,text/csv",onChange:_,className:"hidden",id:"excel-upload"}),e.jsx("label",{"code-path":"src/components/server/ExcelServerImport.tsx:408:15",htmlFor:"excel-upload",children:e.jsx(g,{"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:"选择文件"})})})]}),j&&e.jsx(me,{"code-path":"src/components/server/ExcelServerImport.tsx:416:15",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsxs(xe,{"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(qe,{"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:j.name}),e.jsxs("p",{"code-path":"src/components/server/ExcelServerImport.tsx:422:23",className:"text-xs text-[var(--dg-text-muted)]",children:[(j.size/1024).toFixed(2)," KB"]})]})]}),e.jsx(g,{"code-path":"src/components/server/ExcelServerImport.tsx:425:19",variant:"ghost",size:"icon",className:"text-[var(--dg-text-muted)] hover:text-red-400",onClick:()=>x(null),children:e.jsx(fe,{"code-path":"src/components/server/ExcelServerImport.tsx:431:21",className:"h-4 w-4"})})]})}),w&&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:"正在解析文件..."})]})]}),a===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(A,{"code-path":"src/components/server/ExcelServerImport.tsx:452:17",className:"bg-emerald-500/20 text-emerald-400 border-0",children:[e.jsx(ge,{"code-path":"src/components/server/ExcelServerImport.tsx:453:19",className:"h-3 w-3 mr-1"}),U," 有效"]}),Q>0&&e.jsxs(A,{"code-path":"src/components/server/ExcelServerImport.tsx:457:19",className:"bg-amber-500/20 text-amber-400 border-0",children:[e.jsx(Oe,{"code-path":"src/components/server/ExcelServerImport.tsx:458:21",className:"h-3 w-3 mr-1"}),Q," 警告"]}),Z>0&&e.jsxs(A,{"code-path":"src/components/server/ExcelServerImport.tsx:463:19",className:"bg-red-500/20 text-red-400 border-0",children:[e.jsx(fe,{"code-path":"src/components/server/ExcelServerImport.tsx:464:21",className:"h-3 w-3 mr-1"}),Z," 错误"]})]})]}),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:I.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(A,{"code-path":"src/components/server/ExcelServerImport.tsx:490:29",className:"bg-emerald-500/20 text-emerald-400 border-0 text-xs",children:[e.jsx(ge,{"code-path":"src/components/server/ExcelServerImport.tsx:491:31",className:"h-3 w-3 mr-1"}),l.message]}),l.status==="warning"&&e.jsxs(A,{"code-path":"src/components/server/ExcelServerImport.tsx:496:29",className:"bg-amber-500/20 text-amber-400 border-0 text-xs",children:[e.jsx(Oe,{"code-path":"src/components/server/ExcelServerImport.tsx:497:31",className:"h-3 w-3 mr-1"}),l.message]}),l.status==="error"&&e.jsxs(A,{"code-path":"src/components/server/ExcelServerImport.tsx:502:29",className:"bg-red-500/20 text-red-400 border-0 text-xs",children:[e.jsx(fe,{"code-path":"src/components/server/ExcelServerImport.tsx:503:31",className:"h-3 w-3 mr-1"}),l.message]})]})})]},l.row))})]})}),Z>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(Oe,{"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:["存在 ",Z," 条错误数据,请修正后重新上传"]})]})})]}),e.jsxs(Je,{"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:a>1&&e.jsxs(g,{"code-path":"src/components/server/ExcelServerImport.tsx:530:15",variant:"outline",onClick:S,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:[e.jsx(er,{"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(g,{"code-path":"src/components/server/ExcelServerImport.tsx:537:13",variant:"outline",onClick:B,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:"取消"}),a<3?e.jsxs(g,{"code-path":"src/components/server/ExcelServerImport.tsx:541:15",onClick:d,disabled:a===1&&!o||a===2&&!j,className:"bg-blue-600 hover:bg-blue-700",children:["下一步",e.jsx(_e,{"code-path":"src/components/server/ExcelServerImport.tsx:547:17",className:"h-4 w-4 ml-1"})]}):e.jsxs(g,{"code-path":"src/components/server/ExcelServerImport.tsx:550:15",onClick:W,disabled:T||Z>0||U===0,className:"bg-emerald-600 hover:bg-emerald-700",children:[T?e.jsx(Le,{"code-path":"src/components/server/ExcelServerImport.tsx:556:19",className:"h-4 w-4 mr-1 animate-spin"}):e.jsx(ge,{"code-path":"src/components/server/ExcelServerImport.tsx:558:19",className:"h-4 w-4 mr-1"}),T?"导入中...":`确认导入 (${U})`]})]})]})]})})}var De="Collapsible",[bs]=_r(De),[js,rr]=bs(De),yr=t.forwardRef((s,m)=>{const{__scopeCollapsible:a,open:c,defaultOpen:o,disabled:i,onOpenChange:b,...j}=s,[x,w]=Er({prop:c,defaultProp:o??!1,onChange:b,caller:De});return e.jsx(js,{scope:a,disabled:i,contentId:Tr(),open:x,onOpenToggle:t.useCallback(()=>w(N=>!N),[w]),children:e.jsx(Qe.div,{"data-state":tr(x),"data-disabled":i?"":void 0,...j,ref:m})})});yr.displayName=De;var fr="CollapsibleTrigger",wr=t.forwardRef((s,m)=>{const{__scopeCollapsible:a,...c}=s,o=rr(fr,a);return e.jsx(Qe.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":tr(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...c,ref:m,onClick:Rr(s.onClick,o.onOpenToggle)})});wr.displayName=fr;var sr="CollapsibleContent",Cr=t.forwardRef((s,m)=>{const{forceMount:a,...c}=s,o=rr(sr,s.__scopeCollapsible);return e.jsx(Mr,{present:a||o.open,children:({present:i})=>e.jsx(Ns,{...c,ref:m,present:i})})});Cr.displayName=sr;var Ns=t.forwardRef((s,m)=>{const{__scopeCollapsible:a,present:c,children:o,...i}=s,b=rr(sr,a),[j,x]=t.useState(c),w=t.useRef(null),N=Br(m,w),I=t.useRef(0),n=I.current,y=t.useRef(0),F=y.current,T=b.open||j,u=t.useRef(T),f=t.useRef(void 0);return t.useEffect(()=>{const h=requestAnimationFrame(()=>u.current=!1);return()=>cancelAnimationFrame(h)},[]),Pr(()=>{const h=w.current;if(h){f.current=f.current||{transitionDuration:h.style.transitionDuration,animationName:h.style.animationName},h.style.transitionDuration="0s",h.style.animationName="none";const v=h.getBoundingClientRect();I.current=v.height,y.current=v.width,u.current||(h.style.transitionDuration=f.current.transitionDuration,h.style.animationName=f.current.animationName),x(c)}},[b.open,c]),e.jsx(Qe.div,{"data-state":tr(b.open),"data-disabled":b.disabled?"":void 0,id:b.contentId,hidden:!T,...i,ref:N,style:{"--radix-collapsible-content-height":n?`${n}px`:void 0,"--radix-collapsible-content-width":F?`${F}px`:void 0,...s.style},children:T&&o})});function tr(s){return s?"open":"closed"}var ys=yr;function fs({...s}){return e.jsx(ys,{"code-path":"src/components/ui/collapsible.tsx:6:10","data-slot":"collapsible",...s})}function ws({...s}){return e.jsx(wr,{"code-path":"src/components/ui/collapsible.tsx:13:5","data-slot":"collapsible-trigger",...s})}function Cs({...s}){return e.jsx(Cr,{"code-path":"src/components/ui/collapsible.tsx:24:5","data-slot":"collapsible-content",...s})}const pr={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 Is({open:s,onOpenChange:m,editingId:a,formData:c,setFormData:o,detailsOpen:i,setDetailsOpen:b,onSave:j,formSaving:x}){const[w,N]=t.useState([]);t.useEffect(()=>{s&&Ar.get("/credentials").then(n=>{const y=Array.isArray(n)?n:n?.data||[];N(y)}).catch(()=>N([]))},[s]);const I=n=>{const y=Number(n);if(!y){o({...c,credential_id:null});return}const F=w.find(T=>T.id===y);F&&o({...c,credential_id:y,username:F.username||"root",auth_type:F.auth_type||"password",password:"",ssh_key:""})};return e.jsx(Te,{"code-path":"src/components/server/ServerForm.tsx:135:5",open:s,onOpenChange:m,children:e.jsxs(Re,{"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(Ue,{"code-path":"src/components/server/ServerForm.tsx:137:9",children:[e.jsxs(Me,{"code-path":"src/components/server/ServerForm.tsx:138:11",className:"text-[var(--dg-text-primary)] flex items-center gap-2",children:[e.jsx(Ee,{"code-path":"src/components/server/ServerForm.tsx:139:13",className:"h-5 w-5 text-[var(--dg-blue)]"}),a?"编辑服务器":"添加服务器"]}),e.jsx(Be,{"code-path":"src/components/server/ServerForm.tsx:142:11",className:"text-[var(--dg-text-muted)]",children:a?"修改服务器资产信息":"录入新的服务器资产到 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(L,{"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(H,{"code-path":"src/components/server/ServerForm.tsx:154:15",placeholder:"web-server-01",value:c.hostname,onChange:n=>o({...c,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(L,{"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(H,{"code-path":"src/components/server/ServerForm.tsx:165:15",placeholder:"10.0.0.1",value:c.ip,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:177:15",className:"text-[var(--dg-text-secondary)]",children:"公网IP"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:178:15",placeholder:"如 203.0.113.10",value:c.public_ip,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:186:15",className:"text-[var(--dg-text-secondary)]",children:"SSH端口"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:187:15",type:"number",placeholder:"22",value:c.port,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:199:13",className:"text-[var(--dg-text-secondary)] flex items-center gap-1.5",children:[e.jsx($e,{"code-path":"src/components/server/ServerForm.tsx:200:15",className:"h-3.5 w-3.5"})," SSH 凭证",!a&&!c.credential_id&&e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:201:57",className:"text-red-400 ml-1",children:"*"})]}),e.jsxs(Ce,{"code-path":"src/components/server/ServerForm.tsx:203:13",value:c.credential_id?String(c.credential_id):"",onValueChange:I,children:[e.jsx(Ie,{"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(Fe,{"code-path":"src/components/server/ServerForm.tsx:208:17",placeholder:"选择已有凭证..."})}),e.jsxs(ke,{"code-path":"src/components/server/ServerForm.tsx:210:15",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(O,{"code-path":"src/components/server/ServerForm.tsx:211:17",value:"__manual",children:"手动输入(不关联凭证)"}),w.map(n=>e.jsx(O,{"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))]})]}),c.credential_id&&e.jsx("p",{"code-path":"src/components/server/ServerForm.tsx:223:15",className:"text-[10px] text-green-400/70",children:"已关联凭证,登录信息从凭证自动获取"})]}),!c.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(L,{"code-path":"src/components/server/ServerForm.tsx:232:19",className:"text-[var(--dg-text-secondary)]",children:"登录用户"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:233:19",placeholder:"root",value:c.username,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:241:19",className:"text-[var(--dg-text-secondary)]",children:"认证方式"}),e.jsxs(Ce,{"code-path":"src/components/server/ServerForm.tsx:242:19",value:c.auth_type,onValueChange:n=>o({...c,auth_type:n}),children:[e.jsx(Ie,{"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(Fe,{"code-path":"src/components/server/ServerForm.tsx:247:23"})}),e.jsxs(ke,{"code-path":"src/components/server/ServerForm.tsx:249:21",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(O,{"code-path":"src/components/server/ServerForm.tsx:250:23",value:"password",children:"密码认证"}),e.jsx(O,{"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(L,{"code-path":"src/components/server/ServerForm.tsx:258:17",className:"text-[var(--dg-text-secondary)]",children:[c.auth_type==="key"?"SSH 私钥":"登录密码",!a&&e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:260:34",className:"text-red-400 ml-1",children:"*"}),a&&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(dr,{"code-path":"src/components/server/ServerForm.tsx:263:17",placeholder:c.auth_type==="key"?"粘贴 SSH 私钥内容...":"输入登录密码...",value:c.password,onChange:n=>o({...c,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(fs,{"code-path":"src/components/server/ServerForm.tsx:274:11",open:i,onOpenChange:b,children:[e.jsx(ws,{"code-path":"src/components/server/ServerForm.tsx:275:13",asChild:!0,children:e.jsxs(g,{"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(Ee,{"code-path":"src/components/server/ServerForm.tsx:282:19",className:"h-4 w-4"}),"更多详情(OS版本 / 运行状态 / CPU / 内存 / 磁盘 / 标签 / 描述)"]}),e.jsx($r,{"code-path":"src/components/server/ServerForm.tsx:285:17",className:Se("h-4 w-4 transition-transform",i&&"rotate-180")})]})}),e.jsxs(Cs,{"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(L,{"code-path":"src/components/server/ServerForm.tsx:291:19",className:"text-[var(--dg-text-secondary)]",children:"操作系统"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:292:19",placeholder:"如 CentOS 7.9",value:c.os,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:300:19",className:"text-[var(--dg-text-secondary)]",children:"运行状态"}),e.jsxs(Ce,{"code-path":"src/components/server/ServerForm.tsx:301:19",value:c.status,onValueChange:n=>o({...c,status:n}),children:[e.jsx(Ie,{"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(Fe,{"code-path":"src/components/server/ServerForm.tsx:306:23"})}),e.jsxs(ke,{"code-path":"src/components/server/ServerForm.tsx:308:21",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(O,{"code-path":"src/components/server/ServerForm.tsx:309:23",value:"running",children:"运行中"}),e.jsx(O,{"code-path":"src/components/server/ServerForm.tsx:310:23",value:"stopped",children:"已停止"}),e.jsx(O,{"code-path":"src/components/server/ServerForm.tsx:311:23",value:"maintenance",children:"维护中"}),e.jsx(O,{"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(L,{"code-path":"src/components/server/ServerForm.tsx:319:19",className:"text-[var(--dg-text-secondary)]",children:"CPU核数"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:320:19",type:"number",placeholder:"4",value:c.cpu,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:329:19",className:"text-[var(--dg-text-secondary)]",children:"内存 (GB)"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:330:19",type:"number",placeholder:"8",value:c.memory,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:339:19",className:"text-[var(--dg-text-secondary)]",children:"磁盘 (GB)"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:340:19",type:"number",placeholder:"100",value:c.disk,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:350:17",className:"text-[var(--dg-text-secondary)]",children:"标签"}),e.jsx(H,{"code-path":"src/components/server/ServerForm.tsx:351:17",placeholder:'JSON 格式,如 {"project":"web","team":"ops"}',value:c.tags,onChange:n=>o({...c,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(L,{"code-path":"src/components/server/ServerForm.tsx:359:17",className:"text-[var(--dg-text-secondary)]",children:"描述"}),e.jsx(dr,{"code-path":"src/components/server/ServerForm.tsx:360:17",placeholder:"补充说明...",value:c.description,onChange:n=>o({...c,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(Je,{"code-path":"src/components/server/ServerForm.tsx:371:9",children:[e.jsx(g,{"code-path":"src/components/server/ServerForm.tsx:372:11",variant:"outline",onClick:()=>m(!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(g,{"code-path":"src/components/server/ServerForm.tsx:379:11",onClick:j,disabled:!c.hostname||!c.ip||x,className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",children:[x?e.jsx(Le,{"code-path":"src/components/server/ServerForm.tsx:385:15",className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(Yr,{"code-path":"src/components/server/ServerForm.tsx:387:15",className:"h-4 w-4 mr-2"}),a?"保存修改":"创建"]})]})]})})}function Ir(s){const m=s.tags;if(!m)return[];if(Array.isArray(m))return m;try{const a=JSON.parse(m);return Array.isArray(a)?a:typeof a=="object"&&a!==null?Object.entries(a).map(([c,o])=>`${c}:${String(o)}`):[String(a)]}catch{return String(m).split(",").map(a=>a.trim()).filter(Boolean)}}function Fs(s){switch(s){case"running":return e.jsxs(A,{"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(A,{"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(A,{"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(A,{"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 mr(s){return s>80?"bg-red-400":s>60?"bg-amber-400":"bg-emerald-400"}function ks({server:s,selected:m,onToggleSelect:a,onOpenTerminal:c,onOpenEdit:o,onOpenFiles:i,onDelete:b}){const j=Number(s.cpu_usage||0),x=Number(s.memory_usage||0),w=Ir(s),N=s.memory?Math.round(s.memory/1024):0,I=s.tcp_established||0,n=s.tcp_time_wait||0;s.net_rx_bps,s.net_tx_bps;const y=s.disk_read_bps||0,F=s.disk_write_bps||0,T=u=>u>=1e6?(u/1e6).toFixed(1)+"MB/s":u>=1e3?(u/1e3).toFixed(1)+"KB/s":u.toFixed(0)+"B/s";return e.jsxs(ze,{"code-path":"src/components/server/ServerTableRow.tsx:56:5",className:"border-[var(--dg-border)] hover:bg-[var(--dg-bg-tertiary)]/50",children:[e.jsx(re,{"code-path":"src/components/server/ServerTableRow.tsx:57:7",children:e.jsx(ue,{"code-path":"src/components/server/ServerTableRow.tsx:58:9",checked:m,onCheckedChange:()=>a(s.id),className:"border-[var(--dg-border)]"})}),e.jsx(re,{"code-path":"src/components/server/ServerTableRow.tsx:64:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:65:9",className:"flex items-center gap-2",children:[e.jsx(Ee,{"code-path":"src/components/server/ServerTableRow.tsx:66:11",className:"h-4 w-4 text-[var(--dg-text-muted)]"}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:67:11",children:[e.jsx("p",{"code-path":"src/components/server/ServerTableRow.tsx:68:13",className:"font-medium text-[var(--dg-text-primary)]",children:s.hostname}),e.jsx("p",{"code-path":"src/components/server/ServerTableRow.tsx:69:13",className:"text-xs text-[var(--dg-text-muted)]",children:s.os})]})]})}),e.jsx(re,{"code-path":"src/components/server/ServerTableRow.tsx:73:7",children:e.jsx("code",{"code-path":"src/components/server/ServerTableRow.tsx:74: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(re,{"code-path":"src/components/server/ServerTableRow.tsx:78:7",children:s.public_ip?e.jsx("code",{"code-path":"src/components/server/ServerTableRow.tsx:80: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:84:11",className:"text-sm text-[var(--dg-text-muted)]",children:"-"})}),e.jsx(re,{"code-path":"src/components/server/ServerTableRow.tsx:87:7",children:Fs(s.status)}),e.jsx(re,{"code-path":"src/components/server/ServerTableRow.tsx:88:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:89:9",className:"text-sm text-[var(--dg-text-secondary)]",children:[e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:90:11",className:"text-[var(--dg-text-muted)]",children:[s.cpu,"核"]}),e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:91:11",className:"mx-1 text-[var(--dg-text-muted)] opacity-50",children:"/"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:92:11",className:"text-[var(--dg-text-muted)]",children:[N,"GB"]}),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:[s.disk,"GB"]})]})}),e.jsx(re,{"code-path":"src/components/server/ServerTableRow.tsx:97:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:98:9",className:"space-y-1",children:[e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:99:11",className:"flex items-center gap-2",children:[e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:100:13",className:"text-xs text-[var(--dg-text-muted)] w-8",children:"CPU"}),e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:101: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:102:15",className:Se("h-full rounded-full",mr(j)),style:{width:`${j}%`}})}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:107:13",className:"text-xs text-[var(--dg-text-secondary)]",children:[j.toFixed(1),"%"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:109:11",className:"flex items-center gap-2",children:[e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:110:13",className:"text-xs text-[var(--dg-text-muted)] w-8",children:"内存"}),e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:111: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:112:15",className:Se("h-full rounded-full",mr(x)),style:{width:`${x}%`}})}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:117:13",className:"text-xs text-[var(--dg-text-secondary)]",children:[x.toFixed(1),"%"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:119:11",className:"flex items-center gap-1 text-xs text-[var(--dg-text-muted)] pt-0.5",children:[e.jsx(Or,{"code-path":"src/components/server/ServerTableRow.tsx:120:13",className:"h-3 w-3"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:121:13",children:[I,"连接"]}),n>0&&e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:122:27",className:"text-[var(--dg-orange)]",children:["(",n,"TW)"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:124:11",className:"flex items-center gap-1 text-xs text-[var(--dg-text-muted)]",children:[e.jsx(Zr,{"code-path":"src/components/server/ServerTableRow.tsx:125:13",className:"h-3 w-3"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:126:13",children:["读",T(y),"/写",T(F)]})]})]})}),e.jsx(re,{"code-path":"src/components/server/ServerTableRow.tsx:130:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:131:9",className:"flex flex-wrap gap-1",children:[w.slice(0,3).map(u=>e.jsx(A,{"code-path":"src/components/server/ServerTableRow.tsx:133:13",variant:"outline",className:"text-xs border-[var(--dg-border)] text-[var(--dg-text-secondary)] bg-[var(--dg-bg-tertiary)]/50",children:u},u)),w.length>3&&e.jsxs(A,{"code-path":"src/components/server/ServerTableRow.tsx:142:13",variant:"outline",className:"text-xs border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:["+",w.length-3]})]})}),e.jsx(re,{"code-path":"src/components/server/ServerTableRow.tsx:148:7",className:"text-right",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:149:9",className:"flex items-center justify-end gap-1",children:[e.jsx(g,{"code-path":"src/components/server/ServerTableRow.tsx:150:11",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-[var(--dg-blue)]",onClick:()=>c(s),title:"终端",children:e.jsx(cr,{"code-path":"src/components/server/ServerTableRow.tsx:151:13",className:"h-4 w-4"})}),e.jsx(g,{"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-emerald-400",onClick:()=>i?.(s),title:"文件",children:e.jsx(Nr,{"code-path":"src/components/server/ServerTableRow.tsx:154:13",className:"h-4 w-4"})}),e.jsxs(gr,{"code-path":"src/components/server/ServerTableRow.tsx:156:11",children:[e.jsx(ur,{"code-path":"src/components/server/ServerTableRow.tsx:157:13",asChild:!0,children:e.jsx(g,{"code-path":"src/components/server/ServerTableRow.tsx:158:15",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)]",children:e.jsx(es,{"code-path":"src/components/server/ServerTableRow.tsx:159:17",className:"h-4 w-4"})})}),e.jsxs(Sr,{"code-path":"src/components/server/ServerTableRow.tsx:162:13",align:"end",className:"w-48 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(br,{"code-path":"src/components/server/ServerTableRow.tsx:163:15",className:"text-[var(--dg-text-secondary)]",children:"操作"}),e.jsx(Ke,{"code-path":"src/components/server/ServerTableRow.tsx:164:15",className:"bg-[var(--dg-border)]"}),e.jsxs(we,{"code-path":"src/components/server/ServerTableRow.tsx:165:15",className:"text-[var(--dg-text-secondary)] focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)] cursor-pointer",onClick:()=>o(s),children:[e.jsx(rs,{"code-path":"src/components/server/ServerTableRow.tsx:169:17",className:"h-4 w-4 mr-2"}),"编辑"]}),e.jsxs(we,{"code-path":"src/components/server/ServerTableRow.tsx:172: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(cr,{"code-path":"src/components/server/ServerTableRow.tsx:176:17",className:"h-4 w-4 mr-2"}),"终端"]}),e.jsx(Ke,{"code-path":"src/components/server/ServerTableRow.tsx:179:15",className:"bg-[var(--dg-border)]"}),e.jsxs(we,{"code-path":"src/components/server/ServerTableRow.tsx:180:15",className:"text-red-400 focus:bg-[var(--dg-bg-hover)] focus:text-red-400 cursor-pointer",onClick:()=>b(s.id),children:[e.jsx(Ze,{"code-path":"src/components/server/ServerTableRow.tsx:184:17",className:"h-4 w-4 mr-2"}),"删除"]})]})]})]})})]})}function tt(){const s=zr(),[m,a]=t.useState([]),[c,o]=t.useState(!0),[i,b]=t.useState([]),[j,x]=t.useState(""),[w,N]=t.useState("all"),[I,n]=t.useState(!1),[y,F]=t.useState(!1),[T,u]=t.useState(!1),[f,h]=t.useState(null),[v,k]=t.useState(pr),[z,$]=t.useState(!1),[d,S]=t.useState(!1),[_,J]=t.useState(!1),[W,B]=t.useState(null),[U,Q]=t.useState(!1),[Z,ie]=t.useState(null),[l,R]=t.useState(1),[D,ee]=t.useState(10),[M,te]=t.useState(0),G=p=>{B({id:p.id,name:p.hostname,ip:p.ip,hasAuth:p.has_auth??!0}),J(!0)},P=p=>{ie({id:p.id,name:p.hostname}),Q(!0)},K=async(p,X)=>{try{o(!0);const de=p??j,Y=X??w,q={page:l,page_size:D};de&&(q.keyword=de),Y&&Y!=="all"&&(q.status=Y);const ae=await se.getServers(q);a(ae?.list||[]),te(ae?.total||0)}catch(de){console.error("加载服务器列表失败:",de),a([])}finally{o(!1)}},oe=p=>{x(p),R(1)},ve=p=>{N(p),R(1)};t.useEffect(()=>{K()},[l,D]);const ce=t.useRef(null),he=t.useRef(null);t.useEffect(()=>{const p=vr.getState().token;if(!p)return;const de=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws/metrics?token=${p}`,Y=()=>{if(ce.current?.readyState===WebSocket.OPEN)return;const q=new WebSocket(de);ce.current=q,q.onopen=()=>{},q.onmessage=ae=>{try{const C=JSON.parse(ae.data);C.type==="metrics_update"&&a(je=>je.map(Ne=>Ne.hostname===C.hostname?{...Ne,cpu_usage:C.cpu_usage,memory_usage:C.memory_usage,disk_usage:C.disk_usage,status:C.status,tcp_established:C.tcp_established,tcp_time_wait:C.tcp_time_wait,net_rx_bps:C.net_rx_bps,net_tx_bps:C.net_tx_bps,disk_read_bps:C.disk_read_bps,disk_write_bps:C.disk_write_bps}:Ne))}catch{}},q.onclose=()=>{ce.current=null,he.current=setTimeout(Y,3e3)},q.onerror=ae=>{console.error("[MetricsWS] 连接错误:",ae),q.close()}};return Y(),()=>{he.current&&clearTimeout(he.current),ce.current&&(ce.current.onclose=null,ce.current.close(),ce.current=null)}},[]);const Ve=()=>{i.length===m.length?b([]):b(m.map(p=>p.id))},Pe=p=>{i.includes(p)?b(i.filter(X=>X!==p)):b([...i,p])},be=async p=>{const X=m.find(Y=>String(Y.id)===String(p));if(await s({title:"删除服务器",description:`确定删除「${X?.hostname||p}」吗?此操作不可撤销。`,confirmText:"删除",variant:"destructive"}))try{await se.deleteServer(p),V.success("服务器已删除"),K()}catch(Y){console.error("删除服务器失败:",Y),V.error("删除失败")}},We=async()=>{if(!(i.length===0||!await s({title:"批量删除服务器",description:`确定删除选中的 ${i.length} 台服务器吗?此操作不可撤销。`,confirmText:"批量删除",variant:"destructive"})))try{await se.batchDelete(i.map(X=>Number(X))),V.success(`已删除 ${i.length} 台服务器`),b([]),K()}catch(X){console.error("批量删除失败:",X),V.error("批量删除失败")}},Ae=()=>{h(null),k(pr),S(!1),u(!0)},r=p=>{h(p.id),k({hostname:p.hostname||"",ip:p.ip||"",public_ip:p.public_ip||"",port:String(p.port||22),username:p.username||"root",auth_type:p.auth_type||"password",password:"",ssh_key:"",credential_id:null,os:p.os||"",cpu:String(p.cpu||""),memory:p.memory?String(Math.round(p.memory/1024)):"",disk:String(p.disk||""),status:p.status||"running",tags:p.tags||"",description:p.description||""}),S(!1),u(!0)},E=async()=>{if(!(!v.hostname||!v.ip))try{$(!0);const p={hostname:v.hostname,ip:v.ip,public_ip:v.public_ip||void 0,port:Number(v.port)||22,username:v.username||"root",auth_type:v.auth_type||"password",os:v.os,cpu:Number(v.cpu)||0,memory:(Number(v.memory)||0)*1024,disk:Number(v.disk)||0,status:v.status,tags:v.tags||void 0,description:v.description||void 0};v.credential_id?p.credential_id=v.credential_id:(v.password&&(p.password=v.password),v.ssh_key&&(p.ssh_key=v.ssh_key)),f?await se.updateServer(f,p):await se.createServer(p),V.success(f?"服务器已更新":"服务器已创建"),u(!1),K()}catch(p){console.error("保存服务器失败:",p),V.error("保存失败,请重试")}finally{$(!1)}},ne=()=>{if(m.length===0){V.error("没有可导出的数据");return}const p=["主机名","IP地址","公网IP","端口","操作系统","CPU(核)","内存(GB)","磁盘(GB)","状态","标签"],X=m.map(C=>{const je=C.memory?Math.round(C.memory/1024):0,Ne=Ir(C).join(";");return[C.hostname||"",C.ip||"",C.public_ip||"",C.port||22,C.os||"",C.cpu||0,je,C.disk||0,C.status||"",Ne]}),de=[p,...X].map(C=>C.map(je=>`"${String(je).replace(/"/g,'""')}"`).join(",")).join(`
`),Y=new Blob(["\uFEFF"+de],{type:"text/csv;charset=utf-8;"}),q=URL.createObjectURL(Y),ae=document.createElement("a");ae.href=q,ae.download=`servers_${new Date().toISOString().slice(0,10)}.csv`,ae.click(),URL.revokeObjectURL(q),V.success(`已导出 ${m.length} 台服务器`)},or=8;return e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:371:5",className:"space-y-6",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:373:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:374:9",children:[e.jsx("h1",{"code-path":"src/components/server/ServerManager.tsx:375:11",className:"text-2xl font-bold text-[var(--dg-text-primary)]",children:"服务器管理"}),e.jsx("p",{"code-path":"src/components/server/ServerManager.tsx:376:11",className:"text-sm text-[var(--dg-text-muted)] mt-1",children:"管理云平台服务器资产"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:378:9",className:"flex items-center gap-2",children:[e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:379: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:()=>K(),children:[e.jsx(pe,{"code-path":"src/components/server/ServerManager.tsx:384:13",className:Se("h-4 w-4 mr-2",c&&"animate-spin")}),"刷新"]}),e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:387: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:ne,children:[e.jsx(Ye,{"code-path":"src/components/server/ServerManager.tsx:392:13",className:"h-4 w-4 mr-2"}),"导出"]}),e.jsxs(gr,{"code-path":"src/components/server/ServerManager.tsx:395:11",children:[e.jsx(ur,{"code-path":"src/components/server/ServerManager.tsx:396:13",asChild:!0,children:e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:397: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(Xe,{"code-path":"src/components/server/ServerManager.tsx:398:17",className:"h-4 w-4 mr-2"}),"批量导入"]})}),e.jsxs(Sr,{"code-path":"src/components/server/ServerManager.tsx:402:13",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:[e.jsx(br,{"code-path":"src/components/server/ServerManager.tsx:403:15",children:"选择导入方式"}),e.jsx(Ke,{"code-path":"src/components/server/ServerManager.tsx:404:15",className:"bg-[var(--dg-border)]"}),e.jsxs(we,{"code-path":"src/components/server/ServerManager.tsx:405:15",className:"hover:bg-[var(--dg-bg-hover)] cursor-pointer focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)]",onClick:()=>n(!0),children:[e.jsx(xr,{"code-path":"src/components/server/ServerManager.tsx:409:17",className:"h-4 w-4 mr-2 text-[var(--dg-blue)]"}),"云主机导入",e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:411:17",className:"ml-2 text-xs text-[var(--dg-text-muted)]",children:"从云平台同步"})]}),e.jsxs(we,{"code-path":"src/components/server/ServerManager.tsx:413:15",className:"hover:bg-[var(--dg-bg-hover)] cursor-pointer focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)]",onClick:()=>F(!0),children:[e.jsx(qe,{"code-path":"src/components/server/ServerManager.tsx:417:17",className:"h-4 w-4 mr-2 text-emerald-400"}),"CSV导入",e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:419:17",className:"ml-2 text-xs text-[var(--dg-text-muted)]",children:"hostname + IP 即可"})]})]})]}),e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:423:11",className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",onClick:Ae,children:[e.jsx(ss,{"code-path":"src/components/server/ServerManager.tsx:427:13",className:"h-4 w-4 mr-2"}),"添加服务器"]})]})]}),e.jsx(ls,{"code-path":"src/components/server/ServerManager.tsx:434:7",servers:m}),e.jsx(me,{"code-path":"src/components/server/ServerManager.tsx:437:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsxs(xe,{"code-path":"src/components/server/ServerManager.tsx:438:9",className:"p-0",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:440:11",className:"flex items-center justify-between flex-wrap gap-4 p-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:441:13",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:442:15",className:"relative w-64",children:[e.jsx(ir,{"code-path":"src/components/server/ServerManager.tsx:443:17",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[var(--dg-text-muted)]"}),e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:444:17",placeholder:"搜索主机名或IP...",value:j,onChange:p=>oe(p.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(Ce,{"code-path":"src/components/server/ServerManager.tsx:451:15",value:w,onValueChange:ve,children:[e.jsx(Ie,{"code-path":"src/components/server/ServerManager.tsx:452:17",className:"w-32 h-9 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(Fe,{"code-path":"src/components/server/ServerManager.tsx:453:19",placeholder:"状态"})}),e.jsxs(ke,{"code-path":"src/components/server/ServerManager.tsx:455:17",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(O,{"code-path":"src/components/server/ServerManager.tsx:456:19",value:"all",children:"全部状态"}),e.jsx(O,{"code-path":"src/components/server/ServerManager.tsx:457:19",value:"running",children:"运行中"}),e.jsx(O,{"code-path":"src/components/server/ServerManager.tsx:458:19",value:"stopped",children:"已停止"}),e.jsx(O,{"code-path":"src/components/server/ServerManager.tsx:459:19",value:"maintenance",children:"维护中"}),e.jsx(O,{"code-path":"src/components/server/ServerManager.tsx:460:19",value:"offline",children:"离线"})]})]})]}),i.length>0&&e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:465:15",className:"flex items-center gap-2",children:[e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:466:17",className:"text-sm text-[var(--dg-text-secondary)]",children:["已选择 ",i.length," 项"]}),e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:467:17",variant:"outline",size:"sm",className:"border-red-500/30 text-red-400 hover:bg-red-500/10",onClick:We,children:[e.jsx(Ze,{"code-path":"src/components/server/ServerManager.tsx:473:19",className:"h-4 w-4 mr-2"}),"批量删除"]})]})]}),e.jsx("div",{"code-path":"src/components/server/ServerManager.tsx:480:11",className:"border-t border-[var(--dg-border)]",children:e.jsxs(Lr,{"code-path":"src/components/server/ServerManager.tsx:481:13",children:[e.jsx(Hr,{"code-path":"src/components/server/ServerManager.tsx:482:15",children:e.jsxs(ze,{"code-path":"src/components/server/ServerManager.tsx:483:17",className:"border-[var(--dg-border)] hover:bg-transparent",children:[e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:484:19",className:"w-12",children:e.jsx(ue,{"code-path":"src/components/server/ServerManager.tsx:485:21",checked:i.length===m.length&&m.length>0,onCheckedChange:Ve,className:"border-[var(--dg-border)]"})}),e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:493:19",className:"text-[var(--dg-text-secondary)]",children:"主机名"}),e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:494:19",className:"text-[var(--dg-text-secondary)]",children:"IP地址"}),e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:495:19",className:"text-[var(--dg-text-secondary)]",children:"公网IP"}),e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:496:19",className:"text-[var(--dg-text-secondary)]",children:"状态"}),e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:497:19",className:"text-[var(--dg-text-secondary)]",children:"配置"}),e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:498:19",className:"text-[var(--dg-text-secondary)]",children:"使用率"}),e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:499:19",className:"text-[var(--dg-text-secondary)]",children:"标签"}),e.jsx(le,{"code-path":"src/components/server/ServerManager.tsx:500:19",className:"text-[var(--dg-text-secondary)] text-right",children:"操作"})]})}),e.jsx(Ur,{"code-path":"src/components/server/ServerManager.tsx:503:15",children:c?e.jsx(ze,{"code-path":"src/components/server/ServerManager.tsx:505:19",className:"border-[var(--dg-border)]",children:e.jsxs(re,{"code-path":"src/components/server/ServerManager.tsx:506:21",colSpan:or,className:"text-center text-[var(--dg-text-muted)] py-12",children:[e.jsx(pe,{"code-path":"src/components/server/ServerManager.tsx:507:23",className:"h-5 w-5 animate-spin mx-auto mb-2"}),"加载中..."]})}):m.length===0?e.jsx(ze,{"code-path":"src/components/server/ServerManager.tsx:512:19",className:"border-[var(--dg-border)]",children:e.jsx(re,{"code-path":"src/components/server/ServerManager.tsx:513:21",colSpan:or,className:"text-center text-[var(--dg-text-muted)] py-12",children:"暂无服务器数据"})}):m.map(p=>e.jsx(ks,{"code-path":"src/components/server/ServerManager.tsx:519:21",server:p,selected:i.includes(p.id),onToggleSelect:Pe,onOpenTerminal:G,onOpenFiles:P,onOpenEdit:r,onDelete:be},p.id))})]})}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:536: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:537: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:538:15",children:"每页"}),e.jsxs(Ce,{"code-path":"src/components/server/ServerManager.tsx:539:15",value:String(D),onValueChange:p=>{ee(Number(p)),R(1)},children:[e.jsx(Ie,{"code-path":"src/components/server/ServerManager.tsx:540: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(Fe,{"code-path":"src/components/server/ServerManager.tsx:541:19"})}),e.jsxs(ke,{"code-path":"src/components/server/ServerManager.tsx:543:17",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(O,{"code-path":"src/components/server/ServerManager.tsx:544:19",value:"10",children:"10"}),e.jsx(O,{"code-path":"src/components/server/ServerManager.tsx:545:19",value:"20",children:"20"}),e.jsx(O,{"code-path":"src/components/server/ServerManager.tsx:546:19",value:"30",children:"30"})]})]}),e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:549:15",children:"条"}),e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:550:15",className:"ml-4",children:["共 ",M," 条"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:552:13",className:"flex items-center gap-1",children:[e.jsx(g,{"code-path":"src/components/server/ServerManager.tsx:553: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:l<=1,onClick:()=>R(p=>Math.max(1,p-1)),children:e.jsx(er,{"code-path":"src/components/server/ServerManager.tsx:560:17",className:"h-4 w-4"})}),e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:562:15",className:"text-sm text-[var(--dg-text-secondary)] px-2",children:[l," / ",Math.max(1,Math.ceil(M/D))]}),e.jsx(g,{"code-path":"src/components/server/ServerManager.tsx:565: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:l>=Math.ceil(M/D),onClick:()=>R(p=>p+1),children:e.jsx(_e,{"code-path":"src/components/server/ServerManager.tsx:572:17",className:"h-4 w-4"})})]})]})]})}),e.jsx(Is,{"code-path":"src/components/server/ServerManager.tsx:580:7",open:T,onOpenChange:u,editingId:f,formData:v,setFormData:k,detailsOpen:d,setDetailsOpen:S,onSave:E,formSaving:z}),e.jsx(ms,{"code-path":"src/components/server/ServerManager.tsx:593:7",open:I,onClose:()=>{n(!1),K()}}),e.jsx(Ss,{"code-path":"src/components/server/ServerManager.tsx:600:7",open:y,onClose:()=>{F(!1),K()}}),e.jsx(xs,{"code-path":"src/components/server/ServerManager.tsx:609:7",open:_,onOpenChange:J,serverId:W?.id??null,serverName:W?.name??"",serverIp:W?.ip??"",hasAuth:W?.hasAuth??!0}),e.jsx(vs,{"code-path":"src/components/server/ServerManager.tsx:619:7",open:U,onOpenChange:Q,serverId:Z?.id??null,serverName:Z?.name??""})]})}export{tt as ServerManager};