- 新增 log_datasource.go / log_proxy.go / user_api_token.go 后端控制器 - 新增 log_datasource.go model - 新增 monitor/log-center.ts API 模块 - 新增 LogCenter 前端组件及页面 - 重构 deployment 相关组件 (HPDA/UpdateImageModal/bundle-yaml 等) - 新增 ResetPasswordDialog / code-snippet-block / copy-button 等 UI 组件 - 重构多个 k8s 相关组件 (TopologyView/ResourceVisualEditor/PodFileBrowser 等) - 更新多个 API 和工具函数 (auth.ts/monitor/index.ts/request.ts 等) - 更新静态资源 (index.html + 新 JS/CSS bundle) - 删除废弃静态资源文件
12 lines
107 KiB
JavaScript
12 lines
107 KiB
JavaScript
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["assets/index-BTWzHVSL.js","assets/index-lgmWPQDG.js","assets/vendor-codemirror-B1SGo4xl.js","assets/vendor-icons-BlY7QrxS.js","assets/index-BtYSyZ9j.css","assets/dashboard-CdCPPiIv.js","assets/server-ZRATB3W_.js","assets/region-DOQwdlL7.js","assets/index-BW7A0O1o.js","assets/pipeline-I9TbU9oT.js","assets/config-Cs6VV1df.js","assets/credential-CZ4ju2yy.js","assets/automation-wgh6dAk-.js","assets/alert-CifuiQtF.js","assets/alert-center-DO2P1sQc.js","assets/site-CJPAagdj.js","assets/trace-L8uY5gM3.js","assets/grafana-DTc3taUi.js","assets/datasource-DD2iWaDA.js","assets/log-center-Cyw2AhE7.js","assets/metrics-DGLPyVxu.js","assets/agent-DtywswSX.js","assets/account-BaHb4JrZ.js","assets/platform-7nCAO14T.js","assets/billing-DjU1--Kv.js","assets/audit-CuR-qVu6.js","assets/terminal-D0pTzaSp.js","assets/approval-fdXwZOLM.js","assets/ai-DlszA9HX.js"])))=>i.map(i=>d[i]);
|
||
import{j as e,r as t}from"./vendor-codemirror-B1SGo4xl.js";import{J as xr,ah as Ar,D as Ie,a as Fe,b as Ke,c as ke,d as Ee,B as y,e as Qe,o as ir,m as ie,t as W,y as $r,w as Or,O as Dr,x as Je,A as Lr,P as zr,z as Hr,Z as Ur,i as Vr,aw as vr,ab as hr,ac as gr,ad as ur,ae as br,af as qe,ag as he,f as Wr}from"./index-lgmWPQDG.js";import{C as fe,a as we}from"./card-CdN7vcLa.js";import{I as V}from"./input-DBDfXZx0.js";import{C as ge}from"./checkbox-Dq3LPO2o.js";import{b as Be,e as Z,T as qr,a as Gr,c as ne,d as Kr}from"./table-DX6kWYMC.js";import{S as $e,a as Oe,b as De,c as Le,d as G}from"./select-Bv_WioDg.js";import{u as Qr,q as Sr,a as Jr,b as Xr}from"./unwrap-D5KlViZc.js";import{u as Me}from"./useMutation-Cg265LfF.js";import{s as ee}from"./server-ZRATB3W_.js";import{S as Yr}from"./stat-strip-2iSVn5Xd.js";import{B as O}from"./badge-Ca5YHtna.js";import{c as ye}from"./account-BaHb4JrZ.js";import{i as jr,ag as Pe,M as We,y as cr,w as ue,f as Ce,R as de,S as Nr,ab as Ae,h as ze,b8 as Xe,at as yr,au as fr,X as be,j as wr,as as Cr,L as He,ah as Ye,b9 as Zr,av as es,aX as nr,m as rs,aY as ss,v as Ze,T as er,ba as Ge,Q as ts,$ as os,N as as,H as cs,r as dr,aP as ns,aJ as ds,P as ls}from"./vendor-icons-BlY7QrxS.js";import{x as ps,a as ms}from"./vendor-xterm-20M9KZE1.js";import{m as xs,a as is,f as vs}from"./xterm-utils-slbfdUHf.js";import{c as rr,s as hs}from"./credential-CZ4ju2yy.js";import{r as gs}from"./region-DOQwdlL7.js";import{L as X}from"./label-Bzhjv1tR.js";import{T as us}from"./textarea-ym7reYBG.js";import"./index-5FEebgvX.js";function bs(r={page:1,page_size:100}){return Qr({queryKey:Sr.servers(r),queryFn:async()=>{const p=await ee.getServers(r);return{list:Xr(p),total:Jr(p)}},staleTime:3e4})}function Ss(){const r=xr(),p=()=>r.invalidateQueries({queryKey:["servers"]}),c=Me({mutationFn:b=>ee.createServer(b),onSuccess:p}),a=Me({mutationFn:({id:b,data:g})=>ee.updateServer(b,g),onSuccess:p}),o=Me({mutationFn:b=>ee.deleteServer(b),onSuccess:p}),v=Me({mutationFn:b=>ee.batchDelete(b),onSuccess:p});return{createMutation:c,updateMutation:a,deleteMutation:o,batchDeleteMutation:v,invalidate:p}}function js({servers:r}){const p=r.filter(o=>o.status==="running").length,c=r.filter(o=>o.status==="maintenance").length,a=r.filter(o=>o.status==="stopped").length;return e.jsx(Yr,{"code-path":"src/components/server/ServerStatsStrip.tsx:14:5",items:[{label:"服务器",value:r.length,color:"blue"},{label:"运行中",value:p,color:"emerald"},{label:"维护中",value:c,color:"amber"},{label:"已停止",value:a,color:"muted"}]})}const Ns=[{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 ys({open:r,onClose:p}){const[c,a]=t.useState([]),[o,v]=t.useState(1),[b,g]=t.useState(""),[x,_]=t.useState(null),[j,C]=t.useState([]),[u,I]=t.useState([]),[l,N]=t.useState(""),[f,i]=t.useState(!1),[h,F]=t.useState([]),[k,H]=t.useState([]),[D,w]=t.useState(!1),[L,m]=t.useState([]),[S,M]=t.useState(!1),[E,A]=t.useState(null),[Y,U]=t.useState("22"),[re,d]=t.useState([]),[$,K]=t.useState(""),Q=async()=>{try{const s=await ye.getAccounts();a(s?.list||[])}catch(s){console.error("加载云账号失败:",s)}};t.useEffect(()=>{r&&(Q(),Ar(async()=>{const{credentialApi:s}=await import("./index-BTWzHVSL.js");return{credentialApi:s}},__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28])).then(({credentialApi:s})=>{s.list().then(R=>d(R?.list||[])).catch(()=>d([]))}))},[r]);const B=c.filter(s=>s.provider===b&&s.status==="active"),J=t.useCallback(async s=>{try{return(await ye.getAccountRegions(s))?.list||[]}catch{return[]}},[]),q=t.useCallback(async s=>{i(!0);try{await ye.syncRegions(s);const R=await J(s);C(R)}catch(R){throw console.error("同步区域失败:",R),R}finally{i(!1)}},[J]),P=t.useCallback(async()=>{if(!x)return;const s=await J(x.id);if(C(s),s.length===0)try{await q(x.id)}catch{}},[x,J,q]),me=t.useCallback(async()=>{if(!(!x||u.length===0)){w(!0),m([]),F([]),H([]);try{const s=await ye.discoverInstances(x.id,u);F(s?.list||[]),m(s?.errors||[])}catch(s){console.error("发现主机失败:",s),m([s?.message||"发现主机失败"])}finally{w(!1)}}},[x,u]),se=async()=>{if(!(!x||k.length===0)){M(!0);try{const s=h.filter(ae=>k.includes(ae.instance_id)),R=await ye.importInstances(x.id,s,{default_port:Number(Y)||22,credential_id:$?Number($):void 0});A(R||{imported:0,skipped:0})}catch(s){console.error("导入失败:",s)}finally{M(!1)}}},z=()=>{o===2&&x&&o<4?(v(3),P()):o<4&&v(o+1)},Se=()=>{o>1&&v(o-1)},Te=()=>{u.length===j.length&&j.length>0?I([]):I(j.map(s=>s.code))},Ve=s=>{H(R=>R.includes(s)?R.filter(ae=>ae!==s):[...R,s])},Re=()=>{k.length===h.length&&h.length>0?H([]):H(h.map(s=>s.instance_id))},je=()=>{p(),v(1),g(""),_(null),I([]),C([]),F([]),H([]),N(""),m([]),A(null),U("22"),K("")},oe=j.filter(s=>!l||s.name?.toLowerCase().includes(l.toLowerCase())||s.code?.toLowerCase().includes(l.toLowerCase())),ve=[{id:1,title:"公有云",icon:jr},{id:2,title:"访问凭据",icon:Pe},{id:3,title:"选择区域",icon:We},{id:4,title:"导入确认",icon:cr}];return e.jsx(Ie,{"code-path":"src/components/server/CloudServerImport.tsx:232:5",open:r,onOpenChange:je,children:e.jsxs(Fe,{"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(Ke,{"code-path":"src/components/server/CloudServerImport.tsx:234:9",children:[e.jsx(ke,{"code-path":"src/components/server/CloudServerImport.tsx:235:11",className:"text-xl",children:"导入云主机"}),e.jsx(Ee,{"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:ve.map((s,R)=>e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:242:13",className:"flex items-center",children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:243:15",className:`flex items-center gap-2 px-3 py-2 rounded-lg text-sm ${o===s.id?"bg-blue-600 text-white":o>s.id?"bg-emerald-600/20 text-emerald-400":"bg-[var(--dg-bg-secondary)] text-[var(--dg-text-muted)]"}`,children:[e.jsx(s.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:s.title}),o>s.id&&e.jsx(ue,{"code-path":"src/components/server/CloudServerImport.tsx:252:33",className:"h-3 w-3 ml-1"})]}),R<ve.length-1&&e.jsx(Ce,{"code-path":"src/components/server/CloudServerImport.tsx:255:17",className:"h-4 w-4 text-[var(--dg-text-muted)] mx-1"})]},s.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:Ns.map(s=>e.jsx(fe,{"code-path":"src/components/server/CloudServerImport.tsx:267:17",className:`cursor-pointer transition-all ${b===s.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:()=>g(s.id),children:e.jsxs(we,{"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 ${s.color} flex items-center justify-center text-white font-bold text-sm`,children:s.icon}),e.jsx("span",{"code-path":"src/components/server/CloudServerImport.tsx:280:21",className:"font-medium text-[var(--dg-text-primary)]",children:s.name})]})},s.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)"}),B.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:B.map(s=>e.jsx(fe,{"code-path":"src/components/server/CloudServerImport.tsx:295:19",className:`cursor-pointer transition-all ${x?.id===s.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:()=>_(s),children:e.jsxs(we,{"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(Pe,{"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:s.name}),e.jsxs("p",{"code-path":"src/components/server/CloudServerImport.tsx:309:27",className:"text-xs text-[var(--dg-text-muted)]",children:[(s.access_key||s.accessKey||"******").slice(0,20),"..."]})]})]}),e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:314:23",className:"text-right",children:[e.jsxs(O,{"code-path":"src/components/server/CloudServerImport.tsx:315:25",className:"bg-emerald-500/20 text-emerald-400 border-0",children:[s.region_count??s.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:[s.server_count??s.serverCount??0," 服务器"]})]})]})},s.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(Pe,{"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:["请选择要同步的区域",j.length>0&&e.jsxs("span",{"code-path":"src/components/server/CloudServerImport.tsx:340:19",className:"ml-2 text-[var(--dg-text-muted)]",children:["(共 ",j.length," 个区域,已选 ",u.length," 个)"]})]}),e.jsxs(y,{"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&&q(x.id),disabled:f,children:[e.jsx(de,{"code-path":"src/components/server/CloudServerImport.tsx:350:17",className:`h-3 w-3 mr-1 ${f?"animate-spin":""}`}),f?"同步中...":"刷新区域"]})]}),f?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:356:15",className:"text-center py-12",children:[e.jsx(de,{"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:"正在从云平台同步区域列表..."})]}):j.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(We,{"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(y,{"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&&q(x.id),children:[e.jsx(de,{"code-path":"src/components/server/CloudServerImport.tsx:370:19",className:"h-3 w-3 mr-1"}),"立即同步"]})]}):e.jsxs(e.Fragment,{children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:377:17",className:"flex items-center gap-2",children:[e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:378:19",className:"relative flex-1",children:[e.jsx(Nr,{"code-path":"src/components/server/CloudServerImport.tsx:379:21",className:"h-4 w-4 absolute left-3 top-1/2 -translate-y-1/2 text-[var(--dg-text-muted)]"}),e.jsx(V,{"code-path":"src/components/server/CloudServerImport.tsx:380:21",placeholder:"搜索区域名称或编码...",value:l,onChange:s=>N(s.target.value),className:"pl-9 bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]"})]}),e.jsx(y,{"code-path":"src/components/server/CloudServerImport.tsx:387:19",variant:"outline",size:"sm",onClick:Te,className:"border-[var(--dg-border)]",children:u.length===j.length&&j.length>0?"取消全选":"全选"})]}),e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:393:17",className:"border rounded-lg border-[var(--dg-border)] overflow-hidden max-h-[300px] overflow-y-auto",children:e.jsxs("table",{"code-path":"src/components/server/CloudServerImport.tsx:394:19",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/server/CloudServerImport.tsx:395:21",className:"bg-[var(--dg-bg-secondary)] sticky top-0",children:e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:396:23",children:[e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:397:25",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)] w-10",children:e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:398:27",checked:u.length===j.length&&j.length>0,onCheckedChange:Te})}),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:oe.map(s=>e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:410:25",className:`cursor-pointer hover:bg-[var(--dg-bg-hover)] ${u.includes(s.code)?"bg-blue-500/10":""}`,onClick:()=>{I(R=>R.includes(s.code)?R.filter(ae=>ae!==s.code):[...R,s.code])},children:[e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:421:27",className:"px-3 py-2",children:e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:422:29",checked:u.includes(s.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:s.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:s.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:s.endpoint||"-"})]},s.id||s.code))})]})})]})]}),o===4&&e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:439:11",className:"space-y-4",children:E?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:442:15",className:"text-center py-12",children:[e.jsx(cr,{"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(O,{"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:["成功导入 ",E.imported," 台"]}),E.skipped>0&&e.jsxs(O,{"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:["跳过 ",E.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:["已选 ",u.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(y,{"code-path":"src/components/server/CloudServerImport.tsx:468:25",variant:"outline",size:"sm",onClick:Re,className:"border-[var(--dg-border)]",children:k.length===h.length&&h.length>0?"取消全选":"全选"}),e.jsxs(O,{"code-path":"src/components/server/CloudServerImport.tsx:471:25",className:"bg-blue-500/20 text-blue-400 border-0",children:["已选 ",k.length," 台"]})]}),e.jsxs(y,{"code-path":"src/components/server/CloudServerImport.tsx:476:21",variant:"outline",size:"sm",onClick:me,disabled:D||u.length===0,className:"border-[var(--dg-border)] text-blue-400",children:[e.jsx(de,{"code-path":"src/components/server/CloudServerImport.tsx:483:23",className:`h-3 w-3 mr-1 ${D?"animate-spin":""}`}),D?"发现中...":h.length>0?"重新发现":"发现主机"]})]})]}),e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:490:17",className:"flex flex-wrap gap-1",children:u.map(s=>{const R=j.find(ae=>ae.code===s);return e.jsxs(O,{"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(We,{"code-path":"src/components/server/CloudServerImport.tsx:495:25",className:"h-3 w-3 mr-1"}),R?.name||s]},s)})}),L.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(Ae,{"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:"部分区域发现失败:"}),L.map((s,R)=>e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:509:25",className:"text-xs mt-1 opacity-80",children:s},R))]})]}),D?e.jsxs("div",{"code-path":"src/components/server/CloudServerImport.tsx:517:19",className:"text-center py-12",children:[e.jsx(de,{"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&&!D?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(ze,{"code-path":"src/components/server/CloudServerImport.tsx:524:21",className:"h-10 w-10 mx-auto mb-3 opacity-50"}),e.jsx("p",{"code-path":"src/components/server/CloudServerImport.tsx:525:21",children:'点击"发现主机"按钮,开始扫描所选区域'})]}):e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:528:19",className:"border rounded-lg border-[var(--dg-border)] overflow-hidden max-h-[300px] overflow-y-auto",children:e.jsxs("table",{"code-path":"src/components/server/CloudServerImport.tsx:529:21",className:"w-full",children:[e.jsx("thead",{"code-path":"src/components/server/CloudServerImport.tsx:530:23",className:"bg-[var(--dg-bg-secondary)] sticky top-0",children:e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:531:25",children:[e.jsx("th",{"code-path":"src/components/server/CloudServerImport.tsx:532:27",className:"px-3 py-2 text-left text-xs font-medium text-[var(--dg-text-secondary)] w-10",children:e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:533:29",checked:k.length===h.length&&h.length>0,onCheckedChange:Re})}),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(s=>e.jsxs("tr",{"code-path":"src/components/server/CloudServerImport.tsx:544:27",className:`cursor-pointer hover:bg-[var(--dg-bg-hover)] ${k.includes(s.instance_id)?"bg-blue-500/10":""}`,onClick:()=>Ve(s.instance_id),children:[e.jsx("td",{"code-path":"src/components/server/CloudServerImport.tsx:549:29",className:"px-3 py-2",children:e.jsx(ge,{"code-path":"src/components/server/CloudServerImport.tsx:550:31",checked:k.includes(s.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:s.instance_name||s.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:s.private_ip||s.public_ip||"-"})]},s.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(V,{"code-path":"src/components/server/CloudServerImport.tsx:571:23",type:"number",placeholder:"22",value:Y,onChange:s=>U(s.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:$,onChange:s=>K(s.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:"不使用凭据"}),re.map(s=>e.jsxs("option",{"code-path":"src/components/server/CloudServerImport.tsx:591:27",value:String(s.id),children:[s.type==="ssh_key"?"🔑":"🔒"," ",s.name]},s.id))]})]})]})]})}),e.jsxs(Qe,{"code-path":"src/components/server/CloudServerImport.tsx:605:9",className:"flex justify-between items-center",children:[e.jsx("div",{"code-path":"src/components/server/CloudServerImport.tsx:606:11",children:o>1&&!E&&e.jsxs(y,{"code-path":"src/components/server/CloudServerImport.tsx:608:15",variant:"outline",onClick:Se,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:[e.jsx(Xe,{"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:E?e.jsx(y,{"code-path":"src/components/server/CloudServerImport.tsx:616:15",onClick:je,className:"bg-blue-600 hover:bg-blue-700",children:"完成"}):e.jsxs(e.Fragment,{children:[e.jsx(y,{"code-path":"src/components/server/CloudServerImport.tsx:621:17",variant:"outline",onClick:je,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:"取消"}),o<4?e.jsxs(y,{"code-path":"src/components/server/CloudServerImport.tsx:625:19",onClick:z,disabled:o===1&&!b||o===2&&!x||o===3&&u.length===0,className:"bg-blue-600 hover:bg-blue-700",children:["下一步",e.jsx(Ce,{"code-path":"src/components/server/CloudServerImport.tsx:635:21",className:"h-4 w-4 ml-1"})]}):e.jsx(y,{"code-path":"src/components/server/CloudServerImport.tsx:638:19",onClick:se,disabled:k.length===0||S,className:"bg-emerald-600 hover:bg-emerald-700",children:S?e.jsxs(e.Fragment,{children:[e.jsx(de,{"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(ue,{"code-path":"src/components/server/CloudServerImport.tsx:650:25",className:"h-4 w-4 mr-1"}),"确认导入 (",k.length,")"]})})]})})]})]})})}function fs({open:r,onOpenChange:p,serverId:c,serverName:a,serverIp:o,hasAuth:v=!0}){const b=t.useRef(null),g=t.useRef(null),x=t.useRef(null),_=t.useRef(null),[j,C]=t.useState(!1),[u,I]=t.useState(!1),[l,N]=t.useState([]),[f,i]=t.useState(""),[h,F]=t.useState(!1),[k,H]=t.useState(v);t.useEffect(()=>{!r||v||rr.list().then(w=>N(w?.list||[])).catch(()=>{})},[r,v]);const D=async()=>{if(!(!f||!c))try{F(!0),await hs.assign(c,Number(f)),W.success("凭据已关联"),H(!0)}catch(w){W.error(w?.message||"关联失败")}finally{F(!1)}};return t.useEffect(()=>{r||(H(v),i(""))},[r,v]),t.useEffect(()=>{if(!r||!c||!k)return;const w=new ps.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)"}}),L=new ms.FitAddon;w.loadAddon(L),g.current=w,_.current=L;const m=location.protocol==="https:"?"wss":"ws",S=ir.getState().token||"",M=`${m}://${location.host}/ws/terminal?id=${c}&cols=80&rows=24&token=${encodeURIComponent(S)}`,E=new WebSocket(M);return x.current=E,w.onData(A=>{E.readyState===WebSocket.OPEN&&E.send(JSON.stringify({status:0,data:A}))}),E.onmessage=A=>{try{const Y=JSON.parse(A.data);Y.status===0&&typeof Y.data=="string"&&w.write(Y.data)}catch{w.write(typeof A.data=="string"?A.data:"")}},E.onopen=()=>{C(!0),xs(w,L,()=>b.current,E)},E.onclose=()=>{C(!1),w.write(`\r
|
||
\x1B[31m[连接已关闭]\x1B[0m\r
|
||
`)},E.onerror=()=>{w.write(`\r
|
||
\x1B[31m[连接发生错误]\x1B[0m\r
|
||
`)},()=>{try{E.close(),w.dispose()}catch{}g.current=null,x.current=null,C(!1)}},[r,c,k]),t.useEffect(()=>{if(!r||!k)return;let w,L=0;const m=()=>{const S=b.current,M=_.current,E=g.current,A=x.current;if(!S||!M||!E){L++<30&&requestAnimationFrame(m);return}w=is(S,M,E,A);try{vs(M,E,A)}catch{}};return m(),()=>w?.()},[r,k,u]),e.jsx(Ie,{"code-path":"src/components/server/TerminalDialog.tsx:184:5",open:r,onOpenChange:p,children:e.jsxs(Fe,{"code-path":"src/components/server/TerminalDialog.tsx:185:7",showCloseButton:!1,className:ie("bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] p-0 gap-0","!duration-0 !transition-none",u?"!max-w-none !w-screen !h-screen !rounded-none !translate-x-0 !translate-y-0 !left-0 !top-0":""),style:u?{maxWidth:"100vw",width:"100vw",height:"100vh"}:{maxWidth:"960px",width:"92vw"},children:[e.jsxs(ke,{"code-path":"src/components/server/TerminalDialog.tsx:197:9",className:"sr-only",children:["终端 - ",a]}),e.jsx(Ee,{"code-path":"src/components/server/TerminalDialog.tsx:198:9",className:"sr-only",children:"SSH 终端连接"}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:200:9",className:"flex items-center justify-between px-4 py-2 border-b border-[var(--dg-border)]",children:[e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:201:11",className:"flex items-center gap-2 text-sm",children:[e.jsx("div",{"code-path":"src/components/server/TerminalDialog.tsx:202:13",className:ie("w-2 h-2 rounded-full",j?"bg-emerald-400":"bg-red-400")}),e.jsx("span",{"code-path":"src/components/server/TerminalDialog.tsx:203:13",className:"text-[var(--dg-text-primary)] font-medium",children:a}),e.jsxs("span",{"code-path":"src/components/server/TerminalDialog.tsx:204:13",className:"text-[var(--dg-text-muted)]",children:["(",o,")"]})]}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:206:11",className:"flex items-center gap-1",children:[e.jsx("button",{"code-path":"src/components/server/TerminalDialog.tsx:207:13",onClick:()=>I(!u),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:u?e.jsx(yr,{"code-path":"src/components/server/TerminalDialog.tsx:211:29",className:"h-4 w-4"}):e.jsx(fr,{"code-path":"src/components/server/TerminalDialog.tsx:211:65",className:"h-4 w-4"})}),e.jsx("button",{"code-path":"src/components/server/TerminalDialog.tsx:213:13",onClick:()=>p(!1),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:e.jsx(be,{"code-path":"src/components/server/TerminalDialog.tsx:217:15",className:"h-4 w-4"})})]})]}),!k&&e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:223:11",className:"p-6 flex flex-col items-center justify-center gap-4",style:{height:"480px"},children:[e.jsx(wr,{"code-path":"src/components/server/TerminalDialog.tsx:224:13",className:"h-12 w-12 text-amber-400"}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:225:13",className:"text-center",children:[e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:226:15",className:"text-[var(--dg-text-primary)] font-medium mb-1",children:"服务器未配置认证凭据"}),e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:227:15",className:"text-sm text-[var(--dg-text-muted)]",children:"请选择一个凭据用于 SSH 连接"})]}),l.length===0?e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:230:15",className:"text-xs text-[var(--dg-text-muted)]",children:"暂无可用凭据,请先去「凭证配置」添加"}):e.jsxs("select",{"code-path":"src/components/server/TerminalDialog.tsx:232:15",value:f,onChange:w=>i(w.target.value),className:"w-64 px-3 py-2 bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] rounded-md text-[var(--dg-text-primary)] text-sm",children:[e.jsx("option",{"code-path":"src/components/server/TerminalDialog.tsx:237:17",value:"",children:"-- 选择凭据 --"}),l.map(w=>e.jsxs("option",{"code-path":"src/components/server/TerminalDialog.tsx:239:19",value:String(w.id),children:[w.type==="ssh_key"?"🔑":"🔒"," ",w.name]},w.id))]}),e.jsx(y,{"code-path":"src/components/server/TerminalDialog.tsx:245:13",onClick:D,disabled:!f||h,className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",children:h?"关联中...":"确认连接"})]}),k&&e.jsx("div",{"code-path":"src/components/server/TerminalDialog.tsx:256:11",ref:b,className:"xterm-terminal-host",style:{height:u?"calc(100vh - 49px)":"520px"}})]})})}const ws=r=>r<1024?`${r} B`:r<1048576?`${(r/1024).toFixed(1)} KB`:`${(r/1048576).toFixed(2)} MB`;function Cs({open:r,onOpenChange:p,serverId:c,serverName:a}){const[o,v]=t.useState([]),[b,g]=t.useState([]),[x,_]=t.useState("/"),[j,C]=t.useState(!1),[u,I]=t.useState(""),[l,N]=t.useState(!1),[f,i]=t.useState(!1),h=t.useRef(null),F=t.useCallback(async m=>{if(c){C(!0),I("");try{const S=await ee.listFiles(c,m),M=S?.data||S;v(M.items||[]),g(M.breadcrumbs||[]),_(M.path||m)}catch(S){I(S?.message||"加载目录失败"),v([])}finally{C(!1)}}},[c]);t.useEffect(()=>{r&&c&&(i(!1),F("/"))},[r,c,F]);const k=async m=>{if(c)try{await ee.downloadFile(c,m)}catch(S){I("下载失败: "+(S?.message||""))}},H=async m=>{const S=m.target.files?.[0];if(!(!S||!c)){N(!0);try{await ee.uploadFile(c,x,S),await F(x)}catch(M){I(M?.message||"上传失败")}finally{N(!1),h.current&&(h.current.value="")}}},D=async(m,S)=>{if(!(!c||!confirm(`确认删除 ${S?"目录":"文件"} "${m}"?`)))try{await ee.deleteFile(c,m),await F(x)}catch(M){I(M?.message||"删除失败")}},w=async()=>{const m=prompt("输入目录名:");if(!m||!c)return;const S=x==="/"?`/${m}`:`${x}/${m}`;try{await ee.mkdir(c,S),await F(x)}catch(M){I(M?.message||"创建失败")}},L=[...o].sort((m,S)=>m.is_dir!==S.is_dir?m.is_dir?-1:1:m.name.localeCompare(S.name));return e.jsx(Ie,{"code-path":"src/components/server/ServerFileBrowser.tsx:145:5",open:r,onOpenChange:p,children:e.jsxs(Fe,{"code-path":"src/components/server/ServerFileBrowser.tsx:146:7",showCloseButton:!1,onInteractOutside:m=>{l&&m.preventDefault()},className:ie("bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] p-0 gap-0","!duration-0 !transition-none",f?"!max-w-none !w-screen !h-screen !rounded-none":""),style:f?{maxWidth:"100vw",width:"100vw",height:"100vh"}:{maxWidth:"95vw",width:"1100px",maxHeight:"92vh"},children:[e.jsxs(ke,{"code-path":"src/components/server/ServerFileBrowser.tsx:164:9",className:"sr-only",children:["文件浏览 — ",a]}),e.jsx(Ee,{"code-path":"src/components/server/ServerFileBrowser.tsx:165:9",className:"sr-only",children:"SFTP 文件管理 · 上传 · 下载 · 删除"}),e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:168:9",className:"flex items-center justify-between px-4 py-2.5 border-b border-[var(--dg-border)] shrink-0",children:[e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:169:11",className:"flex items-center gap-2 min-w-0",children:[e.jsx(Cr,{"code-path":"src/components/server/ServerFileBrowser.tsx:170:13",className:"h-4 w-4 text-[var(--dg-blue)] shrink-0"}),e.jsx("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:171:13",className:"text-[var(--dg-text-primary)] font-medium text-sm truncate",children:a}),e.jsx("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:174:13",className:"text-[var(--dg-text-muted)] text-xs",children:"· SFTP 文件管理"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:176:11",className:"flex items-center gap-1",children:[e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:177:13",onClick:()=>i(!f),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",title:f?"退出全屏":"全屏",children:f?e.jsx(yr,{"code-path":"src/components/server/ServerFileBrowser.tsx:182:29",className:"h-4 w-4"}):e.jsx(fr,{"code-path":"src/components/server/ServerFileBrowser.tsx:182:65",className:"h-4 w-4"})}),e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:184:13",onClick:()=>p(!1),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:e.jsx(be,{"code-path":"src/components/server/ServerFileBrowser.tsx:188:15",className:"h-4 w-4"})})]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:194:9",className:"flex items-center gap-2 px-4 py-2 border-b border-[var(--dg-border)] bg-[var(--dg-bg-primary)] shrink-0",children:[e.jsxs(y,{"code-path":"src/components/server/ServerFileBrowser.tsx:195:11",variant:"outline",size:"sm",className:"border-[var(--dg-border)] h-8",onClick:()=>F(x),children:[e.jsx(de,{"code-path":"src/components/server/ServerFileBrowser.tsx:197:13",className:"h-3.5 w-3.5 mr-1"}),"刷新"]}),e.jsxs("label",{"code-path":"src/components/server/ServerFileBrowser.tsx:199:11",children:[e.jsxs(y,{"code-path":"src/components/server/ServerFileBrowser.tsx:200:13",variant:"outline",size:"sm",className:"border-[var(--dg-border)] h-8 cursor-pointer",onClick:()=>h.current?.click(),disabled:l,children:[l?e.jsx(He,{"code-path":"src/components/server/ServerFileBrowser.tsx:202:28",className:"h-3.5 w-3.5 mr-1 animate-spin"}):e.jsx(Ye,{"code-path":"src/components/server/ServerFileBrowser.tsx:202:84",className:"h-3.5 w-3.5 mr-1"}),"上传"]}),e.jsx("input",{"code-path":"src/components/server/ServerFileBrowser.tsx:205:13",ref:h,type:"file",className:"hidden",onChange:H})]}),e.jsxs(y,{"code-path":"src/components/server/ServerFileBrowser.tsx:207:11",variant:"outline",size:"sm",className:"border-[var(--dg-border)] h-8",onClick:w,children:[e.jsx(Zr,{"code-path":"src/components/server/ServerFileBrowser.tsx:209:13",className:"h-3.5 w-3.5 mr-1"}),"新建目录"]}),u&&e.jsxs(O,{"code-path":"src/components/server/ServerFileBrowser.tsx:212:13",variant:"outline",className:"border-red-500/30 text-red-400 ml-auto",children:[e.jsx(be,{"code-path":"src/components/server/ServerFileBrowser.tsx:213:15",className:"h-3 w-3 mr-1 cursor-pointer",onClick:()=>I("")}),u]})]}),e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:220:9",className:"flex items-center gap-0.5 px-4 py-2 text-xs border-b border-[var(--dg-border)] bg-[var(--dg-bg-tertiary)] overflow-x-auto shrink-0",children:b.map((m,S)=>e.jsxs("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:222:13",className:"flex items-center gap-0.5",children:[S===0?e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:224:17",onClick:()=>F("/"),className:"text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] p-0.5",children:e.jsx(es,{"code-path":"src/components/server/ServerFileBrowser.tsx:228:19",className:"h-3.5 w-3.5"})}):e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:231:17",onClick:()=>F(m.path),className:"text-[var(--dg-blue)] hover:underline truncate max-w-[150px]",children:m.name}),S<b.length-1&&e.jsx(Ce,{"code-path":"src/components/server/ServerFileBrowser.tsx:239:17",className:"h-3 w-3 text-[var(--dg-text-muted)] shrink-0"})]},m.path))}),e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:246:9",className:"overflow-y-auto flex-1",style:{height:f?"calc(100vh - 110px)":"min(55vh, 600px)"},children:j?e.jsx("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:250:13",className:"flex items-center justify-center h-full py-16",children:e.jsx(He,{"code-path":"src/components/server/ServerFileBrowser.tsx:251:15",className:"h-6 w-6 animate-spin text-[var(--dg-blue)]"})}):L.length===0?e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:254:13",className:"flex flex-col items-center justify-center py-16 text-[var(--dg-text-muted)]",children:[e.jsx(nr,{"code-path":"src/components/server/ServerFileBrowser.tsx:255:15",className:"h-10 w-10 mb-2 opacity-30"}),e.jsx("p",{"code-path":"src/components/server/ServerFileBrowser.tsx:256:15",className:"text-sm",children:"空目录"})]}):e.jsxs("table",{"code-path":"src/components/server/ServerFileBrowser.tsx:259:13",className:"w-full text-sm",children:[e.jsx("thead",{"code-path":"src/components/server/ServerFileBrowser.tsx:260:15",className:"sticky top-0 bg-[var(--dg-bg-primary)] border-b border-[var(--dg-border)] z-10",children:e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:261:17",className:"text-left text-[var(--dg-text-muted)] text-xs",children:[e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:262:19",className:"py-2 pl-4 w-8 font-medium"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:263:19",className:"py-2 font-medium",children:"名称"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:264:19",className:"py-2 px-2 font-medium w-28 text-right",children:"大小"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:265:19",className:"py-2 px-2 font-medium w-44 hidden sm:table-cell",children:"修改时间"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:266:19",className:"py-2 px-2 font-medium w-24 hidden md:table-cell",children:"权限"}),e.jsx("th",{"code-path":"src/components/server/ServerFileBrowser.tsx:267:19",className:"py-2 pr-4 pl-2 font-medium w-24 text-center",children:"操作"})]})}),e.jsxs("tbody",{"code-path":"src/components/server/ServerFileBrowser.tsx:270:15",children:[x!=="/"&&e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:272:19",className:"border-b border-[var(--dg-border)] hover:bg-[var(--dg-bg-hover)] cursor-pointer",onClick:()=>{const m=x.split("/").slice(0,-1).join("/")||"/";F(m)},children:[e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:277:21",className:"py-2 pl-4",children:e.jsx(rs,{"code-path":"src/components/server/ServerFileBrowser.tsx:277:47",className:"h-4 w-4 text-[var(--dg-text-muted)]"})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:278:21",className:"py-2 text-[var(--dg-text-secondary)]",colSpan:5,children:".."})]}),L.map(m=>e.jsxs("tr",{"code-path":"src/components/server/ServerFileBrowser.tsx:282:19",className:"border-b border-[var(--dg-border)] hover:bg-[var(--dg-bg-hover)]",children:[e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:285:21",className:"py-2 pl-4",children:m.is_dir?e.jsx(nr,{"code-path":"src/components/server/ServerFileBrowser.tsx:287:25",className:"h-4 w-4 text-amber-400"}):e.jsx(ss,{"code-path":"src/components/server/ServerFileBrowser.tsx:289:25",className:"h-4 w-4 text-sky-400"})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:292:21",className:"py-2",children:m.is_dir?e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:294:25",onClick:()=>F(m.path),className:"text-[var(--dg-text-primary)] hover:text-[var(--dg-blue)] hover:underline font-medium cursor-pointer",children:m.name}):e.jsx("span",{"code-path":"src/components/server/ServerFileBrowser.tsx:301:25",className:"text-[var(--dg-text-primary)]",children:m.name})}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:304:21",className:"py-2 px-2 text-right text-[var(--dg-text-muted)]",children:m.is_dir?"-":ws(m.size)}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:307:21",className:"py-2 px-2 text-[var(--dg-text-muted)] hidden sm:table-cell",children:m.mod_time}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:308:21",className:"py-2 px-2 text-[var(--dg-text-muted)] font-mono text-xs hidden md:table-cell",children:m.mode}),e.jsx("td",{"code-path":"src/components/server/ServerFileBrowser.tsx:309:21",className:"py-2 pr-4 pl-2",children:e.jsxs("div",{"code-path":"src/components/server/ServerFileBrowser.tsx:310:23",className:"flex items-center justify-center gap-1",children:[!m.is_dir&&e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:312:27",onClick:S=>{S.stopPropagation(),k(m.path)},className:"p-1 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)] hover:text-white",title:"下载",children:e.jsx(Ze,{"code-path":"src/components/server/ServerFileBrowser.tsx:317:29",className:"h-3.5 w-3.5"})}),e.jsx("button",{"code-path":"src/components/server/ServerFileBrowser.tsx:320:25",onClick:S=>{S.stopPropagation(),D(m.path,m.is_dir)},className:"p-1 rounded hover:bg-[var(--dg-bg-hover)] text-red-400 hover:text-red-300",title:"删除",children:e.jsx(er,{"code-path":"src/components/server/ServerFileBrowser.tsx:325:27",className:"h-3.5 w-3.5"})})]})})]},m.path))]})]})})]})})}function lr(r){const p=[];let c="",a=!1;for(let o=0;o<r.length;o++){const v=r[o];a?v==='"'?r[o+1]==='"'?(c+='"',o++):a=!1:c+=v:v==='"'?a=!0:v===","?(p.push(c),c=""):c+=v}return p.push(c),p.map(o=>o.trim())}function Is(r){const p=r.replace(/\r\n/g,`
|
||
`).replace(/\r/g,`
|
||
`).split(`
|
||
`).filter(o=>o.trim());if(p.length<2)return[];const c=lr(p[0]).map(o=>o.toLowerCase()),a=[];for(let o=1;o<p.length;o++){const v=lr(p[o]),b={};c.forEach((g,x)=>{b[g]=v[x]??""}),a.push(b)}return a}function Fs(r){return/^(\d{1,3}\.){3}\d{1,3}$/.test(r)&&r.split(".").every(p=>Number(p)>=0&&Number(p)<=255)}function ks(){const r=["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(`
|
||
`),p=new Blob(["\uFEFF"+r],{type:"text/csv;charset=utf-8;"}),c=URL.createObjectURL(p),a=document.createElement("a");a.href=c,a.download="servers-template.csv",a.click(),URL.revokeObjectURL(c)}function Es({open:r,onClose:p}){const[c,a]=t.useState(1),[o,v]=t.useState(""),[,b]=t.useState("password"),[g,x]=t.useState(null),[_,j]=t.useState(!1),[C,u]=t.useState([]),[I,l]=t.useState([]),[N,f]=t.useState(!1),[i,h]=t.useState([]),[F,k]=t.useState(""),[H,D]=t.useState("22");t.useEffect(()=>{if(!r)return;let d=!1;return(async()=>{try{const[$,K]=await Promise.all([gs.list(),rr.list()]);if(d)return;const Q=$?.list??[];l(Q.map(B=>({id:String(B.id??""),name:B.name??"",code:B.code??""}))),h(K?.list??[])}catch{d||(l([]),h([]))}})(),()=>{d=!0}},[r]);const w=async()=>{if(c===2&&g){j(!0);try{const d=await g.text(),$=Is(d);if($.length===0){W.error("文件无有效数据,请使用模板格式(首行为表头)"),j(!1);return}const K=new Set,Q=$.map((B,J)=>{const q=(B.hostname??"").trim(),P=(B.ip??"").trim(),me={row:J+2,hostname:q,ip:P,port:Number(B.port)||22,username:(B.username??"").trim()||"root",os:B.os??"",cpu:Number(B.cpu)||0,memory:Number(B.memory)||0,disk:Number(B.disk)||0,tags:B.tags??"",status:"valid",message:"有效"},se=[];q||se.push("主机名缺失"),P?Fs(P)||se.push("IP格式错误"):se.push("IP缺失");const z=`${q}|${P}`;return q&&P&&K.has(z)?se.push("重复行"):K.add(z),se.length>0&&(me.status="error",me.message=se.join("、")),me});u(Q),a(c+1)}catch{W.error("文件解析失败,请确认是 CSV 格式")}finally{j(!1)}}else a(c+1)},L=()=>{c>1&&a(c-1)},m=d=>{d.target.files&&d.target.files[0]&&x(d.target.files[0])},S=()=>{a(1),v(""),D("22"),k(""),x(null),u([])},M=async()=>{const d=C.filter($=>$.status==="valid");if(d.length!==0){f(!0);try{const $=d.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})),Q=await ee.batchCreate({servers:$,region_id:o||void 0,credential_id:F?Number(F):void 0,default_port:Number(H)||22})??{},B=Q.success??0,J=Q.skipped??0,q=Q.failed??0;W.success(`导入完成:成功 ${B},跳过 ${J},失败 ${q}`),S(),p()}catch($){W.error($?.message||"导入失败,请重试")}finally{f(!1)}}},E=()=>{p(),S()},A=C.filter(d=>d.status==="valid").length,Y=C.filter(d=>d.status==="warning").length,U=C.filter(d=>d.status==="error").length,re=[{id:1,title:"配置"},{id:2,title:"上传"},{id:3,title:"确认"}];return e.jsx(Ie,{"code-path":"src/components/server/ExcelServerImport.tsx:278:5",open:r,onOpenChange:E,children:e.jsxs(Fe,{"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(Ke,{"code-path":"src/components/server/ExcelServerImport.tsx:280:9",children:[e.jsx(ke,{"code-path":"src/components/server/ExcelServerImport.tsx:281:11",className:"text-xl",children:"CSV 批量导入服务器"}),e.jsx(Ee,{"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:re.map((d,$)=>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 ${c===d.id?"bg-blue-600 text-white":c>d.id?"bg-emerald-600 text-white":"bg-[var(--dg-bg-secondary)] text-[var(--dg-text-muted)]"}`,children:c>d.id?e.jsx(ue,{"code-path":"src/components/server/ExcelServerImport.tsx:296:32",className:"h-4 w-4"}):d.id}),e.jsx("span",{"code-path":"src/components/server/ExcelServerImport.tsx:298:15",className:`ml-2 text-sm ${c===d.id?"text-[var(--dg-text-primary)]":"text-[var(--dg-text-muted)]"}`,children:d.title}),$<re.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"})]},d.id))}),c===1&&e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:310:11",className:"space-y-6",children:[e.jsx(fe,{"code-path":"src/components/server/ExcelServerImport.tsx:312:13",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(we,{"code-path":"src/components/server/ExcelServerImport.tsx:313:15",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:314:17",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:315:19",className:"flex items-center gap-3",children:[e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:316:21",className:"w-10 h-10 rounded-lg bg-emerald-500/20 flex items-center justify-center",children:e.jsx(Ge,{"code-path":"src/components/server/ExcelServerImport.tsx:317:23",className:"h-5 w-5 text-emerald-400"})}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:319:21",children:[e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:320:23",className:"font-medium text-[var(--dg-text-primary)]",children:"主机导入模板"}),e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:321:23",className:"text-xs text-[var(--dg-text-muted)]",children:"下载 CSV 模板,只需填主机名、IP和端口(默认22),Agent安装后自动补全"})]})]}),e.jsxs(y,{"code-path":"src/components/server/ExcelServerImport.tsx:324:19",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",onClick:ks,children:[e.jsx(Ze,{"code-path":"src/components/server/ExcelServerImport.tsx:325:21",className:"h-4 w-4 mr-2"}),"下载模板"]})]})})}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:333:13",children:[e.jsx("label",{"code-path":"src/components/server/ExcelServerImport.tsx:334:15",className:"block text-sm font-medium text-[var(--dg-text-secondary)] mb-2",children:"选择区域"}),e.jsxs("select",{"code-path":"src/components/server/ExcelServerImport.tsx:335:15",value:o,onChange:d=>v(d.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:"请选择区域"}),I.map(d=>e.jsxs("option",{"code-path":"src/components/server/ExcelServerImport.tsx:342:19",value:d.id,children:[d.name," (",d.code,")"]},d.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连接)"})]}),i.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:F,onChange:d=>k(d.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:"不使用凭据(后续手动配置)"}),i.map(d=>e.jsxs("option",{"code-path":"src/components/server/ExcelServerImport.tsx:367:21",value:String(d.id),children:[d.type==="ssh_key"?"🔑":d.type==="api_token"?"🌐":"🔒"," ",d.name," (",d.type==="ssh_key"?"SSH密钥":d.type==="api_token"?"API Token":"密码",")"]},d.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(V,{"code-path":"src/components/server/ExcelServerImport.tsx:381:15",type:"number",placeholder:"22",value:H,onChange:d=>D(d.target.value),className:"w-32 bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]"})]})]}),c===2&&e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:394:11",className:"space-y-6",children:[e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:395:13",className:"border-2 border-dashed border-[var(--dg-border)] rounded-lg p-8 text-center hover:border-blue-500/50 transition-colors",children:[e.jsx(Ye,{"code-path":"src/components/server/ExcelServerImport.tsx:398:15",className:"h-12 w-12 mx-auto mb-4 text-[var(--dg-text-muted)]"}),e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:399:15",className:"text-[var(--dg-text-secondary)] mb-2",children:"点击或拖拽文件到此处上传"}),e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:400:15",className:"text-xs text-[var(--dg-text-muted)] mb-4",children:'支持 CSV 格式文件(可点击左侧"下载模板"获取)'}),e.jsx(V,{"code-path":"src/components/server/ExcelServerImport.tsx:401:15",type:"file",accept:".csv,text/csv",onChange:m,className:"hidden",id:"excel-upload"}),e.jsx("label",{"code-path":"src/components/server/ExcelServerImport.tsx:408:15",htmlFor:"excel-upload",children:e.jsx(y,{"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:"选择文件"})})})]}),g&&e.jsx(fe,{"code-path":"src/components/server/ExcelServerImport.tsx:416:15",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsxs(we,{"code-path":"src/components/server/ExcelServerImport.tsx:417:17",className:"p-3 flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:418:19",className:"flex items-center gap-3",children:[e.jsx(Ge,{"code-path":"src/components/server/ExcelServerImport.tsx:419:21",className:"h-8 w-8 text-emerald-400"}),e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:420:21",children:[e.jsx("p",{"code-path":"src/components/server/ExcelServerImport.tsx:421:23",className:"text-sm text-[var(--dg-text-primary)]",children:g.name}),e.jsxs("p",{"code-path":"src/components/server/ExcelServerImport.tsx:422:23",className:"text-xs text-[var(--dg-text-muted)]",children:[(g.size/1024).toFixed(2)," KB"]})]})]}),e.jsx(y,{"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(be,{"code-path":"src/components/server/ExcelServerImport.tsx:431:21",className:"h-4 w-4"})})]})}),_&&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:"正在解析文件..."})]})]}),c===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(O,{"code-path":"src/components/server/ExcelServerImport.tsx:452:17",className:"bg-emerald-500/20 text-emerald-400 border-0",children:[e.jsx(ue,{"code-path":"src/components/server/ExcelServerImport.tsx:453:19",className:"h-3 w-3 mr-1"}),A," 有效"]}),Y>0&&e.jsxs(O,{"code-path":"src/components/server/ExcelServerImport.tsx:457:19",className:"bg-amber-500/20 text-amber-400 border-0",children:[e.jsx(Ae,{"code-path":"src/components/server/ExcelServerImport.tsx:458:21",className:"h-3 w-3 mr-1"}),Y," 警告"]}),U>0&&e.jsxs(O,{"code-path":"src/components/server/ExcelServerImport.tsx:463:19",className:"bg-red-500/20 text-red-400 border-0",children:[e.jsx(be,{"code-path":"src/components/server/ExcelServerImport.tsx:464:21",className:"h-3 w-3 mr-1"}),U," 错误"]})]})]}),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:C.map(d=>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:d.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:d.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:d.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:[d.status==="valid"&&e.jsxs(O,{"code-path":"src/components/server/ExcelServerImport.tsx:490:29",className:"bg-emerald-500/20 text-emerald-400 border-0 text-xs",children:[e.jsx(ue,{"code-path":"src/components/server/ExcelServerImport.tsx:491:31",className:"h-3 w-3 mr-1"}),d.message]}),d.status==="warning"&&e.jsxs(O,{"code-path":"src/components/server/ExcelServerImport.tsx:496:29",className:"bg-amber-500/20 text-amber-400 border-0 text-xs",children:[e.jsx(Ae,{"code-path":"src/components/server/ExcelServerImport.tsx:497:31",className:"h-3 w-3 mr-1"}),d.message]}),d.status==="error"&&e.jsxs(O,{"code-path":"src/components/server/ExcelServerImport.tsx:502:29",className:"bg-red-500/20 text-red-400 border-0 text-xs",children:[e.jsx(be,{"code-path":"src/components/server/ExcelServerImport.tsx:503:31",className:"h-3 w-3 mr-1"}),d.message]})]})})]},d.row))})]})}),U>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(Ae,{"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:["存在 ",U," 条错误数据,请修正后重新上传"]})]})})]}),e.jsxs(Qe,{"code-path":"src/components/server/ExcelServerImport.tsx:527:9",className:"flex justify-between items-center",children:[e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:528:11",children:c>1&&e.jsxs(y,{"code-path":"src/components/server/ExcelServerImport.tsx:530:15",variant:"outline",onClick:L,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:[e.jsx(Xe,{"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(y,{"code-path":"src/components/server/ExcelServerImport.tsx:537:13",variant:"outline",onClick:E,className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:"取消"}),c<3?e.jsxs(y,{"code-path":"src/components/server/ExcelServerImport.tsx:541:15",onClick:w,disabled:c===1&&!o||c===2&&!g,className:"bg-blue-600 hover:bg-blue-700",children:["下一步",e.jsx(Ce,{"code-path":"src/components/server/ExcelServerImport.tsx:547:17",className:"h-4 w-4 ml-1"})]}):e.jsxs(y,{"code-path":"src/components/server/ExcelServerImport.tsx:550:15",onClick:M,disabled:N||U>0||A===0,className:"bg-emerald-600 hover:bg-emerald-700",children:[N?e.jsx(He,{"code-path":"src/components/server/ExcelServerImport.tsx:556:19",className:"h-4 w-4 mr-1 animate-spin"}):e.jsx(ue,{"code-path":"src/components/server/ExcelServerImport.tsx:558:19",className:"h-4 w-4 mr-1"}),N?"导入中...":`确认导入 (${A})`]})]})]})]})})}var Ue="Collapsible",[Ts]=Or(Ue),[Rs,sr]=Ts(Ue),Ir=t.forwardRef((r,p)=>{const{__scopeCollapsible:c,open:a,defaultOpen:o,disabled:v,onOpenChange:b,...g}=r,[x,_]=$r({prop:a,defaultProp:o??!1,onChange:b,caller:Ue});return e.jsx(Rs,{scope:c,disabled:v,contentId:Dr(),open:x,onOpenToggle:t.useCallback(()=>_(j=>!j),[_]),children:e.jsx(Je.div,{"data-state":or(x),"data-disabled":v?"":void 0,...g,ref:p})})});Ir.displayName=Ue;var Fr="CollapsibleTrigger",kr=t.forwardRef((r,p)=>{const{__scopeCollapsible:c,...a}=r,o=sr(Fr,c);return e.jsx(Je.button,{type:"button","aria-controls":o.contentId,"aria-expanded":o.open||!1,"data-state":or(o.open),"data-disabled":o.disabled?"":void 0,disabled:o.disabled,...a,ref:p,onClick:Lr(r.onClick,o.onOpenToggle)})});kr.displayName=Fr;var tr="CollapsibleContent",Er=t.forwardRef((r,p)=>{const{forceMount:c,...a}=r,o=sr(tr,r.__scopeCollapsible);return e.jsx(zr,{present:c||o.open,children:({present:v})=>e.jsx(_s,{...a,ref:p,present:v})})});Er.displayName=tr;var _s=t.forwardRef((r,p)=>{const{__scopeCollapsible:c,present:a,children:o,...v}=r,b=sr(tr,c),[g,x]=t.useState(a),_=t.useRef(null),j=Hr(p,_),C=t.useRef(0),u=C.current,I=t.useRef(0),l=I.current,N=b.open||g,f=t.useRef(N),i=t.useRef(void 0);return t.useEffect(()=>{const h=requestAnimationFrame(()=>f.current=!1);return()=>cancelAnimationFrame(h)},[]),Ur(()=>{const h=_.current;if(h){i.current=i.current||{transitionDuration:h.style.transitionDuration,animationName:h.style.animationName},h.style.transitionDuration="0s",h.style.animationName="none";const F=h.getBoundingClientRect();C.current=F.height,I.current=F.width,f.current||(h.style.transitionDuration=i.current.transitionDuration,h.style.animationName=i.current.animationName),x(a)}},[b.open,a]),e.jsx(Je.div,{"data-state":or(b.open),"data-disabled":b.disabled?"":void 0,id:b.contentId,hidden:!N,...v,ref:j,style:{"--radix-collapsible-content-height":u?`${u}px`:void 0,"--radix-collapsible-content-width":l?`${l}px`:void 0,...r.style},children:N&&o})});function or(r){return r?"open":"closed"}var Ms=Ir;function Bs({...r}){return e.jsx(Ms,{"code-path":"src/components/ui/collapsible.tsx:6:10","data-slot":"collapsible",...r})}function Ps({...r}){return e.jsx(kr,{"code-path":"src/components/ui/collapsible.tsx:13:5","data-slot":"collapsible-trigger",...r})}function As({...r}){return e.jsx(Er,{"code-path":"src/components/ui/collapsible.tsx:24:5","data-slot":"collapsible-content",...r})}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 $s({open:r,onOpenChange:p,editingId:c,formData:a,setFormData:o,detailsOpen:v,setDetailsOpen:b,onSave:g,formSaving:x}){const _=Vr(),[j,C]=t.useState([]),u=j.filter(l=>{const N=(l.auth_type||l.type||l.secret_type||"").toLowerCase();return N==="key"||N==="password"||N==="ssh_key"||N==="ssh_password"||N.includes("ssh")});t.useEffect(()=>{r&&rr.list().then(l=>{const N=Array.isArray(l)?l:l?.list||l?.data||[];C(N)}).catch(()=>C([]))},[r]);const I=l=>{const N=Number(l);if(!N){o({...a,credential_id:null});return}const f=j.find(i=>i.id===N);f&&o({...a,credential_id:N,username:f.username||"root",auth_type:f.auth_type||"password",password:"",ssh_key:""})};return e.jsx(Ie,{"code-path":"src/components/server/ServerForm.tsx:142:5",open:r,onOpenChange:p,children:e.jsxs(Fe,{"code-path":"src/components/server/ServerForm.tsx:143:7",className:"max-w-2xl bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] max-h-[90vh] overflow-y-auto",children:[e.jsxs(Ke,{"code-path":"src/components/server/ServerForm.tsx:144:9",children:[e.jsxs(ke,{"code-path":"src/components/server/ServerForm.tsx:145:11",className:"text-[var(--dg-text-primary)] flex items-center gap-2",children:[e.jsx(ze,{"code-path":"src/components/server/ServerForm.tsx:146:13",className:"h-5 w-5 text-[var(--dg-blue)]"}),c?"编辑服务器":"添加服务器"]}),e.jsx(Ee,{"code-path":"src/components/server/ServerForm.tsx:149:11",className:"text-[var(--dg-text-muted)]",children:c?"修改服务器资产信息":"录入新的服务器资产到 CMDB"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:154:9",className:"space-y-4 py-2",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:156:11",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:157:13",className:"space-y-1.5",children:[e.jsxs(X,{"code-path":"src/components/server/ServerForm.tsx:158:15",className:"text-[var(--dg-text-secondary)]",children:["主机名 ",e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:159:21",className:"text-red-400",children:"*"})]}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:161:15",placeholder:"web-server-01",value:a.hostname,onChange:l=>o({...a,hostname:l.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:168:13",className:"space-y-1.5",children:[e.jsxs(X,{"code-path":"src/components/server/ServerForm.tsx:169:15",className:"text-[var(--dg-text-secondary)]",children:["IP地址 ",e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:170:22",className:"text-red-400",children:"*"})]}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:172:15",placeholder:"10.0.0.1",value:a.ip,onChange:l=>o({...a,ip:l.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:182:11",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:183:13",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:184:15",className:"text-[var(--dg-text-secondary)]",children:"公网IP"}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:185:15",placeholder:"如 203.0.113.10",value:a.public_ip,onChange:l=>o({...a,public_ip:l.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:192:13",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:193:15",className:"text-[var(--dg-text-secondary)]",children:"SSH端口"}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:194:15",type:"number",placeholder:"22",value:a.port,onChange:l=>o({...a,port:l.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:205:11",className:"space-y-1.5",children:[e.jsxs(X,{"code-path":"src/components/server/ServerForm.tsx:206:13",className:"text-[var(--dg-text-secondary)] flex items-center gap-1.5",children:[e.jsx(Pe,{"code-path":"src/components/server/ServerForm.tsx:207:15",className:"h-3.5 w-3.5"})," SSH 凭证",!c&&!a.credential_id&&e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:208:57",className:"text-red-400 ml-1",children:"*"})]}),e.jsxs($e,{"code-path":"src/components/server/ServerForm.tsx:210:13",value:a.credential_id?String(a.credential_id):"",onValueChange:I,children:[e.jsx(Oe,{"code-path":"src/components/server/ServerForm.tsx:214:15",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(De,{"code-path":"src/components/server/ServerForm.tsx:215:17",placeholder:"选择 SSH 凭证..."})}),e.jsx(Le,{"code-path":"src/components/server/ServerForm.tsx:217:15",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:u.map(l=>e.jsx(G,{"code-path":"src/components/server/ServerForm.tsx:219:19",value:String(l.id),children:e.jsxs("span",{"code-path":"src/components/server/ServerForm.tsx:220:21",className:"flex items-center gap-2",children:[e.jsx(wr,{"code-path":"src/components/server/ServerForm.tsx:221:23",className:"h-3 w-3 text-blue-400"}),l.name," (",l.username,"@",(l.auth_type||"").toLowerCase()==="key"?"密钥":"密码",")"]})},l.id))})]}),u.length===0&&e.jsxs("p",{"code-path":"src/components/server/ServerForm.tsx:230:15",className:"text-xs text-[var(--dg-text-muted)]",children:["暂无可用的 SSH 凭证(仅支持 SSH 密钥 和 SSH 密码 类型)。",e.jsx("span",{"code-path":"src/components/server/ServerForm.tsx:232:17",className:"text-[var(--dg-blue)] hover:underline cursor-pointer ml-1",onClick:()=>{p(!1),_("/credentials")},children:"去系统管理 - 凭证配置创建"})]}),a.credential_id&&e.jsx("p",{"code-path":"src/components/server/ServerForm.tsx:245:15",className:"text-[10px] text-green-400/70",children:"已关联凭证,登录信息从凭证自动获取(登录用户和认证方式由凭证决定)"})]}),e.jsxs(Bs,{"code-path":"src/components/server/ServerForm.tsx:250:11",open:v,onOpenChange:b,children:[e.jsx(Ps,{"code-path":"src/components/server/ServerForm.tsx:251:13",asChild:!0,children:e.jsxs(y,{"code-path":"src/components/server/ServerForm.tsx:252: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:257:17",className:"flex items-center gap-2",children:[e.jsx(ze,{"code-path":"src/components/server/ServerForm.tsx:258:19",className:"h-4 w-4"}),"更多详情(OS版本 / 运行状态 / CPU / 内存 / 磁盘 / 标签 / 描述)"]}),e.jsx(ts,{"code-path":"src/components/server/ServerForm.tsx:261:17",className:ie("h-4 w-4 transition-transform",v&&"rotate-180")})]})}),e.jsxs(As,{"code-path":"src/components/server/ServerForm.tsx:264:13",className:"space-y-4 pt-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:265:15",className:"grid grid-cols-2 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:266:17",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:267:19",className:"text-[var(--dg-text-secondary)]",children:"操作系统"}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:268:19",placeholder:"如 CentOS 7.9",value:a.os,onChange:l=>o({...a,os:l.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:275:17",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:276:19",className:"text-[var(--dg-text-secondary)]",children:"运行状态"}),e.jsxs($e,{"code-path":"src/components/server/ServerForm.tsx:277:19",value:a.status,onValueChange:l=>o({...a,status:l}),children:[e.jsx(Oe,{"code-path":"src/components/server/ServerForm.tsx:281:21",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(De,{"code-path":"src/components/server/ServerForm.tsx:282:23"})}),e.jsxs(Le,{"code-path":"src/components/server/ServerForm.tsx:284:21",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(G,{"code-path":"src/components/server/ServerForm.tsx:285:23",value:"running",children:"运行中"}),e.jsx(G,{"code-path":"src/components/server/ServerForm.tsx:286:23",value:"stopped",children:"已停止"}),e.jsx(G,{"code-path":"src/components/server/ServerForm.tsx:287:23",value:"maintenance",children:"维护中"}),e.jsx(G,{"code-path":"src/components/server/ServerForm.tsx:288:23",value:"offline",children:"离线"})]})]})]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:293:15",className:"grid grid-cols-3 gap-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerForm.tsx:294:17",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:295:19",className:"text-[var(--dg-text-secondary)]",children:"CPU核数"}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:296:19",type:"number",placeholder:"4",value:a.cpu,onChange:l=>o({...a,cpu:l.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:304:17",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:305:19",className:"text-[var(--dg-text-secondary)]",children:"内存 (GB)"}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:306:19",type:"number",placeholder:"8",value:a.memory,onChange:l=>o({...a,memory:l.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:314:17",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:315:19",className:"text-[var(--dg-text-secondary)]",children:"磁盘 (GB)"}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:316:19",type:"number",placeholder:"100",value:a.disk,onChange:l=>o({...a,disk:l.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:325:15",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:326:17",className:"text-[var(--dg-text-secondary)]",children:"标签"}),e.jsx(V,{"code-path":"src/components/server/ServerForm.tsx:327:17",placeholder:'JSON 格式,如 {"project":"web","team":"ops"}',value:a.tags,onChange:l=>o({...a,tags:l.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:334:15",className:"space-y-1.5",children:[e.jsx(X,{"code-path":"src/components/server/ServerForm.tsx:335:17",className:"text-[var(--dg-text-secondary)]",children:"描述"}),e.jsx(us,{"code-path":"src/components/server/ServerForm.tsx:336:17",placeholder:"补充说明...",value:a.description,onChange:l=>o({...a,description:l.target.value}),className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)] placeholder:text-[var(--dg-text-muted)] min-h-[60px]"})]})]})]})]}),e.jsxs(Qe,{"code-path":"src/components/server/ServerForm.tsx:347:9",children:[e.jsx(y,{"code-path":"src/components/server/ServerForm.tsx:348:11",variant:"outline",onClick:()=>p(!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(y,{"code-path":"src/components/server/ServerForm.tsx:355:11",onClick:g,disabled:!a.hostname||!a.ip||x,className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",children:[x?e.jsx(He,{"code-path":"src/components/server/ServerForm.tsx:361:15",className:"h-4 w-4 mr-2 animate-spin"}):e.jsx(os,{"code-path":"src/components/server/ServerForm.tsx:363:15",className:"h-4 w-4 mr-2"}),c?"保存修改":"创建"]})]})]})})}function Tr(r){const p=r.tags;if(!p)return[];if(Array.isArray(p))return p;try{const c=JSON.parse(p);return Array.isArray(c)?c:typeof c=="object"&&c!==null?Object.entries(c).map(([a,o])=>`${a}:${String(o)}`):[String(c)]}catch{return String(p).split(",").map(c=>c.trim()).filter(Boolean)}}function Os(r){switch(r){case"running":return e.jsxs(O,{"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(O,{"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(O,{"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(O,{"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(r){return r>80?"bg-red-400":r>60?"bg-amber-400":"bg-emerald-400"}function Ds({server:r,selected:p,onToggleSelect:c,onOpenTerminal:a,onOpenEdit:o,onOpenFiles:v,onDelete:b}){const{hasPermission:g}=vr(),x=Number(r.cpu_usage||0),_=Number(r.memory_usage||0),j=Tr(r),C=r.memory?Math.round(r.memory/1024):0,u=r.tcp_established||0,I=r.tcp_time_wait||0;r.net_rx_bps,r.net_tx_bps;const l=r.disk_read_bps||0,N=r.disk_write_bps||0,f=i=>i>=1e6?(i/1e6).toFixed(1)+"MB/s":i>=1e3?(i/1e3).toFixed(1)+"KB/s":i.toFixed(0)+"B/s";return e.jsxs(Be,{"code-path":"src/components/server/ServerTableRow.tsx:58:5",className:"border-[var(--dg-border)] hover:bg-[var(--dg-bg-tertiary)]/50",children:[e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:59:7",children:e.jsx(ge,{"code-path":"src/components/server/ServerTableRow.tsx:60:9",checked:p,onCheckedChange:()=>c(r.id),className:"border-[var(--dg-border)]"})}),e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:66:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:67:9",className:"flex items-center gap-2",children:[e.jsx(ze,{"code-path":"src/components/server/ServerTableRow.tsx:68:11",className:"h-4 w-4 text-[var(--dg-text-muted)]"}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:69:11",children:[e.jsx("p",{"code-path":"src/components/server/ServerTableRow.tsx:70:13",className:"font-medium text-[var(--dg-text-primary)]",children:r.hostname}),e.jsx("p",{"code-path":"src/components/server/ServerTableRow.tsx:71:13",className:"text-xs text-[var(--dg-text-muted)]",children:r.os})]})]})}),e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:75:7",children:e.jsx("code",{"code-path":"src/components/server/ServerTableRow.tsx:76:9",className:"text-sm text-[var(--dg-text-secondary)] bg-[var(--dg-bg-tertiary)] px-2 py-0.5 rounded",children:r.ip})}),e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:80:7",children:r.public_ip?e.jsx("code",{"code-path":"src/components/server/ServerTableRow.tsx:82:11",className:"text-sm text-[var(--dg-cyan)] bg-[var(--dg-cyan)]/10 px-2 py-0.5 rounded",children:r.public_ip}):e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:86:11",className:"text-sm text-[var(--dg-text-muted)]",children:"-"})}),e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:89:7",children:Os(r.status)}),e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:90:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:91:9",className:"text-sm text-[var(--dg-text-secondary)]",children:[e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:92:11",className:"text-[var(--dg-text-muted)]",children:[r.cpu,"核"]}),e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:93:11",className:"mx-1 text-[var(--dg-text-muted)] opacity-50",children:"/"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:94:11",className:"text-[var(--dg-text-muted)]",children:[C,"GB"]}),e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:95:11",className:"mx-1 text-[var(--dg-text-muted)] opacity-50",children:"/"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:96:11",className:"text-[var(--dg-text-muted)]",children:[r.disk,"GB"]})]})}),e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:99:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:100:9",className:"space-y-1",children:[e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:101:11",className:"flex items-center gap-2",children:[e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:102:13",className:"text-xs text-[var(--dg-text-muted)] w-8",children:"CPU"}),e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:103:13",className:"w-16 h-1.5 bg-[var(--dg-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:104:15",className:ie("h-full rounded-full",mr(x)),style:{width:`${x}%`}})}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:109:13",className:"text-xs text-[var(--dg-text-secondary)]",children:[x.toFixed(1),"%"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:111:11",className:"flex items-center gap-2",children:[e.jsx("span",{"code-path":"src/components/server/ServerTableRow.tsx:112:13",className:"text-xs text-[var(--dg-text-muted)] w-8",children:"内存"}),e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:113:13",className:"w-16 h-1.5 bg-[var(--dg-bg-tertiary)] rounded-full overflow-hidden",children:e.jsx("div",{"code-path":"src/components/server/ServerTableRow.tsx:114:15",className:ie("h-full rounded-full",mr(_)),style:{width:`${_}%`}})}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:119:13",className:"text-xs text-[var(--dg-text-secondary)]",children:[_.toFixed(1),"%"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:121:11",className:"flex items-center gap-1 text-xs text-[var(--dg-text-muted)] pt-0.5",children:[e.jsx(as,{"code-path":"src/components/server/ServerTableRow.tsx:122:13",className:"h-3 w-3"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:123:13",children:[u,"连接"]}),I>0&&e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:124:27",className:"text-[var(--dg-orange)]",children:["(",I,"TW)"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:126:11",className:"flex items-center gap-1 text-xs text-[var(--dg-text-muted)]",children:[e.jsx(cs,{"code-path":"src/components/server/ServerTableRow.tsx:127:13",className:"h-3 w-3"}),e.jsxs("span",{"code-path":"src/components/server/ServerTableRow.tsx:128:13",children:["读",f(l),"/写",f(N)]})]})]})}),e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:132:7",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:133:9",className:"flex flex-wrap gap-1",children:[j.slice(0,3).map(i=>e.jsx(O,{"code-path":"src/components/server/ServerTableRow.tsx:135:13",variant:"outline",className:"text-xs border-[var(--dg-border)] text-[var(--dg-text-secondary)] bg-[var(--dg-bg-tertiary)]/50",children:i},i)),j.length>3&&e.jsxs(O,{"code-path":"src/components/server/ServerTableRow.tsx:144:13",variant:"outline",className:"text-xs border-[var(--dg-border)] text-[var(--dg-text-secondary)]",children:["+",j.length-3]})]})}),e.jsx(Z,{"code-path":"src/components/server/ServerTableRow.tsx:150:7",className:"text-right",children:e.jsxs("div",{"code-path":"src/components/server/ServerTableRow.tsx:151:9",className:"flex items-center justify-end gap-1",children:[g("server:webshell")&&e.jsx(y,{"code-path":"src/components/server/ServerTableRow.tsx:153:11",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-[var(--dg-blue)]",onClick:()=>a(r),title:"终端登录",children:e.jsx(dr,{"code-path":"src/components/server/ServerTableRow.tsx:154:13",className:"h-4 w-4"})}),(g("server:update")||g("server:delete")||g("server:webshell"))&&e.jsxs(hr,{"code-path":"src/components/server/ServerTableRow.tsx:158:11",children:[e.jsx(gr,{"code-path":"src/components/server/ServerTableRow.tsx:159:13",asChild:!0,children:e.jsx(y,{"code-path":"src/components/server/ServerTableRow.tsx:160:15",variant:"ghost",size:"icon",className:"h-8 w-8 text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)]",children:e.jsx(ns,{"code-path":"src/components/server/ServerTableRow.tsx:161:17",className:"h-4 w-4"})})}),e.jsxs(ur,{"code-path":"src/components/server/ServerTableRow.tsx:164:13",align:"end",className:"w-48 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(br,{"code-path":"src/components/server/ServerTableRow.tsx:165:15",className:"text-[var(--dg-text-secondary)]",children:"操作"}),e.jsx(qe,{"code-path":"src/components/server/ServerTableRow.tsx:166:15",className:"bg-[var(--dg-border)]"}),g("server:update")&&e.jsxs(he,{"code-path":"src/components/server/ServerTableRow.tsx:168:15",className:"text-[var(--dg-text-secondary)] focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)] cursor-pointer",onClick:()=>o(r),children:[e.jsx(ds,{"code-path":"src/components/server/ServerTableRow.tsx:172:17",className:"h-4 w-4 mr-2"}),"编辑"]}),g("server:webshell")&&e.jsxs(he,{"code-path":"src/components/server/ServerTableRow.tsx:177:15",className:"text-[var(--dg-text-secondary)] focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)] cursor-pointer",onClick:()=>a(r),children:[e.jsx(dr,{"code-path":"src/components/server/ServerTableRow.tsx:181:17",className:"h-4 w-4 mr-2"}),"终端"]}),g("server:update")&&e.jsxs(he,{"code-path":"src/components/server/ServerTableRow.tsx:186:15",className:"text-[var(--dg-text-secondary)] focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)] cursor-pointer",onClick:()=>v?.(r),children:[e.jsx(Cr,{"code-path":"src/components/server/ServerTableRow.tsx:190:17",className:"h-4 w-4 mr-2"}),"文件"]}),g("server:delete")&&e.jsxs(e.Fragment,{children:[e.jsx(qe,{"code-path":"src/components/server/ServerTableRow.tsx:196:15",className:"bg-[var(--dg-border)]"}),e.jsxs(he,{"code-path":"src/components/server/ServerTableRow.tsx:197:15",className:"text-red-400 focus:bg-[var(--dg-bg-hover)] focus:text-red-400 cursor-pointer",onClick:()=>b(r.id),children:[e.jsx(er,{"code-path":"src/components/server/ServerTableRow.tsx:201:17",className:"h-4 w-4 mr-2"}),"删除"]})]})]})]})]})})]})}function nt(){const r=Wr(),p=xr(),{hasPermission:c}=vr(),[a,o]=t.useState([]),[v,b]=t.useState(""),[g,x]=t.useState("all"),[_,j]=t.useState(!1),[C,u]=t.useState(!1),[I,l]=t.useState(!1),[N,f]=t.useState(null),[i,h]=t.useState(pr),[F,k]=t.useState(!1),[H,D]=t.useState(!1),[w,L]=t.useState(!1),[m,S]=t.useState(null),[M,E]=t.useState(!1),[A,Y]=t.useState(null),[U,re]=t.useState(1),[d,$]=t.useState(10),K=t.useMemo(()=>{const n={page:U,page_size:d};return v&&(n.keyword=v),g&&g!=="all"&&(n.status=g),n},[U,d,v,g]),{data:Q,isLoading:B,refetch:J}=bs(K),{createMutation:q,updateMutation:P,deleteMutation:me,batchDeleteMutation:se}=Ss(),z=Q?.list??[],Se=Q?.total??0,Te=n=>{S({id:n.id,name:n.hostname,ip:n.ip,hasAuth:n.has_auth??!0}),L(!0)},Ve=n=>{Y({id:n.id,name:n.hostname}),E(!0)},Re=n=>{b(n),re(1)},je=n=>{x(n),re(1)},oe=t.useRef(null),ve=t.useRef(null);t.useEffect(()=>{const n=ir.getState().token;if(!n)return;const _e=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws/metrics?token=${n}`,le=()=>{if(oe.current?.readyState===WebSocket.OPEN)return;const ce=new WebSocket(_e);oe.current=ce,ce.onopen=()=>{},ce.onmessage=xe=>{try{const T=JSON.parse(xe.data);T.type==="metrics_update"&&p.setQueryData(Sr.servers(K),pe=>pe&&{...pe,list:pe.list.map(Ne=>Ne.hostname===T.hostname?{...Ne,cpu_usage:T.cpu_usage,memory_usage:T.memory_usage,disk_usage:T.disk_usage,status:T.status,tcp_established:T.tcp_established,tcp_time_wait:T.tcp_time_wait,net_rx_bps:T.net_rx_bps,net_tx_bps:T.net_tx_bps,disk_read_bps:T.disk_read_bps,disk_write_bps:T.disk_write_bps}:Ne)})}catch{}},ce.onclose=()=>{oe.current=null,ve.current=setTimeout(le,3e3)},ce.onerror=xe=>{console.error("[MetricsWS] 连接错误:",xe),ce.close()}};return le(),()=>{ve.current&&clearTimeout(ve.current),oe.current&&(oe.current.onclose=null,oe.current.close(),oe.current=null)}},[p,K]);const s=()=>{a.length===z.length?o([]):o(z.map(n=>String(n.id)))},R=n=>{a.includes(n)?o(a.filter(te=>te!==n)):o([...a,n])},ae=async n=>{const te=z.find(le=>String(le.id)===String(n));if(await r({title:"删除服务器",description:`确定删除「${te?.hostname||n}」吗?此操作不可撤销。`,confirmText:"删除",variant:"destructive"}))try{await me.mutateAsync(n),W.success("服务器已删除")}catch(le){console.error("删除服务器失败:",le),W.error("删除失败")}},Rr=async()=>{if(!(a.length===0||!await r({title:"批量删除服务器",description:`确定删除选中的 ${a.length} 台服务器吗?此操作不可撤销。`,confirmText:"批量删除",variant:"destructive"})))try{await se.mutateAsync(a.map(te=>Number(te))),W.success(`已删除 ${a.length} 台服务器`),o([])}catch(te){console.error("批量删除失败:",te),W.error("批量删除失败")}},_r=()=>{f(null),h(pr),D(!1),l(!0)},Mr=n=>{f(n.id),h({hostname:n.hostname||"",ip:n.ip||"",public_ip:n.public_ip||"",port:String(n.port||22),username:n.username||"root",auth_type:n.auth_type||"password",password:"",ssh_key:"",credential_id:null,os:n.os||"",cpu:String(n.cpu||""),memory:n.memory?String(Math.round(n.memory/1024)):"",disk:String(n.disk||""),status:n.status||"running",tags:n.tags||"",description:n.description||""}),D(!1),l(!0)},Br=async()=>{if(!(!i.hostname||!i.ip))try{k(!0);const n={hostname:i.hostname,ip:i.ip,public_ip:i.public_ip||void 0,port:Number(i.port)||22,username:i.username||"root",auth_type:i.auth_type||"password",os:i.os,cpu:Number(i.cpu)||0,memory:(Number(i.memory)||0)*1024,disk:Number(i.disk)||0,status:i.status,tags:i.tags||void 0,description:i.description||void 0};i.credential_id?n.credential_id=i.credential_id:(i.password&&(n.password=i.password),i.ssh_key&&(n.ssh_key=i.ssh_key)),N?await P.mutateAsync({id:N,data:n}):await q.mutateAsync(n),W.success(N?"服务器已更新":"服务器已创建"),l(!1)}catch(n){console.error("保存服务器失败:",n),W.error("保存失败,请重试")}finally{k(!1)}},Pr=()=>{if(z.length===0){W.error("没有可导出的数据");return}const n=["主机名","IP地址","公网IP","端口","操作系统","CPU(核)","内存(GB)","磁盘(GB)","状态","标签"],te=z.map(T=>{const pe=T.memory?Math.round(Number(T.memory)/1024):0,Ne=Tr(T).join(";");return[T.hostname||"",T.ip||"",T.public_ip||"",T.port||22,T.os||"",T.cpu||0,pe,T.disk||0,T.status||"",Ne]}),_e=[n,...te].map(T=>T.map(pe=>`"${String(pe).replace(/"/g,'""')}"`).join(",")).join(`
|
||
`),le=new Blob(["\uFEFF"+_e],{type:"text/csv;charset=utf-8;"}),ce=URL.createObjectURL(le),xe=document.createElement("a");xe.href=ce,xe.download=`servers_${new Date().toISOString().slice(0,10)}.csv`,xe.click(),URL.revokeObjectURL(ce),W.success(`已导出 ${z.length} 台服务器`)},ar=8;return e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:361:5",className:"space-y-6",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:363:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:364:9",children:[e.jsx("h1",{"code-path":"src/components/server/ServerManager.tsx:365:11",className:"text-2xl font-bold text-[var(--dg-text-primary)]",children:"服务器管理"}),e.jsx("p",{"code-path":"src/components/server/ServerManager.tsx:366:11",className:"text-sm text-[var(--dg-text-muted)] mt-1",children:"管理云平台服务器资产"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:368:9",className:"flex items-center gap-2",children:[e.jsxs(y,{"code-path":"src/components/server/ServerManager.tsx:369: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:()=>J(),children:[e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:374:13",className:ie("h-4 w-4 mr-2",B&&"animate-spin")}),"刷新"]}),e.jsxs(y,{"code-path":"src/components/server/ServerManager.tsx:377: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:Pr,children:[e.jsx(Ze,{"code-path":"src/components/server/ServerManager.tsx:382:13",className:"h-4 w-4 mr-2"}),"导出"]}),c("server:create")&&e.jsxs(hr,{"code-path":"src/components/server/ServerManager.tsx:386:11",children:[e.jsx(gr,{"code-path":"src/components/server/ServerManager.tsx:387:13",asChild:!0,children:e.jsxs(y,{"code-path":"src/components/server/ServerManager.tsx:388:15",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",children:[e.jsx(Ye,{"code-path":"src/components/server/ServerManager.tsx:389:17",className:"h-4 w-4 mr-2"}),"批量导入"]})}),e.jsxs(ur,{"code-path":"src/components/server/ServerManager.tsx:393: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:394:15",children:"选择导入方式"}),e.jsx(qe,{"code-path":"src/components/server/ServerManager.tsx:395:15",className:"bg-[var(--dg-border)]"}),e.jsxs(he,{"code-path":"src/components/server/ServerManager.tsx:396:15",className:"hover:bg-[var(--dg-bg-hover)] cursor-pointer focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)]",onClick:()=>j(!0),children:[e.jsx(jr,{"code-path":"src/components/server/ServerManager.tsx:400:17",className:"h-4 w-4 mr-2 text-[var(--dg-blue)]"}),"云主机导入",e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:402:17",className:"ml-2 text-xs text-[var(--dg-text-muted)]",children:"从云平台同步"})]}),e.jsxs(he,{"code-path":"src/components/server/ServerManager.tsx:404:15",className:"hover:bg-[var(--dg-bg-hover)] cursor-pointer focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)]",onClick:()=>u(!0),children:[e.jsx(Ge,{"code-path":"src/components/server/ServerManager.tsx:408:17",className:"h-4 w-4 mr-2 text-emerald-400"}),"CSV导入",e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:410:17",className:"ml-2 text-xs text-[var(--dg-text-muted)]",children:"hostname + IP 即可"})]})]})]}),c("server:create")&&e.jsxs(y,{"code-path":"src/components/server/ServerManager.tsx:416:13",className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",onClick:_r,children:[e.jsx(ls,{"code-path":"src/components/server/ServerManager.tsx:420:15",className:"h-4 w-4 mr-2"}),"添加服务器"]})]})]}),e.jsx(js,{"code-path":"src/components/server/ServerManager.tsx:428:7",servers:z}),e.jsx(fe,{"code-path":"src/components/server/ServerManager.tsx:431:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsxs(we,{"code-path":"src/components/server/ServerManager.tsx:432:9",className:"p-0",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:434:11",className:"flex items-center justify-between flex-wrap gap-4 p-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:435:13",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:436:15",className:"relative w-64",children:[e.jsx(Nr,{"code-path":"src/components/server/ServerManager.tsx:437:17",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[var(--dg-text-muted)]"}),e.jsx(V,{"code-path":"src/components/server/ServerManager.tsx:438:17",placeholder:"搜索主机名或IP...",value:v,onChange:n=>Re(n.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($e,{"code-path":"src/components/server/ServerManager.tsx:445:15",value:g,onValueChange:je,children:[e.jsx(Oe,{"code-path":"src/components/server/ServerManager.tsx:446:17",className:"w-32 h-9 bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:e.jsx(De,{"code-path":"src/components/server/ServerManager.tsx:447:19",placeholder:"状态"})}),e.jsxs(Le,{"code-path":"src/components/server/ServerManager.tsx:449:17",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(G,{"code-path":"src/components/server/ServerManager.tsx:450:19",value:"all",children:"全部状态"}),e.jsx(G,{"code-path":"src/components/server/ServerManager.tsx:451:19",value:"running",children:"运行中"}),e.jsx(G,{"code-path":"src/components/server/ServerManager.tsx:452:19",value:"stopped",children:"已停止"}),e.jsx(G,{"code-path":"src/components/server/ServerManager.tsx:453:19",value:"maintenance",children:"维护中"}),e.jsx(G,{"code-path":"src/components/server/ServerManager.tsx:454:19",value:"offline",children:"离线"})]})]})]}),a.length>0&&e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:459:15",className:"flex items-center gap-2",children:[e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:460:17",className:"text-sm text-[var(--dg-text-secondary)]",children:["已选择 ",a.length," 项"]}),c("server:delete")&&e.jsxs(y,{"code-path":"src/components/server/ServerManager.tsx:462:17",variant:"outline",size:"sm",className:"border-red-500/30 text-red-400 hover:bg-red-500/10",onClick:Rr,children:[e.jsx(er,{"code-path":"src/components/server/ServerManager.tsx:468:19",className:"h-4 w-4 mr-2"}),"批量删除"]})]})]}),e.jsx("div",{"code-path":"src/components/server/ServerManager.tsx:476:11",className:"border-t border-[var(--dg-border)]",children:e.jsxs(qr,{"code-path":"src/components/server/ServerManager.tsx:477:13",children:[e.jsx(Gr,{"code-path":"src/components/server/ServerManager.tsx:478:15",children:e.jsxs(Be,{"code-path":"src/components/server/ServerManager.tsx:479:17",className:"border-[var(--dg-border)] hover:bg-transparent",children:[e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:480:19",className:"w-12",children:e.jsx(ge,{"code-path":"src/components/server/ServerManager.tsx:481:21",checked:a.length===z.length&&z.length>0,onCheckedChange:s,className:"border-[var(--dg-border)]"})}),e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:489:19",className:"text-[var(--dg-text-secondary)]",children:"主机名"}),e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:490:19",className:"text-[var(--dg-text-secondary)]",children:"IP地址"}),e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:491:19",className:"text-[var(--dg-text-secondary)]",children:"公网IP"}),e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:492:19",className:"text-[var(--dg-text-secondary)]",children:"状态"}),e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:493:19",className:"text-[var(--dg-text-secondary)]",children:"配置"}),e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:494:19",className:"text-[var(--dg-text-secondary)]",children:"使用率"}),e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:495:19",className:"text-[var(--dg-text-secondary)]",children:"标签"}),e.jsx(ne,{"code-path":"src/components/server/ServerManager.tsx:496:19",className:"text-[var(--dg-text-secondary)] text-right",children:"操作"})]})}),e.jsx(Kr,{"code-path":"src/components/server/ServerManager.tsx:499:15",children:B?e.jsx(Be,{"code-path":"src/components/server/ServerManager.tsx:501:19",className:"border-[var(--dg-border)]",children:e.jsxs(Z,{"code-path":"src/components/server/ServerManager.tsx:502:21",colSpan:ar,className:"text-center text-[var(--dg-text-muted)] py-12",children:[e.jsx(de,{"code-path":"src/components/server/ServerManager.tsx:503:23",className:"h-5 w-5 animate-spin mx-auto mb-2"}),"加载中..."]})}):z.length===0?e.jsx(Be,{"code-path":"src/components/server/ServerManager.tsx:508:19",className:"border-[var(--dg-border)]",children:e.jsx(Z,{"code-path":"src/components/server/ServerManager.tsx:509:21",colSpan:ar,className:"text-center text-[var(--dg-text-muted)] py-12",children:"暂无服务器数据"})}):z.map(n=>e.jsx(Ds,{"code-path":"src/components/server/ServerManager.tsx:515:21",server:n,selected:a.includes(String(n.id)),onToggleSelect:R,onOpenTerminal:Te,onOpenFiles:Ve,onOpenEdit:Mr,onDelete:ae},n.id))})]})}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:532: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:533: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:534:15",children:"每页"}),e.jsxs($e,{"code-path":"src/components/server/ServerManager.tsx:535:15",value:String(d),onValueChange:n=>{$(Number(n)),re(1)},children:[e.jsx(Oe,{"code-path":"src/components/server/ServerManager.tsx:536: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(De,{"code-path":"src/components/server/ServerManager.tsx:537:19"})}),e.jsxs(Le,{"code-path":"src/components/server/ServerManager.tsx:539:17",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)]",children:[e.jsx(G,{"code-path":"src/components/server/ServerManager.tsx:540:19",value:"10",children:"10"}),e.jsx(G,{"code-path":"src/components/server/ServerManager.tsx:541:19",value:"20",children:"20"}),e.jsx(G,{"code-path":"src/components/server/ServerManager.tsx:542:19",value:"30",children:"30"})]})]}),e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:545:15",children:"条"}),e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:546:15",className:"ml-4",children:["共 ",Se," 条"]})]}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:548:13",className:"flex items-center gap-1",children:[e.jsx(y,{"code-path":"src/components/server/ServerManager.tsx:549: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:U<=1,onClick:()=>re(n=>Math.max(1,n-1)),children:e.jsx(Xe,{"code-path":"src/components/server/ServerManager.tsx:556:17",className:"h-4 w-4"})}),e.jsxs("span",{"code-path":"src/components/server/ServerManager.tsx:558:15",className:"text-sm text-[var(--dg-text-secondary)] px-2",children:[U," / ",Math.max(1,Math.ceil(Se/d))]}),e.jsx(y,{"code-path":"src/components/server/ServerManager.tsx:561:15",variant:"outline",size:"sm",className:"h-8 border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",disabled:U>=Math.ceil(Se/d),onClick:()=>re(n=>n+1),children:e.jsx(Ce,{"code-path":"src/components/server/ServerManager.tsx:568:17",className:"h-4 w-4"})})]})]})]})}),e.jsx($s,{"code-path":"src/components/server/ServerManager.tsx:576:7",open:I,onOpenChange:l,editingId:N,formData:i,setFormData:h,detailsOpen:H,setDetailsOpen:D,onSave:Br,formSaving:F}),e.jsx(ys,{"code-path":"src/components/server/ServerManager.tsx:589:7",open:_,onClose:()=>{j(!1),J()}}),e.jsx(Es,{"code-path":"src/components/server/ServerManager.tsx:596:7",open:C,onClose:()=>{u(!1),J()}}),e.jsx(fs,{"code-path":"src/components/server/ServerManager.tsx:605:7",open:w,onOpenChange:L,serverId:m?.id??null,serverName:m?.name??"",serverIp:m?.ip??"",hasAuth:m?.hasAuth??!0}),e.jsx(Cs,{"code-path":"src/components/server/ServerManager.tsx:615:7",open:M,onOpenChange:E,serverId:A?.id??null,serverName:A?.name??""})]})}export{nt as ServerManager};
|