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