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>
2 lines
29 KiB
JavaScript
2 lines
29 KiB
JavaScript
import{$ as e,$n as t,A as n,Ar as r,Bt as i,C as a,Cr as o,Dn as s,Er as c,Et as l,F as u,Gn as d,Hn as f,Ht as p,In as m,It as h,Jn as g,Kn as _,L as v,Ln as ee,M as y,Mt as b,N as x,Nn as S,Or as C,P as w,Pn as te,Qn as T,R as E,Rt as D,S as ne,St as O,T as re,Ut as k,Wn as ie,Xn as ae,Xt as A,Y as oe,Yn as se,Yt as ce,Zt as le,_n as j,_r as M,_t as N,ar as P,br as F,cr as ue,ct as I,dn as L,dr as R,en as z,fr as de,gr as B,ir as V,j as fe,jn as H,k as pe,kr as U,ln as me,mr as he,nn as ge,nt as W,on as G,ot as _e,qn as K,rr as ve,sn as ye,st as be,t as q,tn as xe,tr as J,tt as Y,un as X,ur as Z,vr as Se,w as Q,xr as Ce,xt as we,y as Te}from"./index-Dr0D0hQu.js";import{t as Ee}from"./useSnackbar-D7YOfKok.js";import{n as De,r as Oe,t as ke}from"./VChip-BASRYLBn.js";import{t as Ae}from"./VDialog-B7tvs55U.js";import{a as je}from"./VSelectionControl-BWDawnx3.js";import{n as Me,t as Ne}from"./VRow-CrnE-Xma.js";import{t as $}from"./VSpacer-C6Z-OqDQ.js";import{t as Pe}from"./VSelect-IetqarsS.js";import{t as Fe}from"./VDataTableServer-DQKBz4QV.js";import{a as Ie}from"./validation-Yxuom3Du.js";import{i as Le,n as Re,r as ze,t as Be}from"./status-DHzVFnss.js";import{t as Ve}from"./VFileInput-DLrTiXA8.js";import{t as He}from"./VAlert-BwYIheOY.js";function Ue(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 We(e){let t=[];for(let n of e){let e=Ue(typeof n==`object`&&n&&`id`in n?n.id:n);e!==null&&t.push(e)}return[...new Set(t)]}function Ge(e){return(e||[]).filter(e=>e.success).length}function Ke(e,t){if(e instanceof h){let n=e.detail??e.message;return typeof n==`string`?n:Array.isArray(n)?n.map(e=>e?.msg||JSON.stringify(e)).join(`; `):n&&typeof n==`object`?JSON.stringify(n):e.message||t}return e instanceof Error&&e.message||t}var qe=Symbol.for(`vuetify:v-tabs`),Je=X({fixed:Boolean,sliderColor:String,sliderTransition:String,sliderTransitionDuration:[String,Number],hideSlider:Boolean,inset:Boolean,direction:{type:String,default:`horizontal`},...S(E({selectedClass:`v-tab--selected`,variant:`text`}),[`active`,`block`,`flat`,`location`,`position`,`symbol`])},`VTab`),Ye=G()({name:`VTab`,props:Je(),setup(e,{slots:n,attrs:r}){let{textColorClasses:i,textColorStyles:a}=O(()=>e.sliderColor),{backgroundColorClasses:o,backgroundColorStyles:s}=we(()=>e.sliderColor),c=F(),l=F(),u=_(()=>e.direction===`horizontal`),f=_(()=>c.value?.group?.isSelected.value??!1);function p(e,t){return{opacity:[0,1]}}function m(t,n){return e.direction===`vertical`?{transform:[`scaleY(0)`,`scaleY(1)`]}:{transform:[`scaleX(0)`,`scaleX(1)`]}}function h(e,t){let n=t.getBoundingClientRect(),r=e.getBoundingClientRect(),i=u.value?`x`:`y`,a=u.value?`X`:`Y`,o=u.value?`right`:`bottom`,s=u.value?`width`:`height`,c=n[i]>r[i]?n[o]-r[o]:n[i]-r[i],l=Math.sign(c)>0?u.value?`right`:`bottom`:Math.sign(c)<0?u.value?`left`:`top`:`center`,d=(Math.abs(c)+(Math.sign(c)<0?n[s]:r[s]))/Math.max(n[s],r[s])||0,f=n[s]/r[s]||0,p=1.5;return{transform:[`translate${a}(${c}px) scale${a}(${f})`,`translate${a}(${c/p}px) scale${a}(${(d-1)/p+1})`,`none`],transformOrigin:[,,,].fill(l)}}function g({value:t}){if(t){let t=c.value?.$el.parentElement?.querySelector(`.v-tab--selected .v-tab__slider`),n=l.value;if(!t||!n)return;let r=getComputedStyle(t).backgroundColor,i={fade:p,grow:m,shift:h}[e.sliderTransition??`shift`]??h,a=Number(e.sliderTransitionDuration)||({fade:400,grow:350,shift:225}[e.sliderTransition??`shift`]??225);L(n,{backgroundColor:[r,r],...i(n,t)},{duration:a,easing:ge})}}return z(()=>{let u=v.filterProps(e);return t(v,V({symbol:qe,ref:c,class:[`v-tab`,e.class,f.value&&e.inset?o.value:[]],style:[e.style,f.value&&e.inset?s.value:[],{backgroundColor:f.value&&e.inset?`transparent !important`:void 0}],tabindex:f.value?0:-1,role:`tab`,"aria-selected":String(f.value),active:!1},u,r,{block:e.fixed,maxWidth:e.fixed?300:void 0,"onGroup:selected":g}),{...n,default:()=>K(d,null,[n.default?.()??e.text,!e.hideSlider&&K(`div`,{ref:l,class:C([`v-tab__slider`,e.inset?o.value:i.value]),style:U([a.value,e.inset?s.value:i.value])},null)])})}),Te({},c)}}),Xe=e=>{let{touchstartX:t,touchendX:n,touchstartY:r,touchendY:i}=e,a=.5;e.offsetX=n-t,e.offsetY=i-r,Math.abs(e.offsetY)<a*Math.abs(e.offsetX)&&(e.left&&n<t-16&&e.left(e),e.right&&n>t+16&&e.right(e)),Math.abs(e.offsetX)<a*Math.abs(e.offsetY)&&(e.up&&i<r-16&&e.up(e),e.down&&i>r+16&&e.down(e))};function Ze(e,t){let n=e.changedTouches[0];t.touchstartX=n.clientX,t.touchstartY=n.clientY,t.start?.({originalEvent:e,...t})}function Qe(e,t){let n=e.changedTouches[0];t.touchendX=n.clientX,t.touchendY=n.clientY,t.end?.({originalEvent:e,...t}),Xe(t)}function $e(e,t){let n=e.changedTouches[0];t.touchmoveX=n.clientX,t.touchmoveY=n.clientY,t.move?.({originalEvent:e,...t})}function et(e={}){let t={touchstartX:0,touchstartY:0,touchendX:0,touchendY:0,touchmoveX:0,touchmoveY:0,offsetX:0,offsetY:0,left:e.left,right:e.right,up:e.up,down:e.down,start:e.start,move:e.move,end:e.end};return{touchstart:e=>Ze(e,t),touchend:e=>Qe(e,t),touchmove:e=>$e(e,t)}}function tt(e,t){let n=t.value,r=n?.parent?e.parentElement:e,i=n?.options??{passive:!0},a=t.instance?.$.uid;if(!r||a===void 0)return;let o=et(t.value);r._touchHandlers=r._touchHandlers??Object.create(null),r._touchHandlers[a]=o,H(o).forEach(e=>{r.addEventListener(e,o[e],i)})}function nt(e,t){let n=t.value?.parent?e.parentElement:e,r=t.instance?.$.uid;if(!n?._touchHandlers||r===void 0)return;let i=n._touchHandlers[r];H(i).forEach(e=>{n.removeEventListener(e,i[e])}),delete n._touchHandlers[r]}var rt={mounted:tt,unmounted:nt},it=Symbol.for(`vuetify:v-window`),at=Symbol.for(`vuetify:v-window-group`),ot=X({continuous:Boolean,nextIcon:{type:[Boolean,String,Function,Object],default:`$next`},prevIcon:{type:[Boolean,String,Function,Object],default:`$prev`},reverse:Boolean,showArrows:{type:[Boolean,String],validator:e=>typeof e==`boolean`||e===`hover`},verticalArrows:[Boolean,String],touch:{type:[Object,Boolean],default:void 0},direction:{type:String,default:`horizontal`},modelValue:null,disabled:Boolean,selectedClass:{type:String,default:`v-window-item--active`},mandatory:{type:[Boolean,String],default:`force`},crossfade:Boolean,transitionDuration:Number,...me(),...b(),...p()},`VWindow`),st=G()({name:`VWindow`,directives:{vTouch:rt},props:ot(),emits:{"update:modelValue":e=>!0},setup(e,{slots:n}){let{themeClasses:r}=k(e),{isRtl:i}=A(),{t:a}=ce(),s=Y(e,at),c=F(),l=_(()=>i.value?!e.reverse:e.reverse),u=Ce(!1),d=_(()=>e.crossfade?`v-window-crossfade-transition`:`v-window-${e.direction===`vertical`?`y`:`x`}${(l.value?!u.value:u.value)?`-reverse`:``}-transition`),f=Ce(0),p=F(void 0),h=_(()=>s.items.value.findIndex(e=>s.selected.value.includes(e.id)));he(h,(e,t)=>{let n,r={left:0,top:0};m&&t>=0&&(n=xe(c.value),r.left=n?.scrollLeft,r.top=n?.scrollTop);let i=s.items.value.length,a=i-1;i<=2?u.value=e<t:e===a&&t===0?u.value=!1:e===0&&t===a?u.value=!0:u.value=e<t,P(()=>{!m||!n||(n.scrollTop!==r.top&&n.scrollTo({...r,behavior:`instant`}),requestAnimationFrame(()=>{n&&n.scrollTop!==r.top&&n.scrollTo({...r,behavior:`instant`})}))})},{flush:`sync`}),R(it,{transition:d,isReversed:u,transitionCount:f,transitionHeight:p,rootRef:c});let g=o(()=>e.continuous||h.value!==0),y=o(()=>e.continuous||h.value!==s.items.value.length-1);function b(){g.value&&s.prev()}function x(){y.value&&s.next()}let S=_(()=>{let r=[],o={icon:i.value?e.nextIcon:e.prevIcon,class:`v-window__${l.value?`right`:`left`}`,onClick:s.prev,"aria-label":a(`$vuetify.carousel.prev`)};r.push(g.value?n.prev?n.prev({props:o}):t(v,o,null):K(`div`,null,null));let c={icon:i.value?e.prevIcon:e.nextIcon,class:`v-window__${l.value?`left`:`right`}`,onClick:s.next,"aria-label":a(`$vuetify.carousel.next`)};return r.push(y.value?n.next?n.next({props:c}):t(v,c,null):K(`div`,null,null)),r}),w=_(()=>e.touch===!1?e.touch:{left:()=>{l.value?b():x()},right:()=>{l.value?x():b()},start:({originalEvent:e})=>{e.stopPropagation()},...e.touch===!0?{}:e.touch});function te(t){(e.direction===`horizontal`&&t.key===`ArrowLeft`||e.direction===`vertical`&&t.key===`ArrowUp`)&&(t.preventDefault(),b(),P(()=>{g.value?T(0):T(1)})),(e.direction===`horizontal`&&t.key===`ArrowRight`||e.direction===`vertical`&&t.key===`ArrowDown`)&&(t.preventDefault(),x(),P(()=>{y.value?T(1):T(0)}))}function T(e){let t=S.value[e];t&&(Array.isArray(t)?t[0]:t).el?.focus()}return z(()=>M(t(e.tag,{ref:c,class:C([`v-window`,{"v-window--show-arrows-on-hover":e.showArrows===`hover`,"v-window--vertical-arrows":!!e.verticalArrows,"v-window--crossfade":!!e.crossfade},r.value,e.class]),style:U([e.style,{"--v-window-transition-duration":ee()?null:j(e.transitionDuration,`ms`)}])},{default:()=>[K(`div`,{class:`v-window__container`,style:{height:p.value}},[n.default?.({group:s}),e.showArrows!==!1&&K(`div`,{class:C([`v-window__controls`,{"v-window__controls--left":e.verticalArrows===`left`||e.verticalArrows===!0},{"v-window__controls--right":e.verticalArrows===`right`}]),onKeydown:te},[S.value])]),n.additional?.({group:s})]}),[[rt,w.value]])),{group:s}}}),ct=X({...S(ot(),[`continuous`,`nextIcon`,`prevIcon`,`showArrows`,`touch`,`mandatory`])},`VTabsWindow`),lt=G()({name:`VTabsWindow`,props:ct(),emits:{"update:modelValue":e=>!0},setup(e,{slots:n}){let r=ve(qe,null),i=le(e,`modelValue`),a=_({get(){return i.value!=null||!r?i.value:r.items.value.find(e=>r.selected.value.includes(e.id))?.value},set(e){i.value=e}});return z(()=>t(st,V({_as:`VTabsWindow`},st.filterProps(e),{modelValue:a.value,"onUpdate:modelValue":e=>a.value=e,class:[`v-tabs-window`,e.class],style:e.style,mandatory:!1,touch:!1}),n)),{}}}),ut=X({reverseTransition:{type:[Boolean,String],default:void 0},transition:{type:[Boolean,String],default:void 0},...me(),...e(),...a()},`VWindowItem`),dt=G()({name:`VWindowItem`,directives:{vTouch:rt},props:ut(),emits:{"group:selected":e=>!0},setup(e,{slots:n}){let r=ve(it),i=W(e,at),{isBooted:a}=I();if(!r||!i)throw Error(`[Vuetify] VWindowItem must be used inside VWindow`);let o=Ce(!1),s=_(()=>a.value&&(r.isReversed.value?e.reverseTransition!==!1:e.transition!==!1));function c(){!o.value||!r||(o.value=!1,r.transitionCount.value>0&&(--r.transitionCount.value,r.transitionCount.value===0&&(r.transitionHeight.value=void 0)))}function l(){o.value||!r||(o.value=!0,r.transitionCount.value===0&&(r.transitionHeight.value=j(r.rootRef.value?.clientHeight)),r.transitionCount.value+=1)}function u(){c()}function d(e){o.value&&P(()=>{!s.value||!o.value||!r||(r.transitionHeight.value=j(e.clientHeight))})}let p=_(()=>{let t=r.isReversed.value?e.reverseTransition:e.transition;return s.value?{name:typeof t==`string`?t:r.transition.value,onBeforeEnter:l,onAfterEnter:c,onEnterCancelled:u,onBeforeLeave:l,onAfterLeave:c,onLeaveCancelled:u,onEnter:d}:!1}),{hasContent:m}=Q(e,i.isSelected);return z(()=>t(N,{transition:p.value,disabled:!a.value},{default:()=>[M(K(`div`,{class:C([`v-window-item`,i.selectedClass.value,e.class]),style:U(e.style)},[m.value&&n.default?.()]),[[f,i.isSelected.value]])]})),{groupItem:i}}}),ft=X({...ut()},`VTabsWindowItem`),pt=G()({name:`VTabsWindowItem`,props:ft(),setup(e,{slots:n}){return z(()=>t(dt,V({_as:`VTabsWindowItem`},dt.filterProps(e),{class:[`v-tabs-window-item`,e.class],style:e.style}),n)),{}}});function mt(e){return e?e.map(e=>s(e)?e:{text:e,value:e}):[]}var ht=X({alignTabs:{type:String,default:`start`},color:String,fixedTabs:Boolean,items:{type:Array,default:()=>[]},stacked:Boolean,bgColor:String,grow:Boolean,height:{type:[Number,String],default:void 0},hideSlider:Boolean,inset:Boolean,insetPadding:[String,Number],insetRadius:[String,Number],sliderColor:String,...te(Je(),[`spaced`,`sliderTransition`,`sliderTransitionDuration`]),...Oe({mandatory:`force`,selectedClass:`v-tab-item--selected`}),..._e(),...b()},`VTabs`),gt=G()({name:`VTabs`,props:ht(),emits:{"update:modelValue":e=>!0},setup(e,{attrs:n,slots:r}){let i=le(e,`modelValue`),a=_(()=>mt(e.items)),{densityClasses:s}=be(e),{backgroundColorClasses:c,backgroundColorStyles:l}=we(()=>e.bgColor),{scopeId:u}=ne();return ye({VTab:{color:o(e,`color`),direction:o(e,`direction`),stacked:o(e,`stacked`),fixed:o(e,`fixedTabs`),inset:o(e,`inset`),sliderColor:o(e,`sliderColor`),sliderTransition:o(e,`sliderTransition`),sliderTransitionDuration:o(e,`sliderTransitionDuration`),hideSlider:o(e,`hideSlider`)}}),z(()=>{let o=De.filterProps(e),f=!!(r.window||e.items.length>0);return K(d,null,[t(De,V(o,{modelValue:i.value,"onUpdate:modelValue":e=>i.value=e,class:[`v-tabs`,`v-tabs--${e.direction}`,`v-tabs--align-tabs-${e.alignTabs}`,{"v-tabs--fixed-tabs":e.fixedTabs,"v-tabs--grow":e.grow,"v-tabs--inset":e.inset,"v-tabs--stacked":e.stacked},s.value,c.value,e.class],style:[{"--v-tabs-height":j(e.height),"--v-tabs-inset-padding":e.inset?j(e.insetPadding):void 0,"--v-tabs-inset-radius":e.inset?j(e.insetRadius):void 0},l.value,e.style],role:`tablist`,symbol:qe},u,n),{default:r.default??(()=>a.value.map(n=>r.tab?.({item:n})??t(Ye,V(n,{key:n.text,value:n.value,spaced:e.spaced}),{default:r[`tab.${n.value}`]?()=>r[`tab.${n.value}`]?.({item:n}):void 0}))),prev:r.prev,next:r.next}),f&&t(lt,V({modelValue:i.value,"onUpdate:modelValue":e=>i.value=e,key:`tabs-window`},u),{default:()=>[a.value.map(e=>r.item?.({item:e})??t(pt,{value:e.value},{default:()=>r[`item.${e.value}`]?.({item:e})})),r.window?.()]})])}),{}}}),_t={class:`text-body-2 mr-4`},vt={class:`font-weight-medium`},yt={class:`text-medium-emphasis`},bt={key:1,class:`text-medium-emphasis`},xt={class:`text-medium-emphasis`},St={class:`text-caption text-medium-emphasis`},Ct={class:`d-flex ga-1`},wt={class:`text-h6`},Tt={class:`text-h6`},Et={class:`text-h6`},Dt={class:`text-h6`},Ot={key:0,class:`text-medium-emphasis text-center py-4`},kt=J({__name:`ServersPage`,setup(e){let a=Ee(),o=i(),{servers:s,loading:f,page:p,itemsPerPage:m,total:h,search:ee,loadServers:b,onSearch:S,onPageChange:C,onItemsPerPageChange:te}=Le();async function E(){try{await b()}catch{a(`加载服务器列表失败`,`error`)}}let ne=F([]),O=F(!1),k=F(!1),A=F(!1),ce=F(!1),le=F(!1),j=F(null),M=F(null),N=F({name:``,address:``,category:``,platform_id:null,ssh_user:``,ssh_port:22,password:``}),P=F([]),I=_(()=>new Set(We(P.value))),L=F(null),R=F(`info`),z=F([]),V=[{title:`状态`,key:`status`,width:100},{title:`名称`,key:`name`},{title:`地址`,key:`address`},{title:`分类`,key:`category`,width:100},{title:`Agent`,key:`agent`,width:100},{title:`心跳`,key:`heartbeat`,width:120},{title:`操作`,key:`actions`,width:200,align:`end`}],H=F([{label:`服务器总数`,value:`0`,sub:``,color:`blue`,icon:`mdi-server-network`},{label:`在线`,value:`0`,sub:``,color:`green`,icon:`mdi-check-circle-outline`},{label:`离线`,value:`0`,sub:``,color:`orange`,icon:`mdi-alert-circle-outline`},{label:`告警中`,value:`0`,sub:``,color:`red`,icon:`mdi-bell-alert-outline`}]);async function U(){try{let e=await D.get(`/servers/stats`);H.value[0].value=String(e.total),H.value[1].value=String(e.online),H.value[1].sub=e.total?`${(e.online/e.total*100).toFixed(1)}% 在线率`:``,H.value[2].value=String(e.offline),H.value[3].value=String(e.alerts)}catch{}}async function me(){try{ne.value=(await D.get(`/assets/platforms`)).items||[]}catch{}}function he(e){o.push({path:`/terminal`,query:{server_id:String(e.id)}})}function ge(e){o.push({path:`/files`,query:{server_id:String(e.id)}})}let W=F(!1);async function G(){let e=We(P.value);if(e.length){a(`正在检查 ${e.length} 台服务器...`);try{await D.post(`/servers/check`,{server_ids:e}),a(`健康检查完成`),E()}catch(e){a(Ke(e,`检查失败`),`error`)}}}async function _e(){if(confirm(`确定删除选中的 ${I.value.size} 台服务器?`)){for(let e of I.value)try{await D.delete(`/servers/${e}`)}catch{}P.value=[],a(`批量删除完成`),E(),U()}}async function ve(){let e=We(P.value);if(e.length){W.value=!0;try{a(`安装完成: ${Ge((await D.post(`/servers/batch/install-agent`,{server_ids:e})).results)}/${e.length} 成功`),E()}catch(e){a(Ke(e,`安装失败`),`error`)}finally{W.value=!1}}}async function ye(){let e=We(P.value);if(e.length){W.value=!0;try{a(`升级完成: ${Ge((await D.post(`/servers/batch/upgrade-agent`,{server_ids:e})).results)}/${e.length} 成功`),E()}catch(e){a(Ke(e,`升级失败`),`error`)}finally{W.value=!1}}}async function be(){let e=We(P.value);if(e.length&&confirm(`确定卸载选中的 ${e.length} 台服务器的 Agent?`)){W.value=!0;try{a(`卸载完成: ${Ge((await D.post(`/servers/batch/uninstall-agent`,{server_ids:e})).results)}/${e.length} 成功`),E()}catch(e){a(Ke(e,`卸载失败`),`error`)}finally{W.value=!1}}}async function xe(){try{let e=await D.getList(`/servers/`,{per_page:5e3}),t=[`ID`,`名称`,`地址`,`端口`,`用户名`,`分类`,`状态`,`Agent版本`,`最后心跳`],n=(e.items||[]).map(e=>[e.id,e.name,e.domain,e.port,e.username,e.category||``,e.status,e.agent_version||``,e.last_heartbeat||``]),r=``+[t.join(`,`),...n.map(e=>e.map(e=>`"${String(e).replace(/"/g,`""`)}"`).join(`,`))].join(`
|
||
`),i=new Blob([r],{type:`text/csv;charset=utf-8;`}),o=URL.createObjectURL(i),s=document.createElement(`a`);s.href=o,s.download=`servers_${new Date().toISOString().slice(0,10)}.csv`,s.click(),URL.revokeObjectURL(o),a(`导出完成`)}catch(e){a(e.message||`导出失败`,`error`)}}let J=F(!1),Y=F([]),X=F(!1),Q=F(null);async function Ce(){if(Y.value?.length){X.value=!0,Q.value=null;try{let e=new FormData;e.append(`file`,Y.value[0]),Q.value=await D.upload(`/servers/import`,e),a(`导入完成`),E()}catch(e){a(e instanceof Error?e.message:`导入失败`,`error`)}finally{X.value=!1}}}async function we(e){L.value=e,R.value=`info`;try{z.value=(await D.get(`/servers/${e.id}/logs`,{limit:20})).items||[]}catch{z.value=[]}}function Te(e){A.value=!0,M.value=e.id,N.value={name:e.name,address:e.domain||``,category:e.category||``,platform_id:e.platform_id,ssh_user:e.username||``,ssh_port:e.port||22,password:``},O.value=!0}function De(e){j.value=e,k.value=!0}async function Oe(){ce.value=!0;try{let e={name:N.value.name,domain:N.value.address,username:N.value.ssh_user,port:N.value.ssh_port,category:N.value.category||void 0,platform_id:N.value.platform_id||void 0,password:N.value.password||void 0};A.value&&M.value?await D.put(`/servers/${M.value}`,e):await D.post(`/servers/`,e),O.value=!1,qe(),E(),U(),a(`保存成功`)}catch(e){a(e.message||`保存失败`,`error`)}finally{ce.value=!1}}async function Ue(){if(j.value){le.value=!0;try{await D.delete(`/servers/${j.value.id}`),k.value=!1,E(),U(),a(`已删除`)}catch(e){a(e.message||`删除失败`,`error`)}finally{le.value=!1}}}function qe(){A.value=!1,M.value=null,N.value={name:``,address:``,category:``,platform_id:null,ssh_user:``,ssh_port:22,password:``}}return ue(()=>{U(),E(),me()}),(e,i)=>(Z(),g(je,{fluid:``,class:`pa-6`},{default:B(()=>[t(Ne,null,{default:B(()=>[(Z(!0),ae(d,null,de(H.value,e=>(Z(),g(Me,{cols:`12`,sm:`6`,lg:`3`,key:e.label},{default:B(()=>[t(re,{elevation:`0`,lines:`two`,rounded:`lg`,border:``},{default:B(()=>[t(pe,null,{append:B(()=>[t(oe,{color:e.color,size:`30`},{default:B(()=>[T(r(e.icon),1)]),_:2},1032,[`color`])]),default:B(()=>[t(n,{class:`text-body-small`},{default:B(()=>[T(r(e.label),1)]),_:2},1024),t(n,null,{default:B(()=>[T(r(e.value),1)]),_:2},1024)]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),t(y,{elevation:`0`,rounded:`lg`,class:`mt-4`,border:``},{default:B(()=>[t(w,{class:`d-flex align-center`},{default:B(()=>[i[26]||=T(` 服务器列表 `,-1),t($),t(q,{modelValue:c(ee),"onUpdate:modelValue":[i[0]||=e=>Se(ee)?ee.value=e:null,c(S)],"prepend-inner-icon":`mdi-magnify`,label:`搜索...`,density:`compact`,"hide-details":``,rounded:``,style:{"max-width":`240px`},variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`]),t(v,{color:`primary`,variant:`flat`,class:`ml-3`,"prepend-icon":`mdi-plus`,size:`small`,onClick:i[1]||=e=>O.value=!0},{default:B(()=>[...i[23]||=[T(` 添加 `,-1)]]),_:1}),t(v,{variant:`tonal`,class:`ml-2`,"prepend-icon":`mdi-download`,size:`small`,onClick:xe},{default:B(()=>[...i[24]||=[T(` 导出CSV `,-1)]]),_:1}),t(v,{variant:`tonal`,class:`ml-2`,"prepend-icon":`mdi-file-import`,size:`small`,onClick:i[2]||=e=>J.value=!0},{default:B(()=>[...i[25]||=[T(` 导入 `,-1)]]),_:1})]),_:1}),I.value.size>0?(Z(),g(y,{key:0,class:`mx-4 mb-2`,color:`primary`,variant:`tonal`,rounded:`lg`},{default:B(()=>[t(x,{class:`d-flex align-center py-2`},{default:B(()=>[K(`span`,_t,`已选择 `+r(I.value.size)+` 台服务器`,1),t($),t(v,{size:`small`,variant:`text`,onClick:G},{default:B(()=>[...i[27]||=[T(`健康检查`,-1)]]),_:1}),t(v,{size:`small`,variant:`text`,onClick:ve,loading:W.value},{default:B(()=>[...i[28]||=[T(`安装Agent`,-1)]]),_:1},8,[`loading`]),t(v,{size:`small`,variant:`text`,onClick:ye,loading:W.value},{default:B(()=>[...i[29]||=[T(`升级Agent`,-1)]]),_:1},8,[`loading`]),t(v,{size:`small`,variant:`text`,color:`error`,onClick:be,loading:W.value},{default:B(()=>[...i[30]||=[T(`卸载Agent`,-1)]]),_:1},8,[`loading`]),t(v,{size:`small`,variant:`text`,color:`error`,onClick:_e},{default:B(()=>[...i[31]||=[T(`批量删除`,-1)]]),_:1}),t(v,{size:`small`,variant:`text`,onClick:i[3]||=e=>P.value=[]},{default:B(()=>[...i[32]||=[T(`取消选择`,-1)]]),_:1})]),_:1})]),_:1})):se(``,!0),t(Fe,{items:c(s),headers:V,"items-length":c(h),loading:c(f),page:c(p),"items-per-page":c(m),hover:``,density:`comfortable`,"item-value":`id`,"show-select":``,modelValue:P.value,"onUpdate:modelValue":i[4]||=e=>P.value=e,"onUpdate:page":c(C),"onUpdate:itemsPerPage":c(te),"onClick:row":i[5]||=(e,{item:t})=>we(t)},{"item.status":B(({item:e})=>[t(ke,{color:c(Re)(e.status),size:`x-small`,variant:`tonal`,label:``,border:`current sm`},{default:B(()=>[T(r(c(ze)(e.status)),1)]),_:2},1032,[`color`])]),"item.name":B(({item:e})=>[K(`span`,vt,r(e.name),1)]),"item.address":B(({item:e})=>[K(`span`,yt,r(e.domain)+`:`+r(e.port),1)]),"item.category":B(({item:e})=>[e.category?(Z(),g(ke,{key:0,color:`primary`,variant:`tonal`,size:`small`,label:``},{default:B(()=>[T(r(e.category),1)]),_:2},1024)):(Z(),ae(`span`,bt,`—`))]),"item.agent":B(({item:e})=>[K(`span`,xt,r(e.agent_version||`—`),1)]),"item.heartbeat":B(({item:e})=>[K(`span`,St,r(c(Be)(e.last_heartbeat)),1)]),"item.actions":B(({item:e})=>[K(`div`,Ct,[t(v,{variant:`text`,size:`x-small`,color:`primary`,density:`compact`,onClick:ie(t=>he(e),[`stop`])},{default:B(()=>[...i[33]||=[T(`终端`,-1)]]),_:1},8,[`onClick`]),t(v,{variant:`text`,size:`x-small`,density:`compact`,onClick:ie(t=>ge(e),[`stop`])},{default:B(()=>[...i[34]||=[T(`文件`,-1)]]),_:1},8,[`onClick`]),t(v,{variant:`text`,size:`x-small`,density:`compact`,onClick:ie(t=>Te(e),[`stop`])},{default:B(()=>[...i[35]||=[T(`编辑`,-1)]]),_:1},8,[`onClick`]),t(v,{variant:`text`,size:`x-small`,color:`error`,density:`compact`,onClick:ie(t=>De(e),[`stop`])},{default:B(()=>[...i[36]||=[T(`删除`,-1)]]),_:1},8,[`onClick`])])]),"no-data":B(()=>[...i[37]||=[K(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无服务器数据`,-1)]]),_:1},8,[`items`,`items-length`,`loading`,`page`,`items-per-page`,`modelValue`,`onUpdate:page`,`onUpdate:itemsPerPage`])]),_:1}),t(l,null,{default:B(()=>[L.value?(Z(),g(y,{key:0,class:`mt-4`,elevation:`0`,border:``,rounded:`lg`},{default:B(()=>[t(w,{class:`d-flex align-center`},{default:B(()=>[t(oe,{class:`mr-2`},{default:B(()=>[...i[38]||=[T(`mdi-information-outline`,-1)]]),_:1}),T(` `+r(L.value.name)+` `,1),t(ke,{color:c(Re)(L.value.status),size:`small`,variant:`tonal`,label:``,class:`ml-2`},{default:B(()=>[T(r(c(ze)(L.value.status)),1)]),_:1},8,[`color`]),t($),t(v,{icon:`mdi-close`,size:`small`,variant:`text`,onClick:i[6]||=e=>L.value=null})]),_:1}),t(fe),t(gt,{modelValue:R.value,"onUpdate:modelValue":i[7]||=e=>R.value=e,density:`compact`},{default:B(()=>[t(Ye,{value:`info`},{default:B(()=>[...i[39]||=[T(`系统信息`,-1)]]),_:1}),t(Ye,{value:`logs`},{default:B(()=>[...i[40]||=[T(`同步日志`,-1)]]),_:1})]),_:1},8,[`modelValue`]),t(lt,{modelValue:R.value,"onUpdate:modelValue":i[8]||=e=>R.value=e},{default:B(()=>[t(pt,{value:`info`},{default:B(()=>[t(x,null,{default:B(()=>[t(Ne,{dense:``},{default:B(()=>[t(Me,{cols:`6`,md:`3`},{default:B(()=>[i[41]||=K(`div`,{class:`text-caption text-medium-emphasis`},`CPU`,-1),K(`div`,wt,r(L.value.system_info?.cpu_usage??`—`)+`%`,1)]),_:1}),t(Me,{cols:`6`,md:`3`},{default:B(()=>[i[42]||=K(`div`,{class:`text-caption text-medium-emphasis`},`内存`,-1),K(`div`,Tt,r(L.value.system_info?.mem_usage??`—`)+`%`,1)]),_:1}),t(Me,{cols:`6`,md:`3`},{default:B(()=>[i[43]||=K(`div`,{class:`text-caption text-medium-emphasis`},`磁盘`,-1),K(`div`,Et,r(L.value.system_info?.disk_usage??`—`)+`%`,1)]),_:1}),t(Me,{cols:`6`,md:`3`},{default:B(()=>[i[44]||=K(`div`,{class:`text-caption text-medium-emphasis`},`Agent`,-1),K(`div`,Dt,r(L.value.agent_version||`未安装`),1)]),_:1})]),_:1})]),_:1})]),_:1}),t(pt,{value:`logs`},{default:B(()=>[t(x,null,{default:B(()=>[z.value.length===0?(Z(),ae(`div`,Ot,`暂无同步日志`)):(Z(),g(re,{key:1,density:`compact`},{default:B(()=>[(Z(!0),ae(d,null,de(z.value,e=>(Z(),g(pe,{key:e.id,subtitle:e.created_at,title:`${e.source_path} → ${e.target_path}`},{append:B(()=>[t(ke,{size:`x-small`,color:e.status===`success`?`green`:`red`,variant:`tonal`,label:``},{default:B(()=>[T(r(e.status),1)]),_:2},1032,[`color`])]),_:2},1032,[`subtitle`,`title`]))),128))]),_:1}))]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1})):se(``,!0)]),_:1}),t(Ae,{modelValue:O.value,"onUpdate:modelValue":i[17]||=e=>O.value=e,"max-width":`600`},{default:B(()=>[t(y,{border:``},{default:B(()=>[t(w,null,{default:B(()=>[T(r(A.value?`编辑服务器`:`添加服务器`),1)]),_:1}),t(x,null,{default:B(()=>[t(q,{modelValue:N.value.name,"onUpdate:modelValue":i[9]||=e=>N.value.name=e,label:`名称`,variant:`outlined`,density:`compact`,class:`mb-2`,rules:[c(Ie)(`服务器名称`)]},null,8,[`modelValue`,`rules`]),t(q,{modelValue:N.value.address,"onUpdate:modelValue":i[10]||=e=>N.value.address=e,label:`地址 (IP:端口)`,variant:`outlined`,density:`compact`,class:`mb-2`,rules:[c(Ie)(`地址`)]},null,8,[`modelValue`,`rules`]),t(q,{modelValue:N.value.category,"onUpdate:modelValue":i[11]||=e=>N.value.category=e,label:`分类`,variant:`outlined`,density:`compact`,class:`mb-2`},null,8,[`modelValue`]),t(Pe,{modelValue:N.value.platform_id,"onUpdate:modelValue":i[12]||=e=>N.value.platform_id=e,items:ne.value,"item-title":`name`,"item-value":`id`,label:`平台`,variant:`outlined`,density:`compact`,class:`mb-2`,clearable:``},null,8,[`modelValue`,`items`]),t(q,{modelValue:N.value.ssh_user,"onUpdate:modelValue":i[13]||=e=>N.value.ssh_user=e,label:`SSH 用户`,variant:`outlined`,density:`compact`,class:`mb-2`,rules:[c(Ie)(`用户名`)]},null,8,[`modelValue`,`rules`]),t(q,{modelValue:N.value.ssh_port,"onUpdate:modelValue":i[14]||=e=>N.value.ssh_port=e,label:`SSH 端口`,variant:`outlined`,density:`compact`,type:`number`,class:`mb-2`},null,8,[`modelValue`]),t(q,{modelValue:N.value.password,"onUpdate:modelValue":i[15]||=e=>N.value.password=e,label:`密码`,variant:`outlined`,density:`compact`,type:`password`,class:`mb-2`},null,8,[`modelValue`])]),_:1}),t(u,null,{default:B(()=>[t($),t(v,{variant:`text`,onClick:i[16]||=e=>O.value=!1},{default:B(()=>[...i[45]||=[T(`取消`,-1)]]),_:1}),t(v,{color:`primary`,variant:`flat`,onClick:Oe,loading:ce.value},{default:B(()=>[...i[46]||=[T(`保存`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(Ae,{modelValue:k.value,"onUpdate:modelValue":i[19]||=e=>k.value=e,"max-width":`400`},{default:B(()=>[t(y,{border:``},{default:B(()=>[t(w,null,{default:B(()=>[...i[47]||=[T(`确认删除`,-1)]]),_:1}),t(x,null,{default:B(()=>[i[48]||=T(`确定要删除服务器 `,-1),K(`strong`,null,r(j.value?.name),1),i[49]||=T(` 吗?`,-1)]),_:1}),t(u,null,{default:B(()=>[t($),t(v,{variant:`text`,onClick:i[18]||=e=>k.value=!1},{default:B(()=>[...i[50]||=[T(`取消`,-1)]]),_:1}),t(v,{color:`error`,variant:`flat`,onClick:Ue,loading:le.value},{default:B(()=>[...i[51]||=[T(`删除`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),t(Ae,{modelValue:J.value,"onUpdate:modelValue":i[22]||=e=>J.value=e,"max-width":`500`},{default:B(()=>[t(y,{border:``},{default:B(()=>[t(w,null,{default:B(()=>[...i[52]||=[T(`导入服务器`,-1)]]),_:1}),t(x,null,{default:B(()=>[i[53]||=K(`div`,{class:`text-body-2 text-medium-emphasis mb-3`},[T(` 上传 CSV 文件批量导入服务器。 `),K(`a`,{href:`/app/servers_import_template.csv`,download:``,class:`text-primary`},`下载模板`)],-1),t(Ve,{modelValue:Y.value,"onUpdate:modelValue":i[20]||=e=>Y.value=e,label:`选择 CSV 文件`,variant:`outlined`,density:`compact`,accept:`.csv`,"show-size":``},null,8,[`modelValue`]),Q.value?(Z(),g(He,{key:0,type:Q.value.failed>0?`warning`:`success`,density:`compact`,variant:`tonal`,class:`mt-3`},{default:B(()=>[T(` 成功 `+r(Q.value.created)+`,跳过 `+r(Q.value.skipped)+`,失败 `+r(Q.value.failed),1)]),_:1},8,[`type`])):se(``,!0)]),_:1}),t(u,null,{default:B(()=>[t($),t(v,{variant:`text`,onClick:i[21]||=e=>J.value=!1},{default:B(()=>[...i[54]||=[T(`关闭`,-1)]]),_:1}),t(v,{color:`primary`,variant:`flat`,onClick:Ce,loading:X.value,disabled:!Y.value?.length},{default:B(()=>[...i[55]||=[T(`开始导入`,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}});export{kt as default}; |