Files
zsglpt/static/admin/assets/ReportPage-BtciWYlz.js

2 lines
16 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
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,r as m,c,i as D,o as pe,a as B,b as s,d as a,t as l,w as t,e as S,f as fe,g as me,h as p,j as n,F as ke,k as ye,l as g,m as C}from"./index-Do26tg8I.js";import{f as ge}from"./email-DiVz51rK.js";import{f as be,a as he,b as xe,c as we}from"./tasks-Bpfaxqqb.js";import{f as Se,a as Re,b as Ce}from"./update-B-ZRn1LV.js";const Ne={class:"page-stack"},Te={class:"app-page-title"},Ae={class:"title-group"},Me={class:"app-muted"},Pe={class:"toolbar"},Be={class:"metric-label"},Ue={class:"metric-value"},je={class:"section-head"},ze={class:"sys-grid"},Ee={class:"sys-item"},Le={class:"sys-v"},qe={class:"sys-sub app-muted"},Fe={class:"sys-item"},Ve={class:"sys-v"},$e={class:"sys-sub app-muted"},De={class:"sys-item"},Ie={class:"sys-v"},We={class:"sys-sub app-muted"},Ge={class:"section-head"},Ze={class:"section-head"},He={class:"desc-inline app-muted"},Je={key:2,class:"desc-inline app-muted"},Ke={class:"section-head"},Oe={class:"kv"},Qe={class:"kv-v ok"},Xe={class:"kv"},Ye={class:"kv-v err"},es={class:"kv"},ss={class:"kv-v"},ts={class:"kv"},ls={class:"kv-v"},as={class:"kv"},us={class:"kv-v"},ns={class:"kv"},ds={class:"kv-v ok"},os={class:"kv"},is={class:"kv-v err"},vs={class:"kv"},rs={class:"kv-v"},cs={class:"kv"},_s={class:"kv-v"},ps={class:"kv"},fs={class:"kv-v"},ms={class:"section-head"},ks={class:"app-muted"},ys={key:0,class:"table-wrap"},gs={key:0,class:"help app-muted"},bs={key:1,class:"help app-muted"},hs={class:"section-head"},xs={class:"kv"},ws={class:"kv-v"},Ss={class:"kv"},Rs={class:"kv-v ok"},Cs={class:"kv"},Ns={class:"kv-v err"},Ts={class:"type-grid"},As={class:"type-item"},Ms={class:"type-v"},Ps={class:"type-item"},Bs={class:"type-v"},Us={class:"type-item"},js={class:"type-v"},zs={class:"type-item"},Es={class:"type-v"},Ls={class:"kv"},qs={class:"kv-v"},Fs={class:"kv"},Vs={class:"kv-v warn"},$s={class:"kv"},Ds={class:"kv-v ok"},Is={__name:"ReportPage",setup(Ws){const X=D("refreshStats",null),Y=D("adminStats",null),ee=D("refreshNavBadges",null),z=m(!1),E=m(""),F=m(null),N=m(null),R=m(null),L=m(null),i=m(null),x=m(null),b=m(null),T=m(null),U=m(""),q=m(null),V=m(0);function se(){try{E.value=new Date().toLocaleString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{E.value=""}}function u(d){const e=Number(d);return Number.isFinite(e)?e:0}function k(d){const e=String(d??"").trim();if(!e)return 0;const f=e.endsWith("%")?e.slice(0,-1):e,_=Number(f);return!Number.isFinite(_)||_<0?0:_>1e3?1e3:_}function I(d){const e=String(d??"").trim();return e?e.length>12?`${e.slice(0,12)}`:e:"-"}function te(d){const e=String(d??"").trim();return!e||e==="manual"?"手动":e==="scheduled"?"系统定时":e==="batch"?"批量执行":e==="resumed"?"断点续跑":e.startsWith("user_scheduled:")?"用户定时":e}const le=c(()=>{const d=Y?.value||{};return[{label:"总用户数",value:u(d.total_users)},{label:"今日注册",value:u(d.new_users_today)},{label:"近7天注册",value:u(d.new_users_7d)},{label:"总账号数",value:u(d.total_accounts)},{label:"VIP用户",value:u(d.vip_users)},{label:"运行中任务",value:u(N.value?.running_count)},{label:"排队任务",value:u(N.value?.queuing_count)},{label:"密码重置待处理",value:u(V.value)}]}),A=c(()=>F.value?.today||{}),j=c(()=>F.value?.total||{}),W=c(()=>N.value?.running||[]),$=c(()=>N.value?.queuing||[]),G=c(()=>{const d=u(A.value.success_tasks),e=u(A.value.failed_tasks),f=d+e;return f>0?Math.round(d/f*1e3)/10:0}),Z=c(()=>u(R.value?.success_rate)),ae=c(()=>(b.value?.schedule_enabled??0)===1),ue=c(()=>b.value?.schedule_time||"-"),ne=c(()=>b.value?.schedule_browse_type||"-"),H=c(()=>String(b.value?.schedule_weekdays||"").trim()),de=c(()=>{const d=H.value;if(!d)return"";const e={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},f=d.split(",").map(_=>_.trim()).filter(Boolean);return f.length?f.map(_=>e[Number(_)]||_).join("、"):d}),J=c(()=>(b.value?.proxy_enabled??0)===1),K=c(()=>b.value?.proxy_api_url||""),oe=c(()=>u(b.value?.proxy_expire_minutes)),O=c(()=>u(b.value?.max_concurrent_global)),ie=c(()=>u(b.value?.max_concurrent_per_account)),ve=c(()=>u(b.value?.max_screenshot_concurrent)),re=c(()=>{const d=u(N.value?.running_count),e=u(N.value?.queuing_count),f=u(N.value?.max_concurrent);return`运行中 ${d} / 排队 ${e} / 并发上限 ${f||O.value||"-"}`});async function Q(){if(!z.value){z.value=!0;try{const[d,e,f,_,o,w,y,P,v,M]=await Promise.allSettled([be(),he(),ge(),fe(),me(),xe(),we(),Se(),Re(),Ce()]);if(F.value=d.status==="fulfilled"?d.value:null,N.value=e.status==="fulfilled"?e.value:null,R.value=f.status==="fulfilled"?f.value:null,L.value=_.status==="fulfilled"?_.value:null,V.value=o.status==="fulfilled"&&Array.isArray(o.value)?o.value.length:0,i.value=w.status==="fulfilled"?w.value:null,x.value=y.status==="fulfilled"?y.value:null,b.value=P.status==="fulfilled"?P.value:null,v.status==="fulfilled"){const h=v.value;h?.ok?(T.value=h.data||null,U.value=""):(T.value=null,U.value=h?.error||"未发现更新状态Update-Agent 可能未运行)")}else T.value=null,U.value="";q.value=M.status==="fulfilled"&&M.value?.ok?M.value.data:null,await ee?.({pendingResets:V.value}),await X?.(),se()}finally{z.value=!1}}}return pe(Q),(d,e)=>{const f=S("el-button"),_=S("el-card"),o=S("el-col"),w=S("el-row"),y=S("el-tag"),P=S("el-progress"),v=S("el-descriptions-item"),M=S("el-descriptions"),h=S("el-table-column"),ce=S("el-table");return p(),B("div",Ne,[s("div",Te,[s("div",Ae,[e[0]||(e[0]=s("h2",null,"报表",-1)),s("span",Me,l(E.value?`更新时间:${E.value}`:""),1)]),s("div",Pe,[a(f,{loading:z.value,onClick:Q},{default:t(()=>[...e[1]||(e[1]=[n("刷新",-1)])]),_:1},8,["loading"])])]),a(w,{gutter:12},{default:t(()=>[(p(!0),B(ke,null,ye(le.value,r=>(p(),g(o,{key:r.label,xs:12,sm:12,md:6},{default:t(()=>[a(_,{shadow:"never",class:"card","body-style":{padding:"16px"}},{default:t(()=>[s("div",Be,l(r.label),1),s("div",Ue,l(r.value),1)]),_:2},1024)]),_:2},1024))),128))]),_:1}),a(w,{gutter:12},{default:t(()=>[a(o,{xs:24,md:14},{default:t(()=>[a(_,{shadow:"never",class:"card","body-style":{padding:"16px"}},{default:t(()=>[s("div",je,[e[2]||(e[2]=s("h3",{class:"section-title"},"系统状态",-1)),i.value?.uptime?(p(),g(y,{key:0,effect:"light",type:"info"},{default:t(()=>[n("运行 "+l(i.value.uptime),1)]),_:1})):C("",!0)]),s("div",ze,[s("div",Ee,[e[3]||(e[3]=s("div",{class:"sys-k app-muted"},"CPU",-1)),s("div",Le,[a(P,{percentage:Math.round(k(i.value?.cpu_percent)),status:k(i.value?.cpu_percent)>=90?"exception":k(i.value?.cpu_percent)>=75?"warning":"success"},null,8,["percentage","status"])]),s("div",qe,l(Math.round(k(i.value?.cpu_percent)))+"%",1)]),s("div",Fe,[e[4]||(e[4]=s("div",{class:"sys-k app-muted"},"内存",-1)),s("div",Ve,[a(P,{percentage:Math.round(k(i.value?.memory_percent)),status:k(i.value?.memory_percent)>=90?"exception":k(i.value?.memory_percent)>=75?"warning":"success"},null,8,["percentage","status"])]),s("div",$e,l(i.value?.memory_used||"-")+" / "+l(i.value?.memory_total||"-")+""+l(Math.round(k(i.value?.memory_percent)))+"% ",1)]),s("div",De,[e[5]||(e[5]=s("div",{class:"sys-k app-muted"},"磁盘",-1)),s("div",Ie,[a(P,{percentage:Math.round(k(i.value?.disk_percent)),status:k(i.value?.disk_percent)>=90?"exception":k(i.value?.disk_percent)>=75?"warning":"success"},null,8,["percentage","status"])]),s("div",We,l(i.value?.disk_used||"-")+" / "+l(i.value?.disk_total||"-")+""+l(Math.round(k(i.value?.disk_percent)))+"% ",1)])]),e[7]||(e[7]=s("div",{class:"divider"},null,-1)),s("div",Ge,[e[6]||(e[6]=s("h3",{class:"section-title"},"容器状态",-1)),x.value?.status?(p(),g(y,{key:0,effect:"light",type:x.value?.running?"success":"info"},{default:t(()=>[n(l(x.value?.status),1)]),_:1},8,["type"])):C("",!0)]),a(M,{border:"",column:2,size:"small"},{default:t(()=>[a(v,{label:"容器名"},{default:t(()=>[n(l(x.value?.container_name||"-"),1)]),_:1}),a(v,{label:"运行时长"},{default:t(()=>[n(l(x.value?.uptime||"-"),1)]),_:1}),a(v,{label:"CPU"},{default:t(()=>[n(l(x.value?.cpu_percent||"-"),1)]),_:1}),a(v,{label:"内存"},{default:t(()=>[n(l(x.value?.memory_usage||"-"),1)]),_:1}),a(v,{label:"内存上限"},{default:t(()=>[n(l(x.value?.memory_limit||"-"),1)]),_:1}),a(v,{label:"内存占比"},{default:t(()=>[n(l(x.value?.memory_percent||"-"),1)]),_:1})]),_:1})]),_:1})]),_:1}),a(o,{xs:24,md:10},{default:t(()=>[a(_,{shadow:"never",class:"card","body-style":{padding:"16px"}},{default:t(()=>[s("div",Ze,[e[9]||(e[9]=s("h3",{class:"section-title"},"配置与更新",-1)),T.value?.update_available?(p(),g(y,{key:0,effect:"light",type:"warning"},{default:t(()=>[...e[8]||(e[8]=[n("发现新版本",-1)])]),_:1})):C("",!0)]),a(M,{border:"",column:1,size:"small"},{default:t(()=>[a(v,{label:"定时任务"},{default:t(()=>[ae.value?(p(),g(y,{key:0,type:"success",effect:"light"},{default:t(()=>[...e[10]||(e[10]=[n("启用",-1)])]),_:1})):(p(),g(y,{key:1,type:"info",effect:"light"},{default:t(()=>[...e[11]||(e[11]=[n("关闭",-1)])]),_:1})),s("span",He,l(ue.value)+" / "+l(ne.value),1)]),_:1}),a(v,{label:"执行日期"},{default:t(()=>[s("span",null,l(de.value||H.value||"-"),1)]),_:1}),a(v,{label:"并发配置"},{default:t(()=>[s("span",null,"全局 "+l(O.value||"-")+" / 单账号 "+l(ie.value||"-")+" / 截图 "+l(ve.value||"-"),1)]),_:1}),a(v,{label:"代理"},{default:t(()=>[J.value?(p(),g(y,{key:0,type:"success",effect:"light"},{default:t(()=>[...e[12]||(e[12]=[n("启用",-1)])]),_:1})):(p(),g(y,{key:1,type:"info",effect:"light"},{default:t(()=>[...e[13]||(e[13]=[n("关闭",-1)])]),_:1})),J.value&&K.value?(p(),B("span",Je,l(K.value),1)):C("",!0)]),_:1}),a(v,{label:"代理有效期"},{default:t(()=>[n(l(oe.value||"-")+" 分钟",1)]),_:1})]),_:1}),e[14]||(e[14]=s("div",{class:"divider"},null,-1)),e[15]||(e[15]=s("div",{class:"sub-title"},"版本信息",-1)),a(M,{border:"",column:1,size:"small"},{default:t(()=>[a(v,{label:"本地版本(commit)"},{default:t(()=>[n(l(I(T.value?.local_commit)),1)]),_:1}),a(v,{label:"远端版本(commit)"},{default:t(()=>[n(l(I(T.value?.remote_commit)),1)]),_:1}),a(v,{label:"最近检查时间"},{default:t(()=>[n(l(T.value?.checked_at||"-"),1)]),_:1}),U.value?(p(),g(v,{key:0,label:"更新状态"},{default:t(()=>[n(l(U.value),1)]),_:1})):C("",!0),q.value?.job_id?(p(),g(v,{key:1,label:"最近更新"},{default:t(()=>[s("span",null,"job "+l(q.value.job_id)+" / "+l(q.value?.status||"-"),1)]),_:1})):C("",!0)]),_:1})]),_:1})]),_:1})]),_:1}),a(w,{gutter:12},{default:t(()=>[a(o,{xs:24,md:14},{default:t(()=>[a(_,{shadow:"never",class:"card","body-style":{padding:"16px"}},{default:t(()=>[s("div",Ke,[e[16]||(e[16]=s("h3",{class:"section-title"},"任务报表(今日)",-1)),G.value>0?(p(),g(y,{key:0,effect:"light",type:"success"},{default:t(()=>[n("成功率 "+l(G.value)+"%",1)]),_:1})):C("",!0)]),a(w,{gutter:12},{default:t(()=>[a(o,{xs:12,sm:6},{default:t(()=>[s("div",Oe,[s("div",Qe,l(u(A.value.success_tasks)),1),e[17]||(e[17]=s("div",{class:"kv-k app-muted"},"成功任务",-1))])]),_:1}),a(o,{xs:12,sm:6},{default:t(()=>[s("div",Xe,[s("div",Ye,l(u(A.value.failed_tasks)),1),e[18]||(e[18]=s("div",{class:"kv-k app-muted"},"失败任务",-1))])]),_:1}),a(o,{xs:12,sm:6},{default:t(()=>[s("div",es,[s("div",ss,l(u(A.value.total_tasks)),1),e[19]||(e[19]=s("div",{class:"kv-k app-muted"},"总任务",-1))])]),_:1}),a(o,{xs:12,sm:6},{default:t(()=>[s("div",ts,[s("div",ls,l(u(A.value.total_items)),1),e[20]||(e[20]=s("div",{class:"kv-k app-muted"},"浏览内容",-1))])]),_:1}),a(o,{xs:12,sm:6},{default:t(()=>[s("div",as,[s("div",us,l(u(A.value.total_attachments)),1),e[21]||(e[21]=s("div",{class:"kv-k app-muted"},"查看附件",-1))])]),_:1})]),_:1}),e[28]||(e[28]=s("div",{class:"divider"},null,-1)),e[29]||(e[29]=s("div",{class:"section-head"},[s("h3",{class:"section-title"},"任务报表(累计)")],-1)),a(w,{gutter:12},{default:t(()=>[a(o,{xs:12,sm:6},{default:t(()=>[s("div",ns,[s("div",ds,l(u(j.value.success_tasks)),1),e[22]||(e[22]=s("div",{class:"kv-k app-muted"},"成功任务",-1))])]),_:1}),a(o,{xs:12,sm:6},{default:t(()=>[s("div",os,[s("div",is,l(u(j.value.failed_tasks)),1),e[23]||(e[23]=s("div",{class:"kv-k app-muted"},"失败任务",-1))])]),_:1}),a(o,{xs:12,sm:6},{default:t(()=>[s("div",vs,[s("div",rs,l(u(j.value.total_tasks)),1),e[24]||(e[24]=s("div",{class:"kv-k app-muted"},"总任务",-1))])]),_:1}),a(o,{xs:12,sm:6},{default:t(()=>[s("div",cs,[s("div",_s,l(u(j.value.total_items)),1),e[25]||(e[25]=s("div",{class:"kv-k app-muted"},"浏览内容",-1))])]),_:1}),a(o,{xs:12,sm:6},{default:t(()=>[s("div",ps,[s("div",fs,l(u(j.value.total_attachments)),1),e[26]||(e[26]=s("div",{class:"kv-k app-muted"},"查看附件",-1))])]),_:1})]),_:1}),e[30]||(e[30]=s("div",{class:"divider"},null,-1)),s("div",ms,[e[27]||(e[27]=s("h3",{class:"section-title"},"当前队列",-1)),s("span",ks,l(re.value),1)]),W.value.length||$.value.length?(p(),B("div",ys,[a(ce,{data:W.value.slice(0,8),size:"small",style:{width:"100%"}},{default:t(()=>[a(h,{label:"用户","min-width":"140"},{default:t(({row:r})=>[n(l(r.user_username||"-"),1)]),_:1}),a(h,{label:"账号","min-width":"160"},{default:t(({row:r})=>[n(l(r.username||"-"),1)]),_:1}),a(h,{label:"来源",width:"100"},{default:t(({row:r})=>[n(l(te(r.source)),1)]),_:1}),a(h,{label:"类型",width:"100"},{default:t(({row:r})=>[n(l(r.browse_type||"-"),1)]),_:1}),a(h,{label:"进度",width:"110"},{default:t(({row:r})=>[n(l(r.progress_items)+"/"+l(r.progress_attachments),1)]),_:1}),a(h,{label:"耗时",width:"110"},{default:t(({row:r})=>[n(l(r.elapsed_display||"-"),1)]),_:1}),a(h,{label:"状态","min-width":"140"},{default:t(({row:r})=>[n(l(r.detail_status||r.status||"-"),1)]),_:1})]),_:1},8,["data"]),$.value.length?(p(),B("div",gs,"排队中:"+l($.value.length)+" 个任务",1)):C("",!0)])):(p(),B("div",bs,"当前无运行/排队任务"))]),_:1})]),_:1}),a(o,{xs:24,md:10},{default:t(()=>[a(_,{shadow:"never",class:"card","body-style":{padding:"16px"}},{default:t(()=>[s("div",hs,[e[31]||(e[31]=s("h3",{class:"section-title"},"邮件报表",-1)),Z.value>0?(p(),g(y,{key:0,effect:"light",type:"success"},{default:t(()=>[n("成功率 "+l(Z.value)+"%",1)]),_:1})):C("",!0)]),a(w,{gutter:12},{default:t(()=>[a(o,{span:8},{default:t(()=>[s("div",xs,[s("div",ws,l(u(R.value?.total_sent)),1),e[32]||(e[32]=s("div",{class:"kv-k app-muted"},"总发送",-1))])]),_:1}),a(o,{span:8},{default:t(()=>[s("div",Ss,[s("div",Rs,l(u(R.value?.total_success)),1),e[33]||(e[33]=s("div",{class:"kv-k app-muted"},"成功",-1))])]),_:1}),a(o,{span:8},{default:t(()=>[s("div",Cs,[s("div",Ns,l(u(R.value?.total_failed)),1),e[34]||(e[34]=s("div",{class:"kv-k app-muted"},"失败",-1))])]),_:1})]),_:1}),e[42]||(e[42]=s("div",{class:"divider"},null,-1)),e[43]||(e[43]=s("div",{class:"sub-title"},"类型统计",-1)),s("div",Ts,[s("div",As,[s("div",Ms,l(u(R.value?.register_sent)),1),e[35]||(e[35]=s("div",{class:"type-k app-muted"},"注册验证",-1))]),s("div",Ps,[s("div",Bs,l(u(R.value?.reset_sent)),1),e[36]||(e[36]=s("div",{class:"type-k app-muted"},"密码重置",-1))]),s("div",Us,[s("div",js,l(u(R.value?.bind_sent)),1),e[37]||(e[37]=s("div",{class:"type-k app-muted"},"邮箱绑定",-1))]),s("div",zs,[s("div",Es,l(u(R.value?.task_complete_sent)),1),e[38]||(e[38]=s("div",{class:"type-k app-muted"},"任务完成",-1))])]),e[44]||(e[44]=s("div",{class:"divider"},null,-1)),e[45]||(e[45]=s("div",{class:"section-head"},[s("h3",{class:"section-title"},"反馈概览")],-1)),a(w,{gutter:12},{default:t(()=>[a(o,{span:8},{default:t(()=>[s("div",Ls,[s("div",qs,l(u(L.value?.total)),1),e[39]||(e[39]=s("div",{class:"kv-k app-muted"},"总反馈",-1))])]),_:1}),a(o,{span:8},{default:t(()=>[s("div",Fs,[s("div",Vs,l(u(L.value?.pending)),1),e[40]||(e[40]=s("div",{class:"kv-k app-muted"},"待处理",-1))])]),_:1}),a(o,{span:8},{default:t(()=>[s("div",$s,[s("div",Ds,l(u(L.value?.replied)),1),e[41]||(e[41]=s("div",{class:"kv-k app-muted"},"已回复",-1))])]),_:1})]),_:1})]),_:1})]),_:1})]),_:1})])}}},Ks=_e(Is,[["__scopeId","data-v-e84f7d23"]]);export{Ks as default};