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