Files
Nexus/web/app/assets/ServersPage-Z2EpNr-B.js
T

3 lines
46 KiB
JavaScript
Raw Normal View History

import{t as e}from"./VDataTable-CA2-7Joy.js";import{$ as t,$n as n,$t as r,A as i,Ar as a,B as o,Bn as s,Br as c,C as l,Cn as ee,Cr as u,Ct as d,D as te,E as f,Et as p,F as m,Gt as h,Ht as ne,I as g,Ir as _,J as re,L as ie,Ln as ae,M as oe,N as v,Nr as y,O as se,P as b,Qn as x,R as S,Rn as C,Rr as w,Rt as T,S as E,Sn as ce,St as D,Tr as le,Tt as O,Vn as ue,Wt as k,X as de,Xn as fe,Yn as A,Zt as pe,_ as me,_n as he,_r as ge,an as _e,ar as j,bt as M,cn as N,cr as ve,dn as ye,er as P,et as be,fn as F,ft as I,gr as xe,hr as L,ir as R,j as Se,jr as Ce,jt as we,k as Te,kn as Ee,ln as De,lr as z,m as Oe,n as ke,nn as Ae,nr as B,nt as je,or as Me,pr as Ne,pt as Pe,qn as Fe,rt as Ie,t as V,tn as Le,tr as H,tt as Re,u as ze,ur as Be,v as Ve,w as He,wr as U,wt as Ue,xr as We,xt as W,yt as G,zn as K,zr as Ge}from"./index-o0-2k-vI.js";import{o as Ke,t as qe}from"./VContainer-BbTGUkA2.js";import{t as Je}from"./VChip-B_7LyIUT.js";import{a as Ye,c as Xe,d as Ze,f as Qe,i as q,l as $e,n as et,o as tt,r as nt,s as rt,t as J,u as it}from"./VSelect-RidH-jin.js";import{t as at}from"./VDataTableServer-CYEpP3ht.js";import{n as Y,t as ot}from"./VRow-D9pCZkmz.js";import{t as X}from"./VSpacer-DE-o2Lgp.js";import{t as Z}from"./apiError-nzQ5DKV3.js";import{i as Q}from"./validation-DMwOxx4a.js";import{t as st}from"./VDialog-nLwlI-ms.js";import{t as ct}from"./VTextarea-C1n35Aqz.js";import{a as lt,i as ut,n as dt,r as ft,t as pt}from"./StatCardsRow-CXw7_aVP.js";import{a as mt,i as ht,n as gt,r as _t,t as vt}from"./VFileInput-V-GLMkLj.js";import{t as yt}from"./VAlert-CJEBMMcd.js";function $(e){if(typeof e==`number`&&Number.isFinite(e)&&e>0)return Math.trunc(e);if(typeof e==`string`&&/^\d+$/.test(e.trim())){let t=Number(e.trim());return Number.isFinite(t)&&t>0?t:null}return null}function bt(e){let t=[];for(let n of e){let e=$(typeof n==`object`&&n&&`id`in n?n.id:n);e!==null&&t.push(e)}return[...new Set(t)]}function xt(e){return(e||[]).filter(e=>e.success).length}var St=F({alwaysFilter:Boolean,autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Ye({filterKeys:[`title`]}),...et({hideNoData:!0,returnObject:!0}),...C(ke({modelValue:null,role:`combobox`}),[`validationValue`,`dirty`])},`VCombobox`),Ct=N()({name:`VCombobox`,props:St(),emits:{"update:focused":e=>!0,"update:modelValue":e=>!0,"update:search":e=>!0,"update:menu":e=>!0},setup(e,{emit:t,slots:i}){let{t:o}=pe(),c=a(),l=Ce(!1),u=Ce(!0),d=Ce(!1),p=a(),m=a(),h=Ce(-1),ne=!1,{items:g,transformIn:_,transformOut:re}=te(e),{textColorClasses:v,textColorStyles:b}=D(()=>c.value?.color),{InputIcon:S}=Oe(e),C=r(e,`modelValue`,[],e=>_(s(e)),t=>{let n=re(t);return e.multiple?n:n[0]??null}),T=ze(e),E=y(()=>e.closableChips&&!T.isReadonly.value&&!T.isDisabled.value),le=x(()=>!!(e.chips||i.chip)),k=x(()=>le.value||!!i.selection),A=Ce(!e.multiple&&!k.value?C.value[0]?.title??``:``),ge=Ce(null),M=x({get:()=>A.value,set:async t=>{if(A.value=t??``,t===null||t===``&&!e.multiple&&!k.value?C.value=[]:!e.multiple&&!k.value&&(C.value=[f(e,t)],Be(()=>m.value?.scrollToIndex(0))),t&&e.multiple&&e.delimiters?.length){let e=Ke(t);e.length>1&&(qe(e),A.value=``)}t||(h.value=-1),u.value=!t}}),N=x(()=>typeof e.counterValue==`function`?e.counterValue(C.value):typeof e.counterValue==`number`?e.counterValue:e.multiple?C.value.length:M.value.length),{filteredItems:ve,getMatches:ye}=tt(e,g,()=>ge.value??(e.alwaysFilter||!u.value?M.value:``)),P=x(()=>e.hideSelected&&ge.value===null?ve.value.filter(e=>!C.value.some(t=>t.value===e.value)):ve.value),be=x(()=>e.hideNoData&&!P.value.length||T.isReadonly.value||T.isDisabled.value),F=r(e,`menu`),I=x({get:()=>F.value,set:e=>{F.value&&!e&&p.value?.ΨopenChildren.size||e&&be.value||(F.value=e)}}),{menuId:xe,ariaExpanded:L,ariaControls:Se}=nt(e,I);We(A,e=>{ne?Be(()=>ne=!1):l.value&&!I.value&&(I.value=!0),t(`update:search`,e)}),We(C,t=>{!e.multiple&&!k.value&&(A.value=t[0]?.title??``)});let we=x(()=>C.value.map(e=>e.value)),De=x(()=>P.value.find(e=>e.type===`item`&&!e.props.disabled)),ke=x(()=>(e.autoSelectFirst===!0||e.autoSelectFirst===`exact`&&M.value==
`,...e.delimiters??[]].map(ee).join(`|`);return t.split(RegExp(`(?:${n})+`))}async function qe(t){for(let n of t)n=n.trim(),n&&(K(f(e,n)),await Be())}function Ye(e){l.value=!0,setTimeout(()=>{d.value=!0})}function et(e){if(d.value=!1,!c.value?.$el.contains(e.relatedTarget)){if(Pe(e))return;l.value=!1}}let J=0;function at(){J=performance.now()}function Y(e){let t=e.relatedTarget;((p.value?.contentEl)?.contains(t)||!t&&performance.now()-J<10)&&(l.value=!0)}return We(l,(t,n)=>{if(!(t||t===n)&&(h.value=-1,I.value=!1,M.value)){if(e.multiple){K(f(e,M.value));return}if(!k.value)return;C.value.some(({title:e})=>e===M.value)?A.value=``:K(f(e,M.value))}}),We(I,t=>{if(!e.hideSelected&&t&&C.value.length&&u.value){let t=P.value.findIndex(t=>C.value.some(n=>(e.valueComparator||_e)(n.value,t.value)));ue&&window.requestAnimationFrame(()=>{t>=0&&m.value?.scrollToIndex(t)})}t&&(ge.value=null)}),We(g,(e,t)=>{I.value||l.value&&!t.length&&e.length&&(I.value=!0)}),Ae(()=>{let t=!!(!e.hideNoData||P.value.length||i[`prepend-item`]||i[`append-item`]||i[`no-data`]),r=C.value.length>0,a=V.filterProps(e),s={search:M,filteredItems:ve.value};return j(V,z({ref:c},a,{modelValue:M.value,"onUpdate:modelValue":e=>M.value=e,focused:l.value,"onUpdate:focused":e=>l.value=e,validationValue:C.externalValue,counterValue:N.value,dirty:r,class:[`v-combobox`,{"v-combobox--active-menu":I.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!k.value,"v-combobox--selecting-index":h.value>-1,[`v-combobox--${e.multiple?`multiple`:`single`}`]:!0},e.class],style:e.style,readonly:T.isReadonly.value,placeholder:r?void 0:e.placeholder,"onClick:clear":Ie,"onMousedown:control":Le,onKeydown:U,onPaste:Ue,onBlur:Y,"aria-expanded":L.value,"aria-controls":Se.value}),{...i,default:({id:r})=>n(fe,null,[j(me,z({id:xe.value,ref:p,modelValue:I.value,"onUpdate:modelValue":e=>I.value=e,activator:`parent`,disabled:be.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,onAfterEnter:W,onAfterLeave:G},e.menuProps,{contentClass:[`v-combobox__content`,e.menuProps?.contentClass]}),{default:()=>[j(Ze,{elevation:e.menuElevation,onFocusin:Ye,onKeydown:Re,onMousedown:at},{default:()=>[i[`menu-header`]&&n(`header`,{ref:je},[i[`menu-header`](s)]),t&&j(He,z({key:`combobox-list`,ref:B,filterable:!0,selected:we.value,selectStrategy:e.multiple?`independent`:`single-independent`,onMousedown:e=>e.preventDefault(),selectable:!!P.value.length,onFocusout:et,tabindex:`-1`,"aria-live":`polite`,"aria-labelledby":`${r.value}-label`,"aria-multiselectable":e.multiple,color:e.itemColor??e.color},Ne,e.listProps),{default:()=>[i[`prepend-item`]?.(),!P.value.length&&!e.hideNoData&&(i[`no-data`]?.()??j(Te,{key:`no-data`,title:o(e.noDataText)},null)),j(it,{ref:m,renderless:!0,items:P.value,itemKey:`value`},{default:({item:t,index:r,itemRef:a})=>{let o=z(t.props,{ref:a,key:t.value,active:ke.value&&t===De.value?!0:void 0,onClick:()=>K(t,null),"aria-posinset":r+1,"aria-setsize":P.value.length});return t.type===`divider`?i.divider?.({props:t.raw,index:r})??j(oe,z(t.props,{key:`divider-${r}`}),null):t.type===`subheader`?i.subheader?.({props:t.raw,index:r})??j(se,z(t.props,{key:`subheader-${r}`}),null):i.item?.({item:t.raw,internalItem:t,index:r,props:o})??j(Te,z(o,{role:`option`}),{prepend:({isSelected:r})=>n(fe,null,[e.multiple&&!e.hideSelected?j(Qe,{key:t.value,modelValue:r,ripple:!1,tabindex:`-1`,"aria-hidden":!0,onClick:e=>e.preventDefault()},null):void 0,t.props.prependAvatar&&j(ie,{image:t.props.prependAvatar},null),t.props.prependIcon&&j(de,{icon:t.props.prependIcon},null)]),title:()=>u.value?t.title:q(`v-combobox`,t.title,ye(t)?.title)})}}),i[`append-item`]?.()]}),i[`menu-footer`]&&n(`footer`,{ref:Me},[i[`menu-footer`](s)])]})]}),C.value.map((t,r)=>{function a(e){e.stopPropagation(),e.preventDefault(),K(t,!1)}let o=z(Je.filterProps(t.props),{"onClick:close":a,onKeydown(e){e.key!==`Enter`&&e.key!==` `||(e.preventDefault(),e.stopPropagation(),a(e))},onMousedown(e){e.preventDefault(),e.stopPropagation()},modelValue:!0,"onUpdate:modelValue":void 0}),s=le.value?!!i.chip:!!i.selection,c=s?c
`),a=new Blob([i],{type:`text/csv;charset=utf-8;`}),o=URL.createObjectURL(a),s=document.createElement(`a`);s.href=o,s.download=`servers_${new Date().toISOString().slice(0,10)}.csv`,s.click(),URL.revokeObjectURL(o),r(`导出完成`)}catch(e){r(e.message||`导出失败`,`error`)}}let it=a(!1),Q=a([]),ct=a(!1),$=a(null);async function St(){if(Q.value?.length){ct.value=!0,$.value=null;try{let e=new FormData;e.append(`file`,Q.value[0]),$.value=await T.upload(`/servers/import`,e),r(`导入完成`),y()}catch(e){r(e instanceof Error?e.message:`导入失败`,`error`)}finally{ct.value=!1}}}async function Ct(e){W.value=e,G.value=`info`;try{K.value=(await T.get(`/servers/${e.id}/logs`,{limit:20})).items||[]}catch{K.value=[]}}function wt(e){ze(e)}function Tt(e){w.value=e,se.value=!0}async function Et(){if(w.value){C.value=!0;try{await T.delete(`/servers/${w.value.id}`),se.value=!1,y(),Xe(),r(`已删除`)}catch(e){r(e.message||`删除失败`,`error`)}finally{C.value=!1}}}return Ne(()=>{Xe(),y(),F()}),(t,r)=>(L(),P(qe,{fluid:``,class:`pa-4 pa-md-6`},{default:u(()=>[j(pt,{items:Ye.value},null,8,[`items`]),j(v,{elevation:`0`,rounded:`lg`,class:`my-5`,border:``},{default:u(()=>[j(m,{class:`d-flex align-center`},{default:u(()=>[r[27]||=R(` 服务器列表 `,-1),j(X),j(V,{modelValue:_(f),"onUpdate:modelValue":[r[0]||=e=>le(f)?f.value=e:null,_(re)],"prepend-inner-icon":`mdi-magnify`,label:`搜索...`,density:`compact`,"hide-details":``,rounded:``,style:{"max-width":`240px`},variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`]),j(S,{color:`primary`,variant:`flat`,class:`ml-3`,"prepend-icon":`mdi-plus`,size:`small`,onClick:_(Re)},{default:u(()=>[...r[23]||=[R(` 添加 `,-1)]]),_:1},8,[`onClick`]),j(S,{variant:`tonal`,class:`ml-2`,"prepend-icon":`mdi-flash`,size:`small`,onClick:ye},{default:u(()=>[...r[24]||=[R(` 快速添加(IP) `,-1)]]),_:1}),j(S,{variant:`tonal`,class:`ml-2`,"prepend-icon":`mdi-download`,size:`small`,onClick:J},{default:u(()=>[...r[25]||=[R(` 导出CSV `,-1)]]),_:1}),j(S,{variant:`tonal`,class:`ml-2`,"prepend-icon":`mdi-file-import`,size:`small`,onClick:r[1]||=e=>it.value=!0},{default:u(()=>[...r[26]||=[R(` 导入 `,-1)]]),_:1})]),_:1}),Ue.value.size>0?(L(),P(v,{key:0,class:`mx-4 mb-2`,color:`primary`,variant:`tonal`,rounded:`lg`},{default:u(()=>[j(b,{class:`d-flex align-center py-2`},{default:u(()=>[n(`span`,zt,`已选择 `+c(Ue.value.size)+` 台服务器`,1),j(X),j(S,{size:`small`,variant:`text`,onClick:$e},{default:u(()=>[...r[28]||=[R(`健康检查`,-1)]]),_:1}),j(S,{size:`small`,variant:`text`,onClick:tt,loading:q.value},{default:u(()=>[...r[29]||=[R(`安装Agent`,-1)]]),_:1},8,[`loading`]),j(S,{size:`small`,variant:`text`,onClick:nt,loading:q.value},{default:u(()=>[...r[30]||=[R(`升级Agent`,-1)]]),_:1},8,[`loading`]),j(S,{size:`small`,variant:`text`,color:`error`,onClick:rt,loading:q.value},{default:u(()=>[...r[31]||=[R(`卸载Agent`,-1)]]),_:1},8,[`loading`]),j(S,{size:`small`,variant:`text`,color:`error`,onClick:et},{default:u(()=>[...r[32]||=[R(`批量删除`,-1)]]),_:1}),j(S,{size:`small`,variant:`text`,onClick:r[2]||=e=>U.value=[]},{default:u(()=>[...r[33]||=[R(`取消选择`,-1)]]),_:1})]),_:1})]),_:1})):H(``,!0),j(at,{items:_(s),headers:Ge,"items-length":_(te),loading:_(l),page:_(ee),"items-per-page":_(d),hover:``,density:`comfortable`,"item-value":`id`,"show-select":``,modelValue:U.value,"onUpdate:modelValue":r[3]||=e=>U.value=e,"onUpdate:page":_(ie),"onUpdate:itemsPerPage":_(ae),"onClick:row":r[4]||=(e,{item:t})=>Ct(t)},{"item.status":u(({item:e})=>[j(Je,{color:_(ft)(e.status),size:`x-small`,variant:`tonal`,label:``,border:`sm`},{default:u(()=>[R(c(_(ut)(e.status)),1)]),_:2},1032,[`color`])]),"item.name":u(({item:e})=>[n(`span`,Bt,c(e.name),1)]),"item.address":u(({item:e})=>[n(`span`,Vt,c(e.domain)+`:`+c(e.port),1)]),"item.category":u(({item:e})=>[e.category?(L(),P(Je,{key:0,color:`primary`,variant:`tonal`,size:`small`,label:``},{default:u(()=>[R(c(e.category),1)]),_:2},1024)):(L(),B(`span`,Ht,`—`))]),"item.agent":u(({item:e})=>[n(`span`,Ut,c(e.agent_version||`—`),1)]),"item.heartbeat":u(({it