Files
Nexus/web/app/assets/ServersPage-BLkIGEKs.js
T
Your Name 51948469c2 build(frontend): track Vite output in Git for Gitea deploy
- 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>
2026-06-03 00:52:44 +08:00

3 lines
39 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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 v,L as te,Ln as ne,M as y,N as b,Nr as x,O as re,P as S,Qn as C,R as w,Rn as ie,Rr as T,Rt as E,S as D,Sn as ae,St as oe,Tr as O,Tt as se,Vn as ce,Wt as le,X as ue,Xn as de,Yn as k,Zt as fe,_ as pe,_n as me,_r as A,an as he,ar as j,bt as M,cn as N,cr as P,dn as ge,er as F,et as _e,fn as I,ft as L,gr as R,hr as z,ir as B,jr as V,jt as H,k as ve,kn as ye,ln as be,lr as U,m as xe,n as Se,nn as W,nr as G,nt as K,or as q,pr as Ce,pt as we,qn as Te,rt as Ee,t as J,tn as De,tr as Y,tt as Oe,u as ke,ur as X,v as Ae,w as je,wr as Z,wt as Me,xr as Ne,xt as Pe,yt as Fe,zn as Ie,zr as Le}from"./index-CQLZMvG4.js";import{t as Re}from"./useSnackbar-D7YOfKok.js";import{a as ze}from"./VSelectionControl-BRJm0rJT.js";import{n as Q,t as Be}from"./VRow-6U6tNTht.js";import{t as $}from"./VSpacer-BMS6wxq1.js";import{t as Ve}from"./VChip-HEBDrtTa.js";import{t as He}from"./VDialog-0lL3B6am.js";import{a as Ue,c as We,d as Ge,f as Ke,i as qe,l as Je,n as Ye,o as Xe,r as Ze,s as Qe,t as $e,u as et}from"./VSelect-CGinFCUo.js";import{a as tt,i as nt,n as rt,o as it,r as at,t as ot}from"./apiError-Dk5fW1qj.js";import{t as st}from"./VDataTableServer-DLH2RRFq.js";import{i as ct}from"./validation-DMwOxx4a.js";import{t as lt}from"./VTextarea-B5gjAXy3.js";import{a as ut,i as dt,n as ft,r as pt,t as mt}from"./StatCardsRow-D1O5ym5m.js";import{t as ht}from"./VAlert-w1fH8_z8.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=I({alwaysFilter:Boolean,autoSelectFirst:{type:[Boolean,String]},clearOnSelect:{type:Boolean,default:!0},delimiters:Array,...Ue({filterKeys:[`title`]}),...Ye({hideNoData:!0,returnObject:!0}),...ie(Se({modelValue:null,role:`combobox`}),[`validationValue`,`dirty`])},`VCombobox`),bt=N()({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}=fe(),l=r(),u=V(!1),f=V(!0),p=V(!1),m=r(),h=r(),g=V(-1),_=!1,{items:v,transformIn:b,transformOut:S}=ee(e),{textColorClasses:w,textColorStyles:ie}=oe(()=>l.value?.color),{InputIcon:E}=xe(e),D=n(e,`modelValue`,[],e=>b(a(e)),t=>{let n=S(t);return e.multiple?n:n[0]??null}),O=ke(e),le=x(()=>e.closableChips&&!O.isReadonly.value&&!O.isDisabled.value),k=C(()=>!!(e.chips||o.chip)),A=C(()=>k.value||!!o.selection),M=V(!e.multiple&&!A.value?D.value[0]?.title??``:``),N=V(null),P=C({get:()=>M.value,set:async t=>{if(M.value=t??``,t===null||t===``&&!e.multiple&&!A.value?D.value=[]:!e.multiple&&!A.value&&(D.value=[d(e,t)],X(()=>h.value?.scrollToIndex(0))),t&&e.multiple&&e.delimiters?.length){let e=Be(t);e.length>1&&($(e),M.value=``)}t||(g.value=-1),f.value=!t}}),ge=C(()=>typeof e.counterValue==`function`?e.counterValue(D.value):typeof e.counterValue==`number`?e.counterValue:e.multiple?D.value.length:P.value.length),{filteredItems:F,getMatches:_e}=Xe(e,v,()=>N.value??(e.alwaysFilter||!f.value?P.value:``)),I=C(()=>e.hideSelected&&N.value===null?F.value.filter(e=>!D.value.some(t=>t.value===e.value)):F.value),L=C(()=>e.hideNoData&&!I.value.length||O.isReadonly.value||O.isDisabled.value),R=n(e,`menu`),z=C({get:()=>R.value,set:e=>{R.value&&!e&&m.value?.ΨopenChildren.size||e&&L.value||(R.value=e)}}),{menuId:H,ariaExpanded:be,ariaControls:Se}=Ze(e,z);Ne(M,e=>{_?X(()=>_=!1):u.value&&!z.value&&(z.value=!0),i(`update:search`,e)}),Ne(D,t=>{!e.multiple&&!A.value&&(M.value=t[0]?.title??``)});let G=C(()=>D.value.map(e=>e.value)),K=C(()=>I.value.find(e=>e.type===`item`&&!e.props.disabled)),q=C(()=>(e.autoSelectFirst===!0||e.autoSelectFirst===`exact`&&P.value===K.value?.title)&&I.value.length>0&&!f.value&&!p.value),Ce=r(),we=r(),Te=r(),Ee=We(Ce,l),De=Je(z,()=>m.value?.contentEl,()=>l.value?.controlRef),{onTabKeydown:Y}=Qe({groups:[{type:`element`,contentRef:we},{type:`list`,contentRef:Ce,displayItemsCount:()=>I.value.length},{type:`element`,contentRef:Te}],onLeave:()=>{z.value=!1,l.value?.focus()}});function Oe(t){_=!0,X(()=>_=!1),e.openOnClear&&(z.value=!0)}function Z(){L.value||(z.value=!0)}function Me(e){L.value||(u.value&&(e.preventDefault(),e.stopPropagation()),z.value=!z.value)}function Pe(e){e.key===`Tab`&&Y(e),Ce.value?.$el.contains(e.target)&&(me(e)||e.key===`Backspace`)&&l.value?.focus()}function Fe(t){if(ye(t)||O.isReadonly.value)return;let n=l.value?.selectionStart,r=D.value.length;if([`Enter`,`ArrowDown`,`ArrowUp`].includes(t.key)&&t.preventDefault(),[`Enter`,`ArrowDown`].includes(t.key)&&(z.value=!0),[`Escape`].includes(t.key)&&(z.value=!1),q.value&&[`Enter`,`Tab`].includes(t.key)&&K.value&&!D.value.some(({value:e})=>e===K.value.value)&&Q(K.value),t.key===`ArrowDown`&&q.value&&Ce.value?.focus(`next`),t.key===`Enter`&&P.value&&(Q(d(e,P.value),!0,!0),A.value&&(M.value=``)),[`Backspace`,`Delete`].includes(t.key)){if(!e.multiple&&A.value&&D.value.length>0&&!P.value)return Q(D.value[0],!1);if(~g.value){t.preventDefault();let e=g.value;Q(D.value[g.value],!1),g.value=e>=r-1?r-2:e}else t.key===`Backspace`&&!P.value&&(g.value=r-1);return}if(e.multiple)if(t.key===`ArrowLeft`){if(g.value<0&&n&&n>0)return;let e=g.value>-1?g.value-1:r-1;D.value[e]?g.value=e:(g.value=-1,l.value?.setSelectionRange(P.value.length,P.value.length))}else if(t.key===`ArrowRight`){if(g.value<0)return;let e=g.value+1;D.value[e]?g.value=e:(g.value=-1,l.value?.setSelectionRange(0,0))}else ~g.value&&me(t)&&(g.value=-1)}function Ie(t){let n=Be(t?.clipboardData?.getData(`Text`)??``);n.length>1&&e.multiple&&(t.preventDefault(),$(n))}function Re(){e.eager&&h.value?.calculateVisibleItems()}function ze(){u.value&&(m.value?.contentEl?._clickOutside?.lastMousedownWasOutside?u.value=!1:l.value?.focus()),f.value=!0,N.value=null}function Q(t,n=!0,r=!1){if(!(!t||t.props.disabled))if(e.multiple){let r=D.value.findIndex(n=>(e.valueComparator||he)(n.value,t.value)),i=n??!~r;if(~r){let e=i?[...D.value,t]:[...D.value];e.splice(r,1),D.value=e}else i&&(D.value=[...D.value,t]);e.clearOnSelect&&(P.value=``)}else{let i=n!==!1;D.value=i?[t]:[],(!f.value||e.alwaysFilter)&&M.value&&(N.value=M.value),M.value=i&&!A.value?t.title:``,X(()=>{z.value=r,f.value=!0})}}function Be(t){let n=[`
`,...e.delimiters??[]].map(c).join(`|`);return t.split(RegExp(`(?:${n})+`))}async function $(t){for(let n of t)n=n.trim(),n&&(Q(d(e,n)),await X())}function He(e){u.value=!0,setTimeout(()=>{p.value=!0})}function Ue(e){if(p.value=!1,!l.value?.$el.contains(e.relatedTarget)){if(De(e))return;u.value=!1}}let Ye=0;function $e(){Ye=performance.now()}function tt(e){let t=e.relatedTarget;((m.value?.contentEl)?.contains(t)||!t&&performance.now()-Ye<10)&&(u.value=!0)}return Ne(u,(t,n)=>{if(!(t||t===n)&&(g.value=-1,z.value=!1,P.value)){if(e.multiple){Q(d(e,P.value));return}if(!A.value)return;D.value.some(({title:e})=>e===P.value)?M.value=``:Q(d(e,P.value))}}),Ne(z,t=>{if(!e.hideSelected&&t&&D.value.length&&f.value){let t=I.value.findIndex(t=>D.value.some(n=>(e.valueComparator||he)(n.value,t.value)));ce&&window.requestAnimationFrame(()=>{t>=0&&h.value?.scrollToIndex(t)})}t&&(N.value=null)}),Ne(v,(e,t)=>{z.value||u.value&&!t.length&&e.length&&(z.value=!0)}),W(()=>{let n=!!(!e.hideNoData||I.value.length||o[`prepend-item`]||o[`append-item`]||o[`no-data`]),r=D.value.length>0,i=J.filterProps(e),a={search:P,filteredItems:F.value};return j(J,U({ref:l},i,{modelValue:P.value,"onUpdate:modelValue":e=>P.value=e,focused:u.value,"onUpdate:focused":e=>u.value=e,validationValue:D.externalValue,counterValue:ge.value,dirty:r,class:[`v-combobox`,{"v-combobox--active-menu":z.value,"v-combobox--chips":!!e.chips,"v-combobox--selection-slot":!!A.value,"v-combobox--selecting-index":g.value>-1,[`v-combobox--${e.multiple?`multiple`:`single`}`]:!0},e.class],style:e.style,readonly:O.isReadonly.value,placeholder:r?void 0:e.placeholder,"onClick:clear":Oe,"onMousedown:control":Z,onKeydown:Fe,onPaste:Ie,onBlur:tt,"aria-expanded":be.value,"aria-controls":Se.value}),{...o,default:({id:r})=>t(de,null,[j(pe,U({id:H.value,ref:m,modelValue:z.value,"onUpdate:modelValue":e=>z.value=e,activator:`parent`,disabled:L.value,eager:e.eager,maxHeight:310,openOnClick:!1,closeOnContentClick:!1,onAfterEnter:Re,onAfterLeave:ze},e.menuProps,{contentClass:[`v-combobox__content`,e.menuProps?.contentClass]}),{default:()=>[j(Ge,{elevation:e.menuElevation,onFocusin:He,onKeydown:Pe,onMousedown:$e},{default:()=>[o[`menu-header`]&&t(`header`,{ref:we},[o[`menu-header`](a)]),n&&j(je,U({key:`combobox-list`,ref:Ce,filterable:!0,selected:G.value,selectStrategy:e.multiple?`independent`:`single-independent`,onMousedown:e=>e.preventDefault(),selectable:!!I.value.length,onFocusout:Ue,tabindex:`-1`,"aria-live":`polite`,"aria-labelledby":`${r.value}-label`,"aria-multiselectable":e.multiple,color:e.itemColor??e.color},Ee,e.listProps),{default:()=>[o[`prepend-item`]?.(),!I.value.length&&!e.hideNoData&&(o[`no-data`]?.()??j(ve,{key:`no-data`,title:s(e.noDataText)},null)),j(et,{ref:h,renderless:!0,items:I.value,itemKey:`value`},{default:({item:n,index:r,itemRef:i})=>{let a=U(n.props,{ref:i,key:n.value,active:q.value&&n===K.value?!0:void 0,onClick:()=>Q(n,null),"aria-posinset":r+1,"aria-setsize":I.value.length});return n.type===`divider`?o.divider?.({props:n.raw,index:r})??j(y,U(n.props,{key:`divider-${r}`}),null):n.type===`subheader`?o.subheader?.({props:n.raw,index:r})??j(re,U(n.props,{key:`subheader-${r}`}),null):o.item?.({item:n.raw,internalItem:n,index:r,props:a})??j(ve,U(a,{role:`option`}),{prepend:({isSelected:r})=>t(de,null,[e.multiple&&!e.hideSelected?j(Ke,{key:n.value,modelValue:r,ripple:!1,tabindex:`-1`,"aria-hidden":!0,onClick:e=>e.preventDefault()},null):void 0,n.props.prependAvatar&&j(te,{image:n.props.prependAvatar},null),n.props.prependIcon&&j(ue,{icon:n.props.prependIcon},null)]),title:()=>f.value?n.title:qe(`v-combobox`,n.title,_e(n)?.title)})}}),o[`append-item`]?.()]}),o[`menu-footer`]&&t(`footer`,{ref:Te},[o[`menu-footer`](a)])]})]}),D.value.map((n,r)=>{function i(e){e.stopPropagation(),e.preventDefault(),Q(n,!1)}let a=U(Ve.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=k.value?!!o.chip:!!o.selection,c=s?ae(k.value?o.chip({item:n.raw,internalItem:n,index:r,props:a}):o.selection({item:n.raw,internalItem:n,index:r})):void 0;if(!(s&&!c))return t(`div`,{key:n.value,class:T([`v-combobox__selection`,r===g.value&&[`v-combobox__selection--selected`,w.value]]),style:Le(r===g.value?ie.value:{})},[k.value?o.chip?j(se,{key:`chip-defaults`,defaults:{VChip:{closable:le.value,size:`small`,text:n.title}}},{default:()=>[c]}):j(Ve,U({key:`chip`,closable:le.value,size:`small`,text:n.title,disabled:n.props.disabled},a),null):c??t(`span`,{class:`v-combobox__selection-text`},[n.title,e.multiple&&r<D.value.length-1&&t(`span`,{class:`v-combobox__selection-comma`},[B(`,`)])])])})]),"append-inner":(...n)=>t(de,null,[o[`append-inner`]?.(...n),(!e.hideNoData||e.items.length)&&e.menuIcon?j(ue,{class:`v-combobox__menu-icon`,color:l.value?.fieldIconColor,icon:e.menuIcon,onMousedown:Me,onClick:ne,"aria-hidden":!0,tabindex:`-1`},null):void 0,e.appendInnerIcon&&j(E,{key:`append-icon`,name:`appendInner`,color:n[0].iconColor.value},null)])})}),Ae({isFocused:u,isPristine:f,menu:z,search:P,selectionIndex:g,filteredItems:F,select:Q},l)}}),xt=Symbol.for(`vuetify:v-expansion-panel`),St=I({...ge(),...D()},`VExpansionPanelText`),Ct=N()({name:`VExpansionPanelText`,props:St(),setup(e,{slots:n}){let r=P(xt);if(!r)throw Error(`[Vuetify] v-expansion-panel-text needs to be placed inside v-expansion-panel`);let{hasContent:i,onAfterLeave:a}=s(e,r.isSelected);return W(()=>j(f,{onAfterLeave:a},{default:()=>[Z(t(`div`,{class:T([`v-expansion-panel-text`,e.class]),style:Le(e.style)},[n.default&&i.value&&t(`div`,{class:`v-expansion-panel-text__wrapper`},[n.default?.()])]),[[Te,r.isSelected.value]])]})),{}}}),wt=I({color:String,expandIcon:{type:De,default:`$expand`},collapseIcon:{type:De,default:`$collapse`},hideActions:Boolean,focusable:Boolean,static:Boolean,ripple:{type:[Boolean,Object],default:!1},readonly:Boolean,...ge(),...u()},`VExpansionPanelTitle`),Tt=N()({name:`VExpansionPanelTitle`,directives:{vRipple:i},props:wt(),setup(e,{slots:n}){let r=P(xt);if(!r)throw Error(`[Vuetify] v-expansion-panel-title needs to be placed inside v-expansion-panel`);let{backgroundColorClasses:a,backgroundColorStyles:o}=Pe(()=>e.color),{dimensionStyles:s}=Me(e),c=C(()=>({collapseIcon:e.collapseIcon,disabled:r.disabled.value,expanded:r.isSelected.value,expandIcon:e.expandIcon,readonly:e.readonly})),l=x(()=>r.isSelected.value?e.collapseIcon:e.expandIcon);return W(()=>Z(t(`button`,{class:T([`v-expansion-panel-title`,{"v-expansion-panel-title--active":r.isSelected.value,"v-expansion-panel-title--focusable":e.focusable,"v-expansion-panel-title--static":e.static},a.value,e.class]),style:Le([o.value,s.value,e.style]),type:`button`,tabindex:r.disabled.value?-1:void 0,disabled:r.disabled.value,"aria-expanded":r.isSelected.value,onClick:e.readonly?void 0:r.toggle},[t(`span`,{class:`v-expansion-panel-title__overlay`},null),n.default?.(c.value),!e.hideActions&&j(se,{defaults:{VIcon:{icon:l.value}}},{default:()=>[t(`span`,{class:`v-expansion-panel-title__icon`},[n.actions?.(c.value)??j(ue,null,null)])]})]),[[i,e.ripple]])),{}}}),Et=I({title:String,text:String,bgColor:String,...L(),..._e(),...Fe(),...H(),...wt(),...St()},`VExpansionPanel`),Dt=N()({name:`VExpansionPanel`,props:Et(),emits:{"group:selected":e=>!0},setup(e,{slots:n}){let r=Ee(e,xt),{backgroundColorClasses:i,backgroundColorStyles:a}=Pe(()=>e.bgColor),{elevationClasses:o}=we(e),{roundedClasses:s}=M(e),c=x(()=>r?.disabled.value||e.disabled),l=C(()=>r.group.items.value.reduce((e,t,n)=>(r.group.selected.value.includes(t.id)&&e.push(n),e),[])),u=C(()=>{let e=r.group.items.value.findIndex(e=>e.id===r.id);return!r.isSelected.value&&l.value.some(t=>t-e===1)}),ee=C(()=>{let e=r.group.items.value.findIndex(e=>e.id===r.id);return!r.isSelected.value&&l.value.some(t=>t-e===-1)});return R(xt,r),W(()=>{let l=!!(n.text||e.text),d=!!(n.title||e.title),f=Tt.filterProps(e),p=Ct.filterProps(e);return j(e.tag,{class:T([`v-expansion-panel`,{"v-expansion-panel--active":r.isSelected.value,"v-expansion-panel--before-active":u.value,"v-expansion-panel--after-active":ee.value,"v-expansion-panel--disabled":c.value},s.value,i.value,e.class]),style:Le([a.value,e.style])},{default:()=>[t(`div`,{class:T([`v-expansion-panel__shadow`,...o.value])},null),j(se,{defaults:{VExpansionPanelTitle:{...f},VExpansionPanelText:{...p}}},{default:()=>[d&&j(Tt,{key:`title`},{default:()=>[n.title?n.title():e.title]}),l&&j(Ct,{key:`text`},{default:()=>[n.text?n.text():e.text]}),n.default?.()]})]})}),{groupItem:r}}}),Ot=[`default`,`accordion`,`inset`,`popout`],kt=I({flat:Boolean,...Oe(),...Ie(Et(),[`bgColor`,`collapseIcon`,`color`,`eager`,`elevation`,`expandIcon`,`focusable`,`hideActions`,`readonly`,`ripple`,`static`]),...Fe(),...le(),...ge(),...H(),variant:{type:String,default:`default`,validator:e=>Ot.includes(e)}},`VExpansionPanels`),At=N()({name:`VExpansionPanels`,props:kt(),emits:{"update:modelValue":e=>!0},setup(e,{slots:t}){let{next:n,prev:r}=K(e,xt),{themeClasses:i}=m(e),{roundedClasses:a}=M(e),o=x(()=>e.variant&&`v-expansion-panels--variant-${e.variant}`);return be({VExpansionPanel:{bgColor:x(()=>e.bgColor),collapseIcon:x(()=>e.collapseIcon),color:x(()=>e.color),eager:x(()=>e.eager),elevation:x(()=>e.elevation),expandIcon:x(()=>e.expandIcon),focusable:x(()=>e.focusable),hideActions:x(()=>e.hideActions),readonly:x(()=>e.readonly),ripple:x(()=>e.ripple),static:x(()=>e.static)}}),W(()=>j(e.tag,{class:T([`v-expansion-panels`,{"v-expansion-panels--flat":e.flat,"v-expansion-panels--tile":e.tile},i.value,a.value,o.value,e.class]),style:Le(e.style)},{default:()=>[t.default?.({prev:r,next:n})]})),{next:n,prev:r}}}),jt=q({__name:`ServerFormDialog`,props:{modelValue:{type:Boolean},form:{},isEditing:{type:Boolean},saving:{type:Boolean},lookupsLoading:{type:Boolean},passwordPresets:{},sshKeyPresets:{},categoryOptions:{},platforms:{},nodes:{},editHints:{},filesElevationItems:{}},emits:[`update:modelValue`,`save`],setup(n,{emit:r}){let i=n,a=r,s=C(()=>i.form.preset_id||i.isEditing?[]:[ct(`SSH 密码或选择密码预设`)]),c=C(()=>i.form.ssh_key_preset_id||i.isEditing?[]:[ct(`私钥或选择 SSH 密钥预设`)]);return(r,i)=>(z(),F(He,{"model-value":n.modelValue,"max-width":`720`,scrollable:``,persistent:``,"onUpdate:modelValue":i[18]||=e=>a(`update:modelValue`,e)},{default:l(()=>[j(b,{border:``},{default:l(()=>[j(p,{class:`d-flex align-center`},{default:l(()=>[B(o(n.isEditing?`编辑服务器`:`添加服务器`)+` `,1),j($),j(w,{icon:`mdi-close`,variant:`text`,size:`small`,disabled:n.saving,onClick:i[0]||=e=>a(`update:modelValue`,!1)},null,8,[`disabled`])]),_:1}),j(y),j(S,{class:`pt-4`},{default:l(()=>[n.lookupsLoading?(z(),F(v,{key:0,indeterminate:``,color:`primary`,class:`mb-3`})):Y(``,!0),i[21]||=t(`div`,{class:`text-subtitle-2 text-medium-emphasis mb-2`},`基本信息`,-1),j(Be,{dense:``},{default:l(()=>[j(Q,{cols:`12`,sm:`6`},{default:l(()=>[j(J,{modelValue:n.form.name,"onUpdate:modelValue":i[1]||=e=>n.form.name=e,label:`名称`,variant:`outlined`,density:`compact`,rules:[_(ct)(`服务器名称`)]},null,8,[`modelValue`,`rules`])]),_:1}),j(Q,{cols:`12`,sm:`6`},{default:l(()=>[j(J,{modelValue:n.form.domain,"onUpdate:modelValue":i[2]||=e=>n.form.domain=e,label:`域名 / IP`,variant:`outlined`,density:`compact`,placeholder:`例:192.168.1.10`,rules:[_(ct)(`域名或 IP`)]},null,8,[`modelValue`,`rules`])]),_:1}),j(Q,{cols:`6`,sm:`4`},{default:l(()=>[j(J,{modelValue:n.form.port,"onUpdate:modelValue":i[3]||=e=>n.form.port=e,modelModifiers:{number:!0},label:`SSH 端口`,type:`number`,variant:`outlined`,density:`compact`},null,8,[`modelValue`])]),_:1}),j(Q,{cols:`6`,sm:`8`},{default:l(()=>[j(J,{modelValue:n.form.username,"onUpdate:modelValue":i[4]||=e=>n.form.username=e,label:`SSH 用户名`,variant:`outlined`,density:`compact`,placeholder:`root`,rules:[_(ct)(`SSH 用户名`)]},null,8,[`modelValue`,`rules`])]),_:1})]),_:1}),j(y,{class:`my-4`}),i[22]||=t(`div`,{class:`text-subtitle-2 text-medium-emphasis mb-2`},`认证方式`,-1),j(e,{modelValue:n.form.auth_method,"onUpdate:modelValue":i[5]||=e=>n.form.auth_method=e,mandatory:``,density:`compact`,variant:`outlined`,class:`mb-3`},{default:l(()=>[j(w,{value:`password`,size:`small`},{default:l(()=>[...i[19]||=[B(`密码`,-1)]]),_:1}),j(w,{value:`key`,size:`small`},{default:l(()=>[...i[20]||=[B(`SSH 密钥`,-1)]]),_:1})]),_:1},8,[`modelValue`]),n.form.auth_method===`password`?(z(),G(de,{key:1},[j($e,{modelValue:n.form.preset_id,"onUpdate:modelValue":i[6]||=e=>n.form.preset_id=e,items:n.passwordPresets,"item-title":`name`,"item-value":`id`,label:`密码预设(可选)`,variant:`outlined`,density:`compact`,clearable:``,class:`mb-2`,hint:`选择后由服务端解密填入,无需再填密码框`,"persistent-hint":``},null,8,[`modelValue`,`items`]),n.form.preset_id?Y(``,!0):(z(),F(J,{key:0,modelValue:n.form.password,"onUpdate:modelValue":i[7]||=e=>n.form.password=e,label:`SSH 密码`,variant:`outlined`,density:`compact`,type:`password`,placeholder:n.isEditing&&n.editHints.password_set?`留空表示不修改`:`安装 Agent 需可 SSH`,rules:s.value},null,8,[`modelValue`,`placeholder`,`rules`]))],64)):(z(),G(de,{key:2},[j($e,{modelValue:n.form.ssh_key_preset_id,"onUpdate:modelValue":i[8]||=e=>n.form.ssh_key_preset_id=e,items:n.sshKeyPresets,"item-title":`name`,"item-value":`id`,label:`SSH 密钥预设(可选)`,variant:`outlined`,density:`compact`,clearable:``,class:`mb-2`,hint:`选择后由服务端解密私钥,无需再粘贴`,"persistent-hint":``},null,8,[`modelValue`,`items`]),j(J,{modelValue:n.form.ssh_key_path,"onUpdate:modelValue":i[9]||=e=>n.form.ssh_key_path=e,label:`密钥路径(可选)`,variant:`outlined`,density:`compact`,placeholder:`~/.ssh/id_rsa`,class:`mb-2`},null,8,[`modelValue`]),n.form.ssh_key_preset_id?Y(``,!0):(z(),F(lt,{key:0,modelValue:n.form.ssh_key_private,"onUpdate:modelValue":i[10]||=e=>n.form.ssh_key_private=e,label:`私钥 PEM`,variant:`outlined`,density:`compact`,rows:`4`,"auto-grow":``,placeholder:n.isEditing&&n.editHints.ssh_key_private_set?`留空表示不修改私钥`:`粘贴 -----BEGIN ... PRIVATE KEY-----`,rules:c.value},null,8,[`modelValue`,`placeholder`,`rules`]))],64)),j(y,{class:`my-4`}),i[23]||=t(`div`,{class:`text-subtitle-2 text-medium-emphasis mb-2`},`部署`,-1),j(J,{modelValue:n.form.target_path,"onUpdate:modelValue":i[11]||=e=>n.form.target_path=e,label:`目标路径`,variant:`outlined`,density:`compact`,placeholder:`/www/wwwroot`,hint:`文件同步与推送的根目录,须为绝对路径`,"persistent-hint":``,class:`mb-2`,rules:[_(ct)(`目标路径`)]},null,8,[`modelValue`,`rules`]),j(bt,{modelValue:n.form.category,"onUpdate:modelValue":i[12]||=e=>n.form.category=e,items:n.categoryOptions,label:`分类`,variant:`outlined`,density:`compact`,clearable:``,hint:`可从已有分类选择或输入新分类`,"persistent-hint":``},null,8,[`modelValue`,`items`]),j(At,{variant:`accordion`,class:`mt-4`},{default:l(()=>[j(Dt,{title:`高级选项`},{default:l(()=>[j(Ct,null,{default:l(()=>[j($e,{modelValue:n.form.platform_id,"onUpdate:modelValue":i[13]||=e=>n.form.platform_id=e,items:n.platforms,"item-title":`name`,"item-value":`id`,label:`平台`,variant:`outlined`,density:`compact`,clearable:``,class:`mb-2`},null,8,[`modelValue`,`items`]),j($e,{modelValue:n.form.node_id,"onUpdate:modelValue":i[14]||=e=>n.form.node_id=e,items:n.nodes,"item-title":`name`,"item-value":`id`,label:`节点`,variant:`outlined`,density:`compact`,clearable:``,class:`mb-2`},null,8,[`modelValue`,`items`]),j($e,{modelValue:n.form.files_elevation,"onUpdate:modelValue":i[15]||=e=>n.form.files_elevation=e,items:n.filesElevationItems,"item-title":`title`,"item-value":`value`,label:`文件管理提权`,variant:`outlined`,density:`compact`,hint:`非 root 用户需目标机配置免密 sudo`,"persistent-hint":``},null,8,[`modelValue`,`items`])]),_:1})]),_:1})]),_:1})]),_:1}),j(y),j(g,{class:`pa-4`},{default:l(()=>[j($),j(w,{variant:`text`,disabled:n.saving,onClick:i[16]||=e=>a(`update:modelValue`,!1)},{default:l(()=>[...i[24]||=[B(`取消`,-1)]]),_:1},8,[`disabled`]),j(w,{color:`primary`,variant:`flat`,loading:n.saving,onClick:i[17]||=e=>a(`save`)},{default:l(()=>[...i[25]||=[B(`保存`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`model-value`]))}});function Mt(){return{name:``,domain:``,port:22,username:`root`,auth_method:`password`,preset_id:null,password:``,ssh_key_preset_id:null,ssh_key_path:``,ssh_key_private:``,target_path:`/www/wwwroot`,category:``,platform_id:null,node_id:null,files_elevation:`auto_sudo`}}function Nt(e){return e===`uncategorized`?``:e}function Pt(e){let t=e.auth_method===`key`?`key`:`password`;return{name:e.name,domain:e.domain||``,port:e.port??22,username:e.username||`root`,auth_method:t,preset_id:e.preset_id,password:``,ssh_key_preset_id:e.ssh_key_preset_id,ssh_key_path:e.ssh_key_path||``,ssh_key_private:``,target_path:e.target_path||`/www/wwwroot`,category:e.category||``,platform_id:e.platform_id,node_id:e.node_id,files_elevation:e.files_elevation||`auto_sudo`}}function Ft(e){let t=Re(),n=r(!1),i=r(null),a=r(!1),o=r(Mt()),s=r({password_set:!1,ssh_key_private_set:!1}),c=r([]),l=r([]),u=r([]),ee=r([]),d=r([]),f=r(!1),p=C(()=>i.value!=null),m=[{title:`自动(权限失败时 sudo`,value:`auto_sudo`},{title:`关闭 sudo`,value:`off`},{title:`始终 sudo(排障)`,value:`always_sudo`}];async function h(){f.value=!0;try{let[e,t,n,r]=await Promise.all([E.get(`/servers/categories`),E.getList(`/presets/`,{per_page:500}),E.getList(`/ssh-key-presets/`,{per_page:500}),E.get(`/assets/nodes`)]),i=new Set;for(let t of e.categories||[]){let e=Nt(t.name);e&&i.add(e)}u.value=[...i].sort((e,t)=>e.localeCompare(t,`zh`)),ee.value=(e.platforms||[]).map(e=>({id:e.id,name:e.name})),c.value=t.items||[],l.value=n.items||[],d.value=Array.isArray(r)?r:[]}catch{t(`加载表单选项失败`,`error`)}finally{f.value=!1}}async function g(){i.value=null,o.value=Mt(),s.value={password_set:!1,ssh_key_private_set:!1},n.value=!0,await h()}async function _(e){i.value=e.id,o.value=Pt(e),s.value={password_set:!!e.password_set,ssh_key_private_set:!!(e.ssh_key_private_set||e.ssh_key_configured)},n.value=!0,await h()}function v(){n.value=!1,i.value=null,o.value=Mt(),s.value={password_set:!1,ssh_key_private_set:!1}}function te(){let e=o.value;if(!e.name.trim())return`请填写服务器名称`;if(!e.domain.trim())return`请填写域名或 IP`;if(!e.username.trim())return`请填写 SSH 用户名`;let t=Number(e.port);if(!Number.isFinite(t)||t<1||t>65535)return`SSH 端口无效`;let n=e.target_path.trim();if(!n)return`请填写目标路径(部署根目录)`;if(!n.startsWith(`/`))return`目标路径须为绝对路径(以 / 开头)`;if(e.auth_method===`password`){if(!p.value&&!e.preset_id&&!e.password.trim())return`请选择密码预设或填写 SSH 密码(安装 Agent 需要可 SSH)`}else if(!p.value&&!e.ssh_key_preset_id&&!e.ssh_key_private.trim())return`请选择 SSH 密钥预设或粘贴私钥`;return null}function ne(){let e=o.value,t={name:e.name.trim(),domain:e.domain.trim(),port:Number(e.port),username:e.username.trim()||`root`,auth_method:e.auth_method,target_path:e.target_path.trim(),category:e.category.trim()||void 0,platform_id:e.platform_id??void 0,node_id:e.node_id??void 0,files_elevation:e.files_elevation,agent_port:8601};return e.auth_method===`password`?(e.preset_id!=null&&(t.preset_id=e.preset_id),e.password.trim()&&(t.password=e.password.trim()),p.value||!e.preset_id&&e.password.trim()):(e.ssh_key_preset_id!=null&&(t.ssh_key_preset_id=e.ssh_key_preset_id),e.ssh_key_path.trim()&&(t.ssh_key_path=e.ssh_key_path.trim()),e.ssh_key_private.trim()&&(t.ssh_key_private=e.ssh_key_private.trim())),t}async function y(){let n=te();if(n){t(n,`error`);return}a.value=!0;try{let n=ne();p.value&&i.value!=null?await E.put(`/servers/${i.value}`,n):await E.post(`/servers/`,n),v(),e(),t(`保存成功`)}catch(e){t(ot(e,`保存失败`),`error`)}finally{a.value=!1}}return{visible:n,editingId:i,isEditing:p,saving:a,form:o,editHints:s,passwordPresets:c,sshKeyPresets:l,categoryOptions:u,platforms:ee,nodes:d,lookupsLoading:f,filesElevationItems:m,openAdd:g,openEdit:_,close:v,save:y}}var It={class:`text-body-2 mr-4`},Lt={class:`font-weight-medium`},Rt={class:`text-medium-emphasis`},zt={key:1,class:`text-medium-emphasis`},Bt={class:`text-medium-emphasis`},Vt={class:`text-caption text-medium-emphasis`},Ht={class:`d-flex ga-1`},Ut={class:`text-h6`},Wt={class:`text-h6`},Gt={class:`text-h6`},Kt={class:`text-h6`},qt={key:0,class:`text-medium-emphasis text-center py-4`},Jt=q({__name:`ServersPage`,setup(e){let n=Re(),i=h(),{servers:a,loading:s,page:c,itemsPerPage:u,total:ee,search:d,loadServers:m,onSearch:v,onPageChange:te,onItemsPerPageChange:ne}=ut();async function x(){try{await m()}catch{n(`加载服务器列表失败`,`error`)}}let re=r(!1),ie=r(!1),T=r(null),{visible:D,form:ae,isEditing:oe,saving:se,lookupsLoading:ce,passwordPresets:le,sshKeyPresets:fe,categoryOptions:pe,platforms:me,nodes:he,editHints:M,filesElevationItems:N,openAdd:P,openEdit:ge,close:_e,save:I}=Ft(()=>{x(),xe()});Ne(D,(e,t)=>{t&&!e&&_e()});let L=r([]),R=C(()=>new Set(_t(L.value))),V=r(null),H=r(`info`),ye=r([]),be=[{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`}],U=r([{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`}]);async function xe(){try{let e=await E.get(`/servers/stats`);U.value[0].title=String(e.total),U.value[1].title=String(e.online),U.value[2].title=String(e.offline),U.value[3].title=String(e.alerts??0)}catch{}}function Se(e){i.push({path:`/terminal`,query:{server_id:String(e.id)}})}function W(e){i.push({path:`/files`,query:{server_id:String(e.id)}})}let K=r(!1);async function q(){let e=_t(L.value);if(e.length){n(`正在检查 ${e.length} 台服务器...`);try{await E.post(`/servers/check`,{server_ids:e}),n(`健康检查完成`),x()}catch(e){n(ot(e,`检查失败`),`error`)}}}async function we(){if(confirm(`确定删除选中的 ${R.value.size} 台服务器?`)){for(let e of R.value)try{await E.delete(`/servers/${e}`)}catch{}L.value=[],n(`批量删除完成`),x(),xe()}}async function Te(){let e=_t(L.value);if(e.length){K.value=!0;try{n(`安装完成: ${vt((await E.post(`/servers/batch/install-agent`,{server_ids:e})).results)}/${e.length} 成功`),x()}catch(e){n(ot(e,`安装失败`),`error`)}finally{K.value=!1}}}async function Ee(){let e=_t(L.value);if(e.length){K.value=!0;try{n(`升级完成: ${vt((await E.post(`/servers/batch/upgrade-agent`,{server_ids:e})).results)}/${e.length} 成功`),x()}catch(e){n(ot(e,`升级失败`),`error`)}finally{K.value=!1}}}async function De(){let e=_t(L.value);if(e.length&&confirm(`确定卸载选中的 ${e.length} 台服务器的 Agent`)){K.value=!0;try{n(`卸载完成: ${vt((await E.post(`/servers/batch/uninstall-agent`,{server_ids:e})).results)}/${e.length} 成功`),x()}catch(e){n(ot(e,`卸载失败`),`error`)}finally{K.value=!1}}}async function Oe(){try{let e=await E.getList(`/servers/`,{per_page:5e3}),t=[`ID`,`名称`,`地址`,`端口`,`用户名`,`分类`,`状态`,`Agent版本`,`最后心跳`],r=(e.items||[]).map(e=>[e.id,e.name,e.domain,e.port,e.username,e.category||``,e.status,e.agent_version||``,e.last_heartbeat||``]),i=``+[t.join(`,`),...r.map(e=>e.map(e=>`"${String(e).replace(/"/g,`""`)}"`).join(`,`))].join(`
`),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 ke=r(!1),X=r([]),Ae=r(!1),Z=r(null);async function Me(){if(X.value?.length){Ae.value=!0,Z.value=null;try{let e=new FormData;e.append(`file`,X.value[0]),Z.value=await E.upload(`/servers/import`,e),n(`导入完成`),x()}catch(e){n(e instanceof Error?e.message:`导入失败`,`error`)}finally{Ae.value=!1}}}async function Pe(e){V.value=e,H.value=`info`;try{ye.value=(await E.get(`/servers/${e.id}/logs`,{limit:20})).items||[]}catch{ye.value=[]}}function Fe(e){ge(e)}function Ie(e){T.value=e,re.value=!0}async function Le(){if(T.value){ie.value=!0;try{await E.delete(`/servers/${T.value.id}`),re.value=!1,x(),xe(),n(`已删除`)}catch(e){n(e.message||`删除失败`,`error`)}finally{ie.value=!1}}}return Ce(()=>{xe(),x()}),(e,n)=>(z(),F(ze,{fluid:``,class:`pa-4 pa-md-6`},{default:l(()=>[j(mt,{items:U.value},null,8,[`items`]),j(b,{elevation:`0`,rounded:`lg`,class:`my-5`,border:``},{default:l(()=>[j(p,{class:`d-flex align-center`},{default:l(()=>[n[17]||=B(` 服务器列表 `,-1),j($),j(J,{modelValue:_(d),"onUpdate:modelValue":[n[0]||=e=>O(d)?d.value=e:null,_(v)],"prepend-inner-icon":`mdi-magnify`,label:`搜索...`,density:`compact`,"hide-details":``,rounded:``,style:{"max-width":`240px`},variant:`outlined`},null,8,[`modelValue`,`onUpdate:modelValue`]),j(w,{color:`primary`,variant:`flat`,class:`ml-3`,"prepend-icon":`mdi-plus`,size:`small`,onClick:_(P)},{default:l(()=>[...n[14]||=[B(` 添加 `,-1)]]),_:1},8,[`onClick`]),j(w,{variant:`tonal`,class:`ml-2`,"prepend-icon":`mdi-download`,size:`small`,onClick:Oe},{default:l(()=>[...n[15]||=[B(` 导出CSV `,-1)]]),_:1}),j(w,{variant:`tonal`,class:`ml-2`,"prepend-icon":`mdi-file-import`,size:`small`,onClick:n[1]||=e=>ke.value=!0},{default:l(()=>[...n[16]||=[B(` 导入 `,-1)]]),_:1})]),_:1}),R.value.size>0?(z(),F(b,{key:0,class:`mx-4 mb-2`,color:`primary`,variant:`tonal`,rounded:`lg`},{default:l(()=>[j(S,{class:`d-flex align-center py-2`},{default:l(()=>[t(`span`,It,`已选择 `+o(R.value.size)+` 台服务器`,1),j($),j(w,{size:`small`,variant:`text`,onClick:q},{default:l(()=>[...n[18]||=[B(`健康检查`,-1)]]),_:1}),j(w,{size:`small`,variant:`text`,onClick:Te,loading:K.value},{default:l(()=>[...n[19]||=[B(`安装Agent`,-1)]]),_:1},8,[`loading`]),j(w,{size:`small`,variant:`text`,onClick:Ee,loading:K.value},{default:l(()=>[...n[20]||=[B(`升级Agent`,-1)]]),_:1},8,[`loading`]),j(w,{size:`small`,variant:`text`,color:`error`,onClick:De,loading:K.value},{default:l(()=>[...n[21]||=[B(`卸载Agent`,-1)]]),_:1},8,[`loading`]),j(w,{size:`small`,variant:`text`,color:`error`,onClick:we},{default:l(()=>[...n[22]||=[B(`批量删除`,-1)]]),_:1}),j(w,{size:`small`,variant:`text`,onClick:n[2]||=e=>L.value=[]},{default:l(()=>[...n[23]||=[B(`取消选择`,-1)]]),_:1})]),_:1})]),_:1})):Y(``,!0),j(st,{items:_(a),headers:be,"items-length":_(ee),loading:_(s),page:_(c),"items-per-page":_(u),hover:``,density:`comfortable`,"item-value":`id`,"show-select":``,modelValue:L.value,"onUpdate:modelValue":n[3]||=e=>L.value=e,"onUpdate:page":_(te),"onUpdate:itemsPerPage":_(ne),"onClick:row":n[4]||=(e,{item:t})=>Pe(t)},{"item.status":l(({item:e})=>[j(Ve,{color:_(pt)(e.status),size:`x-small`,variant:`tonal`,label:``,border:`sm`},{default:l(()=>[B(o(_(dt)(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?(z(),F(Ve,{key:0,color:`primary`,variant:`tonal`,size:`small`,label:``},{default:l(()=>[B(o(e.category),1)]),_:2},1024)):(z(),G(`span`,zt,`—`))]),"item.agent":l(({item:e})=>[t(`span`,Bt,o(e.agent_version||`—`),1)]),"item.heartbeat":l(({item:e})=>[t(`span`,Vt,o(_(ft)(e.last_heartbeat)),1)]),"item.actions":l(({item:e})=>[t(`div`,Ht,[j(w,{variant:`text`,size:`x-small`,color:`primary`,density:`compact`,onClick:k(t=>Se(e),[`stop`])},{default:l(()=>[...n[24]||=[B(`终端`,-1)]]),_:1},8,[`onClick`]),j(w,{variant:`text`,size:`x-small`,density:`compact`,onClick:k(t=>W(e),[`stop`])},{default:l(()=>[...n[25]||=[B(`文件`,-1)]]),_:1},8,[`onClick`]),j(w,{variant:`text`,size:`x-small`,density:`compact`,onClick:k(t=>Fe(e),[`stop`])},{default:l(()=>[...n[26]||=[B(`编辑`,-1)]]),_:1},8,[`onClick`]),j(w,{variant:`text`,size:`x-small`,color:`error`,density:`compact`,onClick:k(t=>Ie(e),[`stop`])},{default:l(()=>[...n[27]||=[B(`删除`,-1)]]),_:1},8,[`onClick`])])]),"no-data":l(()=>[...n[28]||=[t(`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}),j(f,null,{default:l(()=>[V.value?(z(),F(b,{key:0,class:`mt-4`,elevation:`0`,border:``,rounded:`lg`},{default:l(()=>[j(p,{class:`d-flex align-center`},{default:l(()=>[j(ue,{class:`mr-2`},{default:l(()=>[...n[29]||=[B(`mdi-information-outline`,-1)]]),_:1}),B(` `+o(V.value.name)+` `,1),j(Ve,{color:_(pt)(V.value.status),size:`small`,variant:`tonal`,label:``,class:`ml-2`},{default:l(()=>[B(o(_(dt)(V.value.status)),1)]),_:1},8,[`color`]),j($),j(w,{icon:`mdi-close`,size:`small`,variant:`text`,onClick:n[5]||=e=>V.value=null})]),_:1}),j(y),j(at,{modelValue:H.value,"onUpdate:modelValue":n[6]||=e=>H.value=e,density:`compact`},{default:l(()=>[j(it,{value:`info`},{default:l(()=>[...n[30]||=[B(`系统信息`,-1)]]),_:1}),j(it,{value:`logs`},{default:l(()=>[...n[31]||=[B(`同步日志`,-1)]]),_:1})]),_:1},8,[`modelValue`]),j(tt,{modelValue:H.value,"onUpdate:modelValue":n[7]||=e=>H.value=e},{default:l(()=>[j(nt,{value:`info`},{default:l(()=>[j(S,null,{default:l(()=>[j(Be,{dense:``},{default:l(()=>[j(Q,{cols:`6`,md:`3`},{default:l(()=>[n[32]||=t(`div`,{class:`text-caption text-medium-emphasis`},`CPU`,-1),t(`div`,Ut,o(V.value.system_info?.cpu_usage??`—`)+`%`,1)]),_:1}),j(Q,{cols:`6`,md:`3`},{default:l(()=>[n[33]||=t(`div`,{class:`text-caption text-medium-emphasis`},`内存`,-1),t(`div`,Wt,o(V.value.system_info?.mem_usage??`—`)+`%`,1)]),_:1}),j(Q,{cols:`6`,md:`3`},{default:l(()=>[n[34]||=t(`div`,{class:`text-caption text-medium-emphasis`},`磁盘`,-1),t(`div`,Gt,o(V.value.system_info?.disk_usage??`—`)+`%`,1)]),_:1}),j(Q,{cols:`6`,md:`3`},{default:l(()=>[n[35]||=t(`div`,{class:`text-caption text-medium-emphasis`},`Agent`,-1),t(`div`,Kt,o(V.value.agent_version||`未安装`),1)]),_:1})]),_:1})]),_:1})]),_:1}),j(nt,{value:`logs`},{default:l(()=>[j(S,null,{default:l(()=>[ye.value.length===0?(z(),G(`div`,qt,`暂无同步日志`)):(z(),F(je,{key:1,density:`compact`},{default:l(()=>[(z(!0),G(de,null,A(ye.value,e=>(z(),F(ve,{key:e.id,subtitle:e.created_at,title:`${e.source_path}${e.target_path}`},{append:l(()=>[j(Ve,{size:`x-small`,color:e.status===`success`?`green`:`red`,variant:`tonal`,label:``},{default:l(()=>[B(o(e.status),1)]),_:2},1032,[`color`])]),_:2},1032,[`subtitle`,`title`]))),128))]),_:1}))]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1})):Y(``,!0)]),_:1}),j(jt,{modelValue:_(D),"onUpdate:modelValue":n[8]||=e=>O(D)?D.value=e:null,form:_(ae),"is-editing":_(oe),saving:_(se),"lookups-loading":_(ce),"password-presets":_(le),"ssh-key-presets":_(fe),"category-options":_(pe),platforms:_(me),nodes:_(he),"edit-hints":_(M),"files-elevation-items":_(N),onSave:_(I)},null,8,[`modelValue`,`form`,`is-editing`,`saving`,`lookups-loading`,`password-presets`,`ssh-key-presets`,`category-options`,`platforms`,`nodes`,`edit-hints`,`files-elevation-items`,`onSave`]),j(He,{modelValue:re.value,"onUpdate:modelValue":n[10]||=e=>re.value=e,"max-width":`400`},{default:l(()=>[j(b,{border:``},{default:l(()=>[j(p,null,{default:l(()=>[...n[36]||=[B(`确认删除`,-1)]]),_:1}),j(S,null,{default:l(()=>[n[37]||=B(`确定要删除服务器 `,-1),t(`strong`,null,o(T.value?.name),1),n[38]||=B(` 吗?`,-1)]),_:1}),j(g,null,{default:l(()=>[j($),j(w,{variant:`text`,onClick:n[9]||=e=>re.value=!1},{default:l(()=>[...n[39]||=[B(`取消`,-1)]]),_:1}),j(w,{color:`error`,variant:`flat`,onClick:Le,loading:ie.value},{default:l(()=>[...n[40]||=[B(`删除`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),j(He,{modelValue:ke.value,"onUpdate:modelValue":n[13]||=e=>ke.value=e,"max-width":`500`},{default:l(()=>[j(b,{border:``},{default:l(()=>[j(p,null,{default:l(()=>[...n[41]||=[B(`导入服务器`,-1)]]),_:1}),j(S,null,{default:l(()=>[n[42]||=t(`div`,{class:`text-body-2 text-medium-emphasis mb-3`},[B(` 上传 CSV 文件批量导入服务器。 `),t(`a`,{href:`/app/servers_import_template.csv`,download:``,class:`text-primary`},`下载模板`)],-1),j(rt,{modelValue:X.value,"onUpdate:modelValue":n[11]||=e=>X.value=e,label:`选择 CSV 文件`,variant:`outlined`,density:`compact`,accept:`.csv`,"show-size":``},null,8,[`modelValue`]),Z.value?(z(),F(ht,{key:0,type:Z.value.failed>0?`warning`:`success`,density:`compact`,variant:`tonal`,class:`mt-3`},{default:l(()=>[B(` 成功 `+o(Z.value.created)+`,跳过 `+o(Z.value.skipped)+`,失败 `+o(Z.value.failed),1)]),_:1},8,[`type`])):Y(``,!0)]),_:1}),j(g,null,{default:l(()=>[j($),j(w,{variant:`text`,onClick:n[12]||=e=>ke.value=!1},{default:l(()=>[...n[43]||=[B(`关闭`,-1)]]),_:1}),j(w,{color:`primary`,variant:`flat`,onClick:Me,loading:Ae.value,disabled:!X.value?.length},{default:l(()=>[...n[44]||=[B(`开始导入`,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}});export{Jt as default};