51948469c2
- Stop ignoring web/app/index.html and web/app/assets/ - Bundle index-DBKIQT7H.js from current vite build (~101MB assets) Co-authored-by: Cursor <cursoragent@cursor.com>
1 line
9.0 KiB
JavaScript
1 line
9.0 KiB
JavaScript
import{$n as e,Ar as t,Bt as n,Gn as r,I as i,It as a,Jn as o,L as s,M as c,Mr as l,N as ee,O as u,Or as d,Sr as f,Xn as p,Y as te,Yn as m,Zn as h,br as ne,dr as g,er as _,gr as re,jt as v,lr as ie,nr as ae,pr as y,q as b,t as oe,vr as x}from"./index-BeKW-8Gh.js";import{a as S}from"./VSelectionControl-DGPzd-wr.js";import{n as C,t as w}from"./VRow-DVUNZQMK.js";import{t as T}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as se}from"./useSnackbar-D7YOfKok.js";import{t as E}from"./VChip-BdqN5_wg.js";import{t as ce}from"./VDataTableServer-DY4dwjQH.js";import{i as le,t as ue}from"./auditNormalize-BHJPJFP9.js";import{i as D,n as O,r as k,t as A}from"./status-DdAHUkgq.js";var j={class:`text-caption text-medium-emphasis mb-1`,style:{"font-size":`14px`,"letter-spacing":`0.5px`,"text-transform":`uppercase`}},M={class:`font-weight-medium`},N={class:`text-medium-emphasis`},P={class:`text-medium-emphasis`},F={class:`text-medium-emphasis`},I={class:`text-caption text-medium-emphasis`},L={class:`d-flex ga-1`},R={key:0,class:`text-center text-medium-emphasis py-4`},z={class:`text-body-large font-weight-regular`},B={class:`d-flex justify-space-between align-center text-medium-emphasis`},V={class:`py-1`},H={key:0,class:`text-center text-medium-emphasis py-4`},U={class:`text-caption`},de={class:`d-flex justify-space-between align-center`},fe={class:`text-medium-emphasis`},pe={class:`text-body-2 font-weight-medium`},me={key:0,class:`text-center text-medium-emphasis py-4`},W=T(ae({__name:`DashboardPage`,setup(ae){let T=se(),W=n(),G=f([{subtitle:`服务器总数`,title:`0`,icon:`mdi-server-network`,color:`blue`},{subtitle:`在线`,title:`0`,icon:`mdi-check-circle-outline`,color:`green`},{subtitle:`离线`,title:`0`,icon:`mdi-alert-circle-outline`,color:`orange`},{subtitle:`告警中`,title:`0`,icon:`mdi-bell-alert-outline`,color:`red`}]),{servers:he,loading:ge,page:_e,itemsPerPage:ve,total:ye,search:K,loadServers:be,onSearch:xe,onPageChange:Se,onItemsPerPageChange:Ce}=D();async function we(){try{await be()}catch{T(`加载服务器列表失败`,`error`)}}let Te=[{title:`状态`,key:`status`,width:100},{title:`名称`,key:`name`},{title:`地址`,key:`domain`},{title:`分类`,key:`category`,width:100},{title:`Agent`,key:`agent_version`,width:100},{title:`心跳`,key:`last_heartbeat`,width:140},{title:`操作`,key:`actions`,width:140,align:`end`}],q=f([]),J=f([{title:`在线率`,progress:0,text:`在`,value:`0%`},{title:`Agent 覆盖`,progress:0,text:`A`,value:`0%`},{title:`CPU 平均`,progress:0,text:`C`,value:`0%`},{title:`内存平均`,progress:0,text:`M`,value:`0%`}]),Y=f({}),X=f(0),Z=f([]);async function Q(){try{let e=await a.get(`/servers/stats`);G.value[0].title=String(e.total),G.value[1].title=String(e.online),G.value[2].title=String(e.offline),G.value[3].title=String(e.alerts??0),Y.value=e.categories||{},X.value=e.total;let t=e.total?Math.round(e.online/e.total*100):0;J.value[0].progress=t,J.value[0].value=`${t}%`}catch{T(`加载统计数据失败`,`error`)}}async function $(){try{q.value=((await a.get(`/alert-history/`,{limit:5})).items||[]).map(e=>({title:e.server_name,subtitle:`${e.alert_type} ${e.is_recovery?`(已恢复)`:``} · ${A(e.created_at)}`,value:e.value,color:e.is_recovery?`green`:`red`,icon:e.is_recovery?`mdi-check-circle`:`mdi-alert-circle`}))}catch{q.value=[]}}async function Ee(){try{Z.value=ue((await a.get(`/audit/`,{limit:10})).items||[]).slice(0,10)}catch{Z.value=[]}}async function De(){try{let e=await a.get(`/servers/`,{per_page:200}),t=e.items||[],n=e.total||t.length;if(n===0)return;let r=t.filter(e=>e.agent_version).length,i=Math.round(r/n*100);J.value[1].progress=i,J.value[1].value=`${i}%`;let o=t.filter(e=>e.system_info?.cpu_usage!=null),s=t.filter(e=>e.system_info?.mem_usage!=null);if(o.length>0){let e=Math.round(o.reduce((e,t)=>e+(t.system_info.cpu_usage||0),0)/o.length);J.value[2].progress=e,J.value[2].value=`${e}%`}if(s.length>0){let e=Math.round(s.reduce((e,t)=>e+(t.system_info.mem_usage||0),0)/s.length);J.value[3].progress=e,J.value[3].value=`${e}%`}}catch{}}function Oe(e){W.push({path:`/terminal`,query:{server_id:String(e.id)}})}function ke(e){W.push({path:`/files`,query:{server_id:String(e.id)}})}return re(v().alerts,()=>{Q(),$()}),ie(()=>{Q(),we(),$(),De(),Ee()}),(n,a)=>(g(),m(S,{fluid:``,class:`pa-4 pa-md-6 dashboard-root`},{default:x(()=>[_(w,null,{default:x(()=>[(g(!0),h(r,null,y(G.value,(e,n)=>(g(),m(C,{key:n,cols:`6`,sm:`3`},{default:x(()=>[_(c,{elevation:`0`,rounded:`xl`,border:``,class:`stat-card`},{default:x(()=>[_(ee,{class:`pa-4 d-flex align-center justify-space-between`},{default:x(()=>[o(`div`,null,[o(`div`,j,l(e.subtitle),1),o(`div`,{class:t([`font-weight-bold`,`text-`+e.color]),style:{"font-size":`36px`,"line-height":`1.1`}},l(e.title),3)]),_(i,{color:e.color,size:`48`,rounded:`lg`,class:`stat-icon`},{default:x(()=>[_(te,{icon:e.icon,size:`24`,color:`white`},null,8,[`icon`])]),_:2},1032,[`color`])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),_(c,{class:`my-5`,elevation:`0`,rounded:`lg`,title:`服务器列表`,border:``},{text:x(()=>[_(oe,{modelValue:d(K),"onUpdate:modelValue":a[0]||=e=>ne(K)?K.value=e:null,autocomplete:`off`,placeholder:`搜索...`,"prepend-inner-icon":`mdi-magnify`,variant:`outlined`,"hide-details":``,rounded:``,class:`mb-4`},null,8,[`modelValue`]),_(ce,{items:d(he),headers:Te,"items-length":d(ye),loading:d(ge),page:d(_e),"items-per-page":d(ve),hover:``,"item-value":`id`,"onUpdate:page":d(Se),"onUpdate:itemsPerPage":d(Ce)},{"item.status":x(({item:e})=>[_(E,{color:d(O)(e.status),text:d(k)(e.status),border:`sm`,size:`x-small`,label:``},null,8,[`color`,`text`])]),"item.name":x(({item:e})=>[o(`span`,M,l(e.name),1)]),"item.domain":x(({item:e})=>[o(`span`,N,l(e.domain),1)]),"item.category":x(({item:e})=>[o(`span`,P,l(e.category||`—`),1)]),"item.agent_version":x(({item:e})=>[o(`span`,F,l(e.agent_version||`—`),1)]),"item.last_heartbeat":x(({item:e})=>[o(`span`,I,l(d(A)(e.last_heartbeat)),1)]),"item.actions":x(({item:t})=>[o(`div`,L,[_(s,{variant:`text`,size:`x-small`,color:`primary`,density:`compact`,onClick:e=>Oe(t)},{default:x(()=>[...a[1]||=[e(`终端`,-1)]]),_:1},8,[`onClick`]),_(s,{variant:`text`,size:`x-small`,density:`compact`,onClick:e=>ke(t)},{default:x(()=>[...a[2]||=[e(`文件`,-1)]]),_:1},8,[`onClick`])])]),"no-data":x(()=>[...a[3]||=[o(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无服务器数据`,-1)]]),_:1},8,[`items`,`items-length`,`loading`,`page`,`items-per-page`,`onUpdate:page`,`onUpdate:itemsPerPage`])]),_:1}),_(w,null,{default:x(()=>[_(C,{cols:`12`,md:`6`},{default:x(()=>[_(c,{elevation:`0`,rounded:`lg`,title:`告警历史`,border:``},{append:x(()=>[...a[4]||=[o(`div`,{class:`my-5`},null,-1)]]),text:x(()=>[q.value.length===0?(g(),h(`div`,R,` 暂无告警 `)):p(``,!0),(g(!0),h(r,null,y(q.value,(e,n)=>(g(),m(u,{key:n,class:t([n!==0&&`mt-4`,`px-0`]),subtitle:e.subtitle,title:e.title,lines:`one`},{prepend:x(()=>[_(i,{color:e.color,icon:e.icon,variant:`tonal`,rounded:``},null,8,[`color`,`icon`])]),append:x(()=>[o(`span`,z,l(e.value),1)]),_:2},1032,[`class`,`subtitle`,`title`]))),128))]),_:1})]),_:1}),_(C,{cols:`12`,md:`6`},{default:x(()=>[_(c,{elevation:`0`,rounded:`lg`,title:`资源概览`,border:``},{append:x(()=>[...a[5]||=[o(`div`,{class:`my-5`},null,-1)]]),text:x(()=>[(g(!0),h(r,null,y(J.value,(e,n)=>(g(),m(u,{key:n,class:t([n!==0&&`mt-4`,`px-0`])},{prepend:x(()=>[_(i,{text:e.text,color:`primary`,size:`large`,variant:`tonal`},null,8,[`text`])]),title:x(()=>[o(`div`,B,[o(`span`,null,l(e.title),1),o(`span`,null,l(e.value),1)])]),subtitle:x(()=>[o(`div`,V,[_(b,{"model-value":e.progress,"bg-color":`surface-light`,"bg-opacity":`1`,color:`primary`,height:`8`,rounded:``},null,8,[`model-value`])])]),_:2},1032,[`class`]))),128))]),_:1})]),_:1})]),_:1}),_(w,null,{default:x(()=>[_(C,{cols:`12`,md:`6`},{default:x(()=>[_(c,{elevation:`0`,rounded:`lg`,title:`分类分布`,border:``},{text:x(()=>[Object.keys(Y.value).length===0?(g(),h(`div`,H,` 暂无分类数据 `)):p(``,!0),(g(!0),h(r,null,y(Y.value,(e,t)=>(g(),m(u,{key:t,class:`px-0`},{prepend:x(()=>[_(i,{color:`primary`,variant:`tonal`,size:`small`},{default:x(()=>[o(`span`,U,l(t[0]?.toUpperCase()),1)]),_:2},1024)]),title:x(()=>[o(`div`,de,[o(`span`,fe,l(t===`uncategorized`?`未分类`:t),1),o(`span`,pe,l(e)+` 台`,1)])]),subtitle:x(()=>[_(b,{"model-value":X.value>0?e/X.value*100:0,"bg-color":`surface-light`,"bg-opacity":`1`,color:`primary`,height:`6`,rounded:``},null,8,[`model-value`])]),_:2},1024))),128))]),_:1})]),_:1}),_(C,{cols:`12`,md:`6`},{default:x(()=>[_(c,{elevation:`0`,rounded:`lg`,title:`最近操作`,border:``},{append:x(()=>[_(s,{size:`small`,variant:`text`,to:`/audit`},{default:x(()=>[...a[6]||=[e(`查看全部`,-1)]]),_:1})]),text:x(()=>[Z.value.length===0?(g(),h(`div`,me,` 暂无操作记录 `)):p(``,!0),(g(!0),h(r,null,y(Z.value,t=>(g(),m(u,{key:t.id,title:d(le)(t),subtitle:`${t.admin_username} · ${d(A)(t.created_at)}`,class:`px-0`,lines:`two`},{append:x(()=>[_(E,{size:`x-small`,variant:`tonal`,label:``},{default:x(()=>[e(l(t.ip_address||`—`),1)]),_:2},1024)]),_:2},1032,[`title`,`subtitle`]))),128))]),_:1})]),_:1})]),_:1})]),_:1}))}}),[[`__scopeId`,`data-v-8c80bc6e`]]);export{W as default}; |