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