Files
Nexus/web/app/assets/ScriptsPage-CXESrdqe.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

1 line
14 KiB
JavaScript

import{t as e,x as t}from"./VDataTable-BmrhY9Tx.js";import{Cr as n,F as r,Gn as ee,Jn as i,Kn as te,L as a,Lt as o,M as s,N as c,Nr as l,O as u,P as d,Qn as f,Tt as ne,Un as re,Wn as ie,Xn as p,Y as m,Yn as h,Zn as g,_ as ae,_r as oe,br as se,dr as ce,er as _,fr as v,j as y,kr as b,mr as le,or as ue,q as de,rr as fe,t as x,tr as S,ur as pe,w as me,yr as C}from"./index-jrCi0Lum.js";import{a as he}from"./VSelectionControl-CQAt_H-p.js";import{n as w,t as ge}from"./VRow-DaZSlvuQ.js";import{t as T}from"./VSpacer-DghyIQSd.js";import{t as _e}from"./useSnackbar-D7YOfKok.js";import{t as E}from"./VChip-DRbE4Osb.js";import{t as D}from"./VDialog-Df4iskHs.js";import{t as ve}from"./VSelect-CI5I9SyP.js";import{t as ye}from"./useServerList-DgUNZl4v.js";import{i as O}from"./validation-DMwOxx4a.js";import{t as be}from"./VTextarea-D_WUQLiQ.js";var xe={class:`text-body-1 font-weight-medium`},Se={class:`text-body-2 text-medium-emphasis`},Ce={class:`text-caption text-medium-emphasis mt-2`},we={key:1,class:`d-flex justify-center mt-4`},Te={class:`text-caption`},Ee={class:`d-flex align-center ga-2`},De={class:`text-body-2`},Oe={key:0},ke={key:1,class:`text-medium-emphasis`},k=fe({__name:`ScriptsPage`,setup(fe){let k=_e(),{servers:Ae,loadServers:je}=ye(),A=n(!1),j=n(``),M=n([]),N=n(1),P=n(0),F=n(20),I=n(!1),L=n(null),Me=n(!1),R=n({name:``,category:``,description:``,content:``}),z=n(!1),B=n(null),V=n([]),H=n(300),U=n(!1),W=n(!1),G=n(null),K=n(!1),Ne=n(null),q=n([]),J=n(!1),Y=n(``),X=n([]),Z=n(60),Pe=n(!1),Q=n([]),Fe=null,Ie=[{title:`命令`,key:`command`},{title:`状态`,key:`status`,width:100},{title:`进度`,key:`progress`,width:100},{title:`操作人`,key:`operator`,width:80},{title:`开始时间`,key:`started_at`,width:160}],Le=i(()=>{if(!j.value)return M.value;let e=j.value.toLowerCase();return M.value.filter(t=>t.name.toLowerCase().includes(e)||(t.category||``).toLowerCase().includes(e))});async function $(){A.value=!0;try{let e=await o.getList(`/scripts/`,{page:N.value,per_page:F.value});M.value=e.items,P.value=e.total}catch{M.value=[]}finally{A.value=!1}}oe(j,()=>{N.value=1,$()});function Re(e){L.value=e,e?R.value={name:e.name,category:e.category||``,description:e.description||``,content:e.content||``}:R.value={name:``,category:``,description:``,content:``},I.value=!0}async function ze(){Me.value=!0;try{L.value?await o.put(`/scripts/${L.value.id}`,R.value):await o.post(`/scripts/`,R.value),I.value=!1,$(),k(`保存成功`)}catch(e){k(e.message||`保存失败`,`error`)}finally{Me.value=!1}}function Be(e){B.value=e,V.value=[],z.value=!0}async function Ve(){if(!B.value||!V.value.length){k(`请选择服务器`,`warning`);return}U.value=!0;try{let e=await o.post(`/scripts/exec`,{script_id:B.value.id,server_ids:V.value,timeout:H.value});z.value=!1,k(`脚本已提交执行`),Ke(B.value.name,e.execution_id,V.value.length)}catch(e){k(e.message||`执行失败`,`error`)}finally{U.value=!1}}function He(e){G.value=e,W.value=!0}async function Ue(){if(G.value)try{await o.delete(`/scripts/${G.value.id}`),W.value=!1,$(),k(`已删除`)}catch(e){k(e.message||`删除失败`,`error`)}}async function We(e){Ne.value=e,K.value=!0;try{q.value=(await o.get(`/scripts/executions`,{script_id:e.id})).items||[]}catch{q.value=[]}}async function Ge(){if(!(!Y.value||X.value.length===0)){Pe.value=!0;try{let e=await o.post(`/scripts/exec`,{command:Y.value,server_ids:X.value,timeout:Z.value});k(`已在 ${X.value.length} 台服务器上执行`),Ke(`临时命令`,e.execution_id,X.value.length)}catch(e){k(e.message||`执行失败`,`error`)}finally{Pe.value=!1}}}function Ke(e,t,n){Q.value.unshift({id:t,name:e,status:`running`,totalServers:n,completedServers:0,refreshing:!1}),qe()}function qe(){Fe||=setInterval(async()=>{let e=Q.value.filter(e=>e.status===`running`);if(e.length===0){Je();return}for(let t of e)await Ye(t)},5e3)}function Je(){Fe&&=(clearInterval(Fe),null)}async function Ye(e){e.refreshing=!0;try{let t=await o.get(`/scripts/executions/${e.id}`),n=t.results||{};e.completedServers=Object.values(n).filter(e=>e.status!==`running`&&e.status!==`pending`).length,e.status=t.status}catch{}finally{e.refreshing=!1}}async function Xe(e){try{await o.post(`/scripts/executions/${e.id}/stop`),e.status=`failed`,k(`已发送停止指令`)}catch(e){k(e.message||`停止失败`,`error`)}}function Ze(e){return e===`running`?`blue`:e===`completed`?`green`:e===`failed`?`red`:`orange`}function Qe(e){return e===`running`?`执行中`:e===`completed`?`已完成`:e===`failed`?`失败`:`部分完成`}return pe(()=>{$(),je()}),ce(()=>{Je()}),(n,i)=>(v(),p(he,{fluid:``,class:`pa-6`},{default:C(()=>[S(s,{elevation:`0`,border:``,rounded:`lg`,class:`mb-4`},{default:C(()=>[S(d,{class:`d-flex align-center`},{default:C(()=>[i[22]||=_(` 脚本库 `,-1),S(T),S(x,{modelValue:j.value,"onUpdate:modelValue":i[0]||=e=>j.value=e,"prepend-inner-icon":`mdi-magnify`,label:`搜索...`,density:`compact`,"hide-details":``,variant:`outlined`,rounded:``,style:{"max-width":`240px`}},null,8,[`modelValue`]),S(a,{color:`primary`,variant:`flat`,class:`ml-3`,"prepend-icon":`mdi-plus`,size:`small`,onClick:i[1]||=e=>Re(null)},{default:C(()=>[...i[21]||=[_(` 新建脚本 `,-1)]]),_:1})]),_:1})]),_:1}),S(s,{elevation:`0`,border:``,rounded:`lg`,class:`mb-4`},{default:C(()=>[S(d,{class:`d-flex align-center`,style:{cursor:`pointer`},onClick:i[2]||=e=>J.value=!J.value},{default:C(()=>[S(m,{class:`mr-2`},{default:C(()=>[...i[23]||=[_(`mdi-console`,-1)]]),_:1}),i[24]||=_(` 临时命令执行 `,-1),S(T),S(m,null,{default:C(()=>[_(l(J.value?`mdi-chevron-up`:`mdi-chevron-down`),1)]),_:1})]),_:1}),S(ne,null,{default:C(()=>[se(h(`div`,null,[S(y),S(c,null,{default:C(()=>[S(be,{modelValue:Y.value,"onUpdate:modelValue":i[3]||=e=>Y.value=e,label:`命令`,variant:`outlined`,density:`compact`,rows:`3`,placeholder:`输入要执行的命令... (Ctrl+Enter 执行)`,class:`mb-3`,onKeydown:ie(ee(Ge,[`ctrl`]),[`enter`]),rules:[b(O)(`命令`)]},null,8,[`modelValue`,`onKeydown`,`rules`]),S(ge,{dense:``},{default:C(()=>[S(w,{cols:`12`,md:`6`},{default:C(()=>[S(ve,{modelValue:X.value,"onUpdate:modelValue":i[4]||=e=>X.value=e,items:b(Ae),"item-title":`name`,"item-value":`id`,label:`目标服务器`,variant:`outlined`,density:`compact`,multiple:``,chips:``,"closable-chips":``},null,8,[`modelValue`,`items`])]),_:1}),S(w,{cols:`6`,md:`3`},{default:C(()=>[S(x,{modelValue:Z.value,"onUpdate:modelValue":i[5]||=e=>Z.value=e,modelModifiers:{number:!0},label:`超时(秒)`,variant:`outlined`,density:`compact`,type:`number`},null,8,[`modelValue`])]),_:1}),S(w,{cols:`6`,md:`3`,class:`d-flex align-center`},{default:C(()=>[S(a,{color:`primary`,variant:`flat`,onClick:Ge,loading:Pe.value,disabled:!Y.value||X.value.length===0},{default:C(()=>[...i[25]||=[_(` 执行 `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),_:1})]),_:1})],512),[[re,J.value]])]),_:1})]),_:1}),A.value?(v(),p(de,{key:0,indeterminate:``,color:`primary`})):g(``,!0),S(ge,null,{default:C(()=>[(v(!0),f(te,null,le(Le.value,e=>(v(),p(w,{cols:`12`,sm:`6`,md:`4`,key:e.id},{default:C(()=>[S(s,{elevation:`0`,border:``,rounded:`lg`,class:`fill-height`},{default:C(()=>[S(d,{class:`d-flex align-center`},{default:C(()=>[S(m,{color:`primary`,class:`mr-2`},{default:C(()=>[...i[26]||=[_(`mdi-code-braces`,-1)]]),_:1}),h(`span`,xe,l(e.name),1),S(T),S(ae,null,{activator:C(({props:e})=>[S(a,ue({icon:`mdi-dots-vertical`,variant:`text`,size:`small`},{ref_for:!0},e),null,16)]),default:C(()=>[S(me,{density:`compact`},{default:C(()=>[S(u,{title:`编辑`,onClick:t=>Re(e)},{prepend:C(()=>[S(m,null,{default:C(()=>[...i[27]||=[_(`mdi-pencil`,-1)]]),_:1})]),_:1},8,[`onClick`]),S(u,{title:`执行`,onClick:t=>Be(e)},{prepend:C(()=>[S(m,null,{default:C(()=>[...i[28]||=[_(`mdi-play`,-1)]]),_:1})]),_:1},8,[`onClick`]),S(u,{title:`删除`,onClick:t=>He(e),class:`text-error`},{prepend:C(()=>[S(m,{color:`error`},{default:C(()=>[...i[29]||=[_(`mdi-delete`,-1)]]),_:1})]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024)]),_:2},1024),S(c,null,{default:C(()=>[e.category?(v(),p(E,{key:0,size:`small`,variant:`tonal`,label:``,class:`mb-2`},{default:C(()=>[_(l(e.category),1)]),_:2},1024)):g(``,!0),h(`div`,Se,l(e.description||`无描述`),1),h(`div`,Ce,` 更新于 `+l(e.updated_at||e.created_at),1)]),_:2},1024),S(r,null,{default:C(()=>[S(a,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-play`,color:`primary`,onClick:t=>Be(e)},{default:C(()=>[...i[30]||=[_(`执行`,-1)]]),_:1},8,[`onClick`]),S(T),S(a,{size:`small`,variant:`text`,onClick:t=>We(e)},{default:C(()=>[...i[31]||=[_(`历史`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1}),P.value>F.value?(v(),f(`div`,we,[S(t,{modelValue:N.value,"onUpdate:modelValue":[i[6]||=e=>N.value=e,$],length:Math.ceil(P.value/F.value),rounded:``,density:`compact`},null,8,[`modelValue`,`length`])])):g(``,!0),Q.value.length>0?(v(),p(s,{key:2,elevation:`0`,border:``,rounded:`lg`,class:`mt-4`},{default:C(()=>[S(d,{class:`d-flex align-center text-subtitle-1`},{default:C(()=>[S(m,{class:`mr-2`},{default:C(()=>[...i[32]||=[_(`mdi-progress-clock`,-1)]]),_:1}),i[34]||=_(` 执行状态 `,-1),S(T),S(a,{size:`small`,variant:`text`,onClick:i[7]||=e=>Q.value=[]},{default:C(()=>[...i[33]||=[_(`清除`,-1)]]),_:1})]),_:1}),S(y),S(c,null,{default:C(()=>[S(me,{density:`compact`},{default:C(()=>[(v(!0),f(te,null,le(Q.value,e=>(v(),p(u,{key:e.id,title:e.name},{subtitle:C(()=>[h(`span`,Te,`ID: `+l(e.id)+` · `+l(e.totalServers)+` 台服务器`,1)]),append:C(()=>[h(`div`,Ee,[S(E,{color:Ze(e.status),size:`x-small`,variant:`tonal`,label:``},{default:C(()=>[_(l(Qe(e.status)),1)]),_:2},1032,[`color`]),S(a,{size:`x-small`,variant:`text`,onClick:t=>Ye(e),loading:e.refreshing},{default:C(()=>[...i[35]||=[_(` 刷新 `,-1)]]),_:1},8,[`onClick`,`loading`]),e.status===`running`?(v(),p(a,{key:0,size:`x-small`,variant:`text`,color:`error`,onClick:t=>Xe(e)},{default:C(()=>[...i[36]||=[_(` 停止 `,-1)]]),_:1},8,[`onClick`])):g(``,!0)])]),_:2},1032,[`title`]))),128))]),_:1})]),_:1})]),_:1})):g(``,!0),S(D,{modelValue:I.value,"onUpdate:modelValue":i[13]||=e=>I.value=e,"max-width":`800`,scrollable:``},{default:C(()=>[S(s,{border:``},{default:C(()=>[S(d,null,{default:C(()=>[_(l(L.value?`编辑脚本`:`新建脚本`),1)]),_:1}),S(y),S(c,null,{default:C(()=>[S(x,{modelValue:R.value.name,"onUpdate:modelValue":i[8]||=e=>R.value.name=e,label:`脚本名称`,variant:`outlined`,density:`compact`,class:`mb-2`,rules:[b(O)(`脚本名称`)]},null,8,[`modelValue`,`rules`]),S(x,{modelValue:R.value.category,"onUpdate:modelValue":i[9]||=e=>R.value.category=e,label:`分类`,variant:`outlined`,density:`compact`,class:`mb-2`},null,8,[`modelValue`]),S(be,{modelValue:R.value.description,"onUpdate:modelValue":i[10]||=e=>R.value.description=e,label:`描述`,variant:`outlined`,density:`compact`,rows:`2`,class:`mb-2`},null,8,[`modelValue`]),S(be,{modelValue:R.value.content,"onUpdate:modelValue":i[11]||=e=>R.value.content=e,label:`脚本内容`,variant:`outlined`,density:`compact`,rows:`14`,class:`mt-2 font-monospace`,rules:[b(O)(`脚本内容`)]},null,8,[`modelValue`,`rules`])]),_:1}),S(y),S(r,null,{default:C(()=>[S(T),S(a,{variant:`text`,onClick:i[12]||=e=>I.value=!1},{default:C(()=>[...i[37]||=[_(`取消`,-1)]]),_:1}),S(a,{color:`primary`,variant:`flat`,onClick:ze,loading:Me.value},{default:C(()=>[...i[38]||=[_(`保存`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),S(D,{modelValue:z.value,"onUpdate:modelValue":i[17]||=e=>z.value=e,"max-width":`600`},{default:C(()=>[S(s,{border:``},{default:C(()=>[S(d,null,{default:C(()=>[_(`执行脚本: `+l(B.value?.name),1)]),_:1}),S(c,null,{default:C(()=>[S(ve,{modelValue:V.value,"onUpdate:modelValue":i[14]||=e=>V.value=e,items:b(Ae),"item-title":`name`,"item-value":`id`,label:`选择服务器`,variant:`outlined`,density:`compact`,multiple:``,chips:``,class:`mb-2`},null,8,[`modelValue`,`items`]),S(x,{modelValue:H.value,"onUpdate:modelValue":i[15]||=e=>H.value=e,label:`超时(秒)`,variant:`outlined`,density:`compact`,type:`number`},null,8,[`modelValue`])]),_:1}),S(r,null,{default:C(()=>[S(T),S(a,{variant:`text`,onClick:i[16]||=e=>z.value=!1},{default:C(()=>[...i[39]||=[_(`取消`,-1)]]),_:1}),S(a,{color:`primary`,variant:`flat`,onClick:Ve,loading:U.value},{default:C(()=>[...i[40]||=[_(`执行`,-1)]]),_:1},8,[`loading`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),S(D,{modelValue:W.value,"onUpdate:modelValue":i[19]||=e=>W.value=e,"max-width":`400`},{default:C(()=>[S(s,{border:``},{default:C(()=>[S(d,null,{default:C(()=>[...i[41]||=[_(`确认删除`,-1)]]),_:1}),S(c,null,{default:C(()=>[i[42]||=_(`确定要删除脚本 `,-1),h(`strong`,null,l(G.value?.name),1),i[43]||=_(` 吗?`,-1)]),_:1}),S(r,null,{default:C(()=>[S(T),S(a,{variant:`text`,onClick:i[18]||=e=>W.value=!1},{default:C(()=>[...i[44]||=[_(`取消`,-1)]]),_:1}),S(a,{color:`error`,variant:`flat`,onClick:Ue},{default:C(()=>[...i[45]||=[_(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),S(D,{modelValue:K.value,"onUpdate:modelValue":i[20]||=e=>K.value=e,"max-width":`800`,scrollable:``},{default:C(()=>[S(s,{border:``},{default:C(()=>[S(d,null,{default:C(()=>[_(`执行历史: `+l(Ne.value?.name),1)]),_:1}),S(y),S(c,null,{default:C(()=>[S(e,{items:q.value,headers:Ie,density:`compact`,hover:``},{"item.status":C(({item:e})=>[S(E,{color:e.status===`completed`?`success`:e.status===`failed`?`error`:`info`,size:`small`,variant:`tonal`,label:``},{default:C(()=>[_(l(e.status),1)]),_:2},1032,[`color`])]),"item.command":C(({item:e})=>[h(`code`,De,l(e.command.length>60?e.command.slice(0,60)+`…`:e.command),1)]),"item.progress":C(({item:e})=>[e.progress?(v(),f(`span`,Oe,l(e.progress.done)+`/`+l(e.progress.total),1)):(v(),f(`span`,ke,`—`))]),"no-data":C(()=>[...i[46]||=[h(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无数据`,-1)]]),_:1},8,[`items`])]),_:1})]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}});export{k as default};