4 lines
14 KiB
JavaScript
4 lines
14 KiB
JavaScript
|
|
import{_ as e,t}from"./VSelect-BvR-yyLS.js";import{n,t as r}from"./VRow-rmSa_q-C.js";import{Ar as i,Bt as a,Dr as o,Er as s,Ft as c,Gr as l,Gt as ee,Ht as te,I as ne,It as re,Kt as ie,L as u,Mt as d,Nr as ae,Nt as oe,Or as f,Q as se,Tr as p,Ut as ce,Vt as le,Wr as ue,Wt as de,Xt as fe,Yr as m,_i as h,b as g,br as pe,cn as me,in as _,jr as v,jt as he,ln as ge,nt as _e,qr as y,ri as b,ti as x,ui as S,v as C,wr as w,wt as ve,xi as T,xr as E,y as ye,yi as be,zr as xe,zt as Se}from"./index-CDcgx9V8.js";import{t as D}from"./_plugin-vue_export-helper-BDNMzG2s.js";import{t as Ce}from"./useSnackbar-u_XK4ZNm.js";import{n as we}from"./dataTable-esDY4cOk.js";import{t as Te}from"./paginatedFetch-VYTwXwno.js";import{n as O,t as k}from"./VCard-pmpQR9O7.js";import{t as Ee}from"./VTable-BTftprIQ.js";import{t as De}from"./VDataTableServer-BIMNqMvk.js";import{t as A}from"./apiError-CpgZRt4T.js";import{t as Oe}from"./useServerList-w3j3GRMG.js";import{n as ke,t as Ae}from"./execDetailGrouping-CuMwXaZZ.js";import{i as je,n as Me,r as Ne,t as Pe}from"./VExpansionPanels-ByOIBgKv.js";var Fe={class:`d-flex align-center flex-wrap ga-2 mb-4`},Ie={class:`text-h6`},Le={class:`text-caption text-medium-emphasis mb-2`},Re={key:0,class:`text-body-2 mb-3 pa-3 rounded bg-surface-variant overflow-auto`,style:{"max-height":`100px`}},ze={key:2,class:`d-flex flex-wrap ga-2 mb-3`},Be={class:`text-body-2`},Ve={class:`d-flex align-center flex-wrap ga-2 mb-3`},He=[`onClick`],Ue={class:`font-weight-medium`},We={key:0,class:`text-caption text-medium-emphasis`},Ge=[`title`],Ke={key:0},qe={class:`d-flex align-center ga-2 flex-grow-1 min-width-0`},Je=[`title`],Ye={key:0,class:`text-medium-emphasis`},Xe={class:`d-flex align-center flex-wrap ga-2 mb-4`},Ze={class:`text-caption text-medium-emphasis`},j=D(ae({name:`ScriptRunsPage`,__name:`ScriptRunsPage`,setup(ae){let D=me(),j=ge(),M=Ce(),{servers:Qe,loadServers:$e}=Oe(),N=w(()=>{let e=D.params.id;if(!e)return null;let t=Number(e);return Number.isFinite(t)?t:null}),P=w(()=>oe(D.query.kind)),et=w(()=>`${P.value===`server_batch`?`服务器任务`:`脚本执行`} #${N.value??``}`),F=S(!1),I=S([]),L=S(0),R=S(1),z=S(20),B=S(null),V=S(null),tt=[{title:`执行中`,value:`running`},{title:`已完成`,value:`completed`},{title:`部分成功`,value:`partial`},{title:`失败`,value:`failed`},{title:`已取消`,value:`cancelled`}],nt=[{title:`脚本`,value:`script`},{title:`服务器`,value:`server_batch`}],rt=we([{title:`ID`,key:`id`,width:72},{title:`类型`,key:`kind`,width:88},{title:`任务`,key:`label`},{title:`状态`,key:`status`,width:100},{title:`进度`,key:`progress`,width:88},{title:`台数`,key:`server_count`,width:72},{title:`操作人`,key:`operator`,width:88},{title:`开始时间`,key:`started_at`,width:168},{title:`操作`,key:`actions`,width:88}]),H=S(null),U=S(!1),W=S(`all`),G=S(`list`),it=S(null),at=S([]),K=null,ot=w(()=>new Map(Qe.value.map(e=>[e.id,e])));function st(e){return e||`—`}function ct(e){if(!e)return 0;try{let t=JSON.parse(e);return Array.isArray(t)?t.length:0}catch{return 0}}function lt(e){if(e.label)return e.label;let t=(e.command||``).replace(/^\[long_task\] /,``);return t.length>48?t.slice(0,48)+`…`:t||`执行 #${e.id}`}function ut(e){let t=(e.stderr||``).trim(),n=(e.stdout||``).trim(),r=(e.message||``).trim(),i=t||n||r||`—`;return{summary:(t||r||n||``).slice(0,200)||`—`,full:i}}let q=w(()=>{if(!H.value?.results)return[];let e=ot.value;return Object.entries(H.value.results).filter(([e])=>e!==`_meta`&&/^\d+$/.test(e)).map(([t,n])=>{let r=Number(t),i=e.get(r),a=String(n.status||``),o=n.phase?String(n.phase):void 0,s=n.exit_code??null,c=ut(n);return{serverId:t,serverIdNum:r,serverName:ee(t,H.value?.server_names,i?.name),serverDomain:i?.domain||``,status:a,phase:o,exitCode:s,summary:c.summary,fullOutput:c.full,failed:ce(a,o,s),pending:de(o)}})}),dt=w(()=>W.value===`failed`?q.value.filter(e=>e.failed):W.value===`success`?q.value.filter(e=>!e.failed&&!e.pending):q.value),J=w(()=>ie(H.value?.results,H.value?.server_ids)),Y=w(()=>q.value.filter(e=>e.failed).map(e=>e.serverName)),X=w(()=>Ae(q.value
|
||
|
|
`)[0]?.trim()||e.summary,i=r&&r!==`—`?` · ${r.slice(0,120)}`:``;return`- ${e.serverName}${t}${n}${i}`}async function xt(e,t){try{await navigator.clipboard.writeText(e),M(t)}catch{M(`复制失败`,`error`)}}async function St(){let e=q.value.filter(e=>e.failed);e.length&&await xt([`执行 #${N.value} · 失败 ${e.length} 台`,...e.map(bt)].join(`
|
||
|
|
`),`已复制失败清单`)}async function Ct(){let e=X.value;if(!e.length)return;let t=[`执行 #${N.value} · 失败分组 ${e.length} 类`];for(let n of e){t.push(`\n[${n.count} 台] ${n.errorKey}`);for(let e of n.rows.slice(0,20))t.push(` - ${e.serverName}`);n.rows.length>20&&t.push(` …及其他 ${n.rows.length-20} 台`)}await xt(t.join(`
|
||
|
|
`),`已复制分组摘要`)}x(B,()=>{R.value=1,Z()}),x(V,()=>{R.value=1,Z()}),x([N,P],([e])=>{$(),H.value=null,e?(W.value=`all`,G.value=`list`,Q(!1)):Z()},{immediate:!0}),ke(e=>Z(e),{enabled:()=>!N.value});let wt=c(()=>{N.value?Q(!1,!0):Z(!0)}),Tt=!1;return ue(async()=>{await $e({all:!0}),Tt=!0}),xe(async()=>{Tt&&(await $e({all:!0}),N.value?await Q(!1,!0):await Z(!0))}),l(()=>{$(),wt()}),(c,l)=>(y(),s(e,{fluid:``,class:`pa-4`},{default:b(()=>[N.value?(y(),f(E,{key:0},[p(`div`,Fe,[v(u,{variant:`text`,"prepend-icon":`mdi-arrow-left`,onClick:l[0]||=e=>h(j).push(`/executions`)},{default:b(()=>[...l[8]||=[i(` 返回列表 `,-1)]]),_:1}),p(`h1`,Ie,T(et.value),1),H.value?(y(),s(g,{key:0,color:h(le)(H.value.status),size:`small`,variant:`tonal`,label:``},{default:b(()=>[i(T(h(te)(H.value.status)),1)]),_:1},8,[`color`])):o(``,!0),v(C),H.value?.long_task&&P.value===`script`?(y(),s(u,{key:1,size:`small`,variant:`tonal`,loading:U.value,onClick:l[1]||=e=>Q(!0)},{default:b(()=>[...l[9]||=[i(` 拉取日志 `,-1)]]),_:1},8,[`loading`])):o(``,!0),P.value===`script`&&H.value&&(H.value.status===`running`||H.value.status===`partial`)?(y(),s(u,{key:2,size:`small`,variant:`text`,color:`error`,onClick:vt},{default:b(()=>[...l[10]||=[i(` 停止 `,-1)]]),_:1})):o(``,!0),P.value===`script`&&H.value&&(H.value.status===`failed`||H.value.status===`partial`)?(y(),s(u,{key:3,size:`small`,variant:`tonal`,color:`primary`,onClick:yt},{default:b(()=>[...l[11]||=[i(` 重试失败项 `,-1)]]),_:1})):o(``,!0)]),U.value&&!H.value?(y(),s(k,{key:0,elevation:`0`,border:``,rounded:`lg`,class:`pa-8 text-center`},{default:b(()=>[v(se,{indeterminate:``,color:`primary`})]),_:1})):H.value?(y(),s(k,{key:1,elevation:`0`,border:``,rounded:`lg`},{default:b(()=>[v(O,null,{default:b(()=>[p(`div`,Le,T(st(H.value.progress))+` · 操作人 `+T(H.value.operator||`—`),1),P.value===`script`?(y(),f(`pre`,Re,T(H.value.command),1)):(y(),s(g,{key:1,size:`small`,variant:`tonal`,color:`info`,class:`mb-3`,label:``},{default:b(()=>[i(T(h(he)(P.value))+` · `+T(H.value.label||H.value.op||`—`),1)]),_:1})),J.value.total?(y(),f(`div`,ze,[v(g,{size:`small`,variant:`tonal`,label:``},{default:b(()=>[i(`共 `+T(J.value.total)+` 台`,1)]),_:1}),J.value.success?(y(),s(g,{key:0,color:`success`,size:`small`,variant:`tonal`,label:``},{default:b(()=>[i(` 成功 `+T(J.value.success),1)]),_:1})):o(``,!0),J.value.failed?(y(),s(g,{key:1,color:`error`,size:`small`,variant:`tonal`,label:``},{default:b(()=>[i(` 失败 `+T(J.value.failed),1)]),_:1})):o(``,!0),J.value.pending?(y(),s(g,{key:2,color:`info`,size:`small`,variant:`tonal`,label:``},{default:b(()=>[i(` 进行中 `+T(J.value.pending),1)]),_:1})):o(``,!0)])):o(``,!0),Y.value.length?(y(),s(ne,{key:3,type:`error`,variant:`tonal`,density:`compact`,class:`mb-3`,title:`失败 ${Y.value.length} 台`},{default:b(()=>[p(`div`,Be,T(Y.value.join(`、`)),1)]),_:1},8,[`title`])):o(``,!0),p(`div`,Ve,[l[20]||=p(`span`,{class:`text-caption text-medium-emphasis`},`筛选`,-1),v(_e,{modelValue:W.value,"onUpdate:modelValue":l[2]||=e=>W.value=e,mandatory:``,density:`compact`,color:`primary`,variant:`outlined`,divided:``},{default:b(()=>[v(u,{value:`all`,size:`small`},{default:b(()=>[...l[12]||=[i(`全部`,-1)]]),_:1}),v(u,{value:`failed`,size:`small`},{default:b(()=>[...l[13]||=[i(`仅失败`,-1)]]),_:1}),v(u,{value:`success`,size:`small`},{default:b(()=>[...l[14]||=[i(`仅成功`,-1)]]),_:1})]),_:1},8,[`modelValue`]),J.value.failed>0?(y(),f(E,{key:0},[v(ye,{vertical:``,class:`mx-1`}),l[19]||=p(`span`,{class:`text-caption text-medium-emphasis`},`视图`,-1),v(_e,{modelValue:G.value,"onUpdate:modelValue":l[3]||=e=>G.value=e,mandatory:``,density:`compact`,color:`primary`,variant:`outlined`,divided:``},{default:b(()=>[v(u,{value:`list`,size:`small`},{default:b(()=>[...l[15]||=[i(`列表`,-1)]]),_:1}),v(u,{value:`group`,size:`small`},{default:b(()=>[...l[16]||=[i(`按错误分组`,-1)]]),_:1})]),_:1},8,[`modelValue`]),v(u,{size:`small`,variant:`tonal`,"prepend-icon":`mdi-content-copy`,onClick:St},{default:b(()=>[...l[17]||=[i(` 复制失败清单 `,-1)]]),_:1}),G.value==
|