Files
Nexus/web/app/assets/DashboardPage-BDfRyW6v.js
T
Nexus Agent 4d82ed4031 build(frontend): rebuild web/app assets and prune stale hashes.
Align index.html with a complete Vite output set and remove 116 orphaned
chunks so git clone loads the SPA correctly.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 03:33:23 +08:00

1 line
6.2 KiB
JavaScript

import{n as e,t}from"./useSnackbar-P0rXZaHt.js";import{n,t as r}from"./VRow-Jrv7cE2K.js";import{Ir as i,P as a,Pr as o,S as s,Sr as c,Ur as l,Vr as ee,W as u,Xr as d,Xt as f,_r as p,br as m,dr as h,gr as g,hr as _,ii as v,kt as te,m as y,ni as b,oi as x,vr as S,vt as C,xr as w,y as T,yt as E}from"./index-Bplw5zZe.js";import{t as D}from"./usePageActivateRefresh-C2xQnJah.js";import{t as O}from"./VCard-DwK3U69w.js";import{i as k,t as A}from"./auditNormalize-DWYIxo0q.js";import{n as j,r as M,t as N}from"./VSkeletonLoader-vo9o5RDt.js";import{t as P}from"./_plugin-vue_export-helper-BDNMzG2s.js";var F={key:0,class:`text-center text-medium-emphasis py-4`},I={class:`text-body-large font-weight-regular`},L={class:`d-flex justify-space-between align-center text-medium-emphasis`},R={class:`py-1`},z={key:0,class:`text-center text-medium-emphasis py-4`},B={class:`text-caption`},V={class:`d-flex justify-space-between align-center`},H={class:`text-medium-emphasis`},U={class:`text-body-2 font-weight-medium`},W={key:0,class:`text-center text-medium-emphasis py-4`},G=P(c({name:`DashboardPage`,__name:`DashboardPage`,setup(c){let P=t(),G=d(!0),K=d([{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`}]),q=d([]),J=d([{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=d({}),X=d(0),Z=d([]);async function Q(e=!1){e||(G.value=!0);try{let{data:e}=await E(C.serverStats,()=>f.get(`/servers/stats`));K.value[0].title=String(e.total),K.value[1].title=String(e.online),K.value[2].title=String(e.offline),K.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{e||P(`加载统计数据失败`,`error`)}finally{e||(G.value=!1)}}async function $(){try{q.value=((await f.get(`/alert-history/`,{limit:5})).items||[]).map(e=>({title:e.server_name,subtitle:`${e.alert_type} ${e.is_recovery?`(已恢复)`:``} · ${M(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=[],P(`加载告警记录失败`,`error`)}}async function ne(){try{Z.value=A((await f.get(`/audit/`,{limit:10})).items||[]).slice(0,10)}catch{Z.value=[],P(`加载审计记录失败`,`error`)}}async function re(){try{let e=await f.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 a=t.filter(e=>e.system_info?.cpu_usage!=null),o=t.filter(e=>e.system_info?.mem_usage!=null);if(a.length>0){let e=Math.round(a.reduce((e,t)=>e+(t.system_info.cpu_usage||0),0)/a.length);J.value[2].progress=e,J.value[2].value=`${e}%`}if(o.length>0){let e=Math.round(o.reduce((e,t)=>e+(t.system_info.mem_usage||0),0)/o.length);J.value[3].progress=e,J.value[3].value=`${e}%`}}catch{}}async function ie(e=!1){await Promise.all([Q(e),$(),re(),ne()]),e||f.post(`/settings/bing-wallpapers/sync`).catch(()=>{})}return ee(te().alerts,()=>{Q(!0),$()}),D(e=>ie(e)),(t,c)=>(o(),g(e,{fluid:``,class:`pa-4 pa-md-6 dashboard-root`},{default:l(()=>[G.value?(o(),g(N,{key:0,type:`heading, text`,class:`mb-4`})):(o(),g(j,{key:1,items:K.value},null,8,[`items`])),w(r,{class:`mt-5`},{default:l(()=>[w(n,{cols:`12`,md:`6`},{default:l(()=>[w(O,{elevation:`0`,rounded:`lg`,title:`告警历史`,border:``},{append:l(()=>[...c[0]||=[_(`div`,{class:`my-5`},null,-1)]]),text:l(()=>[q.value.length===0?(o(),S(`div`,F,` 暂无告警 `)):p(``,!0),(o(!0),S(h,null,i(q.value,(e,t)=>(o(),g(y,{key:t,class:v([t!==0&&`mt-4`,`px-0`]),subtitle:e.subtitle,title:e.title,lines:`one`},{prepend:l(()=>[w(s,{color:e.color,icon:e.icon,variant:`tonal`,rounded:``},null,8,[`color`,`icon`])]),append:l(()=>[_(`span`,I,x(e.value),1)]),_:2},1032,[`class`,`subtitle`,`title`]))),128))]),_:1})]),_:1}),w(n,{cols:`12`,md:`6`},{default:l(()=>[w(O,{elevation:`0`,rounded:`lg`,title:`资源概览`,border:``},{append:l(()=>[...c[1]||=[_(`div`,{class:`my-5`},null,-1)]]),text:l(()=>[(o(!0),S(h,null,i(J.value,(e,t)=>(o(),g(y,{key:t,class:v([t!==0&&`mt-4`,`px-0`])},{prepend:l(()=>[w(s,{text:e.text,color:`primary`,size:`large`,variant:`tonal`},null,8,[`text`])]),title:l(()=>[_(`div`,L,[_(`span`,null,x(e.title),1),_(`span`,null,x(e.value),1)])]),subtitle:l(()=>[_(`div`,R,[w(u,{"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(r,null,{default:l(()=>[w(n,{cols:`12`,md:`6`},{default:l(()=>[w(O,{elevation:`0`,rounded:`lg`,title:`分类分布`,border:``},{text:l(()=>[Object.keys(Y.value).length===0?(o(),S(`div`,z,` 暂无分类数据 `)):p(``,!0),(o(!0),S(h,null,i(Y.value,(e,t)=>(o(),g(y,{key:t,class:`px-0`},{prepend:l(()=>[w(s,{color:`primary`,variant:`tonal`,size:`small`},{default:l(()=>[_(`span`,B,x(t[0]?.toUpperCase()),1)]),_:2},1024)]),title:l(()=>[_(`div`,V,[_(`span`,H,x(t===`uncategorized`?`未分类`:t),1),_(`span`,U,x(e)+` 台`,1)])]),subtitle:l(()=>[w(u,{"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}),w(n,{cols:`12`,md:`6`},{default:l(()=>[w(O,{elevation:`0`,rounded:`lg`,title:`最近操作`,border:``},{append:l(()=>[w(a,{size:`small`,variant:`text`,to:`/audit`},{default:l(()=>[...c[2]||=[m(`查看全部`,-1)]]),_:1})]),text:l(()=>[Z.value.length===0?(o(),S(`div`,W,` 暂无操作记录 `)):p(``,!0),(o(!0),S(h,null,i(Z.value,e=>(o(),g(y,{key:e.id,title:b(k)(e),subtitle:`${e.admin_username} · ${b(M)(e.created_at)}`,class:`px-0`,lines:`two`},{append:l(()=>[w(T,{size:`x-small`,variant:`tonal`,label:``},{default:l(()=>[m(x(e.ip_address||`—`),1)]),_:2},1024)]),_:2},1032,[`title`,`subtitle`]))),128))]),_:1})]),_:1})]),_:1})]),_:1}))}}),[[`__scopeId`,`data-v-96be32bd`]]);export{G as default};