import{a as C,_ as Ve,E as ge,d as xe,a0 as be,G as ne,H as m}from"./index-xdc4dCJw.js";import{v as ke}from"./el-loading-C65vMcpP.js";import{E as we}from"./el-dialog-BA6jXtcD.js";/* empty css */import{a as Ue,E as Ce}from"./el-switch-DqGKUJZv.js";import{E as Pe,a as Ie}from"./el-form-item-BeAZtehy.js";import{f as Se,u as Y}from"./system-CrVQM-ty.js";import{r as n,e as Ee,w as Ne,Q as Ae,d as Ke,R as De,y,x as V,B as s,V as l,K as t,$ as g,G as Z,O as ee}from"./vendor-vue-CrWqv-BE.js";import"./vendor-misc-vmXLPW1j.js";import"./vendor-axios-B9ygI19o.js";import"./refs-Cgn3sBur.js";import"./index-CvKMBPkw.js";async function le(i={}){const{data:p}=await C.get("/kdocs/status",{params:i});return p}async function Le(i={}){const p={force:!0,...i},{data:x}=await C.post("/kdocs/qr",p);return x}async function Qe(){const{data:i}=await C.post("/kdocs/clear-login",{});return i}async function Be(){const{data:i}=await C.get("/proxy/config");return i}async function Te(i){const{data:p}=await C.post("/proxy/config",i);return p}async function qe(i){const{data:p}=await C.post("/proxy/test",i);return p}const $e={class:"page-stack"},Fe={class:"config-grid"},Me={class:"row-actions"},Re={class:"row-actions"},He={class:"row-actions"},Ge={class:"section-head"},Oe={class:"status-inline app-muted"},he={key:0},ze={key:1},je={key:2},Je={class:"kdocs-inline"},We={class:"kdocs-range"},Xe={class:"row-actions"},Ye={key:0,class:"help"},Ze={key:1,class:"help"},el={class:"kdocs-qr"},ll=["src"],al={__name:"SystemPage",setup(i){const p=n(!1),x=n(2),I=n(1),S=n(3),E=n(120),P=n(!1),v=n(""),N=n(3),A=n(!1),K=n(10),D=n(7),L=n(!1),Q=n(""),B=n(""),T=n(""),q=n(0),$=n("A"),F=n("D"),M=n(0),R=n(0),H=n(!1),G=n(""),c=n({}),b=n(!1),k=n(""),ae=n(!1),O=n(!1),w=n(!1),U=n(!1),h=n("");let z=null;const oe=Ee(()=>O.value||w.value||U.value);function r(a){if(!a){h.value="";return}const e=new Date().toLocaleTimeString("zh-CN",{hour12:!1});h.value=`${a} (${e})`}async function ue(){p.value=!0;try{const[a,e,d]=await Promise.all([Se(),Be(),le().catch(()=>({}))]);x.value=a.max_concurrent_global??2,I.value=a.max_concurrent_per_account??1,S.value=a.max_screenshot_concurrent??3,E.value=a.db_slow_query_ms??120,A.value=(a.auto_approve_enabled??0)===1,K.value=a.auto_approve_hourly_limit??10,D.value=a.auto_approve_vip_days??7,P.value=(e.proxy_enabled??0)===1,v.value=e.proxy_api_url||"",N.value=e.proxy_expire_minutes??3,L.value=(a.kdocs_enabled??0)===1,Q.value=a.kdocs_doc_url||"",B.value=a.kdocs_default_unit||"",T.value=a.kdocs_sheet_name||"",q.value=a.kdocs_sheet_index??0,$.value=(a.kdocs_unit_column||"A").toUpperCase(),F.value=(a.kdocs_image_column||"D").toUpperCase(),M.value=a.kdocs_row_start??0,R.value=a.kdocs_row_end??0,H.value=(a.kdocs_admin_notify_enabled??0)===1,G.value=a.kdocs_admin_notify_email||"",c.value=d||{}}catch{}finally{p.value=!1}}async function de(){const a={max_concurrent_global:Number(x.value),max_concurrent_per_account:Number(I.value),max_screenshot_concurrent:Number(S.value),db_slow_query_ms:Number(E.value)};try{await ne.confirm(`确定更新并发配置吗? 全局并发数: ${a.max_concurrent_global} 单账号并发数: ${a.max_concurrent_per_account} 截图并发数: ${a.max_screenshot_concurrent} 慢 SQL 阈值: ${a.db_slow_query_ms}ms`,"保存并发配置",{confirmButtonText:"保存",cancelButtonText:"取消",type:"warning"})}catch{return}try{const e=await Y(a);m.success(e?.message||"并发配置已更新")}catch{}}async function re(){if(P.value&&!v.value.trim()){m.error("启用代理时,API地址不能为空");return}const a={proxy_enabled:P.value?1:0,proxy_api_url:v.value.trim(),proxy_expire_minutes:Number(N.value)||3};try{const e=await Te(a);m.success(e?.message||"代理配置已更新")}catch{}}async function ie(){if(!v.value.trim()){m.error("请先输入代理API地址");return}try{const a=await qe({api_url:v.value.trim()});await ne.alert(a?.message||"测试完成","代理测试",{confirmButtonText:"知道了"})}catch{}}async function me(){const a=Number(K.value),e=Number(D.value);if(!Number.isFinite(a)||a<1){m.error("每小时注册限制必须大于0");return}if(!Number.isFinite(e)||e<0){m.error("VIP天数不能为负数");return}const d={auto_approve_enabled:A.value?1:0,auto_approve_hourly_limit:a,auto_approve_vip_days:e};try{const u=await Y(d);m.success(u?.message||"注册设置已保存")}catch{}}async function pe(){const a={kdocs_enabled:L.value?1:0,kdocs_doc_url:Q.value.trim(),kdocs_default_unit:B.value.trim(),kdocs_sheet_name:T.value.trim(),kdocs_sheet_index:Number(q.value)||0,kdocs_unit_column:$.value.trim().toUpperCase(),kdocs_image_column:F.value.trim().toUpperCase(),kdocs_row_start:Number(M.value)||0,kdocs_row_end:Number(R.value)||0,kdocs_admin_notify_enabled:H.value?1:0,kdocs_admin_notify_email:G.value.trim()};try{const e=await Y(a);m.success(e?.message||"表格配置已更新")}catch{}}async function te(){if(!O.value){O.value=!0,r("正在刷新状态");try{c.value=await le({live:1}),r("状态已刷新")}catch{r("刷新失败,请稍后重试")}finally{O.value=!1}}}async function se(){try{const a=await le({live:1});c.value=a,(a?.logged_in===!0||a?.last_login_ok===!0)&&(m.success("扫码成功,已登录"),r("扫码成功,已登录"),b.value=!1,j())}catch{}}function ce(){j(),ae.value=!0,r("扫码检测中"),se(),z=setInterval(se,2e3)}function j(){z&&(clearInterval(z),z=null),ae.value=!1}async function ve(){if(!w.value){w.value=!0,r("正在获取二维码");try{k.value="";const a=await Le();if(k.value=a?.qr_image||"",!k.value){if(a?.logged_in){m.success("当前已登录,无需扫码"),r("当前已登录,无需扫码"),await te();return}m.warning("未获取到二维码"),r("未获取到二维码");return}r("二维码已获取"),b.value=!0}catch{r("获取二维码失败")}finally{w.value=!1}}}async function fe(){if(!U.value){U.value=!0,r("正在清除登录态");try{await Qe(),b.value=!1,k.value="",m.success("登录态已清除"),r("登录态已清除"),await te()}catch{r("清除登录态失败")}finally{U.value=!1}}}return Ne(b,a=>{a?ce():j()}),Ae(()=>{j()}),Ke(ue),(a,e)=>{const d=Ue,u=Ie,J=Pe,f=ge,W=xe,X=Ce,_=be,_e=we,ye=ke;return De((y(),V("div",$e,[e[49]||(e[49]=s("div",{class:"app-page-title"},[s("h2",null,"系统配置")],-1)),s("div",Fe,[l(W,{shadow:"never","body-style":{padding:"16px"},class:"card section-card"},{default:t(()=>[e[27]||(e[27]=s("h3",{class:"section-title"},"并发配置",-1)),e[28]||(e[28]=s("div",{class:"section-sub app-muted"},"控制任务与截图的并发资源上限",-1)),l(J,{"label-width":"122px"},{default:t(()=>[l(u,{label:"全局最大并发数"},{default:t(()=>[l(d,{modelValue:x.value,"onUpdate:modelValue":e[0]||(e[0]=o=>x.value=o),min:1,max:200},null,8,["modelValue"]),e[22]||(e[22]=s("div",{class:"help"},"同时最多运行账号数(浏览任务 API 执行,资源占用较低)。",-1))]),_:1}),l(u,{label:"单账号最大并发数"},{default:t(()=>[l(d,{modelValue:I.value,"onUpdate:modelValue":e[1]||(e[1]=o=>I.value=o),min:1,max:50},null,8,["modelValue"]),e[23]||(e[23]=s("div",{class:"help"},"建议保持为 1,避免同账号任务抢占。",-1))]),_:1}),l(u,{label:"截图最大并发数"},{default:t(()=>[l(d,{modelValue:S.value,"onUpdate:modelValue":e[2]||(e[2]=o=>S.value=o),min:1,max:50},null,8,["modelValue"]),e[24]||(e[24]=s("div",{class:"help"},"截图资源占用较低,可按机器性能逐步提高。",-1))]),_:1}),l(u,{label:"慢 SQL 阈值(ms)"},{default:t(()=>[l(d,{modelValue:E.value,"onUpdate:modelValue":e[3]||(e[3]=o=>E.value=o),min:0,max:6e4},null,8,["modelValue"]),e[25]||(e[25]=s("div",{class:"help"},"低于该阈值不会计入慢 SQL(0 表示关闭慢 SQL 采样)。",-1))]),_:1})]),_:1}),s("div",Me,[l(f,{type:"primary",onClick:de},{default:t(()=>[...e[26]||(e[26]=[g("保存并发配置",-1)])]),_:1})])]),_:1}),l(W,{shadow:"never","body-style":{padding:"16px"},class:"card section-card"},{default:t(()=>[e[33]||(e[33]=s("h3",{class:"section-title"},"代理设置",-1)),e[34]||(e[34]=s("div",{class:"section-sub app-muted"},"用于任务出网代理与连接有效期管理",-1)),l(J,{"label-width":"122px"},{default:t(()=>[l(u,{label:"启用 IP 代理"},{default:t(()=>[l(X,{modelValue:P.value,"onUpdate:modelValue":e[4]||(e[4]=o=>P.value=o)},null,8,["modelValue"]),e[29]||(e[29]=s("div",{class:"help"},"开启后,浏览任务通过代理访问,失败自动重试。",-1))]),_:1}),l(u,{label:"代理 API 地址"},{default:t(()=>[l(_,{modelValue:v.value,"onUpdate:modelValue":e[5]||(e[5]=o=>v.value=o),placeholder:"http://api.xxx/Tools/IP.ashx?..."},null,8,["modelValue"]),e[30]||(e[30]=s("div",{class:"help"},"API 应返回 `IP:PORT`(例:123.45.67.89:8888)。",-1))]),_:1}),l(u,{label:"有效期(分钟)"},{default:t(()=>[l(d,{modelValue:N.value,"onUpdate:modelValue":e[6]||(e[6]=o=>N.value=o),min:1,max:60},null,8,["modelValue"])]),_:1})]),_:1}),s("div",Re,[l(f,{type:"primary",onClick:re},{default:t(()=>[...e[31]||(e[31]=[g("保存代理配置",-1)])]),_:1}),l(f,{onClick:ie},{default:t(()=>[...e[32]||(e[32]=[g("测试代理",-1)])]),_:1})])]),_:1}),l(W,{shadow:"never","body-style":{padding:"16px"},class:"card section-card"},{default:t(()=>[e[37]||(e[37]=s("h3",{class:"section-title"},"注册设置",-1)),e[38]||(e[38]=s("div",{class:"section-sub app-muted"},"控制注册节流与新用户赠送 VIP",-1)),l(J,{"label-width":"122px"},{default:t(()=>[l(u,{label:"注册赠送 VIP"},{default:t(()=>[l(X,{modelValue:A.value,"onUpdate:modelValue":e[7]||(e[7]=o=>A.value=o)},null,8,["modelValue"]),e[35]||(e[35]=s("div",{class:"help"},"开启后,新用户注册成功自动赠送下方设定的 VIP 天数。",-1))]),_:1}),l(u,{label:"每小时注册限制"},{default:t(()=>[l(d,{modelValue:K.value,"onUpdate:modelValue":e[8]||(e[8]=o=>K.value=o),min:1,max:1e4},null,8,["modelValue"])]),_:1}),l(u,{label:"赠送 VIP 天数"},{default:t(()=>[l(d,{modelValue:D.value,"onUpdate:modelValue":e[9]||(e[9]=o=>D.value=o),min:0,max:999999},null,8,["modelValue"])]),_:1})]),_:1}),s("div",He,[l(f,{type:"primary",onClick:me},{default:t(()=>[...e[36]||(e[36]=[g("保存注册设置",-1)])]),_:1})])]),_:1})]),l(W,{shadow:"never","body-style":{padding:"16px"},class:"card kdocs-card"},{default:t(()=>[s("div",Ge,[e[40]||(e[40]=s("h3",{class:"section-title"},"金山文档上传",-1)),s("div",Oe,[e[39]||(e[39]=s("span",null,"登录状态:",-1)),c.value.last_login_ok===!0?(y(),V("span",he,"已登录")):c.value.login_required?(y(),V("span",ze,"需要扫码")):(y(),V("span",je,"未知")),s("span",null,"· 待上传 "+ee(c.value.queue_size||0),1)])]),l(J,{"label-width":"118px",class:"kdocs-form"},{default:t(()=>[l(u,{label:"启用上传"},{default:t(()=>[l(X,{modelValue:L.value,"onUpdate:modelValue":e[10]||(e[10]=o=>L.value=o)},null,8,["modelValue"]),e[41]||(e[41]=s("div",{class:"help"},"表格结构变化时可先关闭,避免错误上传。",-1))]),_:1}),l(u,{label:"文档链接"},{default:t(()=>[l(_,{modelValue:Q.value,"onUpdate:modelValue":e[11]||(e[11]=o=>Q.value=o),placeholder:"https://kdocs.cn/..."},null,8,["modelValue"])]),_:1}),l(u,{label:"默认县区"},{default:t(()=>[l(_,{modelValue:B.value,"onUpdate:modelValue":e[12]||(e[12]=o=>B.value=o),placeholder:"如:道县(用户可覆盖)"},null,8,["modelValue"])]),_:1}),l(u,{label:"Sheet 名称"},{default:t(()=>[l(_,{modelValue:T.value,"onUpdate:modelValue":e[13]||(e[13]=o=>T.value=o),placeholder:"留空使用第一个 Sheet"},null,8,["modelValue"])]),_:1}),l(u,{label:"Sheet 序号"},{default:t(()=>[l(d,{modelValue:q.value,"onUpdate:modelValue":e[14]||(e[14]=o=>q.value=o),min:0,max:50},null,8,["modelValue"]),e[42]||(e[42]=s("div",{class:"help"},"0 表示第一个 Sheet。",-1))]),_:1}),l(u,{label:"列配置"},{default:t(()=>[s("div",Je,[l(_,{modelValue:$.value,"onUpdate:modelValue":e[15]||(e[15]=o=>$.value=o),placeholder:"县区列,如 A"},null,8,["modelValue"]),l(_,{modelValue:F.value,"onUpdate:modelValue":e[16]||(e[16]=o=>F.value=o),placeholder:"图片列,如 D"},null,8,["modelValue"])])]),_:1}),l(u,{label:"有效行范围"},{default:t(()=>[s("div",We,[l(d,{modelValue:M.value,"onUpdate:modelValue":e[17]||(e[17]=o=>M.value=o),min:0,max:1e4,placeholder:"起始行",style:{width:"140px"}},null,8,["modelValue"]),e[43]||(e[43]=s("span",{class:"app-muted"},"至",-1)),l(d,{modelValue:R.value,"onUpdate:modelValue":e[18]||(e[18]=o=>R.value=o),min:0,max:1e4,placeholder:"结束行",style:{width:"140px"}},null,8,["modelValue"])]),e[44]||(e[44]=s("div",{class:"help"},"用于限制上传区间(如 50-100),0 表示不限制。",-1))]),_:1}),l(u,{label:"管理员通知"},{default:t(()=>[l(X,{modelValue:H.value,"onUpdate:modelValue":e[19]||(e[19]=o=>H.value=o)},null,8,["modelValue"])]),_:1}),l(u,{label:"通知邮箱"},{default:t(()=>[l(_,{modelValue:G.value,"onUpdate:modelValue":e[20]||(e[20]=o=>G.value=o),placeholder:"admin@example.com"},null,8,["modelValue"])]),_:1})]),_:1}),s("div",Xe,[l(f,{type:"primary",onClick:pe},{default:t(()=>[...e[45]||(e[45]=[g("保存表格配置",-1)])]),_:1}),l(f,{type:"success",plain:"",loading:w.value,disabled:oe.value&&!w.value,onClick:ve},{default:t(()=>[...e[46]||(e[46]=[g(" 获取二维码 ",-1)])]),_:1},8,["loading","disabled"]),l(f,{type:"danger",plain:"",loading:U.value,disabled:oe.value&&!U.value,onClick:fe},{default:t(()=>[...e[47]||(e[47]=[g(" 清除登录 ",-1)])]),_:1},8,["loading","disabled"])]),c.value.last_error?(y(),V("div",Ye,"最近错误:"+ee(c.value.last_error),1)):Z("",!0),h.value?(y(),V("div",Ze,"操作提示:"+ee(h.value),1)):Z("",!0)]),_:1}),l(_e,{modelValue:b.value,"onUpdate:modelValue":e[21]||(e[21]=o=>b.value=o),title:"扫码登录",width:"min(420px, 92vw)"},{default:t(()=>[s("div",el,[k.value?(y(),V("img",{key:0,src:`data:image/png;base64,${k.value}`,alt:"KDocs QR"},null,8,ll)):Z("",!0),e[48]||(e[48]=s("div",{class:"help"},"请使用管理员微信扫码登录。",-1))])]),_:1},8,["modelValue"])])),[[ye,p.value]])}}},fl=Ve(al,[["__scopeId","data-v-a5c40f1a"]]);export{fl as default};