import{q as Pe,r as Re,v as $e,x as Ce,y as Le,l as Me,A as Te}from"./vendor-element-CJoVtPsD.js";import{a as We,_ as Ie,f as Ee}from"./index-iyjFO6XY.js";import{f as qe}from"./email-BYiWDIoy.js";import{f as Ae,a as Ne,b as Be,c as ze}from"./tasks-BZsqSMnk.js";import{f as De}from"./system-Bvj77zeB.js";import{M as Ve}from"./MetricGrid-D-x_tNsK.js";import{i as K,r,c as l,v as Fe,Y as Oe,aW as Ue,z as m,A as b,B as i,S as Ge,N as I,Q as g,R as Y,ak as Z,K as je,L as He,E as Qe}from"./vendor-sLgkZK1v.js";import"./vendor-vue-CWkOjFoA.js";import"./vendor-axios-B9ygI19o.js";async function Ke(){const{data:E}=await We.get("/browser_pool/stats");return E}const Ye={class:"page-stack"},Ze={class:"report-hero"},Je={class:"hero-head"},Xe={class:"hero-main"},el={class:"hero-meta app-muted"},ll={key:0},al={key:1,class:"hero-dot"},tl={key:2},ul={class:"mobile-report"},sl={class:"mobile-module-head"},nl={class:"mobile-module-title"},ol={class:"mobile-module-desc app-muted"},rl={class:"mobile-metrics"},il={class:"mobile-metric-label app-muted"},cl={class:"mobile-metric-value"},vl=5e3,dl=2e4,_l={__name:"ReportPage",setup(E){const J=K("refreshStats",null),X=K("adminStats",null),x=r(!1),P=r(!1),p=r(""),R=r(null),o=r(null),n=r(null),_=r(null),d=r(null),w=r(null),h=r(null),c=r(null);r("running");function ee(){try{p.value=new Date().toLocaleString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{p.value=""}}function e(a){const t=Number(a);return Number.isFinite(t)?t:0}function le(a){const t=String(a??"").trim();if(!t)return 0;const s=t.endsWith("%")?t.slice(0,-1):t,u=Number(s);return!Number.isFinite(u)||u<0?0:u>1e3?1e3:u}function $(a){return`${Math.round(le(a))}%`}function ae(a){const t=String(a??"").trim();return!t||t==="manual"?"手动":t==="scheduled"?"系统定时":t==="batch"?"批量执行":t==="resumed"?"断点续跑":t.startsWith("user_scheduled:")?"用户定时":t}const q=l(()=>{const a=X?.value||{},t=e(o.value?.max_concurrent);return[{label:"总用户数",value:e(a.total_users),icon:Pe,tone:"blue"},{label:"今日注册",value:e(a.new_users_today),icon:Re,tone:"green"},{label:"近7天注册",value:e(a.new_users_7d),icon:$e,tone:"purple"},{label:"总账号数",value:e(a.total_accounts),icon:Ce,tone:"cyan"},{label:"VIP用户",value:e(a.vip_users),icon:Le,tone:"orange"},{label:"运行中任务",value:e(o.value?.running_count),icon:Me,tone:"green",sub:t?`并发上限 ${t}`:""},{label:"排队任务",value:e(o.value?.queuing_count),icon:Te,tone:"purple"}]}),v=l(()=>R.value?.today||{}),f=l(()=>R.value?.total||{});l(()=>o.value?.running||[]);const S=l(()=>o.value?.queuing||[]),te=l(()=>e(o.value?.running_count)),ue=l(()=>e(o.value?.queuing_count)),se=l(()=>{const a=h.value?.workers;return Array.isArray(a)?[...a].sort((t,s)=>e(t?.worker_id)-e(s?.worker_id)):[]}),A=l(()=>e(h.value?.total_workers)),C=l(()=>se.value.filter(a=>!!a?.has_browser).length),N=l(()=>e(h.value?.idle_workers)),B=l(()=>e(h.value?.queue_size)),L=l(()=>e(h.value?.active_workers)),z=l(()=>{const a=e(v.value.success_tasks),t=e(v.value.failed_tasks),s=a+t;return s>0?Math.round(a/s*1e3)/10:0}),M=l(()=>e(n.value?.success_rate));l(()=>[{label:"总任务",value:e(v.value.total_tasks),tone:"blue"},{label:"成功",value:e(v.value.success_tasks),tone:"green"},{label:"失败",value:e(v.value.failed_tasks),tone:"red"},{label:"浏览内容",value:e(v.value.total_items),tone:"purple"},{label:"查看附件",value:e(v.value.total_attachments),tone:"cyan"}]),l(()=>[{label:"总任务",value:e(f.value.total_tasks),tone:"blue"},{label:"成功",value:e(f.value.success_tasks),tone:"green"},{label:"失败",value:e(f.value.failed_tasks),tone:"red"},{label:"浏览内容",value:e(f.value.total_items),tone:"purple"},{label:"查看附件",value:e(f.value.total_attachments),tone:"cyan"}]),l(()=>[{label:"总发送",value:e(n.value?.total_sent),tone:"blue"},{label:"成功",value:e(n.value?.total_success),tone:"green"},{label:"失败",value:e(n.value?.total_failed),tone:"red"},{label:"成功率",value:`${M.value}%`,tone:"purple"}]),l(()=>[{label:"注册验证",value:e(n.value?.register_sent),tone:"cyan"},{label:"密码重置",value:e(n.value?.reset_sent),tone:"orange"},{label:"邮箱绑定",value:e(n.value?.bind_sent),tone:"purple"},{label:"任务完成",value:e(n.value?.task_complete_sent),tone:"green"}]),l(()=>[{label:"总反馈",value:e(_.value?.total),tone:"blue"},{label:"待处理",value:e(_.value?.pending),tone:"orange"},{label:"已回复",value:e(_.value?.replied),tone:"green"}]),l(()=>[{label:"总 Worker",value:A.value,tone:"blue"},{label:"活跃 Worker",value:C.value,tone:"green"},{label:"空闲 Worker",value:N.value,tone:"cyan"},{label:"忙碌 Worker",value:L.value,tone:"orange"},{label:"队列",value:B.value,tone:"purple"}]);const ne=l(()=>(c.value?.schedule_enabled??0)===1),oe=l(()=>c.value?.schedule_time||"-"),re=l(()=>c.value?.schedule_browse_type||"-"),ie=l(()=>String(c.value?.schedule_weekdays||"").trim());l(()=>{const a=ie.value;if(!a)return"";const t={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},s=a.split(",").map(u=>u.trim()).filter(Boolean);return s.length?s.map(u=>t[Number(u)]||u).join("、"):a});const ce=l(()=>(c.value?.proxy_enabled??0)===1);l(()=>c.value?.proxy_api_url||"");const D=l(()=>e(c.value?.proxy_expire_minutes)),T=l(()=>e(c.value?.max_concurrent_global)),ve=l(()=>e(c.value?.max_concurrent_per_account)),de=l(()=>e(c.value?.max_screenshot_concurrent)),_e=l(()=>{const a=e(o.value?.running_count),t=e(o.value?.queuing_count),s=e(o.value?.max_concurrent);return`运行中 ${a} / 排队 ${t} / 并发上限 ${s||T.value||"-"}`}),be=l(()=>q.value.map(a=>({label:a.label,value:a.sub?`${a.value}(${a.sub})`:a.value}))),fe=l(()=>[{label:"今日总任务",value:e(v.value.total_tasks)},{label:"今日成功",value:e(v.value.success_tasks)},{label:"今日失败",value:e(v.value.failed_tasks)},{label:"今日成功率",value:`${z.value}%`},{label:"累计任务",value:e(f.value.total_tasks)},{label:"累计成功",value:e(f.value.success_tasks)}]),me=l(()=>[{label:"运行中",value:te.value},{label:"排队中",value:ue.value},{label:"并发上限",value:e(o.value?.max_concurrent)||T.value||"-"},{label:"排队首条来源",value:ae(S.value[0]?.source)},{label:"排队首条状态",value:S.value[0]?.detail_status||S.value[0]?.status||"-"},{label:"最长等待",value:S.value[0]?.elapsed_display||"-"}]),pe=l(()=>[{label:"总发送",value:e(n.value?.total_sent)},{label:"成功",value:e(n.value?.total_success)},{label:"失败",value:e(n.value?.total_failed)},{label:"成功率",value:`${M.value}%`},{label:"注册验证",value:e(n.value?.register_sent)},{label:"重置密码",value:e(n.value?.reset_sent)}]),he=l(()=>[{label:"总反馈",value:e(_.value?.total)},{label:"待处理",value:e(_.value?.pending)},{label:"已回复",value:e(_.value?.replied)}]),ke=l(()=>[{label:"CPU",value:$(d.value?.cpu_percent)},{label:"内存",value:$(d.value?.memory_percent)},{label:"磁盘",value:$(d.value?.disk_percent)},{label:"容器状态",value:w.value?.status||"-"},{label:"容器名",value:w.value?.container_name||"-"},{label:"容器运行",value:w.value?.uptime||"-"}]),ge=l(()=>[{label:"总 Worker",value:A.value},{label:"活跃 Worker",value:C.value},{label:"忙碌 Worker",value:L.value},{label:"空闲 Worker",value:N.value},{label:"任务队列",value:B.value}]),ye=l(()=>[{label:"定时任务",value:ne.value?"启用":"关闭"},{label:"执行时间",value:oe.value||"-"},{label:"浏览类型",value:re.value||"-"},{label:"代理",value:ce.value?"启用":"关闭"},{label:"代理有效期",value:D.value?`${D.value} 分钟`:"-"},{label:"全局并发",value:T.value||"-"},{label:"单账号并发",value:ve.value||"-"},{label:"截图并发",value:de.value||"-"}]),we=l(()=>[{key:"overview",title:"平台概览",desc:p.value?`更新 ${p.value}`:"核心指标",tone:"blue",items:be.value},{key:"task",title:"任务概览",desc:e(v.value.total_tasks)>0?`今日成功率 ${z.value}%`:"今日暂无任务",tone:"purple",items:fe.value},{key:"queue",title:"队列监控",desc:_e.value,tone:"blue",items:me.value},{key:"email",title:"邮件报表",desc:`成功率 ${M.value}%`,tone:"cyan",items:pe.value},{key:"feedback",title:"反馈概览",desc:`待处理 ${e(_.value?.pending)} 条`,tone:"orange",items:he.value},{key:"resource",title:"系统资源",desc:d.value?.uptime?`运行 ${d.value.uptime}`:"运行状态获取中",tone:"green",items:ke.value},{key:"worker",title:"截图线程池",desc:`活跃 ${C.value} · 忙碌 ${L.value}`,tone:"cyan",items:ge.value},{key:"config",title:"配置概览",desc:"并发 / 代理 / 定时任务",tone:"red",items:ye.value}]);async function V(a={}){const t=a.showLoading??!0;if(!P.value){P.value=!0,t&&(x.value=!0);try{const[s,u,k,U,G,j,H,Q]=await Promise.allSettled([Ae(),Ne(),qe(),Ee(),Be(),ze(),Ke(),De()]);s.status==="fulfilled"&&(R.value=s.value),u.status==="fulfilled"&&(o.value=u.value),k.status==="fulfilled"&&(n.value=k.value),U.status==="fulfilled"&&(_.value=U.value),G.status==="fulfilled"&&(d.value=G.value),j.status==="fulfilled"&&(w.value=j.value),H.status==="fulfilled"&&(h.value=H.value),Q.status==="fulfilled"&&(c.value=Q.value),await J?.(),ee()}finally{P.value=!1,t&&(x.value=!1)}}}let y=null;function Se(){return typeof document>"u"?!1:document.visibilityState==="hidden"}function xe(){return Se()?dl:vl}function F(){y&&(clearTimeout(y),y=null)}function W(){F(),y=window.setTimeout(async()=>{y=null,await V({showLoading:!1}).catch(()=>{}),W()},xe())}function O(){W()}return Fe(()=>{V({showLoading:!1}).catch(()=>{}).finally(()=>{W()}),window.addEventListener("visibilitychange",O)}),Oe(()=>{F(),window.removeEventListener("visibilitychange",O)}),(a,t)=>{const s=Ue("el-card");return b(),m("div",Ye,[i("section",Ze,[i("div",Je,[i("div",Xe,[t[0]||(t[0]=i("h2",null,"报表中心",-1)),i("div",el,[p.value?(b(),m("span",ll,"更新时间:"+g(p.value),1)):I("",!0),d.value?.uptime?(b(),m("span",al,"·")):I("",!0),d.value?.uptime?(b(),m("span",tl,"运行 "+g(d.value.uptime),1)):I("",!0)])])]),Ge(Ve,{class:"hero-overview-grid",items:q.value,loading:x.value,"min-width":165},null,8,["items","loading"])]),i("section",ul,[(b(!0),m(Y,null,Z(we.value,u=>(b(),je(s,{key:u.key,shadow:"never",class:Qe(["mobile-module-card",`mobile-tone-${u.tone}`]),"body-style":{padding:"12px"}},{default:He(()=>[i("div",sl,[i("div",nl,g(u.title),1),i("div",ol,g(u.desc),1)]),i("div",rl,[(b(!0),m(Y,null,Z(u.items,k=>(b(),m("div",{key:`${u.key}-${k.label}`,class:"mobile-metric-item"},[i("div",il,g(k.label),1),i("div",cl,g(k.value),1)]))),128))])]),_:2},1032,["class"]))),128))])])}}},Sl=Ie(_l,[["__scopeId","data-v-59b81fef"]]);export{Sl as default};