feat(audit): F1+F2 告警静默规则标记完成 + 审计日志CSV导出实现
F1 告警静默规则 [done]: - 后端 alert_silence.go: CRUD + Toggle (onetime/daily/weekly 三模式) - 告警引擎 isSilenced 集成 (alert_engine.go) - 前端 SilenceRuleTab + SilenceDialog - 路由 /alerts/silences 已注册 F2 审计日志导出 [done]: - 重写 ExportAuditLogs: 真正的 CSV 导出 (encoding/csv + UTF-8 BOM) - 支持 module/action/username/startTime/endTime 筛选 - 导出限制 10000 条防溢出,自动记录审计日志 - JSON 格式向后兼容 (format=json) - 前端 exportLogs 传递查询参数 同时包含累积的前期工作: - 目录重构 internal/ -> controller/model/router (v0.55-v0.57) - 后端分层架构 dto/repository/service/utils - 审计模块全功能 (终端审计/操作审计/登录日志) - asciicast v2 录制格式 - SFTP 文件浏览器 - StatStrip 紧凑统计条 - 在线会话自动刷新 - LiveMonitor WebSocket 诊断修复 验证: go build ✅ | npm run build ✅ | Docker 部署 ✅ | 10 回归端点 ✅ | CSV 导出 ✅ | 静默 CRUD ✅
This commit is contained in:
1 parent
e57718998a
commit
77c234b060
314 files changed
+10050
-4065
No files matched your search
@@ -0,0 +1,11 @@
|
||||
const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./index-CHhHmizP.js","./index-DfyorCky.js","./index-1EStmE-w.css","./dashboard-BjQPIG2G.js","./server-CjDPBaTN.js","./kubernetes-J8O09fK7.js","./deploy-B3Sg3N1U.js","./automation-mtL167W_.js","./monitor-BAaBXIsC.js","./agent-DqqIRCQX.js","./cloud-Dzoer-2i.js","./system-BgtMMm0X.js","./ai-BTgmlP5Q.js"])))=>i.map(i=>d[i]);
|
||||
import{g as He,j as e,q as Ee,A as Fr,r as t,aT as kr,D as Te,b as Re,c as Ue,d as Me,e as Be,s as xr,P as $e,M as Ge,a3 as ar,a9 as ge,n as _e,B as g,S as ir,I as H,$ as Oe,f as Je,W as vr,X as Se,a5 as fe,t as hr,L as Le,af as Er,ac as _r,ak as Tr,ae as Qe,ah as Rr,ad as Mr,ag as Br,aw as Pr,h as Ar,a4 as $r,N as Or,H as cr,aK as gr,aL as ur,aM as Sr,aN as br,aO as Ke,aP as we,a as zr}from"./index-DfyorCky.js";import{C as me,a as xe}from"./card-C55cvSHg.js";import{C as ue}from"./checkbox-CH0bpj6b.js";import{b as ze,e as re,T as Lr,a as Hr,c as le,d as Ur}from"./table-5sHV4Akp.js";import{S as Ce,a as Ie,b as Fe,c as ke,d as O}from"./select-D5qUzdAs.js";import{s as se,r as Dr}from"./server-CjDPBaTN.js";import{R as Vr}from"./rotate-cw-5qcj_h_q.js";import{t as V}from"./index-a3ybMjbR.js";import{B as A}from"./badge-xNW8x0G1.js";import{c as ye}from"./cloud-Dzoer-2i.js";import{R as pe}from"./refresh-cw-DUB_tAG-.js";import{x as Wr,a as Gr}from"./xterm-DSqgeKvr.js";import{c as jr,s as Kr}from"./deploy-B3Sg3N1U.js";import{M as qr,a as Jr}from"./minimize-2-CiCQYRfn.js";import{F as Nr}from"./folder-open-IMBifk-r.js";import{U as Xe}from"./upload-Ba6rlaGS.js";import{a as nr,F as Qr}from"./folder-DoMwqvzv.js";import{A as Xr}from"./arrow-left-BDgGyrD0.js";import{D as Ye}from"./download-DoZfYs2h.js";import{T as Ze}from"./trash-2-Dx32pOzT.js";import{L}from"./label-BK0h2apY.js";import{T as dr}from"./textarea-NXY8u32k.js";import{S as Yr}from"./save-DoGGjfwC.js";import{H as Zr}from"./hard-drive-BbPmnARR.js";import{E as es}from"./ellipsis-DU5enAwm.js";import{S as rs}from"./square-pen-BxUFAe0F.js";import{P as ss}from"./plus-CUG-9kpu.js";import"./index-CWVNW_qu.js";const ts=[["path",{d:"m15 18-6-6 6-6",key:"1wnfg3"}]],er=He("chevron-left",ts);const os=[["path",{d:"M6 22a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h8a2.4 2.4 0 0 1 1.704.706l3.588 3.588A2.4 2.4 0 0 1 20 8v12a2 2 0 0 1-2 2z",key:"1oefj6"}],["path",{d:"M14 2v5a1 1 0 0 0 1 1h5",key:"wfsgrz"}],["path",{d:"M8 13h2",key:"yr2amv"}],["path",{d:"M14 13h2",key:"un5t4a"}],["path",{d:"M8 17h2",key:"2yhykz"}],["path",{d:"M14 17h2",key:"10kma7"}]],qe=He("file-spreadsheet",os);const as=[["path",{d:"M12 10v6",key:"1bos4e"}],["path",{d:"M9 13h6",key:"1uhe8q"}],["path",{d:"M20 20a2 2 0 0 0 2-2V8a2 2 0 0 0-2-2h-7.9a2 2 0 0 1-1.69-.9L9.6 3.9A2 2 0 0 0 7.93 3H4a2 2 0 0 0-2 2v13a2 2 0 0 0 2 2Z",key:"1kt360"}]],cs=He("folder-plus",as);const ns=[["path",{d:"M12 2v10",key:"mnfbl"}],["path",{d:"M18.4 6.6a9 9 0 1 1-12.77.04",key:"obofu9"}]],ds=He("power",ns);function ls({servers:s}){const m=s.filter(o=>o.status==="running").length,a=s.filter(o=>o.status==="maintenance").length,c=s.filter(o=>o.status==="stopped").length;return e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:15:5",className:"grid grid-cols-1 md:grid-cols-4 gap-4",children:[e.jsx(me,{"code-path":"src/components/server/ServerStatsCards.tsx:16:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xe,{"code-path":"src/components/server/ServerStatsCards.tsx:17:9",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:18:11",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:19:13",children:[e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:20:15",className:"text-sm text-[var(--dg-text-muted)]",children:"服务器总数"}),e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:21:15",className:"text-2xl font-bold text-[var(--dg-text-primary)]",children:s.length})]}),e.jsx("div",{"code-path":"src/components/server/ServerStatsCards.tsx:23:13",className:"p-3 rounded-lg bg-[var(--dg-blue)]/10 text-[var(--dg-blue)]",children:e.jsx(Ee,{"code-path":"src/components/server/ServerStatsCards.tsx:24:15",className:"h-5 w-5"})})]})})}),e.jsx(me,{"code-path":"src/components/server/ServerStatsCards.tsx:29:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xe,{"code-path":"src/components/server/ServerStatsCards.tsx:30:9",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:31:11",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerStatsCards.tsx:32:13",children:[e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:33:15",className:"text-sm text-[var(--dg-text-muted)]",children:"运行中"}),e.jsx("p",{"code-path":"src/components/server/ServerStatsCards.tsx:34:15",className:"text-2xl font-bold text-emerald-400",children:m})]}),e.jsx("div",{"code-path":"src/components/server/ServerStatsCards.tsx:36:13",className:"p-3 rounded-lg bg-emerald-500/10 text-emerald-400",children:e.jsx(Fr,{"code-path":"src/components/server/ServerStatsCards.tsx:37:15",className:"h-5 w-5"})})]})})}),e.jsx(me,{"code-path":"src/components/server/ServerStatsCards.tsx:42:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xeLine truncated
|
||||
\x1B[31m[连接已关闭]\x1B[0m\r
|
||||
`)},B.onerror=()=>{d.write(`\r
|
||||
\x1B[31m[连接发生错误]\x1B[0m\r
|
||||
`)},()=>{try{B.close(),d.dispose()}catch{}j.current=null,x.current=null,I(!1)}},[s,a,k]),t.useEffect(()=>{if(!s)return;const d=b.current;if(!d)return;let S;const _=new ResizeObserver(()=>{clearTimeout(S),S=setTimeout(()=>{if(w.current&&j.current&&x.current)try{w.current.fit(),j.current.focus();const{cols:J,rows:W}=j.current;x.current.readyState===WebSocket.OPEN&&x.current.send(JSON.stringify({status:1,cols:J,rows:W}))}catch{}},60)});return _.observe(d),()=>{clearTimeout(S),_.disconnect()}},[s]),e.jsx(Te,{"code-path":"src/components/server/TerminalDialog.tsx:196:5",open:s,onOpenChange:m,children:e.jsxs(Re,{"code-path":"src/components/server/TerminalDialog.tsx:197:7",showCloseButton:!1,className:Se("bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] p-0 gap-0","!duration-0 !transition-none",n?"!max-w-none !w-screen !h-screen !rounded-none !translate-x-0 !translate-y-0 !left-0 !top-0":""),style:n?{maxWidth:"100vw",width:"100vw",height:"100vh"}:{maxWidth:"900px",width:"90vw"},children:[e.jsxs(Me,{"code-path":"src/components/server/TerminalDialog.tsx:209:9",className:"sr-only",children:["终端 - ",c]}),e.jsx(Be,{"code-path":"src/components/server/TerminalDialog.tsx:210:9",className:"sr-only",children:"SSH 终端连接"}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:212:9",className:"flex items-center justify-between px-4 py-2 border-b border-[var(--dg-border)]",children:[e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:213:11",className:"flex items-center gap-2 text-sm",children:[e.jsx("div",{"code-path":"src/components/server/TerminalDialog.tsx:214:13",className:Se("w-2 h-2 rounded-full",N?"bg-emerald-400":"bg-red-400")}),e.jsx("span",{"code-path":"src/components/server/TerminalDialog.tsx:215:13",className:"text-[var(--dg-text-primary)] font-medium",children:c}),e.jsxs("span",{"code-path":"src/components/server/TerminalDialog.tsx:216:13",className:"text-[var(--dg-text-muted)]",children:["(",o,")"]})]}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:218:11",className:"flex items-center gap-1",children:[e.jsx("button",{"code-path":"src/components/server/TerminalDialog.tsx:219:13",onClick:()=>y(!n),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:n?e.jsx(qr,{"code-path":"src/components/server/TerminalDialog.tsx:223:29",className:"h-4 w-4"}):e.jsx(Jr,{"code-path":"src/components/server/TerminalDialog.tsx:223:65",className:"h-4 w-4"})}),e.jsx("button",{"code-path":"src/components/server/TerminalDialog.tsx:225:13",onClick:()=>m(!1),className:"p-1.5 rounded hover:bg-[var(--dg-bg-hover)] text-[var(--dg-text-secondary)]",children:e.jsx(fe,{"code-path":"src/components/server/TerminalDialog.tsx:229:15",className:"h-4 w-4"})})]})]}),!k&&e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:235:11",className:"p-6 flex flex-col items-center justify-center gap-4",style:{height:"480px"},children:[e.jsx(hr,{"code-path":"src/components/server/TerminalDialog.tsx:236:13",className:"h-12 w-12 text-amber-400"}),e.jsxs("div",{"code-path":"src/components/server/TerminalDialog.tsx:237:13",className:"text-center",children:[e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:238:15",className:"text-[var(--dg-text-primary)] font-medium mb-1",children:"服务器未配置认证凭据"}),e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:239:15",className:"text-sm text-[var(--dg-text-muted)]",children:"请选择一个凭据用于 SSH 连接"})]}),F.length===0?e.jsx("p",{"code-path":"src/components/server/TerminalDialog.tsx:242:15",className:"text-xs text-[var(--dg-text-muted)]",children:"暂无可用凭据,请先去「凭证配置」添加"}):e.jsxs("select",{"code-path":"src/components/server/TerminalDialog.tsx:244:15",value:u,onChange:d=>f(d.target.value),className:"w-64 px-3 py-2 bg-[var(--dg-bg-tertiary)] border border-[var(--dg-border)] rounded-md text-[var(--dg-text-primary)] text-sm",children:[e.jsx("option",{"code-path":"src/components/server/TerminalDialog.tsx:249:17",value:"",children:"-- 选择凭据 --"}),F.map(d=>e.jsxs("option",{"code-path":"src/components/server/TerminalDialog.tsx:251:19",value:String(d.id),children:[d.type==="ssh_key"?"🔑":"🔒"," ",d.name]},d.id))]}),e.jsx(g,{"code-path":"src/components/server/TerminalDialog.tsx:257:13",onClick:$,disabled:!u||h,className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",children:h?"关联中...":"确认连接"})]}),k&&e.jsx("div",{"code-path":"src/components/server/TerminalDialog.tsx:268:11",ref:b,className:"bg-[#0a0e14]",style:{height:n?"calc(100vh - 49px)":"480px"}})]})})}const is=s=>s<1024?`${s} B`:s<1048576?`${(s/1024).toFixed(1)} KB`:`${(s/1048576).toFixed(2)} MB`;function vs({open:s,onOpenChange:m,serverId:a,serverName:c}){const[o,i]=t.useState([]),[b,j]=t.useState([]),[x,w]=t.useState("/"),[N,I]=t.useState(!1),[n,y]=t.useState(""),[F,T]=t.useState(!1),u=t.useRef(null),f=t.useCallback(async d=>{if(a){I(!0),y("
Line truncated
|
||||
`).replace(/\r/g,`
|
||||
`).split(`
|
||||
`).filter(o=>o.trim());if(m.length<2)return[];const a=lr(m[0]).map(o=>o.toLowerCase()),c=[];for(let o=1;o<m.length;o++){const i=lr(m[o]),b={};a.forEach((j,x)=>{b[j]=i[x]??""}),c.push(b)}return c}function gs(s){return/^(\d{1,3}\.){3}\d{1,3}$/.test(s)&&s.split(".").every(m=>Number(m)>=0&&Number(m)<=255)}function us(){const s=["hostname,ip,port","web-01,192.168.1.10,22","db-01,192.168.1.20,22","cache-01,192.168.1.30,2222"].join(`
|
||||
`),m=new Blob(["\uFEFF"+s],{type:"text/csv;charset=utf-8;"}),a=URL.createObjectURL(m),c=document.createElement("a");c.href=a,c.download="servers-template.csv",c.click(),URL.revokeObjectURL(a)}function Ss({open:s,onClose:m}){const[a,c]=t.useState(1),[o,i]=t.useState(""),[,b]=t.useState("password"),[j,x]=t.useState(null),[w,N]=t.useState(!1),[I,n]=t.useState([]),[y,F]=t.useState([]),[T,u]=t.useState(!1),[f,h]=t.useState([]),[v,k]=t.useState(""),[z,$]=t.useState("22");t.useEffect(()=>{if(!s)return;let l=!1;return(async()=>{try{const[R,D]=await Promise.all([Dr.list(),jr.list()]);if(l)return;const ee=R?.list??[];F(ee.map(M=>({id:String(M.id??""),name:M.name??"",code:M.code??""}))),h(D?.list??[])}catch{l||(F([]),h([]))}})(),()=>{l=!0}},[s]);const d=async()=>{if(a===2&&j){N(!0);try{const l=await j.text(),R=hs(l);if(R.length===0){V.error("文件无有效数据,请使用模板格式(首行为表头)"),N(!1);return}const D=new Set,ee=R.map((M,te)=>{const G=(M.hostname??"").trim(),P=(M.ip??"").trim(),K={row:te+2,hostname:G,ip:P,port:Number(M.port)||22,username:(M.username??"").trim()||"root",os:M.os??"",cpu:Number(M.cpu)||0,memory:Number(M.memory)||0,disk:Number(M.disk)||0,tags:M.tags??"",status:"valid",message:"有效"},oe=[];G||oe.push("主机名缺失"),P?gs(P)||oe.push("IP格式错误"):oe.push("IP缺失");const ve=`${G}|${P}`;return G&&P&&D.has(ve)?oe.push("重复行"):D.add(ve),oe.length>0&&(K.status="error",K.message=oe.join("、")),K});n(ee),c(a+1)}catch{V.error("文件解析失败,请确认是 CSV 格式")}finally{N(!1)}}else c(a+1)},S=()=>{a>1&&c(a-1)},_=l=>{l.target.files&&l.target.files[0]&&x(l.target.files[0])},J=()=>{c(1),i(""),$("22"),k(""),x(null),n([])},W=async()=>{const l=I.filter(R=>R.status==="valid");if(l.length!==0){u(!0);try{const R=l.map(P=>({hostname:P.hostname,ip:P.ip,port:P.port,username:P.username,os:P.os,cpu:P.cpu,memory:P.memory,disk:P.disk,tags:P.tags})),ee=await se.batchCreate({servers:R,region_id:o||void 0,credential_id:v?Number(v):void 0,default_port:Number(z)||22})??{},M=ee.success??0,te=ee.skipped??0,G=ee.failed??0;V.success(`导入完成:成功 ${M},跳过 ${te},失败 ${G}`),J(),m()}catch(R){V.error(R?.message||"导入失败,请重试")}finally{u(!1)}}},B=()=>{m(),J()},U=I.filter(l=>l.status==="valid").length,Q=I.filter(l=>l.status==="warning").length,Z=I.filter(l=>l.status==="error").length,ie=[{id:1,title:"配置"},{id:2,title:"上传"},{id:3,title:"确认"}];return e.jsx(Te,{"code-path":"src/components/server/ExcelServerImport.tsx:278:5",open:s,onOpenChange:B,children:e.jsxs(Re,{"code-path":"src/components/server/ExcelServerImport.tsx:279:7",className:"max-w-3xl bg-[var(--dg-bg-primary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:[e.jsxs(Ue,{"code-path":"src/components/server/ExcelServerImport.tsx:280:9",children:[e.jsx(Me,{"code-path":"src/components/server/ExcelServerImport.tsx:281:11",className:"text-xl",children:"CSV 批量导入服务器"}),e.jsx(Be,{"code-path":"src/components/server/ExcelServerImport.tsx:282:11",className:"sr-only",children:"通过 CSV 文件批量导入服务器资产"})]}),e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:286:9",className:"flex items-center justify-center mb-6",children:ie.map((l,R)=>e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:288:13",className:"flex items-center",children:[e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:289:15",className:`flex items-center justify-center w-8 h-8 rounded-full ${a===l.id?"bg-blue-600 text-white":a>l.id?"bg-emerald-600 text-white":"bg-[var(--dg-bg-secondary)] text-[var(--dg-text-muted)]"}`,children:a>l.id?e.jsx(ge,{"code-path":"src/components/server/ExcelServerImport.tsx:296:32",className:"h-4 w-4"}):l.id}),e.jsx("span",{"code-path":"src/components/server/ExcelServerImport.tsx:298:15",className:`ml-2 text-sm ${a===l.id?"text-[var(--dg-text-primary)]":"text-[var(--dg-text-muted)]"}`,children:l.title}),R<ie.length-1&&e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:302:17",className:"w-12 h-0.5 bg-[var(--dg-border)] mx-3"})]},l.id))}),a===1&&e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:310:11",className:"space-y-6",children:[e.jsx(me,{"code-path":"src/components/server/ExcelServerImport.tsx:312:13",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsx(xe,{"code-path":"src/components/server/ExcelServerImport.tsx:313:15",className:"p-4",children:e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:314:17",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ExcelServerImport.tsx:315:19",className:"flex items-center gap-3",children:[e.jsx("div",{"code-path":"src/components/server/ExcelServerImport.tsx:316:21",className:"w-10 h-10 rounded-lg bg-emerald-500/20 flex items-center justify-center",children:e.jsx(qe,{"code-path":"src/components/server/ExcelServerImpor
Line truncated
|
||||
`),Y=new Blob(["\uFEFF"+de],{type:"text/csv;charset=utf-8;"}),q=URL.createObjectURL(Y),ae=document.createElement("a");ae.href=q,ae.download=`servers_${new Date().toISOString().slice(0,10)}.csv`,ae.click(),URL.revokeObjectURL(q),V.success(`已导出 ${m.length} 台服务器`)},or=8;return e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:371:5",className:"space-y-6",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:373:7",className:"flex items-center justify-between",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:374:9",children:[e.jsx("h1",{"code-path":"src/components/server/ServerManager.tsx:375:11",className:"text-2xl font-bold text-[var(--dg-text-primary)]",children:"服务器管理"}),e.jsx("p",{"code-path":"src/components/server/ServerManager.tsx:376:11",className:"text-sm text-[var(--dg-text-muted)] mt-1",children:"管理云平台服务器资产"})]}),e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:378:9",className:"flex items-center gap-2",children:[e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:379:11",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",onClick:()=>K(),children:[e.jsx(pe,{"code-path":"src/components/server/ServerManager.tsx:384:13",className:Se("h-4 w-4 mr-2",c&&"animate-spin")}),"刷新"]}),e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:387:11",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",onClick:ne,children:[e.jsx(Ye,{"code-path":"src/components/server/ServerManager.tsx:392:13",className:"h-4 w-4 mr-2"}),"导出"]}),e.jsxs(gr,{"code-path":"src/components/server/ServerManager.tsx:395:11",children:[e.jsx(ur,{"code-path":"src/components/server/ServerManager.tsx:396:13",asChild:!0,children:e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:397:15",variant:"outline",className:"border-[var(--dg-border)] text-[var(--dg-text-secondary)] hover:text-[var(--dg-text-primary)] hover:bg-[var(--dg-bg-hover)]",children:[e.jsx(Xe,{"code-path":"src/components/server/ServerManager.tsx:398:17",className:"h-4 w-4 mr-2"}),"批量导入"]})}),e.jsxs(Sr,{"code-path":"src/components/server/ServerManager.tsx:402:13",className:"bg-[var(--dg-bg-tertiary)] border-[var(--dg-border)] text-[var(--dg-text-primary)]",children:[e.jsx(br,{"code-path":"src/components/server/ServerManager.tsx:403:15",children:"选择导入方式"}),e.jsx(Ke,{"code-path":"src/components/server/ServerManager.tsx:404:15",className:"bg-[var(--dg-border)]"}),e.jsxs(we,{"code-path":"src/components/server/ServerManager.tsx:405:15",className:"hover:bg-[var(--dg-bg-hover)] cursor-pointer focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)]",onClick:()=>n(!0),children:[e.jsx(xr,{"code-path":"src/components/server/ServerManager.tsx:409:17",className:"h-4 w-4 mr-2 text-[var(--dg-blue)]"}),"云主机导入",e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:411:17",className:"ml-2 text-xs text-[var(--dg-text-muted)]",children:"从云平台同步"})]}),e.jsxs(we,{"code-path":"src/components/server/ServerManager.tsx:413:15",className:"hover:bg-[var(--dg-bg-hover)] cursor-pointer focus:bg-[var(--dg-bg-hover)] focus:text-[var(--dg-text-primary)]",onClick:()=>F(!0),children:[e.jsx(qe,{"code-path":"src/components/server/ServerManager.tsx:417:17",className:"h-4 w-4 mr-2 text-emerald-400"}),"CSV导入",e.jsx("span",{"code-path":"src/components/server/ServerManager.tsx:419:17",className:"ml-2 text-xs text-[var(--dg-text-muted)]",children:"hostname + IP 即可"})]})]})]}),e.jsxs(g,{"code-path":"src/components/server/ServerManager.tsx:423:11",className:"bg-[var(--dg-blue)] hover:opacity-90 text-white",onClick:Ae,children:[e.jsx(ss,{"code-path":"src/components/server/ServerManager.tsx:427:13",className:"h-4 w-4 mr-2"}),"添加服务器"]})]})]}),e.jsx(ls,{"code-path":"src/components/server/ServerManager.tsx:434:7",servers:m}),e.jsx(me,{"code-path":"src/components/server/ServerManager.tsx:437:7",className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)]",children:e.jsxs(xe,{"code-path":"src/components/server/ServerManager.tsx:438:9",className:"p-0",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:440:11",className:"flex items-center justify-between flex-wrap gap-4 p-4",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:441:13",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/components/server/ServerManager.tsx:442:15",className:"relative w-64",children:[e.jsx(ir,{"code-path":"src/components/server/ServerManager.tsx:443:17",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-[var(--dg-text-muted)]"}),e.jsx(H,{"code-path":"src/components/server/ServerManager.tsx:444:17",placeholder:
Line truncated
|
||||
Reference in new issue
Block a user