Files
zsglpt/static/admin/assets/ReportPage-D6vDD1zK.js
yuyx 89f3fd9759 feat: 安全增强 + 删除密码重置申请功能 + 登录提醒开关
安全增强:
- 新增 SSRF、XXE、模板注入、敏感路径探测检测规则
- security/constants.py: 添加新的威胁类型和检测模式
- security/threat_detector.py: 实现新检测逻辑

删除密码重置申请功能:
- 移除 /api/password_resets 相关API
- 删除 password_reset_requests 数据库表
- 前端移除密码重置申请页面和菜单
- 用户只能通过邮��找回密码,未绑定邮箱需联系管理员

登录提醒全局开关:
- email_service.py: 添加 login_alert_enabled 字段
- routes/api_auth.py: 检查开关状态再发送登录提醒
- EmailPage.vue: 添加新设备登录提醒开关

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-27 12:08:36 +08:00

2 lines
20 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 xe,i as ae,r as m,c as r,u as Se,a as Ce,t as ie,k as Re,s as qe,l as Te,b as Me,o as ze,d as f,e as h,f as c,g as e,h as a,j as g,m as k,w as l,n,p as s,F as W,q as Ne,v as B,x as Ae,y as Ue,z as Be,A as Pe,B as Ve,C as Ee,D as je,E as De}from"./index-C9w-iZIr.js";import{f as Le}from"./email-BghJNgj1.js";import{f as $e,a as Fe,b as Ie,c as We}from"./tasks-Cx_Yf55V.js";import{f as Ge,a as Ze,b as He}from"./update-D34iQbO6.js";const Je={class:"page-stack"},Ke={class:"hero"},Oe={class:"hero-top"},Qe={class:"hero-title"},Xe={class:"hero-title-row"},Ye={class:"hero-meta app-muted"},et={key:0},tt={key:1,class:"hero-dot"},st={key:2},lt={class:"hero-actions"},at={class:"kpi-grid"},it={class:"kpi-icon"},nt={class:"kpi-body"},ut={class:"kpi-value"},ot={class:"kpi-label"},dt={key:0,class:"kpi-sub app-muted"},ct={class:"panel-head"},rt={class:"head-left"},vt={class:"head-icon tone-purple"},_t={class:"head-text"},pt={class:"panel-sub app-muted"},ft={class:"tile-section"},mt={class:"tile-grid"},gt={class:"tile"},bt={class:"tile-v"},ht={class:"tile"},kt={class:"tile-v ok"},yt={class:"tile"},wt={class:"tile-v err"},xt={class:"tile"},St={class:"tile-v"},Ct={class:"tile"},Rt={class:"tile-v"},qt={class:"tile-section"},Tt={class:"tile-grid"},Mt={class:"tile"},zt={class:"tile-v"},Nt={class:"tile"},At={class:"tile-v ok"},Ut={class:"tile"},Bt={class:"tile-v err"},Pt={class:"tile"},Vt={class:"tile-v"},Et={class:"tile"},jt={class:"tile-v"},Dt={class:"panel-head"},Lt={class:"head-left"},$t={class:"head-icon tone-blue"},Ft={class:"head-text"},It={class:"panel-sub app-muted"},Wt={class:"tab-label"},Gt={class:"table-wrap"},Zt={key:0,class:"help app-muted"},Ht={class:"tab-label"},Jt={class:"table-wrap"},Kt={key:0,class:"help app-muted"},Ot={class:"panel-head"},Qt={class:"head-left"},Xt={class:"head-icon tone-cyan"},Yt={class:"head-text"},es={class:"panel-sub app-muted"},ts={class:"tile-grid tile-grid--3"},ss={class:"tile"},ls={class:"tile-v"},as={class:"tile"},is={class:"tile-v ok"},ns={class:"tile"},us={class:"tile-v err"},os={class:"type-grid"},ds={class:"type-item"},cs={class:"type-v"},rs={class:"type-item"},vs={class:"type-v"},_s={class:"type-item"},ps={class:"type-v"},fs={class:"type-item"},ms={class:"type-v"},gs={class:"panel-head"},bs={class:"head-left"},hs={class:"head-icon tone-orange"},ks={class:"head-text"},ys={class:"panel-sub app-muted"},ws={class:"tile-grid tile-grid--3"},xs={class:"tile"},Ss={class:"tile-v"},Cs={class:"tile"},Rs={class:"tile-v warn"},qs={class:"tile"},Ts={class:"tile-v ok"},Ms={class:"panel-head"},zs={class:"head-left"},Ns={class:"head-icon tone-green"},As={class:"resource-grid"},Us={class:"resource-item"},Bs={class:"resource-sub app-muted"},Ps={class:"resource-item"},Vs={class:"resource-sub app-muted"},Es={class:"resource-item"},js={class:"resource-sub app-muted"},Ds={class:"panel-head"},Ls={class:"head-left"},$s={class:"head-icon tone-red"},Fs={class:"config-grid"},Is={class:"config-item"},Ws={class:"config-v"},Gs={class:"config-inline app-muted"},Zs={class:"config-sub app-muted"},Hs={class:"config-item"},Js={class:"config-v"},Ks={key:2,class:"config-inline app-muted"},Os={class:"config-sub app-muted"},Qs={class:"config-item"},Xs={class:"config-v"},Ys={__name:"ReportPage",setup(el){const ne=ae("refreshStats",null),ue=ae("adminStats",null),j=m(!1),D=m(""),$=m(null),y=m(null),R=m(null),P=m(null),v=m(null),M=m(null),w=m(null),z=m(null),A=m(""),V=m(null),G=m("running");function oe(){try{D.value=new Date().toLocaleString("zh-CN",{hour12:!1,timeZone:"Asia/Shanghai"})}catch{D.value=""}}function i(o){const t=Number(o);return Number.isFinite(t)?t:0}function b(o){const t=String(o??"").trim();if(!t)return 0;const d=t.endsWith("%")?t.slice(0,-1):t,p=Number(d);return!Number.isFinite(p)||p<0?0:p>1e3?1e3:p}function Z(o){const t=String(o??"").trim();return t?t.length>12?`${t.slice(0,12)}`:t:"-"}function H(o){const t=String(o??"").trim();return!t||t==="manual"?"手动":t==="scheduled"?"系统定时":t==="batch"?"批量执行":t==="resumed"?"断点续跑":t.startsWith("user_scheduled:")?"用户定时":t}const de=r(()=>{const o=ue?.value||{},t=i(y.value?.max_concurrent);return[{label:"总用户数",value:i(o.total_users),icon:Se,tone:"blue"},{label:"今日注册",value:i(o.new_users_today),icon:Ce,tone:"green"},{label:"近7天注册",value:i(o.new_users_7d),icon:ie,tone:"purple"},{label:"总账号数",value:i(o.total_accounts),icon:Re,tone:"cyan"},{label:"VIP用户",value:i(o.vip_users),icon:qe,tone:"orange"},{label:"运行中任务",value:i(y.value?.running_count),icon:Te,tone:"green",sub:t?`并发上限 ${t}`:""},{label:"排队任务",value:i(y.value?.queuing_count),icon:Me,tone:"purple"}]}),x=r(()=>$.value?.today||{}),E=r(()=>$.value?.total||{}),ce=r(()=>y.value?.running||[]),re=r(()=>y.value?.queuing||[]),J=r(()=>i(y.value?.running_count)),K=r(()=>i(y.value?.queuing_count)),L=r(()=>{const o=i(x.value.success_tasks),t=i(x.value.failed_tasks),d=o+t;return d>0?Math.round(o/d*1e3)/10:0}),ve=r(()=>i(R.value?.success_rate)),_e=r(()=>(w.value?.schedule_enabled??0)===1),pe=r(()=>w.value?.schedule_time||"-"),fe=r(()=>w.value?.schedule_browse_type||"-"),O=r(()=>String(w.value?.schedule_weekdays||"").trim()),me=r(()=>{const o=O.value;if(!o)return"";const t={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},d=o.split(",").map(p=>p.trim()).filter(Boolean);return d.length?d.map(p=>t[Number(p)]||p).join("、"):o}),Q=r(()=>(w.value?.proxy_enabled??0)===1),X=r(()=>w.value?.proxy_api_url||""),ge=r(()=>i(w.value?.proxy_expire_minutes)),Y=r(()=>i(w.value?.max_concurrent_global)),be=r(()=>i(w.value?.max_concurrent_per_account)),he=r(()=>i(w.value?.max_screenshot_concurrent)),F=r(()=>{const o=i(y.value?.running_count),t=i(y.value?.queuing_count),d=i(y.value?.max_concurrent);return`运行中 ${o} / 排队 ${t} / 并发上限 ${d||Y.value||"-"}`}),ee=r(()=>!!z.value?.update_available),ke=r(()=>V.value?.status==="running");async function te(){if(!j.value){j.value=!0;try{const[o,t,d,p,S,N,q,T,_]=await Promise.allSettled([$e(),Fe(),Le(),Ee(),Ie(),We(),Ge(),Ze(),He()]);if($.value=o.status==="fulfilled"?o.value:null,y.value=t.status==="fulfilled"?t.value:null,R.value=d.status==="fulfilled"?d.value:null,P.value=p.status==="fulfilled"?p.value:null,v.value=S.status==="fulfilled"?S.value:null,M.value=N.status==="fulfilled"?N.value:null,w.value=q.status==="fulfilled"?q.value:null,T.status==="fulfilled"){const U=T.value;U?.ok?(z.value=U.data||null,A.value=""):(z.value=null,A.value=U?.error||"未发现更新状态Update-Agent 可能未运行)")}else z.value=null,A.value="";V.value=_.status==="fulfilled"&&_.value?.ok?_.value.data:null,await ne?.(),oe()}finally{j.value=!1}}}return ze(te),(o,t)=>{const d=f("el-tag"),p=f("el-button"),S=f("el-icon"),N=f("el-progress"),q=f("el-card"),T=f("el-col"),_=f("el-table-column"),U=f("el-table"),se=f("el-tab-pane"),ye=f("el-tabs"),I=f("el-row"),C=f("el-descriptions-item"),le=f("el-descriptions"),we=f("el-alert");return c(),h("div",Je,[e("div",Ke,[e("div",Oe,[e("div",Qe,[e("div",Xe,[t[5]||(t[5]=e("h2",null,"报表中心",-1)),A.value?(c(),g(d,{key:0,type:"info",effect:"dark"},{default:l(()=>[...t[1]||(t[1]=[n("更新状态未知",-1)])]),_:1})):ee.value?(c(),g(d,{key:1,type:"warning",effect:"dark"},{default:l(()=>[...t[2]||(t[2]=[n("新版本可更新",-1)])]),_:1})):(c(),g(d,{key:2,type:"success",effect:"dark"},{default:l(()=>[...t[3]||(t[3]=[n("已是最新",-1)])]),_:1})),ke.value?(c(),g(d,{key:3,type:"warning",effect:"plain"},{default:l(()=>[...t[4]||(t[4]=[n("更新中",-1)])]),_:1})):k("",!0)]),e("div",Ye,[D.value?(c(),h("span",et,"更新时间:"+s(D.value),1)):k("",!0),v.value?.uptime?(c(),h("span",tt,"·")):k("",!0),v.value?.uptime?(c(),h("span",st,"运行 "+s(v.value.uptime),1)):k("",!0)])]),e("div",lt,[a(p,{type:"primary",plain:"",loading:j.value,onClick:te},{default:l(()=>[...t[6]||(t[6]=[n("刷新",-1)])]),_:1},8,["loading"])])]),e("div",at,[(c(!0),h(W,null,Ne(de.value,u=>(c(),h("div",{key:u.label,class:je(["kpi-card",`kpi-tone--${u.tone}`])},[e("div",it,[a(S,null,{default:l(()=>[(c(),g(De(u.icon)))]),_:2},1024)]),e("div",nt,[e("div",ut,s(u.value),1),e("div",ot,s(u.label),1),u.sub?(c(),h("div",dt,s(u.sub),1)):k("",!0)])],2))),128))])]),a(I,{gutter:12},{default:l(()=>[a(T,{xs:24,lg:12},{default:l(()=>[a(q,{shadow:"never",class:"panel","body-style":{padding:"16px"}},{default:l(()=>[e("div",ct,[e("div",rt,[e("div",vt,[a(S,null,{default:l(()=>[a(B(ie))]),_:1})]),e("div",_t,[t[7]||(t[7]=e("div",{class:"panel-title"},"任务概览",-1)),e("div",pt,[i(x.value.total_tasks)>0?(c(),h(W,{key:0},[n(" 今日成功率 "+s(L.value)+"% · "+s(F.value),1)],64)):(c(),h(W,{key:1},[n("今日无任务 · "+s(F.value),1)],64))])])]),a(N,{type:"circle",percentage:i(x.value.total_tasks)>0?Math.round(L.value):0,width:74,"stroke-width":10,status:i(x.value.total_tasks)===0||L.value>=90?"success":L.value>=60?"warning":"exception"},null,8,["percentage","status"])]),e("div",ft,[t[13]||(t[13]=e("div",{class:"tile-title app-muted"},"今日",-1)),e("div",mt,[e("div",gt,[e("div",bt,s(i(x.value.total_tasks)),1),t[8]||(t[8]=e("div",{class:"tile-k app-muted"},"总任务",-1))]),e("div",ht,[e("div",kt,s(i(x.value.success_tasks)),1),t[9]||(t[9]=e("div",{class:"tile-k app-muted"},"成功",-1))]),e("div",yt,[e("div",wt,s(i(x.value.failed_tasks)),1),t[10]||(t[10]=e("div",{class:"tile-k app-muted"},"失败",-1))]),e("div",xt,[e("div",St,s(i(x.value.total_items)),1),t[11]||(t[11]=e("div",{class:"tile-k app-muted"},"浏览内容",-1))]),e("div",Ct,[e("div",Rt,s(i(x.value.total_attachments)),1),t[12]||(t[12]=e("div",{class:"tile-k app-muted"},"查看附件",-1))])])]),t[20]||(t[20]=e("div",{class:"divider"},null,-1)),e("div",qt,[t[19]||(t[19]=e("div",{class:"tile-title app-muted"},"累计",-1)),e("div",Tt,[e("div",Mt,[e("div",zt,s(i(E.value.total_tasks)),1),t[14]||(t[14]=e("div",{class:"tile-k app-muted"},"总任务",-1))]),e("div",Nt,[e("div",At,s(i(E.value.success_tasks)),1),t[15]||(t[15]=e("div",{class:"tile-k app-muted"},"成功",-1))]),e("div",Ut,[e("div",Bt,s(i(E.value.failed_tasks)),1),t[16]||(t[16]=e("div",{class:"tile-k app-muted"},"失败",-1))]),e("div",Pt,[e("div",Vt,s(i(E.value.total_items)),1),t[17]||(t[17]=e("div",{class:"tile-k app-muted"},"浏览内容",-1))]),e("div",Et,[e("div",jt,s(i(E.value.total_attachments)),1),t[18]||(t[18]=e("div",{class:"tile-k app-muted"},"查看附件",-1))])])])]),_:1})]),_:1}),a(T,{xs:24,lg:12},{default:l(()=>[a(q,{shadow:"never",class:"panel","body-style":{padding:"16px"}},{default:l(()=>[e("div",Dt,[e("div",Lt,[e("div",$t,[a(S,null,{default:l(()=>[a(B(Ae))]),_:1})]),e("div",Ft,[t[21]||(t[21]=e("div",{class:"panel-title"},"队列监控",-1)),e("div",It,s(F.value),1)])])]),a(ye,{modelValue:G.value,"onUpdate:modelValue":t[0]||(t[0]=u=>G.value=u),class:"queue-tabs",stretch:""},{default:l(()=>[a(se,{name:"running"},{label:l(()=>[e("span",Wt,[t[22]||(t[22]=n(" 运行中 ",-1)),a(d,{size:"small",effect:"light",type:"success"},{default:l(()=>[n(s(J.value),1)]),_:1})])]),default:l(()=>[e("div",Gt,[a(U,{data:ce.value.slice(0,10),size:"small",style:{width:"100%"}},{default:l(()=>[a(_,{label:"用户","min-width":"120"},{default:l(({row:u})=>[n(s(u.user_username||"-"),1)]),_:1}),a(_,{label:"账号","min-width":"150"},{default:l(({row:u})=>[n(s(u.username||"-"),1)]),_:1}),a(_,{label:"来源",width:"100"},{default:l(({row:u})=>[n(s(H(u.source)),1)]),_:1}),a(_,{label:"类型",width:"90"},{default:l(({row:u})=>[n(s(u.browse_type||"-"),1)]),_:1}),a(_,{label:"进度",width:"100"},{default:l(({row:u})=>[n(s(u.progress_items)+"/"+s(u.progress_attachments),1)]),_:1}),a(_,{label:"耗时",width:"100"},{default:l(({row:u})=>[n(s(u.elapsed_display||"-"),1)]),_:1}),a(_,{label:"状态","min-width":"140"},{default:l(({row:u})=>[n(s(u.detail_status||u.status||"-"),1)]),_:1})]),_:1},8,["data"])]),J.value===0?(c(),h("div",Zt,"当前无运行任务")):k("",!0)]),_:1}),a(se,{name:"queuing"},{label:l(()=>[e("span",Ht,[t[23]||(t[23]=n(" 排队中 ",-1)),a(d,{size:"small",effect:"light",type:"warning"},{default:l(()=>[n(s(K.value),1)]),_:1})])]),default:l(()=>[e("div",Jt,[a(U,{data:re.value.slice(0,10),size:"small",style:{width:"100%"}},{default:l(()=>[a(_,{label:"用户","min-width":"120"},{default:l(({row:u})=>[n(s(u.user_username||"-"),1)]),_:1}),a(_,{label:"账号","min-width":"150"},{default:l(({row:u})=>[n(s(u.username||"-"),1)]),_:1}),a(_,{label:"来源",width:"100"},{default:l(({row:u})=>[n(s(H(u.source)),1)]),_:1}),a(_,{label:"类型",width:"90"},{default:l(({row:u})=>[n(s(u.browse_type||"-"),1)]),_:1}),a(_,{label:"等待",width:"100"},{default:l(({row:u})=>[n(s(u.elapsed_display||"-"),1)]),_:1}),a(_,{label:"状态","min-width":"160"},{default:l(({row:u})=>[n(s(u.detail_status||u.status||"-"),1)]),_:1})]),_:1},8,["data"])]),K.value===0?(c(),h("div",Kt,"当前无排队任务")):k("",!0)]),_:1})]),_:1},8,["modelValue"])]),_:1})]),_:1})]),_:1}),a(I,{gutter:12},{default:l(()=>[a(T,{xs:24,lg:12},{default:l(()=>[a(q,{shadow:"never",class:"panel","body-style":{padding:"16px"}},{default:l(()=>[e("div",Ot,[e("div",Qt,[e("div",Xt,[a(S,null,{default:l(()=>[a(B(Ue))]),_:1})]),e("div",Yt,[t[24]||(t[24]=e("div",{class:"panel-title"},"邮件报表",-1)),e("div",es,"成功率 "+s(ve.value)+"%",1)])])]),e("div",ts,[e("div",ss,[e("div",ls,s(i(R.value?.total_sent)),1),t[25]||(t[25]=e("div",{class:"tile-k app-muted"},"总发送",-1))]),e("div",as,[e("div",is,s(i(R.value?.total_success)),1),t[26]||(t[26]=e("div",{class:"tile-k app-muted"},"成功",-1))]),e("div",ns,[e("div",us,s(i(R.value?.total_failed)),1),t[27]||(t[27]=e("div",{class:"tile-k app-muted"},"失败",-1))])]),t[32]||(t[32]=e("div",{class:"divider"},null,-1)),t[33]||(t[33]=e("div",{class:"sub-title"},"类型统计",-1)),e("div",os,[e("div",ds,[e("div",cs,s(i(R.value?.register_sent)),1),t[28]||(t[28]=e("div",{class:"type-k app-muted"},"注册验证",-1))]),e("div",rs,[e("div",vs,s(i(R.value?.reset_sent)),1),t[29]||(t[29]=e("div",{class:"type-k app-muted"},"密码重置",-1))]),e("div",_s,[e("div",ps,s(i(R.value?.bind_sent)),1),t[30]||(t[30]=e("div",{class:"type-k app-muted"},"邮箱绑定",-1))]),e("div",fs,[e("div",ms,s(i(R.value?.task_complete_sent)),1),t[31]||(t[31]=e("div",{class:"type-k app-muted"},"任务完成",-1))])])]),_:1})]),_:1}),a(T,{xs:24,lg:12},{default:l(()=>[a(q,{shadow:"never",class:"panel","body-style":{padding:"16px"}},{default:l(()=>[e("div",gs,[e("div",bs,[e("div",hs,[a(S,null,{default:l(()=>[a(B(Be))]),_:1})]),e("div",ks,[t[34]||(t[34]=e("div",{class:"panel-title"},"反馈概览",-1)),e("div",ys,"待处理 "+s(i(P.value?.pending))+" 条",1)])])]),e("div",ws,[e("div",xs,[e("div",Ss,s(i(P.value?.total)),1),t[35]||(t[35]=e("div",{class:"tile-k app-muted"},"总反馈",-1))]),e("div",Cs,[e("div",Rs,s(i(P.value?.pending)),1),t[36]||(t[36]=e("div",{class:"tile-k app-muted"},"待处理",-1))]),e("div",qs,[e("div",Ts,s(i(P.value?.replied)),1),t[37]||(t[37]=e("div",{class:"tile-k app-muted"},"已回复",-1))])]),t[38]||(t[38]=e("div",{class:"divider"},null,-1)),t[39]||(t[39]=e("div",{class:"help app-muted"},"提示:用户的反馈需要及时处理,避免影响活跃度与留存。",-1))]),_:1})]),_:1})]),_:1}),a(I,{gutter:12},{default:l(()=>[a(T,{xs:24,lg:12},{default:l(()=>[a(q,{shadow:"never",class:"panel","body-style":{padding:"16px"}},{default:l(()=>[e("div",Ms,[e("div",zs,[e("div",Ns,[a(S,null,{default:l(()=>[a(B(Pe))]),_:1})]),t[40]||(t[40]=e("div",{class:"head-text"},[e("div",{class:"panel-title"},"系统资源"),e("div",{class:"panel-sub app-muted"},"服务器与容器运行状态")],-1))]),v.value?.uptime?(c(),g(d,{key:0,effect:"light",type:"info"},{default:l(()=>[n("运行 "+s(v.value.uptime),1)]),_:1})):k("",!0)]),e("div",As,[e("div",Us,[t[41]||(t[41]=e("div",{class:"resource-k app-muted"},"CPU",-1)),a(N,{percentage:Math.round(b(v.value?.cpu_percent)),status:b(v.value?.cpu_percent)>=90?"exception":b(v.value?.cpu_percent)>=75?"warning":"success"},null,8,["percentage","status"]),e("div",Bs,s(Math.round(b(v.value?.cpu_percent)))+"%",1)]),e("div",Ps,[t[42]||(t[42]=e("div",{class:"resource-k app-muted"},"内存",-1)),a(N,{percentage:Math.round(b(v.value?.memory_percent)),status:b(v.value?.memory_percent)>=90?"exception":b(v.value?.memory_percent)>=75?"warning":"success"},null,8,["percentage","status"]),e("div",Vs,s(v.value?.memory_used||"-")+" / "+s(v.value?.memory_total||"-")+""+s(Math.round(b(v.value?.memory_percent)))+"% ",1)]),e("div",Es,[t[43]||(t[43]=e("div",{class:"resource-k app-muted"},"磁盘",-1)),a(N,{percentage:Math.round(b(v.value?.disk_percent)),status:b(v.value?.disk_percent)>=90?"exception":b(v.value?.disk_percent)>=75?"warning":"success"},null,8,["percentage","status"]),e("div",js,s(v.value?.disk_used||"-")+" / "+s(v.value?.disk_total||"-")+""+s(Math.round(b(v.value?.disk_percent)))+"% ",1)])]),t[44]||(t[44]=e("div",{class:"divider"},null,-1)),t[45]||(t[45]=e("div",{class:"sub-title"},"容器",-1)),a(le,{border:"",column:2,size:"small"},{default:l(()=>[a(C,{label:"状态"},{default:l(()=>[n(s(M.value?.status||"-"),1)]),_:1}),a(C,{label:"容器名"},{default:l(()=>[n(s(M.value?.container_name||"-"),1)]),_:1}),a(C,{label:"运行时长"},{default:l(()=>[n(s(M.value?.uptime||"-"),1)]),_:1}),a(C,{label:"CPU"},{default:l(()=>[n(s(M.value?.cpu_percent||"-"),1)]),_:1}),a(C,{label:"内存"},{default:l(()=>[n(s(M.value?.memory_usage||"-"),1)]),_:1}),a(C,{label:"内存占比"},{default:l(()=>[n(s(M.value?.memory_percent||"-"),1)]),_:1})]),_:1})]),_:1})]),_:1}),a(T,{xs:24,lg:12},{default:l(()=>[a(q,{shadow:"never",class:"panel","body-style":{padding:"16px"}},{default:l(()=>[e("div",Ds,[e("div",Ls,[e("div",$s,[a(S,null,{default:l(()=>[a(B(Ve))]),_:1})]),t[46]||(t[46]=e("div",{class:"head-text"},[e("div",{class:"panel-title"},"配置与更新"),e("div",{class:"panel-sub app-muted"},"定时/代理/并发与版本")],-1))]),ee.value?(c(),g(d,{key:0,effect:"dark",type:"warning"},{default:l(()=>[...t[47]||(t[47]=[n("可更新",-1)])]),_:1})):k("",!0)]),A.value?(c(),g(we,{key:0,type:"info",closable:!1,title:A.value,style:{"margin-bottom":"12px"}},null,8,["title"])):k("",!0),e("div",Fs,[e("div",Is,[t[50]||(t[50]=e("div",{class:"config-k app-muted"},"定时任务",-1)),e("div",Ws,[_e.value?(c(),g(d,{key:0,type:"success",effect:"light"},{default:l(()=>[...t[48]||(t[48]=[n("启用",-1)])]),_:1})):(c(),g(d,{key:1,type:"info",effect:"light"},{default:l(()=>[...t[49]||(t[49]=[n("关闭",-1)])]),_:1})),e("span",Gs,s(pe.value)+" / "+s(fe.value),1)]),e("div",Zs,"日期:"+s(me.value||O.value||"-"),1)]),e("div",Hs,[t[53]||(t[53]=e("div",{class:"config-k app-muted"},"代理",-1)),e("div",Js,[Q.value?(c(),g(d,{key:0,type:"success",effect:"light"},{default:l(()=>[...t[51]||(t[51]=[n("启用",-1)])]),_:1})):(c(),g(d,{key:1,type:"info",effect:"light"},{default:l(()=>[...t[52]||(t[52]=[n("关闭",-1)])]),_:1})),Q.value&&X.value?(c(),h("span",Ks,s(X.value),1)):k("",!0)]),e("div",Os,"有效期:"+s(ge.value||"-")+" 分钟",1)]),e("div",Qs,[t[56]||(t[56]=e("div",{class:"config-k app-muted"},"并发",-1)),e("div",Xs,[e("span",null,"全局 "+s(Y.value||"-"),1),t[54]||(t[54]=e("span",{class:"config-split app-muted"},"/",-1)),e("span",null,"单账号 "+s(be.value||"-"),1),t[55]||(t[55]=e("span",{class:"config-split app-muted"},"/",-1)),e("span",null,"截图 "+s(he.value||"-"),1)])])]),t[57]||(t[57]=e("div",{class:"divider"},null,-1)),t[58]||(t[58]=e("div",{class:"sub-title"},"版本信息",-1)),a(le,{border:"",column:1,size:"small"},{default:l(()=>[a(C,{label:"本地版本(commit)"},{default:l(()=>[n(s(Z(z.value?.local_commit)),1)]),_:1}),a(C,{label:"远端版本(commit)"},{default:l(()=>[n(s(Z(z.value?.remote_commit)),1)]),_:1}),a(C,{label:"最近检查时间"},{default:l(()=>[n(s(z.value?.checked_at||"-"),1)]),_:1}),V.value?.job_id?(c(),g(C,{key:0,label:"最近更新"},{default:l(()=>[e("span",null,"job "+s(V.value.job_id)+" / "+s(V.value?.status||"-"),1)]),_:1})):k("",!0)]),_:1})]),_:1})]),_:1})]),_:1})])}}},il=xe(Ys,[["__scopeId","data-v-21ea8f99"]]);export{il as default};