Files
Nexus/web/app/assets/AlertsPage-DsxrODo9.js
T
Nexus Agent e3efbd4552 feat(timezone): operator schedules and filters use Beijing wall clock.
Cron matching, audit/alert date filters, and schedule UI align on Asia/Shanghai
while JWT/TOTP/heartbeat stay UTC; follow-ups add WS alert timestamps, fixed
install timezone copy, and 422 on invalid date filters.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-06-09 05:50:32 +08:00

1 line
4.8 KiB
JavaScript

import{n as e,t}from"./useSnackbar-BN7WL7jT.js";import{n,t as r}from"./VRow-DQLoaeks.js";import{Cr as i,Fr as a,Lr as o,Sr as s,Ut as c,Wr as l,X as u,Zr as d,Zt as f,_ as p,_r as m,fr as h,gr as g,h as _,l as v,m as y,ri as b,si as x,xr as S,y as C,yr as w}from"./index-mgwiCK5j.js";import{t as T}from"./usePageActivateRefresh-B3aZWt5v.js";import{n as E,t as D}from"./dataTable-esDY4cOk.js";import{n as O}from"./paginatedFetch-D86MsoFz.js";import{r as k,t as A}from"./VCard-B9mXbrEC.js";import{t as j}from"./VSelect-7ey6zQ_i.js";import{t as M}from"./VDataTableServer-CKraLARR.js";var N={class:`font-weight-medium`},P={class:`text-body-2`},F={class:`text-caption text-medium-emphasis`},I=i({name:`AlertsPage`,__name:`AlertsPage`,setup(i){let I=t(),L=d(!1),R=d([]),z=d(0),B=d(1),V=d(20),H=D,U=d(null),W=d(null),G=d([{label:`今日告警`,value:`0`,color:`blue`,icon:`mdi-alert`},{label:`活跃告警`,value:`0`,color:`orange`,icon:`mdi-bell-ring`},{label:`已恢复`,value:`0`,color:`green`,icon:`mdi-check-circle`},{label:`Top 服务器`,value:`—`,color:`red`,icon:`mdi-server`}]),K=[{label:`CPU`,value:`cpu`},{label:`内存`,value:`memory`},{label:`磁盘`,value:`disk`},{label:`连接`,value:`connection`}],q=[{label:`活跃`,value:`active`},{label:`已恢复`,value:`recovered`}],J=E([{title:`类型`,key:`alert_type`,width:100},{title:`服务器`,key:`server_name`},{title:`详情`,key:`value`},{title:`状态`,key:`is_recovery`,width:100},{title:`时间`,key:`created_at`,width:160}]);async function Y(){try{let e=await f.get(`/alert-history/stats`);G.value[0].value=String(e.today||0),G.value[1].value=String(e.active||0),G.value[2].value=String(e.recovered||0),G.value[3].value=e.top_server||`—`}catch{I(`加载统计失败`,`error`)}}function X(e){B.value=e,Q()}function Z(e){V.value=e,B.value=1,Q()}async function Q(e=!1){e||(L.value=!0);try{let e=await O(`/alert-history/`,{type:U.value||void 0,status:W.value||void 0},B.value,V.value);R.value=e.items,z.value=e.total,V.value===-1&&(B.value=1)}catch{R.value=[],z.value=0,I(`加载告警列表失败`,`error`)}finally{e||(L.value=!1)}}function $(e){return e===`cpu`||e===`CPU`?`error`:e===`memory`||e===`内存`?`warning`:e===`disk`||e===`磁盘`?`info`:`primary`}function ee(e){return e===`cpu`||e===`CPU`?`mdi-chip`:e===`memory`||e===`内存`?`mdi-memory`:e===`disk`||e===`磁盘`?`mdi-harddisk`:`mdi-lan-disconnect`}async function te(e=!1){await Promise.all([Y(),Q(e)])}return T(e=>te(e)),(t,i)=>(a(),m(e,{fluid:``,class:`pa-6`},{default:l(()=>[s(r,{class:`mb-4`},{default:l(()=>[(a(!0),w(h,null,o(G.value,e=>(a(),m(n,{cols:`12`,sm:`6`,lg:`3`,key:e.label},{default:l(()=>[s(v,{elevation:`0`,lines:`two`,rounded:`lg`,border:``},{default:l(()=>[s(y,null,{append:l(()=>[s(u,{color:e.color,size:`30`},{default:l(()=>[S(x(e.icon),1)]),_:2},1032,[`color`])]),default:l(()=>[s(_,{class:`text-body-small`},{default:l(()=>[S(x(e.label),1)]),_:2},1024),s(_,null,{default:l(()=>[S(x(e.value),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),s(A,{elevation:`0`,border:``,rounded:`lg`},{default:l(()=>[s(k,{class:`d-flex align-center`},{default:l(()=>[i[4]||=S(` 告警历史 `,-1),s(p),s(j,{modelValue:U.value,"onUpdate:modelValue":[i[0]||=e=>U.value=e,i[1]||=e=>{B.value=1,Q()}],items:K,"item-title":`label`,"item-value":`value`,label:`类型`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`140px`},clearable:``},null,8,[`modelValue`]),s(j,{modelValue:W.value,"onUpdate:modelValue":[i[2]||=e=>W.value=e,i[3]||=e=>{B.value=1,Q()}],items:q,"item-title":`label`,"item-value":`value`,label:`状态`,variant:`outlined`,density:`compact`,"hide-details":``,style:{"max-width":`140px`},class:`ml-3`,clearable:``},null,8,[`modelValue`])]),_:1}),s(M,{items:R.value,headers:b(J),"items-length":z.value,loading:L.value,page:B.value,"items-per-page":V.value,"items-per-page-options":b(H),hover:``,density:`comfortable`,"onUpdate:page":X,"onUpdate:itemsPerPage":Z},{"item.alert_type":l(({item:e})=>[s(C,{color:$(e.alert_type),size:`small`,variant:`tonal`,label:``},{prepend:l(()=>[s(u,{size:`12`},{default:l(()=>[S(x(ee(e.alert_type)),1)]),_:2},1024)]),default:l(()=>[S(` `+x(e.alert_type),1)]),_:2},1032,[`color`])]),"item.server_name":l(({item:e})=>[g(`span`,N,x(e.server_name),1)]),"item.value":l(({item:e})=>[g(`span`,P,x(e.value),1)]),"item.is_recovery":l(({item:e})=>[e.is_recovery?(a(),m(C,{key:0,color:`success`,size:`small`,variant:`tonal`,label:``},{default:l(()=>[...i[5]||=[S(`已恢复`,-1)]]),_:1})):(a(),m(C,{key:1,color:`error`,size:`small`,variant:`tonal`,label:``},{default:l(()=>[...i[6]||=[S(`告警中`,-1)]]),_:1}))]),"item.created_at":l(({item:e})=>[g(`span`,F,x(b(c)(e.created_at)),1)]),"no-data":l(()=>[...i[7]||=[g(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无数据`,-1)]]),_:1},8,[`items`,`headers`,`items-length`,`loading`,`page`,`items-per-page`,`items-per-page-options`])]),_:1})]),_:1}))}});export{I as default};