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