Files
aiops/backend/static/assets/AuditPage-qFSlP5C_.js
T
Logan.Li 0b404b4611 refactor(frontend): API 子模块化、大组件拆分与 TanStack Query hooks
P1: kubernetes/system API 拆为子目录模块,导出工具下沉到 lib/export-utils,
    http 统一 buildApiUrl/getWsBase;HostMonitor、DeploymentEdit* 拆至子组件。

P2: 新增 hooks/api(queryKeys、useTerminalSessions、useHostMonitor),
    TerminalSessionsTab 与 HostMonitor 接入 TanStack Query。

P3: 保留 services/api 路径,未迁移至 api/ 目录。
2026-06-26 00:02:29 +08:00

4 lines
54 KiB
JavaScript

import{i as ce,r as a,j as e,D as pe,a as xe,b as he,c as me,d as ue,L as ge,$ as _e,aH as Y,U as De,S as Re,C as Me,f as be,A as Te,a0 as ze,B as v,O as je,X as fe,aP as Ee,G as Ie,x as Be}from"./index-Dmami9WE.js";import{C as K,a as U}from"./card-CIfC-8Rh.js";import{I as F}from"./input-NsU9nXZF.js";import{B as _}from"./badge-3UzCvU7L.js";import{T as W,a as q,b as E,c as l,d as G,e as o}from"./table-CG4mjNfb.js";import{t as H,s as $e,a as X,l as Fe}from"./system-C3cYTuQH.js";import{x as Ae,a as ve}from"./xterm-DSqgeKvr.js";import{S as B}from"./search-Dd-PeBfg.js";import{R as J}from"./refresh-cw-CTBERyFc.js";import{P as Pe}from"./play-0EwQQJX_.js";import{D as Ne}from"./download-Vuij9wGr.js";const He=[["path",{d:"m15 9-6 6",key:"1uzhvr"}],["path",{d:"M2.586 16.726A2 2 0 0 1 2 15.312V8.688a2 2 0 0 1 .586-1.414l4.688-4.688A2 2 0 0 1 8.688 2h6.624a2 2 0 0 1 1.414.586l4.688 4.688A2 2 0 0 1 22 8.688v6.624a2 2 0 0 1-.586 1.414l-4.688 4.688a2 2 0 0 1-1.414.586H8.688a2 2 0 0 1-1.414-.586z",key:"2d38gg"}],["path",{d:"m9 9 6 6",key:"z0biqf"}]],Ke=ce("octagon-x",He);const Ue=[["path",{d:"M10 2h4",key:"n1abiw"}],["path",{d:"M4.6 11a8 8 0 0 0 1.7 8.7 8 8 0 0 0 8.7 1.7",key:"10he05"}],["path",{d:"M7.4 7.4a8 8 0 0 1 10.3 1 8 8 0 0 1 .9 10.2",key:"15f7sh"}],["path",{d:"m2 2 20 20",key:"1ooewy"}],["path",{d:"M12 12v-2",key:"fwoke6"}]],We=ce("timer-off",Ue);const qe=[["line",{x1:"10",x2:"14",y1:"2",y2:"2",key:"14vaq8"}],["line",{x1:"12",x2:"15",y1:"14",y2:"11",key:"17fdiu"}],["circle",{cx:"12",cy:"14",r:"8",key:"1e1u0o"}]],Ge=ce("timer",qe);function Je({open:s,onOpenChange:i,sessionId:d}){const n=a.useRef(null),p=a.useRef(null),g=a.useRef(null),[m,w]=a.useState(!1),[b,N]=a.useState(""),[T,j]=a.useState(0);return a.useEffect(()=>{if(!s||!d)return;const r=new Ae.Terminal({cursorBlink:!1,fontSize:13,fontFamily:'Menlo, Monaco, "Courier New", monospace',disableStdin:!0,cols:80,rows:24,theme:{background:"#0a0e14",foreground:"#d6d6d6",cursor:"#0a0e14",selectionBackground:"rgba(255,255,255,0.2)"}}),u=new ve.FitAddon;r.loadAddon(u),p.current=r;let O=!1;return w(!0),N(""),j(0),H.getRecord(d).then(x=>{if(O)return;const y=typeof x=="string"?x:x?.data||x?.record_data||"";if(!y||y.trim()===""){N("No recording data available for this session"),w(!1);return}if(n.current){r.open(n.current);try{u.fit()}catch{}}const D=y.split(`
`).filter(L=>L.trim()),S=[];for(const L of D)try{const h=JSON.parse(L);Array.isArray(h)&&h.length>=3&&S.push({time:h[0],eventType:h[1],data:h[2]})}catch{}if(S.length===0){r.write(y),j(100),w(!1);return}w(!1);const P=S[S.length-1].time;let R=0,k=0;const C=()=>{if(O||R>=S.length){j(100);return}const L=S[R],h=(L.time-k)*1e3;k=L.time,R++;const f=Math.min(h,2e3);g.current=setTimeout(()=>{O||(r.write(L.data),j(Math.round(L.time/P*100)),C())},f)};C()}).catch(x=>{O||(console.error("[Replay] Load failed:",x),N("Failed to load recording data"),w(!1))}),()=>{O=!0,g.current&&clearTimeout(g.current);try{r.dispose()}catch{}p.current=null}},[s,d]),e.jsx(pe,{"code-path":"src/components/system/ReplayDialog.tsx:153:5",open:s,onOpenChange:i,children:e.jsxs(xe,{"code-path":"src/components/system/ReplayDialog.tsx:154:7",showOverlay:!1,className:"bg-slate-900 border-slate-800 p-0 gap-0",style:{maxWidth:"900px",width:"90vw"},children:[e.jsxs(he,{"code-path":"src/components/system/ReplayDialog.tsx:155:9",className:"px-4 py-3 border-b border-slate-800",children:[e.jsxs(me,{"code-path":"src/components/system/ReplayDialog.tsx:156:11",className:"text-slate-100 text-base flex items-center gap-2",children:["Terminal Replay #",d??"",T>0&&T<100&&e.jsxs("span",{"code-path":"src/components/system/ReplayDialog.tsx:159:15",className:"text-xs text-slate-500 font-normal ml-2",children:[T,"%"]})]}),e.jsx(ue,{"code-path":"src/components/system/ReplayDialog.tsx:162:11",className:"text-slate-500 sr-only",children:"Replay recorded terminal output"})]}),e.jsxs("div",{"code-path":"src/components/system/ReplayDialog.tsx:164:9",className:"relative bg-[#0a0e14]",style:{height:"460px"},children:[m&&e.jsx("div",{"code-path":"src/components/system/ReplayDialog.tsx:166:13",className:"absolute inset-0 z-10 flex items-center justify-center bg-black/40",children:e.jsx(ge,{"code-path":"src/components/system/ReplayDialog.tsx:167:15",className:"h-6 w-6 animate-spin text-blue-400"})}),b&&e.jsx("div",{"code-path":"src/components/system/ReplayDialog.tsx:171:13",className:"absolute inset-0 z-10 flex items-center justify-center bg-black/40",children:e.jsx("p",{"code-path":"src/components/system/ReplayDialog.tsx:172:15",className:"text-red-400 text-sm",children:b})}),T>0&&T<100&&e.jsx("div",{"code-path":"src/components/system/ReplayDialog.tsx:176:13",className:"absolute bottom-0 left-0 right-0 h-0.5 bg-slate-800 z-10",children:e.jsx("div",{"code-path":"src/components/system/ReplayDialog.tsx:177:15",className:"h-full bg-blue-500 transition-all duration-300",style:{width:`${T}%`}})}),e.jsx("div",{"code-path":"src/components/system/ReplayDialog.tsx:183:11",ref:n,className:"absolute inset-0 p-1"})]})]})})}function Xe({open:s,onOpenChange:i,sessionId:d,sessionInfo:n}){const p=a.useRef(null),g=a.useRef(null),m=a.useRef(null),w=a.useRef(null),[b,N]=a.useState(!1),[T,j]=a.useState(""),[r,u]=a.useState(n||null);a.useEffect(()=>{s||(N(!1),j(""))},[s]),a.useEffect(()=>{if(!s||!d)return;N(!1),j("");const x=new Ae.Terminal({cursorBlink:!1,fontSize:13,fontFamily:'Menlo, Monaco, "Courier New", monospace',disableStdin:!0,theme:{background:"#0a0e14",foreground:"#d6d6d6",cursor:"#d6d6d6",selectionBackground:"#264f78",black:"#1a1a2e",red:"#ff6b6b",green:"#69db7c",yellow:"#ffd43b",blue:"#4dabf7",magenta:"#da77f2",cyan:"#63e6be",white:"#d6d6d6",brightBlack:"#4a4a4a",brightRed:"#ff8787",brightGreen:"#8ce99a",brightYellow:"#ffe066",brightBlue:"#74c0fc",brightMagenta:"#e599f7",brightCyan:"#7ae5d5",brightWhite:"#f8f9fa"}}),y=new ve.FitAddon;x.loadAddon(y),g.current=x,m.current=y;const D=()=>{const h=p.current;if(!h){requestAnimationFrame(D);return}x.open(h);try{y.fit()}catch{}},S=_e.getState().token||localStorage.getItem("token")||(()=>{try{return JSON.parse(localStorage.getItem("user-storage")||"{}")?.state?.token||""}catch{return""}})(),R=`${window.location.protocol==="https:"?"wss:":"ws:"}//${window.location.host}/ws/audit/${d}?token=${encodeURIComponent(S)}`;console.log("[LiveMonitor] Connecting to:",R.replace(/token=[^&]+/,"token=***"));const k=new WebSocket(R);w.current=k;let C=!1;k.onopen=()=>{console.log("[LiveMonitor] WS connected for session:",d),C=!0,N(!0),j(""),D(),x.writeln("\x1B[36m[审计监控] 已连接到会话...\x1B[0m")},k.onmessage=h=>{try{const f=JSON.parse(h.data);switch(f.type){case"session_info":u(f.payload),x.writeln(`\x1B[36m用户: ${f.payload.username} 服务器: ${f.payload.server_name}\x1B[0m`);break;case"history":f.data&&x.write(f.data);break;case"output":f.data&&x.write(f.data);break}}catch{}},k.onerror=h=>{console.log("[LiveMonitor] WS error:",h),j("WebSocket 连接失败")},k.onclose=h=>{console.log("[LiveMonitor] WS closed code:",h.code,"reason:",h.reason),C||j(`连接失败 (code=${h.code}): ${h.reason||"认证失败或网络问题"}`),N(!1),x.writeln(`\r
\x1B[33m[审计监控] 连接已断开\x1B[0m`)};const L=setTimeout(()=>{C||(j("连接超时 — 请确认已登录且有活跃会话"),k.close())},5e3);return()=>{clearTimeout(L),k.close(),x.dispose(),g.current=null,m.current=null,w.current=null,N(!1)}},[s,d]),a.useEffect(()=>{if(!s)return;const x=p.current;if(!x)return;let y;const D=new ResizeObserver(()=>{clearTimeout(y),y=setTimeout(()=>{try{m.current?.fit()}catch{}},60)});return D.observe(x),()=>{clearTimeout(y),D.disconnect()}},[s,d]);const O=x=>x?new Date(x).toLocaleString():"--";return e.jsx(pe,{"code-path":"src/components/system/LiveMonitorDialog.tsx:223:5",open:s,onOpenChange:i,children:e.jsxs(xe,{"code-path":"src/components/system/LiveMonitorDialog.tsx:224:7",showOverlay:!1,className:"bg-[var(--dg-bg-secondary)] border-[var(--dg-border)] max-w-[95vw] max-h-[90vh] w-[1200px]",children:[e.jsxs(he,{"code-path":"src/components/system/LiveMonitorDialog.tsx:225:9",children:[e.jsxs(me,{"code-path":"src/components/system/LiveMonitorDialog.tsx:226:11",className:"text-[var(--dg-text-primary)] flex items-center gap-2",children:[e.jsx(Y,{"code-path":"src/components/system/LiveMonitorDialog.tsx:227:13",className:"h-5 w-5 text-emerald-400"}),"终端实时监控",b&&e.jsx(_,{"code-path":"src/components/system/LiveMonitorDialog.tsx:230:15",variant:"outline",className:"border-emerald-500/30 text-emerald-400 bg-emerald-500/10 ml-2 text-xs",children:"● 在线"}),!b&&!T&&e.jsxs(_,{"code-path":"src/components/system/LiveMonitorDialog.tsx:235:15",variant:"outline",className:"border-yellow-500/30 text-yellow-400 bg-yellow-500/10 ml-2 text-xs",children:[e.jsx(ge,{"code-path":"src/components/system/LiveMonitorDialog.tsx:236:17",className:"h-3 w-3 animate-spin mr-1"}),"连接中"]}),T&&e.jsx(_,{"code-path":"src/components/system/LiveMonitorDialog.tsx:241:15",variant:"outline",className:"border-red-500/30 text-red-400 bg-red-500/10 ml-2 text-xs",children:"连接失败"})]}),e.jsx(ue,{"code-path":"src/components/system/LiveMonitorDialog.tsx:246:11",className:"text-[var(--dg-text-secondary)]",children:r&&e.jsxs("div",{"code-path":"src/components/system/LiveMonitorDialog.tsx:248:15",className:"flex items-center gap-4 text-xs mt-1 flex-wrap",children:[e.jsxs("span",{"code-path":"src/components/system/LiveMonitorDialog.tsx:249:17",className:"flex items-center gap-1",children:[e.jsx(De,{"code-path":"src/components/system/LiveMonitorDialog.tsx:250:19",className:"h-3 w-3"}),r.username]}),e.jsxs("span",{"code-path":"src/components/system/LiveMonitorDialog.tsx:253:17",className:"flex items-center gap-1",children:[e.jsx(Re,{"code-path":"src/components/system/LiveMonitorDialog.tsx:254:19",className:"h-3 w-3"}),r.server_name," (",r.server_ip,")"]}),e.jsxs("span",{"code-path":"src/components/system/LiveMonitorDialog.tsx:257:17",className:"flex items-center gap-1",children:[e.jsx(Me,{"code-path":"src/components/system/LiveMonitorDialog.tsx:258:19",className:"h-3 w-3"}),O(r.start_time)]})]})})]}),T&&e.jsx("p",{"code-path":"src/components/system/LiveMonitorDialog.tsx:267:11",className:"text-sm text-red-400 px-1",children:T}),e.jsx("div",{"code-path":"src/components/system/LiveMonitorDialog.tsx:270:9",ref:p,className:"w-full rounded-md overflow-hidden border border-[var(--dg-border)]",style:{height:"55vh"}})]})})}function ye(s){if(!s||s<0)return"--";if(s<60)return`${s}秒`;const i=Math.floor(s/60),d=s%60;if(i<60)return`${i}分${d>0?`${d}秒`:""}`;const n=Math.floor(i/60),p=i%60;return`${n}时${p>0?`${p}分`:""}`}function Ve(s){return s?s<1024?`${s} B`:s<1024*1024?`${(s/1024).toFixed(1)} KB`:`${(s/1024/1024).toFixed(2)} MB`:"0 B"}function Le(s){return s==="active"?e.jsxs(_,{"code-path":"src/pages/TerminalAuditTab.tsx:86:7",variant:"outline",className:"border-emerald-500/30 text-emerald-400 bg-emerald-500/10",children:[e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:87:9",className:"w-1.5 h-1.5 rounded-full bg-emerald-400 mr-1.5 inline-block animate-pulse"}),"活动中"]}):s==="failed"?e.jsx(_,{"code-path":"src/pages/TerminalAuditTab.tsx:94:7",variant:"outline",className:"border-red-500/30 text-red-400 bg-red-500/10",children:"失败"}):e.jsx(_,{"code-path":"src/pages/TerminalAuditTab.tsx:100:5",variant:"outline",className:"border-slate-500/30 text-slate-400 bg-slate-500/10",children:"已关闭"})}function Ye(s){const[i,d]=a.useState(0);return a.useEffect(()=>{if(!s)return;const n=new Date(s).getTime(),p=()=>d(Math.floor((Date.now()-n)/1e3));p();const g=setInterval(p,1e3);return()=>clearInterval(g)},[s]),i}const Qe=[{id:"active",name:"在线会话",icon:Te},{id:"history",name:"历史会话",icon:Y},{id:"commands",name:"会话命令",icon:B}];function de(){const s=be(),[i,d]=a.useState("active"),[n,p]=a.useState([]),[g,m]=a.useState(!0),[w,b]=a.useState(""),[N,T]=a.useState([]),[j,r]=a.useState(!0),[u,O]=a.useState(""),[x,y]=a.useState(null),[D,S]=a.useState(!1),[P,R]=a.useState([]),[k,C]=a.useState(!0),[L,h]=a.useState(""),[f,Q]=a.useState(""),[Z,c]=a.useState(!1),[M,ee]=a.useState(null),[I,se]=a.useState(!0),[ie,we]=a.useState(!1),te=10;a.useEffect(()=>{i==="active"&&!ie?se(!0):i!=="active"&&se(!1)},[i,ie]);const $=a.useCallback(async()=>{m(!0);try{const t=await H.list({page:1,page_size:100,status:"active"});p(t?.list??[])}catch{p([])}finally{m(!1)}},[]);a.useEffect(()=>{$()},[$]),a.useEffect(()=>{if(!I)return;const t=setInterval($,te*1e3);return()=>clearInterval(t)},[I,$]);const le=n.filter(t=>{const A=w.toLowerCase();return!A||(t.username||"").toLowerCase().includes(A)||(t.server_name||"").toLowerCase().includes(A)||(t.server_ip||"").toLowerCase().includes(A)}),Oe=async(t,A)=>{if(await s({title:"阻断会话",description:`确认强制断开用户「${A}」的当前会话吗?`,confirmText:"阻断",variant:"destructive"}))try{await H.kill(t),await $()}catch{}},Se=t=>{ee(t),c(!0)},ae=a.useCallback(async()=>{r(!0);try{const t=await H.list({page:1,page_size:100,status:"closed"});T(t?.list??[])}catch{T([])}finally{r(!1)}},[]);a.useEffect(()=>{ae()},[ae]);const oe=N.filter(t=>{const A=u.toLowerCase();return!A||(t.username||"").toLowerCase().includes(A)||(t.server_name||"").toLowerCase().includes(A)||(t.server_ip||"").toLowerCase().includes(A)}),ke=t=>{y(t),S(!0)},Ce=async t=>{try{await H.download(t)}catch{}},re=a.useCallback(async()=>{C(!0);try{const t={page:1,page_size:200};f&&(t.session_id=Number(f));const A=await $e.list(t);R(A?.list??[])}catch{R([])}finally{C(!1)}},[f]);a.useEffect(()=>{re()},[re]);const ne=P.filter(t=>{const A=L.toLowerCase();return!A||(t.username||"").toLowerCase().includes(A)||(t.command||"").toLowerCase().includes(A)});return e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:301:5",className:"space-y-4",children:[e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:303:7",className:"flex gap-1 bg-[var(--dg-bg-secondary)] p-1 rounded-lg border border-[var(--dg-border)] w-fit",children:Qe.map(t=>e.jsxs("button",{"code-path":"src/pages/TerminalAuditTab.tsx:305:11",onClick:()=>d(t.id),className:ze("flex items-center gap-2 px-4 py-2 rounded-md text-sm font-medium transition-all",i===t.id?"bg-[var(--dg-bg-tertiary)] text-[var(--dg-text-primary)] shadow-sm":"text-[var(--dg-text-muted)] hover:text-[var(--dg-text-secondary)]"),children:[e.jsx(t.icon,{"code-path":"src/pages/TerminalAuditTab.tsx:315:13",className:"h-4 w-4"}),t.name]},t.id))}),i==="active"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:324:11",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:325:13",className:"relative w-64",children:[e.jsx(B,{"code-path":"src/pages/TerminalAuditTab.tsx:326:15",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-500"}),e.jsx(F,{"code-path":"src/pages/TerminalAuditTab.tsx:327:15",placeholder:"搜索用户/服务器...",value:w,onChange:t=>b(t.target.value),className:"pl-9 h-9 bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500"})]}),e.jsxs(v,{"code-path":"src/pages/TerminalAuditTab.tsx:334:13",variant:"outline",className:"border-slate-700 text-slate-300 hover:text-slate-100 hover:bg-slate-800",onClick:$,children:[e.jsx(J,{"code-path":"src/pages/TerminalAuditTab.tsx:339:15",className:"h-4 w-4 mr-2"}),"刷新"]}),e.jsx(v,{"code-path":"src/pages/TerminalAuditTab.tsx:342:13",variant:I?"default":"outline",className:I?"bg-emerald-600 hover:bg-emerald-700 text-white":"border-slate-700 text-slate-300 hover:text-slate-100 hover:bg-slate-800",onClick:()=>{I&&we(!0),se(!I)},title:I?`每 ${te}s 自动刷新 · 点击关闭`:"点击开启自动刷新",children:I?e.jsxs(e.Fragment,{children:[e.jsx(Ge,{"code-path":"src/pages/TerminalAuditTab.tsx:355:19",className:"h-4 w-4 mr-1.5 animate-pulse"}),te,"s"]}):e.jsxs(e.Fragment,{children:[e.jsx(We,{"code-path":"src/pages/TerminalAuditTab.tsx:357:19",className:"h-4 w-4 mr-2"}),"自动刷新"]})})]}),e.jsx(K,{"code-path":"src/pages/TerminalAuditTab.tsx:362:11",className:"bg-slate-900 border-slate-800",children:e.jsx(U,{"code-path":"src/pages/TerminalAuditTab.tsx:363:13",className:"p-0",children:e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:364:15",className:"border-t border-slate-800",children:g?e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:366:19",className:"flex items-center justify-center py-16",children:e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:367:21",className:"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"})}):le.length===0?e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:370:19",className:"flex flex-col items-center justify-center py-16 text-slate-500",children:[e.jsx(Te,{"code-path":"src/pages/TerminalAuditTab.tsx:371:21",className:"h-8 w-8 mb-3 opacity-40"}),e.jsx("p",{"code-path":"src/pages/TerminalAuditTab.tsx:372:21",className:"text-sm",children:"暂无在线会话"})]}):e.jsxs(W,{"code-path":"src/pages/TerminalAuditTab.tsx:375:19",children:[e.jsx(q,{"code-path":"src/pages/TerminalAuditTab.tsx:376:21",children:e.jsxs(E,{"code-path":"src/pages/TerminalAuditTab.tsx:377:23",className:"border-slate-800 hover:bg-transparent",children:[e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:378:25",className:"text-slate-400",children:"ID"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:379:25",className:"text-slate-400",children:"用户"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:380:25",className:"text-slate-400",children:"目标服务器"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:381:25",className:"text-slate-400",children:"端口"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:382:25",className:"text-slate-400",children:"开始时间"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:383:25",className:"text-slate-400",children:"时长"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:384:25",className:"text-slate-400",children:"状态"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:385:25",className:"text-slate-400 text-right",children:"操作"})]})}),e.jsx(G,{"code-path":"src/pages/TerminalAuditTab.tsx:388:21",children:le.map(t=>e.jsx(Ze,{"code-path":"src/pages/TerminalAuditTab.tsx:390:25",session:t,onKill:Oe,onMonitor:Se},t.id))})]})})})})]}),i==="history"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:409:11",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:410:13",className:"relative w-64",children:[e.jsx(B,{"code-path":"src/pages/TerminalAuditTab.tsx:411:15",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-500"}),e.jsx(F,{"code-path":"src/pages/TerminalAuditTab.tsx:412:15",placeholder:"搜索用户/服务器/IP...",value:u,onChange:t=>O(t.target.value),className:"pl-9 h-9 bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500"})]}),e.jsxs(v,{"code-path":"src/pages/TerminalAuditTab.tsx:419:13",variant:"outline",className:"border-slate-700 text-slate-300 hover:text-slate-100 hover:bg-slate-800",onClick:ae,children:[e.jsx(J,{"code-path":"src/pages/TerminalAuditTab.tsx:424:15",className:"h-4 w-4 mr-2"}),"刷新"]})]}),e.jsx(K,{"code-path":"src/pages/TerminalAuditTab.tsx:429:11",className:"bg-slate-900 border-slate-800",children:e.jsx(U,{"code-path":"src/pages/TerminalAuditTab.tsx:430:13",className:"p-0",children:e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:431:15",className:"border-t border-slate-800",children:j?e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:433:19",className:"flex items-center justify-center py-16",children:e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:434:21",className:"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"})}):oe.length===0?e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:437:19",className:"flex flex-col items-center justify-center py-16 text-slate-500",children:[e.jsx(Y,{"code-path":"src/pages/TerminalAuditTab.tsx:438:21",className:"h-8 w-8 mb-3 opacity-40"}),e.jsx("p",{"code-path":"src/pages/TerminalAuditTab.tsx:439:21",className:"text-sm",children:"暂无历史会话"})]}):e.jsxs(W,{"code-path":"src/pages/TerminalAuditTab.tsx:442:19",children:[e.jsx(q,{"code-path":"src/pages/TerminalAuditTab.tsx:443:21",children:e.jsxs(E,{"code-path":"src/pages/TerminalAuditTab.tsx:444:23",className:"border-slate-800 hover:bg-transparent",children:[e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:445:25",className:"text-slate-400",children:"ID"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:446:25",className:"text-slate-400",children:"用户"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:447:25",className:"text-slate-400",children:"目标服务器"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:448:25",className:"text-slate-400",children:"端口"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:449:25",className:"text-slate-400",children:"开始时间"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:450:25",className:"text-slate-400",children:"结束时间"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:451:25",className:"text-slate-400",children:"时长"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:452:25",className:"text-slate-400",children:"状态"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:453:25",className:"text-slate-400 text-right",children:"操作"})]})}),e.jsx(G,{"code-path":"src/pages/TerminalAuditTab.tsx:456:21",children:oe.map(t=>e.jsxs(E,{"code-path":"src/pages/TerminalAuditTab.tsx:458:25",className:"border-slate-800 hover:bg-slate-800/50",children:[e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:459:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:460:29",className:"text-sm text-slate-400",children:t.id})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:462:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:463:29",className:"text-sm text-slate-200",children:t.username||"--"})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:465:27",children:e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:466:29",className:"flex flex-col",children:[e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:467:31",className:"text-sm text-slate-200",children:t.server_name||"--"}),e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:468:31",className:"text-xs text-slate-500",children:t.server_ip})]})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:471:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:472:29",className:"text-sm text-slate-400",children:t.server_port})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:474:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:475:29",className:"text-sm text-slate-400",children:t.start_time?new Date(t.start_time).toLocaleString():"--"})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:479:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:480:29",className:"text-sm text-slate-400",children:t.end_time?new Date(t.end_time).toLocaleString():"--"})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:484:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:485:29",className:"text-sm text-slate-300",children:ye(t.duration)})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:487:27",children:Le(t.status)}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:488:27",children:e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:489:29",className:"flex items-center justify-end gap-1",children:[e.jsx(v,{"code-path":"src/pages/TerminalAuditTab.tsx:490:31",variant:"ghost",size:"icon",className:"h-8 w-8 text-slate-400 hover:text-blue-400 hover:bg-slate-800",onClick:()=>ke(t.id),title:"回放",children:e.jsx(Pe,{"code-path":"src/pages/TerminalAuditTab.tsx:497:33",className:"h-4 w-4"})}),e.jsx(v,{"code-path":"src/pages/TerminalAuditTab.tsx:499:31",variant:"ghost",size:"icon",className:"h-8 w-8 text-slate-400 hover:text-green-400 hover:bg-slate-800",onClick:()=>Ce(t.id),title:"下载录制",children:e.jsx(Ne,{"code-path":"src/pages/TerminalAuditTab.tsx:506:33",className:"h-4 w-4"})})]})})]},t.id))})]})})})})]}),i==="commands"&&e.jsxs(e.Fragment,{children:[e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:524:11",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:525:13",className:"relative w-64",children:[e.jsx(B,{"code-path":"src/pages/TerminalAuditTab.tsx:526:15",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-500"}),e.jsx(F,{"code-path":"src/pages/TerminalAuditTab.tsx:527:15",placeholder:"搜索用户/命令...",value:L,onChange:t=>h(t.target.value),className:"pl-9 h-9 bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500"})]}),e.jsx(F,{"code-path":"src/pages/TerminalAuditTab.tsx:534:13",placeholder:"会话 ID(可选)",value:f,onChange:t=>Q(t.target.value),className:"w-32 h-9 bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500"}),e.jsxs(v,{"code-path":"src/pages/TerminalAuditTab.tsx:540:13",variant:"outline",className:"border-slate-700 text-slate-300 hover:text-slate-100 hover:bg-slate-800",onClick:re,children:[e.jsx(J,{"code-path":"src/pages/TerminalAuditTab.tsx:545:15",className:"h-4 w-4 mr-2"}),"刷新"]})]}),e.jsx(K,{"code-path":"src/pages/TerminalAuditTab.tsx:550:11",className:"bg-slate-900 border-slate-800",children:e.jsx(U,{"code-path":"src/pages/TerminalAuditTab.tsx:551:13",className:"p-0",children:e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:552:15",className:"border-t border-slate-800",children:k?e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:554:19",className:"flex items-center justify-center py-16",children:e.jsx("div",{"code-path":"src/pages/TerminalAuditTab.tsx:555:21",className:"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"})}):ne.length===0?e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:558:19",className:"flex flex-col items-center justify-center py-16 text-slate-500",children:[e.jsx(B,{"code-path":"src/pages/TerminalAuditTab.tsx:559:21",className:"h-8 w-8 mb-3 opacity-40"}),e.jsx("p",{"code-path":"src/pages/TerminalAuditTab.tsx:560:21",className:"text-sm",children:"暂无会话命令记录"})]}):e.jsxs(W,{"code-path":"src/pages/TerminalAuditTab.tsx:563:19",children:[e.jsx(q,{"code-path":"src/pages/TerminalAuditTab.tsx:564:21",children:e.jsxs(E,{"code-path":"src/pages/TerminalAuditTab.tsx:565:23",className:"border-slate-800 hover:bg-transparent",children:[e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:566:25",className:"text-slate-400",children:"时间"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:567:25",className:"text-slate-400",children:"用户"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:568:25",className:"text-slate-400",children:"命令"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:569:25",className:"text-slate-400",children:"输出大小"}),e.jsx(l,{"code-path":"src/pages/TerminalAuditTab.tsx:570:25",className:"text-slate-400",children:"关联会话"})]})}),e.jsx(G,{"code-path":"src/pages/TerminalAuditTab.tsx:573:21",children:ne.map(t=>e.jsxs(E,{"code-path":"src/pages/TerminalAuditTab.tsx:575:25",className:"border-slate-800 hover:bg-slate-800/50",children:[e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:576:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:577:29",className:"text-sm text-slate-400",children:t.created_at?new Date(t.created_at).toLocaleString():"--"})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:581:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:582:29",className:"text-sm text-slate-200",children:t.username||"--"})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:584:27",children:e.jsx("code",{"code-path":"src/pages/TerminalAuditTab.tsx:585:29",className:"text-xs text-slate-300 bg-slate-800 px-2 py-0.5 rounded max-w-[400px] truncate block",children:t.command||"--"})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:589:27",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:590:29",className:"text-sm text-slate-400",children:Ve(t.output_size)})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:592:27",children:e.jsxs("span",{"code-path":"src/pages/TerminalAuditTab.tsx:593:29",className:"text-xs text-slate-500",children:["#",t.session_id]})})]},t.id))})]})})})})]}),e.jsx(Je,{"code-path":"src/pages/TerminalAuditTab.tsx:607:7",open:D,onOpenChange:S,sessionId:x}),e.jsx(Xe,{"code-path":"src/pages/TerminalAuditTab.tsx:610:7",open:Z,onOpenChange:c,sessionId:M})]})}function Ze({session:s,onKill:i,onMonitor:d}){const n=Ye(s.start_time);return e.jsxs(E,{"code-path":"src/pages/TerminalAuditTab.tsx:631:5",className:"border-slate-800 hover:bg-slate-800/50",children:[e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:632:7",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:633:9",className:"text-sm text-slate-400",children:s.id})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:635:7",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:636:9",className:"text-sm text-slate-200",children:s.username||"--"})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:638:7",children:e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:639:9",className:"flex flex-col",children:[e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:640:11",className:"text-sm text-slate-200",children:s.server_name||"--"}),e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:641:11",className:"text-xs text-slate-500",children:s.server_ip})]})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:644:7",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:645:9",className:"text-sm text-slate-400",children:s.server_port})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:647:7",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:648:9",className:"text-sm text-slate-400",children:s.start_time?new Date(s.start_time).toLocaleString():"--"})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:652:7",children:e.jsx("span",{"code-path":"src/pages/TerminalAuditTab.tsx:653:9",className:"text-sm text-emerald-400 font-mono",children:ye(n)})}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:655:7",children:Le(s.status)}),e.jsx(o,{"code-path":"src/pages/TerminalAuditTab.tsx:656:7",children:e.jsxs("div",{"code-path":"src/pages/TerminalAuditTab.tsx:657:9",className:"flex items-center justify-end gap-1",children:[e.jsx(v,{"code-path":"src/pages/TerminalAuditTab.tsx:658:11",variant:"ghost",size:"icon",className:"h-8 w-8 text-slate-400 hover:text-red-400 hover:bg-slate-800",onClick:()=>i(s.id,s.username),title:"阻断会话",children:e.jsx(Ke,{"code-path":"src/pages/TerminalAuditTab.tsx:665:13",className:"h-4 w-4"})}),e.jsx(v,{"code-path":"src/pages/TerminalAuditTab.tsx:667:11",variant:"ghost",size:"icon",className:"h-8 w-8 text-slate-400 hover:text-blue-400 hover:bg-slate-800",onClick:()=>d(s.id),title:"实时查看",children:e.jsx(je,{"code-path":"src/pages/TerminalAuditTab.tsx:674:13",className:"h-4 w-4"})})]})})]})}function es(s){return{id:String(s.id??""),userId:String(s.user_id??s.userId??""),username:s.username??"",module:s.module??s.resource??"",action:s.action??"",resource:s.resource??"",ip:s.ip??"",userAgent:s.user_agent??s.userAgent??"",result:s.result==="failure"?"failure":"success",message:s.message??s.detail??"",createdAt:s.createdAt??s.created_at??""}}function ss(){be();const[s,i]=a.useState([]),[d,n]=a.useState(!0),[p,g]=a.useState(""),[m,w]=a.useState(""),[b,N]=a.useState(""),[T,j]=a.useState([]),[r,u]=a.useState([]),[O,x]=a.useState(null),[y,D]=a.useState(!1),[S,P]=a.useState(null),[R,k]=a.useState(!1),C=a.useCallback(async()=>{n(!0);try{const c={page:1,page_size:100};m&&(c.module=m),b&&(c.action=b);const ee=(await X.getLogs(c))?.list??[];i(ee.map(es))}catch{i([])}finally{n(!1)}},[m,b]),L=a.useCallback(async()=>{try{const[c,M]=await Promise.all([X.getModules(),X.getActions()]);j(c?.list??c??[]),u(M?.list??M??[])}catch{}},[]);a.useEffect(()=>{C(),L()},[C,L]);const h=s.filter(c=>{const M=p.toLowerCase();return!M||c.username.toLowerCase().includes(M)||c.module.toLowerCase().includes(M)||c.action.toLowerCase().includes(M)||c.resource.toLowerCase().includes(M)}),f=c=>c==="success"?e.jsx(_,{"code-path":"src/pages/AuditOperationsTab.tsx:118:7",variant:"outline",className:"border-emerald-500/30 text-emerald-400 bg-emerald-500/10",children:"成功"}):e.jsx(_,{"code-path":"src/pages/AuditOperationsTab.tsx:122:7",variant:"outline",className:"border-red-500/30 text-red-400 bg-red-500/10",children:"失败"}),Q=async()=>{try{const c={};m&&(c.module=m),b&&(c.action=b),await X.exportLogs(c)}catch{}},Z=c=>{x(c)};return e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:157:5",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:159:7",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:160:9",className:"relative w-64",children:[e.jsx(B,{"code-path":"src/pages/AuditOperationsTab.tsx:161:11",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-500"}),e.jsx(F,{"code-path":"src/pages/AuditOperationsTab.tsx:162:11",placeholder:"搜索操作日志...",value:p,onChange:c=>g(c.target.value),className:"pl-9 h-9 bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500"})]}),e.jsxs("select",{"code-path":"src/pages/AuditOperationsTab.tsx:171:9",value:m,onChange:c=>w(c.target.value),className:"h-9 px-3 text-sm rounded-md bg-slate-800/50 border border-slate-700 text-slate-300 focus:outline-none focus:border-blue-500",children:[e.jsx("option",{"code-path":"src/pages/AuditOperationsTab.tsx:176:11",value:"",children:"全部模块"}),T.map(c=>e.jsx("option",{"code-path":"src/pages/AuditOperationsTab.tsx:178:13",value:c.value,children:c.label},c.value))]}),e.jsxs("select",{"code-path":"src/pages/AuditOperationsTab.tsx:185:9",value:b,onChange:c=>N(c.target.value),className:"h-9 px-3 text-sm rounded-md bg-slate-800/50 border border-slate-700 text-slate-300 focus:outline-none focus:border-blue-500",children:[e.jsx("option",{"code-path":"src/pages/AuditOperationsTab.tsx:190:11",value:"",children:"全部操作"}),r.map(c=>e.jsx("option",{"code-path":"src/pages/AuditOperationsTab.tsx:192:13",value:c.value,children:c.label},c.value))]}),e.jsxs(v,{"code-path":"src/pages/AuditOperationsTab.tsx:198:9",variant:"outline",className:"border-slate-700 text-slate-300 hover:text-slate-100 hover:bg-slate-800",onClick:C,children:[e.jsx(J,{"code-path":"src/pages/AuditOperationsTab.tsx:203:11",className:"h-4 w-4 mr-2"}),"刷新"]}),e.jsxs(v,{"code-path":"src/pages/AuditOperationsTab.tsx:206:9",variant:"outline",className:"border-slate-700 text-slate-300 hover:text-slate-100 hover:bg-slate-800",onClick:Q,children:[e.jsx(Ne,{"code-path":"src/pages/AuditOperationsTab.tsx:211:11",className:"h-4 w-4 mr-2"}),"导出"]})]}),e.jsx(K,{"code-path":"src/pages/AuditOperationsTab.tsx:217:7",className:"bg-slate-900 border-slate-800",children:e.jsx(U,{"code-path":"src/pages/AuditOperationsTab.tsx:218:9",className:"p-0",children:e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:219:11",className:"border-t border-slate-800",children:d?e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:221:15",className:"flex items-center justify-center py-16",children:e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:222:17",className:"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"})}):h.length===0?e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:225:15",className:"flex flex-col items-center justify-center py-16 text-slate-500",children:[e.jsx(B,{"code-path":"src/pages/AuditOperationsTab.tsx:226:17",className:"h-8 w-8 mb-3 opacity-40"}),e.jsx("p",{"code-path":"src/pages/AuditOperationsTab.tsx:227:17",className:"text-sm",children:"暂无操作日志"})]}):e.jsxs(W,{"code-path":"src/pages/AuditOperationsTab.tsx:230:15",children:[e.jsx(q,{"code-path":"src/pages/AuditOperationsTab.tsx:231:17",children:e.jsxs(E,{"code-path":"src/pages/AuditOperationsTab.tsx:232:19",className:"border-slate-800 hover:bg-transparent",children:[e.jsx(l,{"code-path":"src/pages/AuditOperationsTab.tsx:233:21",className:"text-slate-400",children:"时间"}),e.jsx(l,{"code-path":"src/pages/AuditOperationsTab.tsx:234:21",className:"text-slate-400",children:"用户"}),e.jsx(l,{"code-path":"src/pages/AuditOperationsTab.tsx:235:21",className:"text-slate-400",children:"模块"}),e.jsx(l,{"code-path":"src/pages/AuditOperationsTab.tsx:236:21",className:"text-slate-400",children:"操作类型"}),e.jsx(l,{"code-path":"src/pages/AuditOperationsTab.tsx:237:21",className:"text-slate-400",children:"资源"}),e.jsx(l,{"code-path":"src/pages/AuditOperationsTab.tsx:238:21",className:"text-slate-400",children:"IP"}),e.jsx(l,{"code-path":"src/pages/AuditOperationsTab.tsx:239:21",className:"text-slate-400",children:"结果"}),e.jsx(l,{"code-path":"src/pages/AuditOperationsTab.tsx:240:21",className:"text-slate-400 text-right",children:"详情"})]})}),e.jsx(G,{"code-path":"src/pages/AuditOperationsTab.tsx:243:17",children:h.map(c=>e.jsxs(E,{"code-path":"src/pages/AuditOperationsTab.tsx:245:21",className:"border-slate-800 hover:bg-slate-800/50",children:[e.jsx(o,{"code-path":"src/pages/AuditOperationsTab.tsx:246:23",children:e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:247:25",className:"text-sm text-slate-400",children:c.createdAt?new Date(c.createdAt).toLocaleString():"--"})}),e.jsx(o,{"code-path":"src/pages/AuditOperationsTab.tsx:251:23",children:e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:252:25",className:"text-sm text-slate-200",children:c.username||"--"})}),e.jsx(o,{"code-path":"src/pages/AuditOperationsTab.tsx:254:23",children:e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:255:25",className:"text-sm text-slate-300",children:c.module||"--"})}),e.jsx(o,{"code-path":"src/pages/AuditOperationsTab.tsx:257:23",children:e.jsx(_,{"code-path":"src/pages/AuditOperationsTab.tsx:258:25",variant:"outline",className:"border-blue-500/30 text-blue-400 bg-blue-500/10",children:c.action||"--"})}),e.jsx(o,{"code-path":"src/pages/AuditOperationsTab.tsx:262:23",children:e.jsx("code",{"code-path":"src/pages/AuditOperationsTab.tsx:263:25",className:"text-xs text-slate-400 bg-slate-800 px-2 py-0.5 rounded",children:c.resource||"--"})}),e.jsx(o,{"code-path":"src/pages/AuditOperationsTab.tsx:267:23",children:e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:268:25",className:"text-sm text-slate-400",children:c.ip||"--"})}),e.jsx(o,{"code-path":"src/pages/AuditOperationsTab.tsx:270:23",children:f(c.result)}),e.jsx(o,{"code-path":"src/pages/AuditOperationsTab.tsx:271:23",children:e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:272:25",className:"flex items-center justify-end",children:e.jsx(v,{"code-path":"src/pages/AuditOperationsTab.tsx:273:27",variant:"ghost",size:"icon",className:"h-8 w-8 text-slate-400 hover:text-blue-400 hover:bg-slate-800",onClick:()=>Z(c),title:"查看详情",children:e.jsx(je,{"code-path":"src/pages/AuditOperationsTab.tsx:280:29",className:"h-4 w-4"})})})})]},c.id))})]})})})}),e.jsx(ts,{"code-path":"src/pages/AuditOperationsTab.tsx:294:7",log:O,onClose:()=>x(null)}),e.jsx(as,{"code-path":"src/pages/AuditOperationsTab.tsx:297:7",open:y,onClose:()=>D(!1),loading:R,stats:S})]})}function ts({log:s,onClose:i}){return s?e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:315:5",className:"fixed inset-0 z-50 flex items-center justify-center",children:[e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:316:7",className:"absolute inset-0 bg-black/60",onClick:i}),e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:317:7",className:"relative bg-slate-900 border border-slate-800 rounded-lg p-6 max-w-lg w-full mx-4 shadow-2xl",children:[e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:318:9",className:"flex items-center justify-between mb-4",children:[e.jsx("h3",{"code-path":"src/pages/AuditOperationsTab.tsx:319:11",className:"text-lg font-semibold text-slate-100",children:"操作日志详情"}),e.jsx(v,{"code-path":"src/pages/AuditOperationsTab.tsx:320:11",variant:"ghost",size:"icon",className:"h-7 w-7 text-slate-400 hover:text-slate-100",onClick:i,children:e.jsx(fe,{"code-path":"src/pages/AuditOperationsTab.tsx:326:13",className:"h-4 w-4"})})]}),e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:330:9",className:"space-y-3 text-sm",children:[e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:331:11",label:"ID",value:s.id}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:332:11",label:"时间",value:s.createdAt?new Date(s.createdAt).toLocaleString():"--"}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:333:11",label:"用户",value:s.username||"--"}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:334:11",label:"用户ID",value:s.userId||"--"}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:335:11",label:"模块",value:s.module||"--"}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:336:11",label:"操作类型",value:s.action||"--"}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:337:11",label:"资源",value:s.resource||"--"}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:338:11",label:"IP地址",value:s.ip||"--"}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:339:11",label:"User-Agent",value:s.userAgent||"--"}),e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:340:11",label:"结果",value:e.jsx(_,{"code-path":"src/pages/AuditOperationsTab.tsx:343:15",variant:"outline",className:s.result==="success"?"border-emerald-500/30 text-emerald-400 bg-emerald-500/10":"border-red-500/30 text-red-400 bg-red-500/10",children:s.result==="success"?"成功":"失败"})}),s.message&&e.jsx(z,{"code-path":"src/pages/AuditOperationsTab.tsx:355:27",label:"详情",value:s.message,mono:!0})]}),e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:358:9",className:"mt-5 flex justify-end",children:e.jsx(v,{"code-path":"src/pages/AuditOperationsTab.tsx:359:11",variant:"outline",className:"border-slate-700 text-slate-300 hover:bg-slate-800",onClick:i,children:"关闭"})})]})]}):null}function z({label:s,value:i,mono:d}){return e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:374:5",className:"flex items-start gap-4",children:[e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:375:7",className:"text-slate-500 w-20 flex-shrink-0",children:s}),e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:376:7",className:d?"text-slate-300 font-mono text-xs break-all":"text-slate-200 break-all",children:i})]})}function as({open:s,onClose:i,loading:d,stats:n}){return s?e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:401:5",className:"fixed inset-0 z-50 flex items-center justify-center",children:[e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:402:7",className:"absolute inset-0 bg-black/60",onClick:i}),e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:403:7",className:"relative bg-slate-900 border border-slate-800 rounded-lg p-6 max-w-md w-full mx-4 shadow-2xl",children:[e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:404:9",className:"flex items-center justify-between mb-4",children:[e.jsx("h3",{"code-path":"src/pages/AuditOperationsTab.tsx:405:11",className:"text-lg font-semibold text-slate-100",children:"审计统计"}),e.jsx(v,{"code-path":"src/pages/AuditOperationsTab.tsx:406:11",variant:"ghost",size:"icon",className:"h-7 w-7 text-slate-400 hover:text-slate-100",onClick:i,children:e.jsx(fe,{"code-path":"src/pages/AuditOperationsTab.tsx:412:13",className:"h-4 w-4"})})]}),d?e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:417:11",className:"flex items-center justify-center py-10",children:e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:418:13",className:"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"})}):n?e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:421:11",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:422:13",className:"grid grid-cols-2 gap-3",children:[e.jsx(V,{"code-path":"src/pages/AuditOperationsTab.tsx:423:15",label:"总日志数",value:String(n.total_logs??"--"),color:"blue"}),e.jsx(V,{"code-path":"src/pages/AuditOperationsTab.tsx:424:15",label:"今日日志",value:String(n.today_count??"--"),color:"emerald"}),e.jsx(V,{"code-path":"src/pages/AuditOperationsTab.tsx:425:15",label:"成功数",value:String(n.success_count??"--"),color:"emerald"}),e.jsx(V,{"code-path":"src/pages/AuditOperationsTab.tsx:426:15",label:"失败数",value:String(n.failure_count??"--"),color:"red"})]}),n.top_modules&&n.top_modules.length>0&&e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:430:15",children:[e.jsx("h4",{"code-path":"src/pages/AuditOperationsTab.tsx:431:17",className:"text-xs font-semibold text-slate-400 mb-2",children:"热门模块"}),e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:432:17",className:"space-y-1",children:n.top_modules.slice(0,5).map((p,g)=>e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:434:21",className:"flex justify-between text-xs",children:[e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:435:23",className:"text-slate-300",children:p.module}),e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:436:23",className:"text-slate-500",children:p.count})]},g))})]}),n.top_users&&n.top_users.length>0&&e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:444:15",children:[e.jsx("h4",{"code-path":"src/pages/AuditOperationsTab.tsx:445:17",className:"text-xs font-semibold text-slate-400 mb-2",children:"活跃用户"}),e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:446:17",className:"space-y-1",children:n.top_users.slice(0,5).map((p,g)=>e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:448:21",className:"flex justify-between text-xs",children:[e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:449:23",className:"text-slate-300",children:p.username}),e.jsx("span",{"code-path":"src/pages/AuditOperationsTab.tsx:450:23",className:"text-slate-500",children:p.count})]},g))})]})]}):e.jsx("p",{"code-path":"src/pages/AuditOperationsTab.tsx:458:11",className:"text-slate-500 text-center py-10 text-sm",children:"暂无统计数据"}),e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:461:9",className:"mt-5 flex justify-end",children:e.jsx(v,{"code-path":"src/pages/AuditOperationsTab.tsx:462:11",variant:"outline",className:"border-slate-700 text-slate-300 hover:bg-slate-800",onClick:i,children:"关闭"})})]})]}):null}function V({label:s,value:i,color:d}){const n={blue:"border-blue-500/20 bg-blue-500/5 text-blue-400",emerald:"border-emerald-500/20 bg-emerald-500/5 text-emerald-400",red:"border-red-500/20 bg-red-500/5 text-red-400"};return e.jsxs("div",{"code-path":"src/pages/AuditOperationsTab.tsx:482:5",className:`rounded-lg border p-3 ${n[d]}`,children:[e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:483:7",className:"text-xs text-slate-500",children:s}),e.jsx("div",{"code-path":"src/pages/AuditOperationsTab.tsx:484:7",className:"text-xl font-bold mt-0.5",children:i})]})}function rs(s){return{id:s.id??0,username:s.username??"",login_type:s.login_type??"password",ip:s.ip??"",location:s.location??"",browser:s.browser??"",os:s.os??"",user_agent:s.user_agent??s.userAgent??"",status:s.status==="failed"||s.status==="fail"?"fail":"success",fail_reason:s.fail_reason??s.message??"",login_at:s.login_at??s.created_at??"",created_at:s.created_at??s.login_at??""}}function cs(){const[s,i]=a.useState([]),[d,n]=a.useState(!0),[p,g]=a.useState(""),[m,w]=a.useState(""),b=a.useCallback(async()=>{n(!0);try{const r={page:1,page_size:100};m&&(r.status=m==="fail"?"failed":m);const O=(await Fe.list(r))?.list??[];i(O.map(rs))}catch{i([])}finally{n(!1)}},[m]);a.useEffect(()=>{b()},[b]);const N=s.filter(r=>{const u=p.toLowerCase();return!u||(r.username||"").toLowerCase().includes(u)||(r.ip||"").toLowerCase().includes(u)||(r.location||"").toLowerCase().includes(u)||(r.user_agent||"").toLowerCase().includes(u)}),T=(r,u)=>r==="success"?e.jsx(_,{"code-path":"src/pages/LoginLogsTab.tsx:88:7",variant:"outline",className:"border-emerald-500/30 text-emerald-400 bg-emerald-500/10",children:"成功"}):e.jsx(_,{"code-path":"src/pages/LoginLogsTab.tsx:92:7",variant:"outline",className:"border-red-500/30 text-red-400 bg-red-500/10",title:u||void 0,children:u||"失败"}),j=r=>{switch(r){case"password":return"密码登录";case"ldap":return"LDAP";case"token":return"Token";case"oauth":return"OAuth";default:return r||"密码登录"}};return e.jsxs("div",{"code-path":"src/pages/LoginLogsTab.tsx:113:5",className:"space-y-4",children:[e.jsxs("div",{"code-path":"src/pages/LoginLogsTab.tsx:115:7",className:"flex items-center gap-3 flex-wrap",children:[e.jsxs("div",{"code-path":"src/pages/LoginLogsTab.tsx:116:9",className:"relative w-64",children:[e.jsx(B,{"code-path":"src/pages/LoginLogsTab.tsx:117:11",className:"absolute left-3 top-1/2 -translate-y-1/2 h-4 w-4 text-slate-500"}),e.jsx(F,{"code-path":"src/pages/LoginLogsTab.tsx:118:11",placeholder:"搜索用户/IP/归属地...",value:p,onChange:r=>g(r.target.value),className:"pl-9 h-9 bg-slate-800/50 border-slate-700 text-slate-200 placeholder:text-slate-500"})]}),e.jsx("div",{"code-path":"src/pages/LoginLogsTab.tsx:126:9",className:"flex items-center gap-1",children:[{value:"",label:"全部"},{value:"success",label:"成功"},{value:"fail",label:"失败"}].map(({value:r,label:u})=>e.jsx(v,{"code-path":"src/pages/LoginLogsTab.tsx:132:13",variant:m===r?"default":"outline",size:"sm",className:m===r?"h-8 bg-blue-600 hover:bg-blue-700 text-white":"h-8 border-slate-700 text-slate-400 hover:text-slate-100 hover:bg-slate-800",onClick:()=>w(r),children:u},r||"all"))}),e.jsxs(v,{"code-path":"src/pages/LoginLogsTab.tsx:148:9",variant:"outline",className:"border-slate-700 text-slate-300 hover:text-slate-100 hover:bg-slate-800",onClick:b,children:[e.jsx(J,{"code-path":"src/pages/LoginLogsTab.tsx:153:11",className:"h-4 w-4 mr-2"}),"刷新"]})]}),e.jsx(K,{"code-path":"src/pages/LoginLogsTab.tsx:159:7",className:"bg-slate-900 border-slate-800",children:e.jsx(U,{"code-path":"src/pages/LoginLogsTab.tsx:160:9",className:"p-0",children:e.jsx("div",{"code-path":"src/pages/LoginLogsTab.tsx:161:11",className:"border-t border-slate-800",children:d?e.jsx("div",{"code-path":"src/pages/LoginLogsTab.tsx:163:15",className:"flex items-center justify-center py-16",children:e.jsx("div",{"code-path":"src/pages/LoginLogsTab.tsx:164:17",className:"w-8 h-8 border-2 border-blue-500 border-t-transparent rounded-full animate-spin"})}):N.length===0?e.jsxs("div",{"code-path":"src/pages/LoginLogsTab.tsx:167:15",className:"flex flex-col items-center justify-center py-16 text-slate-500",children:[e.jsx(Ee,{"code-path":"src/pages/LoginLogsTab.tsx:168:17",className:"h-8 w-8 mb-3 opacity-40"}),e.jsx("p",{"code-path":"src/pages/LoginLogsTab.tsx:169:17",className:"text-sm",children:"暂无登录日志"})]}):e.jsxs(W,{"code-path":"src/pages/LoginLogsTab.tsx:172:15",children:[e.jsx(q,{"code-path":"src/pages/LoginLogsTab.tsx:173:17",children:e.jsxs(E,{"code-path":"src/pages/LoginLogsTab.tsx:174:19",className:"border-slate-800 hover:bg-transparent",children:[e.jsx(l,{"code-path":"src/pages/LoginLogsTab.tsx:175:21",className:"text-slate-400",children:"登录时间"}),e.jsx(l,{"code-path":"src/pages/LoginLogsTab.tsx:176:21",className:"text-slate-400",children:"用户"}),e.jsx(l,{"code-path":"src/pages/LoginLogsTab.tsx:177:21",className:"text-slate-400",children:"登录方式"}),e.jsx(l,{"code-path":"src/pages/LoginLogsTab.tsx:178:21",className:"text-slate-400",children:"IP"}),e.jsx(l,{"code-path":"src/pages/LoginLogsTab.tsx:179:21",className:"text-slate-400",children:"归属地"}),e.jsx(l,{"code-path":"src/pages/LoginLogsTab.tsx:180:21",className:"text-slate-400",children:"浏览器/OS"}),e.jsx(l,{"code-path":"src/pages/LoginLogsTab.tsx:181:21",className:"text-slate-400",children:"状态"})]})}),e.jsx(G,{"code-path":"src/pages/LoginLogsTab.tsx:184:17",children:N.map(r=>e.jsxs(E,{"code-path":"src/pages/LoginLogsTab.tsx:186:21",className:"border-slate-800 hover:bg-slate-800/50",children:[e.jsx(o,{"code-path":"src/pages/LoginLogsTab.tsx:187:23",children:e.jsx("span",{"code-path":"src/pages/LoginLogsTab.tsx:188:25",className:"text-sm text-slate-400",children:r.login_at?new Date(r.login_at).toLocaleString():"--"})}),e.jsx(o,{"code-path":"src/pages/LoginLogsTab.tsx:192:23",children:e.jsx("span",{"code-path":"src/pages/LoginLogsTab.tsx:193:25",className:"text-sm text-slate-200 font-medium",children:r.username||"--"})}),e.jsx(o,{"code-path":"src/pages/LoginLogsTab.tsx:195:23",children:e.jsx(_,{"code-path":"src/pages/LoginLogsTab.tsx:196:25",variant:"outline",className:"border-blue-500/30 text-blue-400 bg-blue-500/10 text-xs",children:j(r.login_type)})}),e.jsx(o,{"code-path":"src/pages/LoginLogsTab.tsx:200:23",children:e.jsx("code",{"code-path":"src/pages/LoginLogsTab.tsx:201:25",className:"text-xs text-slate-400 bg-slate-800 px-2 py-0.5 rounded",children:r.ip||"--"})}),e.jsx(o,{"code-path":"src/pages/LoginLogsTab.tsx:205:23",children:e.jsxs("span",{"code-path":"src/pages/LoginLogsTab.tsx:206:25",className:"text-xs text-slate-500 flex items-center gap-1",children:[e.jsx(Ie,{"code-path":"src/pages/LoginLogsTab.tsx:207:27",className:"h-3 w-3"}),r.location||"--"]})}),e.jsx(o,{"code-path":"src/pages/LoginLogsTab.tsx:211:23",children:e.jsxs("span",{"code-path":"src/pages/LoginLogsTab.tsx:212:25",className:"text-xs text-slate-500 flex items-center gap-1",title:r.user_agent,children:[e.jsx(Y,{"code-path":"src/pages/LoginLogsTab.tsx:213:27",className:"h-3 w-3 flex-shrink-0"}),r.browser||r.os?[r.browser,r.os].filter(Boolean).join(" / "):r.user_agent?r.user_agent.length>40?r.user_agent.slice(0,40)+"...":r.user_agent:"--"]})}),e.jsx(o,{"code-path":"src/pages/LoginLogsTab.tsx:223:23",children:T(r.status,r.fail_reason)})]},r.id))})]})})})})]})}function Ts(){const{pathname:s}=Be();return console.debug("[AuditPage v2] pathname:",s),s.includes("/audit/terminal")?e.jsx(de,{"code-path":"src/pages/AuditPage.tsx:11:52"}):s.includes("/audit/operations")?e.jsx(ss,{"code-path":"src/pages/AuditPage.tsx:12:54"}):s.includes("/audit/login-logs")?e.jsx(cs,{"code-path":"src/pages/AuditPage.tsx:13:54"}):e.jsx(de,{"code-path":"src/pages/AuditPage.tsx:15:10"})}export{Ts as AuditPage};