import{B as w,_ as Ve,r as d,y as Ue,o as Pe,z as Ce,j as ne,e as he,c as B,a as c,b as t,w as l,d as p,k as f,g as u,h as o,l as V,F as Be,s as Te,t as y,E as L,m as g}from"./index-CKlvOJnw.js";async function Ie(){const{data:s}=await w.get("/system/config");return s}async function Q(s){const{data:x}=await w.post("/system/config",s);return x}async function Ne(){const{data:s}=await w.post("/schedule/execute",{});return s}async function Ae(){const{data:s}=await w.get("/proxy/config");return s}async function Se(s){const{data:x}=await w.post("/proxy/config",s);return x}async function Ee(s){const{data:x}=await w.post("/proxy/test",s);return x}async function Le(){const{data:s}=await w.get("/update/status");return s}async function $e(){const{data:s}=await w.get("/update/result");return s}async function je(s={}){const{data:x}=await w.get("/update/log",{params:s});return x}async function Re(){const{data:s}=await w.post("/update/check",{});return s}async function De(){const{data:s}=await w.post("/update/run",{});return s}const He={class:"page-stack"},Me={class:"app-page-title"},ze={class:"row-actions"},Fe={class:"row-actions"},qe={class:"row-actions"},Oe={key:0},We={key:1},Ge={key:2},Je={key:3,class:"help"},Ke={key:4,class:"help"},Qe={__name:"SystemPage",setup(s){const x=d(!1),$=d(2),j=d(1),R=d(3),k=d(!1),D=d("02:00"),T=d("应读"),U=d(["1","2","3","4","5","6","7"]),I=d(!1),P=d(""),H=d(3),M=d(!1),z=d(10),F=d(7),G=d(!1),C=d(!1),b=d(null),q=d(""),i=d(null),O=d(""),J=d(!1);let N=null;const ue=[{label:"周一",value:"1"},{label:"周二",value:"2"},{label:"周三",value:"3"},{label:"周四",value:"4"},{label:"周五",value:"5"},{label:"周六",value:"6"},{label:"周日",value:"7"}],se={1:"周一",2:"周二",3:"周三",4:"周四",5:"周五",6:"周六",7:"周日"},re=Ue(()=>(U.value||[]).map(a=>se[Number(a)]||a).join("、"));function de(a){return String(a)==="注册前未读"?"注册前未读":"应读"}function A(a){const e=String(a||"").trim();return e?e.length>12?`${e.slice(0,12)}…`:e:"-"}async function S({withLog:a=!0}={}){G.value=!0,q.value="";try{const[e,r]=await Promise.all([Le(),$e()]);e?.ok?b.value=e.data||null:(b.value=null,q.value=e?.error||"未发现更新状态(Update-Agent 可能未运行)"),i.value=r?.ok?r.data:null;const _=i.value?.job_id;if(a&&_){const m=await je({job_id:_,max_bytes:2e5});O.value=m?.log||"",J.value=!!m?.truncated}else O.value="",J.value=!1}catch{}finally{G.value=!1}}function X(){N||(N=setInterval(async()=>{i.value?.status==="running"&&await S()},5e3))}function ie(){N&&(clearInterval(N),N=null)}async function Y(){x.value=!0;try{const[a,e]=await Promise.all([Ie(),Ae()]);$.value=a.max_concurrent_global??2,j.value=a.max_concurrent_per_account??1,R.value=a.max_screenshot_concurrent??3,k.value=(a.schedule_enabled??0)===1,D.value=a.schedule_time||"02:00",T.value=de(a.schedule_browse_type);const r=String(a.schedule_weekdays||"1,2,3,4,5,6,7").split(",").map(_=>_.trim()).filter(Boolean);U.value=r.length?r:["1","2","3","4","5","6","7"],M.value=(a.auto_approve_enabled??0)===1,z.value=a.auto_approve_hourly_limit??10,F.value=a.auto_approve_vip_days??7,I.value=(e.proxy_enabled??0)===1,P.value=e.proxy_api_url||"",H.value=e.proxy_expire_minutes??3,await S({withLog:!1}),X()}catch{}finally{x.value=!1}}async function ce(){const a={max_concurrent_global:Number($.value),max_concurrent_per_account:Number(j.value),max_screenshot_concurrent:Number(R.value)};try{await L.confirm(`确定更新并发配置吗? 全局并发数: ${a.max_concurrent_global} 单账号并发数: ${a.max_concurrent_per_account} 截图并发数: ${a.max_screenshot_concurrent}`,"保存并发配置",{confirmButtonText:"保存",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await Q(a);g.success(e?.message||"并发配置已更新")}catch{}}async function pe(){if(k.value&&(!U.value||U.value.length===0)){g.error("请至少选择一个执行日期");return}const a={schedule_enabled:k.value?1:0,schedule_time:D.value,schedule_browse_type:T.value,schedule_weekdays:(U.value||[]).join(",")},e=k.value?`确定启用定时任务吗? 执行时间: 每天 ${a.schedule_time} 执行日期: ${re.value} 浏览类型: ${a.schedule_browse_type} 系统将自动执行所有账号的浏览任务(不包含截图)`:"确定关闭定时任务吗?";try{await L.confirm(e,"保存定时任务",{confirmButtonText:"确认",cancelButtonText:"取消",type:"warning"})}catch{return}try{const r=await Q(a);g.success(r?.message||(k.value?"定时任务已启用":"定时任务已关闭"))}catch{}}async function me(){const a=`确定要立即执行定时任务吗? 这将执行所有账号的浏览任务 浏览类型: ${T.value} 注意:无视定时时间和执行日期配置,立即开始执行!`;try{await L.confirm(a,"立即执行",{confirmButtonText:"立即执行",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await Ne();g.success(e?.message||"定时任务已开始执行")}catch{}}async function ve(){if(I.value&&!P.value.trim()){g.error("启用代理时,API地址不能为空");return}const a={proxy_enabled:I.value?1:0,proxy_api_url:P.value.trim(),proxy_expire_minutes:Number(H.value)||3};try{const e=await Se(a);g.success(e?.message||"代理配置已更新")}catch{}}async function fe(){if(!P.value.trim()){g.error("请先输入代理API地址");return}try{const a=await Ee({api_url:P.value.trim()});await L.alert(a?.message||"测试完成","代理测试",{confirmButtonText:"知道了"})}catch{}}async function ye(){const a=Number(z.value),e=Number(F.value);if(!Number.isFinite(a)||a<1){g.error("每小时注册限制必须大于0");return}if(!Number.isFinite(e)||e<0){g.error("VIP天数不能为负数");return}const r={auto_approve_enabled:M.value?1:0,auto_approve_hourly_limit:a,auto_approve_vip_days:e};try{const _=await Q(r);g.success(_?.message||"自动审核配置已保存")}catch{}}async function _e(){C.value=!0;try{const a=await Re();g.success(a?.success?"已触发检查更新":"已提交检查请求"),setTimeout(()=>S({withLog:!1}),800)}catch{}finally{C.value=!1}}async function be(){const a=b.value,e=a?.remote_commit?A(a.remote_commit):"-";try{await L.confirm(`确定开始“一键更新”吗? 目标版本: ${e} 更新将会重建并重启服务,页面可能短暂不可用;系统会先备份数据库。`,"一键更新确认",{confirmButtonText:"开始更新",cancelButtonText:"取消",type:"warning"})}catch{return}C.value=!0;try{const r=await De();g.success(r?.message||"已提交更新请求"),X(),setTimeout(()=>S(),800)}catch{}finally{C.value=!1}}return Pe(Y),Ce(ie),(a,e)=>{const r=p("el-button"),_=p("el-input-number"),m=p("el-form-item"),W=p("el-form"),E=p("el-card"),K=p("el-switch"),ge=p("el-time-picker"),Z=p("el-option"),xe=p("el-select"),we=p("el-checkbox"),ke=p("el-checkbox-group"),ee=p("el-input"),te=p("el-alert"),v=p("el-descriptions-item"),h=p("el-tag"),le=p("el-descriptions"),ae=p("el-divider"),oe=he("loading");return ne((u(),B("div",He,[c("div",Me,[e[15]||(e[15]=c("h2",null,"系统配置",-1)),c("div",null,[t(r,{onClick:Y},{default:l(()=>[...e[14]||(e[14]=[o("刷新",-1)])]),_:1})])]),t(E,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[20]||(e[20]=c("h3",{class:"section-title"},"系统并发配置",-1)),t(W,{"label-width":"130px"},{default:l(()=>[t(m,{label:"全局最大并发数"},{default:l(()=>[t(_,{modelValue:$.value,"onUpdate:modelValue":e[0]||(e[0]=n=>$.value=n),min:1,max:200},null,8,["modelValue"]),e[16]||(e[16]=c("div",{class:"help"},"同时最多运行的账号数量(浏览任务使用 API 方式,资源占用较低)。",-1))]),_:1}),t(m,{label:"单账号最大并发数"},{default:l(()=>[t(_,{modelValue:j.value,"onUpdate:modelValue":e[1]||(e[1]=n=>j.value=n),min:1,max:50},null,8,["modelValue"]),e[17]||(e[17]=c("div",{class:"help"},"单个账号同时最多运行的任务数量(建议设为 1)。",-1))]),_:1}),t(m,{label:"截图最大并发数"},{default:l(()=>[t(_,{modelValue:R.value,"onUpdate:modelValue":e[2]||(e[2]=n=>R.value=n),min:1,max:50},null,8,["modelValue"]),e[18]||(e[18]=c("div",{class:"help"},"同时进行截图的最大数量(每个浏览器约占用 200MB 内存)。",-1))]),_:1})]),_:1}),t(r,{type:"primary",onClick:ce},{default:l(()=>[...e[19]||(e[19]=[o("保存并发配置",-1)])]),_:1})]),_:1}),t(E,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[23]||(e[23]=c("h3",{class:"section-title"},"定时任务配置",-1)),t(W,{"label-width":"130px"},{default:l(()=>[t(m,{label:"启用定时任务"},{default:l(()=>[t(K,{modelValue:k.value,"onUpdate:modelValue":e[3]||(e[3]=n=>k.value=n)},null,8,["modelValue"])]),_:1}),k.value?(u(),f(m,{key:0,label:"执行时间"},{default:l(()=>[t(ge,{modelValue:D.value,"onUpdate:modelValue":e[4]||(e[4]=n=>D.value=n),"value-format":"HH:mm",format:"HH:mm"},null,8,["modelValue"])]),_:1})):V("",!0),k.value?(u(),f(m,{key:1,label:"浏览类型"},{default:l(()=>[t(xe,{modelValue:T.value,"onUpdate:modelValue":e[5]||(e[5]=n=>T.value=n),style:{width:"220px"}},{default:l(()=>[t(Z,{label:"注册前未读",value:"注册前未读"}),t(Z,{label:"应读",value:"应读"})]),_:1},8,["modelValue"])]),_:1})):V("",!0),k.value?(u(),f(m,{key:2,label:"执行日期"},{default:l(()=>[t(ke,{modelValue:U.value,"onUpdate:modelValue":e[6]||(e[6]=n=>U.value=n)},{default:l(()=>[(u(),B(Be,null,Te(ue,n=>t(we,{key:n.value,label:n.value},{default:l(()=>[o(y(n.label),1)]),_:2},1032,["label"])),64))]),_:1},8,["modelValue"])]),_:1})):V("",!0)]),_:1}),c("div",ze,[t(r,{type:"primary",onClick:pe},{default:l(()=>[...e[21]||(e[21]=[o("保存定时任务配置",-1)])]),_:1}),t(r,{type:"success",plain:"",onClick:me},{default:l(()=>[...e[22]||(e[22]=[o("立即执行",-1)])]),_:1})])]),_:1}),t(E,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[28]||(e[28]=c("h3",{class:"section-title"},"代理设置",-1)),t(W,{"label-width":"130px"},{default:l(()=>[t(m,{label:"启用IP代理"},{default:l(()=>[t(K,{modelValue:I.value,"onUpdate:modelValue":e[7]||(e[7]=n=>I.value=n)},null,8,["modelValue"]),e[24]||(e[24]=c("div",{class:"help"},"开启后,所有浏览任务将通过代理IP访问(失败自动重试3次)。",-1))]),_:1}),t(m,{label:"代理API地址"},{default:l(()=>[t(ee,{modelValue:P.value,"onUpdate:modelValue":e[8]||(e[8]=n=>P.value=n),placeholder:"http://api.xxx/Tools/IP.ashx?..."},null,8,["modelValue"]),e[25]||(e[25]=c("div",{class:"help"},"API 应返回:IP:PORT(例如 123.45.67.89:8888)。",-1))]),_:1}),t(m,{label:"代理有效期(分钟)"},{default:l(()=>[t(_,{modelValue:H.value,"onUpdate:modelValue":e[9]||(e[9]=n=>H.value=n),min:1,max:60},null,8,["modelValue"])]),_:1})]),_:1}),c("div",Fe,[t(r,{type:"primary",onClick:ve},{default:l(()=>[...e[26]||(e[26]=[o("保存代理配置",-1)])]),_:1}),t(r,{onClick:fe},{default:l(()=>[...e[27]||(e[27]=[o("测试代理",-1)])]),_:1})])]),_:1}),t(E,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[31]||(e[31]=c("h3",{class:"section-title"},"注册自动审核",-1)),t(W,{"label-width":"130px"},{default:l(()=>[t(m,{label:"启用自动审核"},{default:l(()=>[t(K,{modelValue:M.value,"onUpdate:modelValue":e[10]||(e[10]=n=>M.value=n)},null,8,["modelValue"]),e[29]||(e[29]=c("div",{class:"help"},"开启后,新用户注册将自动通过审核,无需管理员手动审批。",-1))]),_:1}),t(m,{label:"每小时注册限制"},{default:l(()=>[t(_,{modelValue:z.value,"onUpdate:modelValue":e[11]||(e[11]=n=>z.value=n),min:1,max:1e4},null,8,["modelValue"])]),_:1}),t(m,{label:"注册赠送VIP天数"},{default:l(()=>[t(_,{modelValue:F.value,"onUpdate:modelValue":e[12]||(e[12]=n=>F.value=n),min:0,max:999999},null,8,["modelValue"])]),_:1})]),_:1}),t(r,{type:"primary",onClick:ye},{default:l(()=>[...e[30]||(e[30]=[o("保存自动审核配置",-1)])]),_:1})]),_:1}),ne((u(),f(E,{shadow:"never","body-style":{padding:"16px"},class:"card"},{default:l(()=>[e[44]||(e[44]=c("h3",{class:"section-title"},"版本与更新",-1)),b.value?.update_available?(u(),f(te,{key:0,type:"warning",closable:!1,title:"检测到新版本:可以在此页面点击“一键更新”升级并自动重启服务。",style:{"margin-bottom":"10px"}})):V("",!0),q.value?(u(),f(te,{key:1,type:"info",closable:!1,title:q.value,style:{"margin-bottom":"10px"}},null,8,["title"])):V("",!0),t(le,{border:"",column:1,size:"small",style:{"margin-bottom":"10px"}},{default:l(()=>[t(v,{label:"本地版本(commit)"},{default:l(()=>[o(y(A(b.value?.local_commit)),1)]),_:1}),t(v,{label:"远端版本(commit)"},{default:l(()=>[o(y(A(b.value?.remote_commit)),1)]),_:1}),t(v,{label:"是否有更新"},{default:l(()=>[b.value?.update_available?(u(),f(h,{key:0,type:"danger"},{default:l(()=>[...e[32]||(e[32]=[o("有",-1)])]),_:1})):(u(),f(h,{key:1,type:"success"},{default:l(()=>[...e[33]||(e[33]=[o("无",-1)])]),_:1}))]),_:1}),t(v,{label:"工作区修改"},{default:l(()=>[b.value?.dirty?(u(),f(h,{key:0,type:"warning"},{default:l(()=>[...e[34]||(e[34]=[o("有未提交修改",-1)])]),_:1})):(u(),f(h,{key:1,type:"info"},{default:l(()=>[...e[35]||(e[35]=[o("干净",-1)])]),_:1}))]),_:1}),t(v,{label:"最近检查时间"},{default:l(()=>[o(y(b.value?.checked_at||"-"),1)]),_:1}),b.value?.error?(u(),f(v,{key:0,label:"检查错误"},{default:l(()=>[o(y(b.value?.error),1)]),_:1})):V("",!0)]),_:1}),c("div",qe,[t(r,{onClick:S,disabled:C.value},{default:l(()=>[...e[36]||(e[36]=[o("刷新更新信息",-1)])]),_:1},8,["disabled"]),t(r,{onClick:_e,loading:C.value},{default:l(()=>[...e[37]||(e[37]=[o("检查更新",-1)])]),_:1},8,["loading"]),t(r,{type:"danger",onClick:be,loading:C.value,disabled:!b.value?.update_available},{default:l(()=>[...e[38]||(e[38]=[o(" 一键更新 ",-1)])]),_:1},8,["loading","disabled"])]),t(ae,{"content-position":"left"},{default:l(()=>[...e[39]||(e[39]=[o("最近一次更新结果",-1)])]),_:1}),i.value?(u(),f(le,{key:2,border:"",column:1,size:"small",style:{"margin-bottom":"10px"}},{default:l(()=>[t(v,{label:"job_id"},{default:l(()=>[o(y(i.value.job_id),1)]),_:1}),t(v,{label:"状态"},{default:l(()=>[i.value.status==="running"?(u(),f(h,{key:0,type:"warning"},{default:l(()=>[...e[40]||(e[40]=[o("运行中",-1)])]),_:1})):i.value.status==="success"?(u(),f(h,{key:1,type:"success"},{default:l(()=>[...e[41]||(e[41]=[o("成功",-1)])]),_:1})):(u(),f(h,{key:2,type:"danger"},{default:l(()=>[...e[42]||(e[42]=[o("失败",-1)])]),_:1}))]),_:1}),t(v,{label:"阶段"},{default:l(()=>[o(y(i.value.stage||"-"),1)]),_:1}),t(v,{label:"开始时间"},{default:l(()=>[o(y(i.value.started_at||"-"),1)]),_:1}),t(v,{label:"结束时间"},{default:l(()=>[o(y(i.value.finished_at||"-"),1)]),_:1}),t(v,{label:"耗时(秒)"},{default:l(()=>[o(y(i.value.duration_seconds??"-"),1)]),_:1}),t(v,{label:"更新前(commit)"},{default:l(()=>[o(y(A(i.value.from_commit)),1)]),_:1}),t(v,{label:"更新后(commit)"},{default:l(()=>[o(y(A(i.value.to_commit)),1)]),_:1}),t(v,{label:"健康检查"},{default:l(()=>[i.value.health_ok===!0?(u(),B("span",Oe,"通过("+y(i.value.health_message)+")",1)):i.value.health_ok===!1?(u(),B("span",We,"失败("+y(i.value.health_message)+")",1)):(u(),B("span",Ge,"-"))]),_:1}),i.value.error?(u(),f(v,{key:0,label:"错误"},{default:l(()=>[o(y(i.value.error),1)]),_:1})):V("",!0)]),_:1})):(u(),B("div",Je,"暂无更新记录。")),t(ae,{"content-position":"left"},{default:l(()=>[...e[43]||(e[43]=[o("更新日志",-1)])]),_:1}),J.value?(u(),B("div",Ke,"日志过长,仅展示末尾内容。")):V("",!0),t(ee,{modelValue:O.value,"onUpdate:modelValue":e[13]||(e[13]=n=>O.value=n),type:"textarea",rows:10,readonly:"",placeholder:"暂无日志"},null,8,["modelValue"])]),_:1})),[[oe,G.value]])])),[[oe,x.value]])}}},Ye=Ve(Qe,[["__scopeId","data-v-b35a5b19"]]);export{Ye as default};