Files
Nexus/web/app/assets/ScriptsPage-BkakinBV.js
T
Nexus Agent fb6a4be797 feat(commands): 推送日志第三视图与 CSV 导入模板
按对齐计划 Phase1:Commands 页增加推送日志筛选视图;补全 servers_import_template.csv;扩写功能指南 §12.6/12.8/12.10 与 acceptance_catalog。
2026-06-08 02:45:17 +08:00

1 line
22 KiB
JavaScript

import{n as e,t}from"./initMonaco-x1oyshyc.js";import{a as n,t as r,x as i}from"./VDataTable-Dy8TLadm.js";import{$n as a,Dt as ee,F as o,Jn as s,L as c,Lr as l,M as u,N as d,P as f,Sr as te,Tr as ne,Vr as p,Xn as re,Y as ie,Yn as ae,Z as m,Zn as oe,_ as se,ar as h,er as g,fr as ce,gr as _,hr as le,jr as v,k as y,mr as ue,nr as b,or as x,rr as S,sr as de,t as fe,tr as C,ur as pe,vr as me,w as he,wr as w,z as T,zt as E}from"./index-AmyXDl4i.js";import{o as ge,t as _e}from"./VContainer-Dqw80qLq.js";import{t as D}from"./VChip-D3vZhJU3.js";import{t as O}from"./VSelect-DZ1vTOq0.js";import{n as k,t as ve}from"./VRow-BOFF76XF.js";import{t as A}from"./VSpacer-e_QpSKFJ.js";import{t as j}from"./apiError-CvOGzIYs.js";import{t as ye}from"./useServerList-CLbf7hZr.js";import{i as be}from"./validation-DMwOxx4a.js";import{t as M}from"./VDialog-hWg6_Knl.js";import{t as xe}from"./VTextarea-CV8U5DbY.js";import{t as Se}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as Ce}from"./VSwitch-DsvYP8mQ.js";var we=Se(de({__name:`ScriptContentEditor`,props:{modelValue:{},readonly:{type:Boolean}},emits:[`update:modelValue`],setup(n,{emit:r}){let i=n,a=r,ee=e(),o=v(),s=null,c=!1;function l(){o.value&&(s?.dispose(),s=ee.editor.create(o.value,{...t({language:`shell`,readOnly:i.readonly??!1}),value:i.modelValue||``}),s.onDidChangeModelContent(()=>{c||!s||a(`update:modelValue`,s.getValue())}))}return te(()=>i.modelValue,e=>{s&&s.getValue()!==e&&(c=!0,s.setValue(e||``),c=!1)}),te(()=>i.readonly,e=>{s?.updateOptions({readOnly:e??!1})}),ue(()=>{l()}),ce(()=>{s?.dispose(),s=null}),(e,t)=>(_(),S(`div`,{ref_key:`host`,ref:o,class:`script-content-editor`},null,512))}}),[[`__scopeId`,`data-v-8c9e5994`]]),Te={class:`text-body-1 font-weight-medium`},Ee={class:`text-body-2 text-medium-emphasis`},De={class:`text-caption text-medium-emphasis mt-2`},Oe={key:3,class:`d-flex justify-center mt-4`},ke={class:`text-caption`},Ae={key:0,class:`ml-1`},je={class:`d-flex align-center flex-wrap ga-1 justify-end`},Me={class:`text-body-2`},Ne={class:`text-caption text-medium-emphasis mb-3`},Pe={class:`text-body-2 mb-4 pa-3 rounded bg-surface-variant overflow-auto`,style:{"max-height":`120px`}},Fe={class:`text-truncate`,style:{"max-width":`360px`}},N=de({__name:`ScriptsPage`,setup(e){let t=ge(),{servers:ce,loadServers:de}=ye(),Se=[{label:`运维`,value:`ops`},{label:`部署`,value:`deploy`},{label:`检查`,value:`check`},{label:`清理`,value:`cleanup`}],N=v(!1),P=v(``),F=v([]),I=v(null),Ie=v([]),L=v(1),R=v(20),z=v(!1),B=v(null),Le=v(!1),V=v({name:``,category:`ops`,description:``,content:``}),H=v(!1),U=v(null),W=v([]),Re=v(300),G=v(!1),ze=v(null),Be=v(!1),K=v(!1),Ve=v(null),He=v(!1),q=v(null),Ue=v([]),We=v(!1),J=v(``),Y=v([]),Ge=v(60),Ke=v(!1),qe=v(null),Je=v(!1),X=v([]),Ye=null,Z=v(!1),Q=v(null),Xe=v(!1),Ze=v(null),Qe=a(()=>Ie.value.map(e=>({title:e.name,value:e.id}))),$e=a(()=>{let e=P.value.trim().toLowerCase();return e?F.value.filter(t=>t.name.toLowerCase().includes(e)||(t.category||``).toLowerCase().includes(e)||(t.description||``).toLowerCase().includes(e)):F.value}),et=a(()=>$e.value.length),tt=a(()=>{let e=(L.value-1)*R.value;return $e.value.slice(e,e+R.value)});te(P,()=>{L.value=1});let nt=[{title:`命令`,key:`command`},{title:`状态`,key:`status`,width:100},{title:`进度`,key:`progress`,width:88},{title:`操作人`,key:`operator`,width:88},{title:`开始时间`,key:`started_at`,width:160},{title:`操作`,key:`actions`,width:180,sortable:!1}],rt=a(()=>Q.value?.results?Object.entries(Q.value.results).filter(([e])=>e!==`_meta`&&/^\d+$/.test(e)).map(([e,t])=>({serverId:e,status:String(t.status||t.phase||`—`),exitCode:t.exit_code??null,summary:(t.stdout||t.stderr||t.message||``).slice(0,200)||`—`})):[]);function it(e){return Se.find(t=>t.value===e)?.label||e}function at(e){return e?e.length>60?`${e.slice(0,60)}…`:e:`—`}function ot(e){return e||`—`}function st(e){if(!e)return 0;try{let t=JSON.parse(e);return Array.isArray(t)?t.length:0}catch{return 0}}function ct(e){let t=e.id??e.execution_id;if(t==null)throw Error(`执行响应缺少 id`);return t}async function lt(){N.value=!0;try{F.value=(await E.getList(`/scripts/`)).items}catch(e){F.value=[],t(j(e,`加载脚本列表失败`),`error`)}finally{N.value=!1}}async function ut(){try{I.value=await E.get(`/scripts/exec-config`)}catch{I.value=null}}async function dt(){try{Ie.value=await E.getList(`/scripts/credentials`).then(e=>e.items)}catch{Ie.value=[]}}function ft(e){B.value=e,e?V.value={name:e.name,category:e.category||`ops`,description:e.description||``,content:e.content||``}:V.value={name:``,category:`ops`,description:``,content:``},z.value=!0}async function pt(){if(!V.value.name.trim()||!V.value.content.trim()){t(`请填写名称与脚本内容`,`warning`);return}Le.value=!0;try{let e={name:V.value.name.trim(),category:V.value.category,description:V.value.description.trim()||null,content:V.value.content};B.value?await E.put(`/scripts/${B.value.id}`,e):await E.post(`/scripts/`,e),z.value=!1,await lt(),t(`保存成功`)}catch(e){t(j(e,`保存失败`),`error`)}finally{Le.value=!1}}function mt(e){U.value=e,W.value=[],G.value=!1,ze.value=null,H.value=!0}async function ht(e,t,n){let r=await E.post(`/scripts/exec`,e);return bt(t,ct(r),n,!!e.long_task,r.progress,r.status),r}async function gt(){if(!U.value||!W.value.length){t(`请选择服务器`,`warning`);return}Be.value=!0;try{await ht({script_id:U.value.id,server_ids:W.value,timeout:Re.value,long_task:G.value,credential_id:ze.value??void 0},U.value.name,W.value.length),H.value=!1,t(`脚本已提交执行`)}catch(e){t(j(e,`执行失败`),`error`)}finally{Be.value=!1}}function _t(e){Ve.value=e,K.value=!0}async function vt(){if(Ve.value)try{await E.delete(`/scripts/${Ve.value.id}`),K.value=!1,await lt(),t(`已删除`)}catch(e){t(j(e,`删除失败`),`error`)}}async function $(e){q.value=e,He.value=!0;try{Ue.value=(await E.get(`/scripts/executions`,{script_id:e.id,limit:50})).items||[]}catch{Ue.value=[]}}async function yt(){if(!(!J.value.trim()||Y.value.length===0)){Je.value=!0;try{await ht({command:J.value.trim(),server_ids:Y.value,timeout:Ge.value,long_task:Ke.value,credential_id:qe.value??void 0},`临时命令`,Y.value.length),t(`已在 ${Y.value.length} 台服务器上执行`)}catch(e){t(j(e,`执行失败`),`error`)}finally{Je.value=!1}}}function bt(e,t,n,r,i,a){X.value.some(e=>e.id===t)||(X.value.unshift({id:t,name:e,status:a||`running`,totalServers:n,progress:i||`0/${n}`,longTask:r,refreshing:!1}),xt())}function xt(){Ye||=setInterval(async()=>{let e=X.value.filter(e=>e.status===`running`||e.status===`partial`);if(e.length===0){St();return}for(let t of e)await Ct(t)},1e4)}function St(){Ye&&=(clearInterval(Ye),null)}async function Ct(e){e.refreshing=!0;try{let t=await E.get(`/scripts/executions/${e.id}`);e.status=t.status,e.progress=ot(t.progress),e.longTask=!!t.long_task}catch{}finally{e.refreshing=!1}}async function wt(e){try{await E.post(`/scripts/executions/${e.id}/stop`),await Ct(e),t(`已发送停止指令`)}catch(e){t(j(e,`停止失败`),`error`)}}async function Tt(e){try{await E.post(`/scripts/executions/${e.id}/mark-stuck`,{detail:`用户在脚本库标记可能卡住`}),t(`已标记`)}catch(e){t(j(e,`标记失败`),`error`)}}async function Et(e){try{let n=await E.post(`/scripts/executions/${e.id}/retry`,{}),r=ct(n);bt(`${e.name}(重试)`,r,e.totalServers,e.longTask,n.progress,n.status),t(`已创建重试任务 #${r}`)}catch(e){t(j(e,`重试失败`),`error`)}}async function Dt(e){try{await E.post(`/scripts/executions/${e.id}/stop`),q.value&&await $(q.value),t(`已发送停止指令`)}catch(e){t(j(e,`停止失败`),`error`)}}async function Ot(e){try{let n=await E.post(`/scripts/executions/${e.id}/retry`,{});bt(`${q.value?.name||`脚本`}(重试)`,ct(n),st(e.server_ids)||st(n.server_ids),!!e.long_task,n.progress,n.status),q.value&&await $(q.value),t(`重试已提交`)}catch(e){t(j(e,`重试失败`),`error`)}}async function kt(e){Ze.value=e,Z.value=!0,await At(!1)}async function At(e){if(Ze.value!=null){Xe.value=!0;try{Q.value=await E.get(`/scripts/executions/${Ze.value}`,{fetch_logs:e,log_lines:100})}catch(e){t(j(e,`加载详情失败`),`error`),Z.value=!1}finally{Xe.value=!1}}}function jt(e){return e===`running`?`blue`:e===`completed`?`green`:e===`failed`?`red`:e===`partial`?`orange`:e===`cancelled`?`grey`:`info`}function Mt(e){return{running:`执行中`,completed:`已完成`,failed:`失败`,partial:`部分成功`,cancelled:`已取消`}[e]||e}return ue(()=>{lt(),de(),ut(),dt()}),le(()=>{St()}),(e,t)=>(_(),C(_e,{fluid:``,class:`pa-6`},{default:w(()=>[x(d,{elevation:`0`,border:``,rounded:`lg`,class:`mb-4`},{default:w(()=>[x(o,{class:`d-flex flex-wrap align-center ga-2`},{default:w(()=>[t[30]||=h(` 脚本库 `,-1),I.value?(_(),C(D,{key:0,size:`small`,variant:`tonal`,label:``,class:`ml-1`},{default:w(()=>[h(` 分批 `+p(I.value.batch_size)+` 台 · 并发 `+p(I.value.concurrency),1)]),_:1})):b(``,!0),x(A),x(fe,{modelValue:P.value,"onUpdate:modelValue":t[0]||=e=>P.value=e,"prepend-inner-icon":`mdi-magnify`,label:`搜索...`,density:`compact`,"hide-details":``,variant:`outlined`,rounded:``,style:{"max-width":`240px`}},null,8,[`modelValue`]),x(T,{color:`primary`,variant:`flat`,class:`ml-1`,"prepend-icon":`mdi-plus`,size:`small`,onClick:t[1]||=e=>ft(null)},{default:w(()=>[...t[29]||=[h(` 新建脚本 `,-1)]]),_:1})]),_:1})]),_:1}),x(d,{elevation:`0`,border:``,rounded:`lg`,class:`mb-4`},{default:w(()=>[x(o,{class:`d-flex align-center`,style:{cursor:`pointer`},onClick:t[2]||=e=>We.value=!We.value},{default:w(()=>[x(m,{class:`mr-2`},{default:w(()=>[...t[31]||=[h(`mdi-console`,-1)]]),_:1}),t[32]||=h(` 临时命令执行 `,-1),x(A),x(m,null,{default:w(()=>[h(p(We.value?`mdi-chevron-up`:`mdi-chevron-down`),1)]),_:1})]),_:1}),x(ee,null,{default:w(()=>[ne(g(`div`,null,[x(u),x(f,null,{default:w(()=>[x(xe,{modelValue:J.value,"onUpdate:modelValue":t[3]||=e=>J.value=e,label:`命令`,variant:`outlined`,density:`compact`,rows:`3`,placeholder:`输入要执行的命令... (Ctrl+Enter 执行)`,class:`mb-3 font-monospace`,onKeydown:ae(re(yt,[`ctrl`]),[`enter`]),rules:[l(be)(`命令`)]},null,8,[`modelValue`,`onKeydown`,`rules`]),x(ve,{dense:``},{default:w(()=>[x(k,{cols:`12`,md:`5`},{default:w(()=>[x(O,{modelValue:Y.value,"onUpdate:modelValue":t[4]||=e=>Y.value=e,items:l(ce),"item-title":`name`,"item-value":`id`,label:`目标服务器`,variant:`outlined`,density:`compact`,multiple:``,chips:``,"closable-chips":``},null,8,[`modelValue`,`items`])]),_:1}),x(k,{cols:`6`,md:`2`},{default:w(()=>[x(fe,{modelValue:Ge.value,"onUpdate:modelValue":t[5]||=e=>Ge.value=e,modelModifiers:{number:!0},label:`超时(秒)`,variant:`outlined`,density:`compact`,type:`number`,max:I.value?.max_timeout??600},null,8,[`modelValue`,`max`])]),_:1}),x(k,{cols:`6`,md:`3`},{default:w(()=>[x(O,{modelValue:qe.value,"onUpdate:modelValue":t[6]||=e=>qe.value=e,items:Qe.value,"item-title":`title`,"item-value":`value`,label:`DB 凭据(可选)`,variant:`outlined`,density:`compact`,clearable:``,"hide-details":``},null,8,[`modelValue`,`items`])]),_:1}),x(k,{cols:`12`,md:`2`,class:`d-flex align-center ga-2`},{default:w(()=>[x(Ce,{modelValue:Ke.value,"onUpdate:modelValue":t[7]||=e=>Ke.value=e,label:`长任务`,density:`compact`,"hide-details":``,color:`primary`},null,8,[`modelValue`]),x(T,{color:`primary`,variant:`flat`,onClick:yt,loading:Je.value,disabled:!J.value.trim()||Y.value.length===0},{default:w(()=>[...t[33]||=[h(` 执行 `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),_:1})]),_:1})],512),[[s,We.value]])]),_:1})]),_:1}),N.value?(_(),C(ie,{key:0,indeterminate:``,color:`primary`})):b(``,!0),tt.value.length?(_(),C(ve,{key:1},{default:w(()=>[(_(!0),S(oe,null,me(tt.value,e=>(_(),C(k,{cols:`12`,sm:`6`,md:`4`,key:e.id},{default:w(()=>[x(d,{elevation:`0`,border:``,rounded:`lg`,class:`fill-height`},{default:w(()=>[x(o,{class:`d-flex align-center`},{default:w(()=>[x(m,{color:`primary`,class:`mr-2`},{default:w(()=>[...t[34]||=[h(`mdi-code-braces`,-1)]]),_:1}),g(`span`,Te,p(e.name),1),x(A),x(se,null,{activator:w(({props:e})=>[x(T,pe({icon:`mdi-dots-vertical`,variant:`text`,size:`small`},{ref_for:!0},e),null,16)]),default:w(()=>[x(he,{density:`compact`},{default:w(()=>[x(y,{title:`编辑`,onClick:t=>ft(e)},{prepend:w(()=>[x(m,null,{default:w(()=>[...t[35]||=[h(`mdi-pencil`,-1)]]),_:1})]),_:1},8,[`onClick`]),x(y,{title:`执行`,onClick:t=>mt(e)},{prepend:w(()=>[x(m,null,{default:w(()=>[...t[36]||=[h(`mdi-play`,-1)]]),_:1})]),_:1},8,[`onClick`]),x(y,{title:`删除`,onClick:t=>_t(e),class:`text-error`},{prepend:w(()=>[x(m,{color:`error`},{default:w(()=>[...t[37]||=[h(`mdi-delete`,-1)]]),_:1})]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024)]),_:2},1024),x(f,null,{default:w(()=>[e.category?(_(),C(D,{key:0,size:`small`,variant:`tonal`,label:``,class:`mb-2`},{default:w(()=>[h(p(it(e.category)),1)]),_:2},1024)):b(``,!0),g(`div`,Ee,p(e.description||`无描述`),1),g(`div`,De,` 更新于 `+p(e.updated_at||e.created_at||`—`),1)]),_:2},1024),x(c,null,{default:w(()=>[x(T,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-play`,color:`primary`,onClick:t=>mt(e)},{default:w(()=>[...t[38]||=[h(` 执行 `,-1)]]),_:1},8,[`onClick`]),x(A),x(T,{size:`small`,variant:`text`,onClick:t=>$(e)},{default:w(()=>[...t[39]||=[h(`历史`,-1)]]),_:1},8,[`onClick`])]),_:2},1024)]),_:2},1024)]),_:2},1024))),128))]),_:1})):N.value?b(``,!0):(_(),C(d,{key:2,elevation:`0`,border:``,rounded:`lg`},{default:w(()=>[x(f,{class:`text-center text-medium-emphasis py-10`},{default:w(()=>[...t[40]||=[h(`暂无脚本,点击「新建脚本」添加`,-1)]]),_:1})]),_:1})),et.value>R.value?(_(),S(`div`,Oe,[x(i,{modelValue:L.value,"onUpdate:modelValue":t[8]||=e=>L.value=e,length:Math.ceil(et.value/R.value),rounded:``,density:`compact`},null,8,[`modelValue`,`length`])])):b(``,!0),X.value.length>0?(_(),C(d,{key:4,elevation:`0`,border:``,rounded:`lg`,class:`mt-4`},{default:w(()=>[x(o,{class:`d-flex align-center text-subtitle-1`},{default:w(()=>[x(m,{class:`mr-2`},{default:w(()=>[...t[41]||=[h(`mdi-progress-clock`,-1)]]),_:1}),t[43]||=h(` 批量执行状态 `,-1),x(A),x(T,{size:`small`,variant:`text`,onClick:t[9]||=e=>X.value=[]},{default:w(()=>[...t[42]||=[h(`清除`,-1)]]),_:1})]),_:1}),x(u),x(f,null,{default:w(()=>[x(he,{density:`compact`},{default:w(()=>[(_(!0),S(oe,null,me(X.value,e=>(_(),C(y,{key:e.id,title:e.name},{subtitle:w(()=>[g(`span`,ke,[h(` #`+p(e.id)+` · `+p(e.progress||`—`)+` · `+p(e.totalServers)+` 台 `,1),e.longTask?(_(),S(`span`,Ae,`· 长任务`)):b(``,!0)])]),append:w(()=>[g(`div`,je,[x(D,{color:jt(e.status),size:`x-small`,variant:`tonal`,label:``},{default:w(()=>[h(p(Mt(e.status)),1)]),_:2},1032,[`color`]),x(T,{size:`x-small`,variant:`text`,onClick:t=>kt(e.id)},{default:w(()=>[...t[44]||=[h(`详情`,-1)]]),_:1},8,[`onClick`]),x(T,{size:`x-small`,variant:`text`,onClick:t=>Ct(e),loading:e.refreshing},{default:w(()=>[...t[45]||=[h(` 刷新 `,-1)]]),_:1},8,[`onClick`,`loading`]),e.status===`running`?(_(),C(T,{key:0,size:`x-small`,variant:`text`,color:`warning`,onClick:t=>Tt(e)},{default:w(()=>[...t[46]||=[h(` 卡住 `,-1)]]),_:1},8,[`onClick`])):b(``,!0),e.status===`running`||e.status===`partial`?(_(),C(T,{key:1,size:`x-small`,variant:`text`,color:`error`,onClick:t=>wt(e)},{default:w(()=>[...t[47]||=[h(` 停止 `,-1)]]),_:1},8,[`onClick`])):b(``,!0),e.status===`failed`||e.status===`partial`?(_(),C(T,{key:2,size:`x-small`,variant:`text`,color:`primary`,onClick:t=>Et(e)},{default:w(()=>[...t[48]||=[h(` 重试 `,-1)]]),_:1},8,[`onClick`])):b(``,!0)])]),_:2},1032,[`title`]))),128))]),_:1})]),_:1})]),_:1})):b(``,!0),x(M,{modelValue:z.value,"onUpdate:modelValue":t[15]||=e=>z.value=e,"max-width":`900`,scrollable:``},{default:w(()=>[x(d,{border:``},{default:w(()=>[x(o,null,{default:w(()=>[h(p(B.value?`编辑脚本`:`新建脚本`),1)]),_:1}),x(u),x(f,null,{default:w(()=>[x(fe,{modelValue:V.value.name,"onUpdate:modelValue":t[10]||=e=>V.value.name=e,label:`脚本名称`,variant:`outlined`,density:`compact`,class:`mb-2`,rules:[l(be)(`脚本名称`)]},null,8,[`modelValue`,`rules`]),x(O,{modelValue:V.value.category,"onUpdate:modelValue":t[11]||=e=>V.value.category=e,items:Se,"item-title":`label`,"item-value":`value`,label:`分类`,variant:`outlined`,density:`compact`,class:`mb-2`},null,8,[`modelValue`]),x(xe,{modelValue:V.value.description,"onUpdate:modelValue":t[12]||=e=>V.value.description=e,label:`描述`,variant:`outlined`,density:`compact`,rows:`2`,class:`mb-2`},null,8,[`modelValue`]),t[49]||=g(`div`,{class:`text-caption text-medium-emphasis mb-1`},`脚本内容`,-1),x(we,{modelValue:V.value.content,"onUpdate:modelValue":t[13]||=e=>V.value.content=e},null,8,[`modelValue`])]),_:1}),x(u),x(c,null,{default:w(()=>[x(A),x(T,{variant:`text`,onClick:t[14]||=e=>z.value=!1},{default:w(()=>[...t[50]||=[h(`取消`,-1)]]),_:1}),x(T,{color:`primary`,variant:`flat`,onClick:pt,loading:Le.value,disabled:!V.value.content.trim()},{default:w(()=>[...t[51]||=[h(` 保存 `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),x(M,{modelValue:H.value,"onUpdate:modelValue":t[21]||=e=>H.value=e,"max-width":`640`},{default:w(()=>[x(d,{border:``},{default:w(()=>[x(o,null,{default:w(()=>[h(`执行脚本: `+p(U.value?.name),1)]),_:1}),x(f,null,{default:w(()=>[x(O,{modelValue:W.value,"onUpdate:modelValue":t[16]||=e=>W.value=e,items:l(ce),"item-title":`name`,"item-value":`id`,label:`选择服务器`,variant:`outlined`,density:`compact`,multiple:``,chips:``,class:`mb-2`},null,8,[`modelValue`,`items`]),x(ve,{dense:``},{default:w(()=>[x(k,{cols:`6`},{default:w(()=>[x(fe,{modelValue:Re.value,"onUpdate:modelValue":t[17]||=e=>Re.value=e,modelModifiers:{number:!0},label:`超时(秒)`,variant:`outlined`,density:`compact`,type:`number`,max:I.value?.max_timeout??600},null,8,[`modelValue`,`max`])]),_:1}),x(k,{cols:`6`},{default:w(()=>[x(O,{modelValue:ze.value,"onUpdate:modelValue":t[18]||=e=>ze.value=e,items:Qe.value,"item-title":`title`,"item-value":`value`,label:`DB 凭据(可选)`,variant:`outlined`,density:`compact`,clearable:``},null,8,[`modelValue`,`items`])]),_:1})]),_:1}),x(Ce,{modelValue:G.value,"onUpdate:modelValue":t[19]||=e=>G.value=e,label:`长任务(nohup + Agent 回调,适合超时较长的脚本)`,density:`compact`,color:`primary`},null,8,[`modelValue`])]),_:1}),x(c,null,{default:w(()=>[x(A),x(T,{variant:`text`,onClick:t[20]||=e=>H.value=!1},{default:w(()=>[...t[52]||=[h(`取消`,-1)]]),_:1}),x(T,{color:`primary`,variant:`flat`,onClick:gt,loading:Be.value,disabled:!W.value.length},{default:w(()=>[...t[53]||=[h(` 执行 `,-1)]]),_:1},8,[`loading`,`disabled`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),x(M,{modelValue:K.value,"onUpdate:modelValue":t[23]||=e=>K.value=e,"max-width":`400`},{default:w(()=>[x(d,{border:``},{default:w(()=>[x(o,null,{default:w(()=>[...t[54]||=[h(`确认删除`,-1)]]),_:1}),x(f,null,{default:w(()=>[t[55]||=h(`确定要删除脚本 `,-1),g(`strong`,null,p(Ve.value?.name),1),t[56]||=h(` 吗?`,-1)]),_:1}),x(c,null,{default:w(()=>[x(A),x(T,{variant:`text`,onClick:t[22]||=e=>K.value=!1},{default:w(()=>[...t[57]||=[h(`取消`,-1)]]),_:1}),x(T,{color:`error`,variant:`flat`,onClick:vt},{default:w(()=>[...t[58]||=[h(`删除`,-1)]]),_:1})]),_:1})]),_:1})]),_:1},8,[`modelValue`]),x(M,{modelValue:He.value,"onUpdate:modelValue":t[25]||=e=>He.value=e,"max-width":`960`,scrollable:``},{default:w(()=>[x(d,{border:``},{default:w(()=>[x(o,{class:`d-flex align-center`},{default:w(()=>[h(` 执行历史: `+p(q.value?.name)+` `,1),x(A),x(T,{size:`small`,variant:`text`,icon:`mdi-refresh`,onClick:t[24]||=e=>q.value&&$(q.value)})]),_:1}),x(u),x(f,null,{default:w(()=>[x(r,{items:Ue.value,headers:nt,density:`compact`,hover:``},{"item.status":w(({item:e})=>[x(D,{color:jt(e.status),size:`x-small`,variant:`tonal`,label:``},{default:w(()=>[h(p(Mt(e.status)),1)]),_:2},1032,[`color`])]),"item.command":w(({item:e})=>[g(`code`,Me,p(at(e.command)),1)]),"item.progress":w(({item:e})=>[g(`span`,null,p(ot(e.progress)),1)]),"item.actions":w(({item:e})=>[x(T,{size:`x-small`,variant:`text`,onClick:t=>kt(e.id)},{default:w(()=>[...t[59]||=[h(`详情`,-1)]]),_:1},8,[`onClick`]),e.status===`running`||e.status===`partial`?(_(),C(T,{key:0,size:`x-small`,variant:`text`,color:`error`,onClick:t=>Dt(e)},{default:w(()=>[...t[60]||=[h(` 停止 `,-1)]]),_:1},8,[`onClick`])):b(``,!0),e.status===`failed`||e.status===`partial`?(_(),C(T,{key:1,size:`x-small`,variant:`text`,color:`primary`,onClick:t=>Ot(e)},{default:w(()=>[...t[61]||=[h(` 重试 `,-1)]]),_:1},8,[`onClick`])):b(``,!0)]),"no-data":w(()=>[...t[62]||=[g(`div`,{class:`text-center text-medium-emphasis py-6`},`暂无执行记录`,-1)]]),_:1},8,[`items`])]),_:1})]),_:1})]),_:1},8,[`modelValue`]),x(M,{modelValue:Z.value,"onUpdate:modelValue":t[28]||=e=>Z.value=e,"max-width":`900`,scrollable:``},{default:w(()=>[x(d,{border:``},{default:w(()=>[x(o,{class:`d-flex align-center`},{default:w(()=>[h(` 执行详情 #`+p(Q.value?.id)+` `,1),x(A),Q.value?.long_task?(_(),C(T,{key:0,size:`small`,variant:`tonal`,loading:Xe.value,onClick:t[26]||=e=>At(!0)},{default:w(()=>[...t[63]||=[h(` 拉取日志 `,-1)]]),_:1},8,[`loading`])):b(``,!0)]),_:1}),x(u),Q.value?(_(),C(f,{key:0},{default:w(()=>[g(`div`,Ne,p(Mt(Q.value.status))+` · `+p(ot(Q.value.progress))+` · 操作人 `+p(Q.value.operator||`—`),1),g(`pre`,Pe,p(Q.value.command),1),x(n,{density:`compact`},{default:w(()=>[t[64]||=g(`thead`,null,[g(`tr`,null,[g(`th`,null,`服务器`),g(`th`,null,`状态`),g(`th`,null,`退出码`),g(`th`,null,`输出摘要`)])],-1),g(`tbody`,null,[(_(!0),S(oe,null,me(rt.value,e=>(_(),S(`tr`,{key:e.serverId},[g(`td`,null,`#`+p(e.serverId),1),g(`td`,null,p(e.status),1),g(`td`,null,p(e.exitCode??`—`),1),g(`td`,Fe,p(e.summary),1)]))),128))])]),_:1})]),_:1})):b(``,!0),Q.value?(_(),C(c,{key:1},{default:w(()=>[x(A),x(T,{variant:`text`,onClick:t[27]||=e=>Z.value=!1},{default:w(()=>[...t[65]||=[h(`关闭`,-1)]]),_:1})]),_:1})):b(``,!0)]),_:1})]),_:1},8,[`modelValue`])]),_:1}))}});export{N as default};