feat: add admin social login bindings

This commit is contained in:
237899745
2026-05-27 21:24:48 +08:00
parent 5dbe666420
commit 89cb98233f
39 changed files with 904 additions and 123 deletions

View File

@@ -3,8 +3,8 @@
"file": "assets/MetricGrid-BR486o_b.css",
"src": "_MetricGrid-BR486o_b.css"
},
"_MetricGrid-C3Xjc9mZ.js": {
"file": "assets/MetricGrid-C3Xjc9mZ.js",
"_MetricGrid-kv-nSROj.js": {
"file": "assets/MetricGrid-kv-nSROj.js",
"name": "MetricGrid",
"imports": [
"index.html",
@@ -14,29 +14,36 @@
"assets/MetricGrid-BR486o_b.css"
]
},
"_email-Mh1SHQbX.js": {
"file": "assets/email-Mh1SHQbX.js",
"_admin-VsbfHbbH.js": {
"file": "assets/admin-VsbfHbbH.js",
"name": "admin",
"imports": [
"index.html"
]
},
"_email-CgUCpCe3.js": {
"file": "assets/email-CgUCpCe3.js",
"name": "email",
"imports": [
"index.html"
]
},
"_system-CYbWdReq.js": {
"file": "assets/system-CYbWdReq.js",
"_system-CeiBEEoE.js": {
"file": "assets/system-CeiBEEoE.js",
"name": "system",
"imports": [
"index.html"
]
},
"_tasks-B7oNpIBD.js": {
"file": "assets/tasks-B7oNpIBD.js",
"_tasks-C6JkguA6.js": {
"file": "assets/tasks-C6JkguA6.js",
"name": "tasks",
"imports": [
"index.html"
]
},
"_users-DzDcz9C_.js": {
"file": "assets/users-DzDcz9C_.js",
"_users-D9XvGIoE.js": {
"file": "assets/users-D9XvGIoE.js",
"name": "users",
"imports": [
"index.html"
@@ -46,23 +53,23 @@
"file": "assets/vendor-axios-B9ygI19o.js",
"name": "vendor-axios"
},
"_vendor-element-B5S5pUKo.js": {
"file": "assets/vendor-element-B5S5pUKo.js",
"_vendor-element-C68yOrAy.css": {
"file": "assets/vendor-element-C68yOrAy.css",
"src": "_vendor-element-C68yOrAy.css"
},
"_vendor-element-CIudPaVX.js": {
"file": "assets/vendor-element-CIudPaVX.js",
"name": "vendor-element",
"imports": [
"_vendor-vue-CVxSw_oJ.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-misc-DszMq72k.js"
],
"css": [
"assets/vendor-element-C68yOrAy.css"
]
},
"_vendor-element-C68yOrAy.css": {
"file": "assets/vendor-element-C68yOrAy.css",
"src": "_vendor-element-C68yOrAy.css"
},
"_vendor-misc-BeoNyvBp.js": {
"file": "assets/vendor-misc-BeoNyvBp.js",
"_vendor-misc-DszMq72k.js": {
"file": "assets/vendor-misc-DszMq72k.js",
"name": "vendor-misc",
"imports": [
"_vendor-vue-CVxSw_oJ.js"
@@ -73,15 +80,15 @@
"name": "vendor-vue"
},
"index.html": {
"file": "assets/index-DOvMEmc8.js",
"file": "assets/index-6ynv0Z9Y.js",
"name": "index",
"src": "index.html",
"isEntry": true,
"imports": [
"_vendor-vue-CVxSw_oJ.js",
"_vendor-element-B5S5pUKo.js",
"_vendor-element-CIudPaVX.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-misc-DszMq72k.js"
],
"dynamicImports": [
"src/pages/ReportPage.vue",
@@ -92,22 +99,40 @@
"src/pages/EmailPage.vue",
"src/pages/SecurityPage.vue",
"src/pages/SystemPage.vue",
"src/pages/SettingsPage.vue"
"src/pages/SettingsPage.vue",
"src/pages/AdminSocialBindCallbackPage.vue"
],
"css": [
"assets/index-CPs_XZ2s.css"
]
},
"src/pages/AdminSocialBindCallbackPage.vue": {
"file": "assets/AdminSocialBindCallbackPage-BsLZg3f-.js",
"name": "AdminSocialBindCallbackPage",
"src": "src/pages/AdminSocialBindCallbackPage.vue",
"isDynamicEntry": true,
"imports": [
"_vendor-vue-CVxSw_oJ.js",
"_admin-VsbfHbbH.js",
"index.html",
"_vendor-element-CIudPaVX.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-DszMq72k.js"
],
"css": [
"assets/AdminSocialBindCallbackPage-CXV1zZmY.css"
]
},
"src/pages/AnnouncementsPage.vue": {
"file": "assets/AnnouncementsPage-Dagm5PzE.js",
"file": "assets/AnnouncementsPage-BcIVG51R.js",
"name": "AnnouncementsPage",
"src": "src/pages/AnnouncementsPage.vue",
"isDynamicEntry": true,
"imports": [
"_vendor-element-B5S5pUKo.js",
"_vendor-element-CIudPaVX.js",
"index.html",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-misc-BeoNyvBp.js",
"_vendor-misc-DszMq72k.js",
"_vendor-axios-B9ygI19o.js"
],
"css": [
@@ -115,72 +140,72 @@
]
},
"src/pages/EmailPage.vue": {
"file": "assets/EmailPage-DiZA9Kx_.js",
"file": "assets/EmailPage-B1uMhyWi.js",
"name": "EmailPage",
"src": "src/pages/EmailPage.vue",
"isDynamicEntry": true,
"imports": [
"_email-Mh1SHQbX.js",
"_email-CgUCpCe3.js",
"index.html",
"_MetricGrid-C3Xjc9mZ.js",
"_vendor-element-B5S5pUKo.js",
"_MetricGrid-kv-nSROj.js",
"_vendor-element-CIudPaVX.js",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-misc-DszMq72k.js"
],
"css": [
"assets/EmailPage-CTHxGzDv.css"
]
},
"src/pages/FeedbacksPage.vue": {
"file": "assets/FeedbacksPage-DrMVqBKf.js",
"file": "assets/FeedbacksPage-CG9FZytm.js",
"name": "FeedbacksPage",
"src": "src/pages/FeedbacksPage.vue",
"isDynamicEntry": true,
"imports": [
"index.html",
"_MetricGrid-C3Xjc9mZ.js",
"_vendor-element-B5S5pUKo.js",
"_MetricGrid-kv-nSROj.js",
"_vendor-element-CIudPaVX.js",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-misc-DszMq72k.js"
],
"css": [
"assets/FeedbacksPage-CPmSqIaj.css"
]
},
"src/pages/LogsPage.vue": {
"file": "assets/LogsPage-Cy6Q0ave.js",
"file": "assets/LogsPage-Ct-BSxV6.js",
"name": "LogsPage",
"src": "src/pages/LogsPage.vue",
"isDynamicEntry": true,
"imports": [
"_users-DzDcz9C_.js",
"_tasks-B7oNpIBD.js",
"_users-D9XvGIoE.js",
"_tasks-C6JkguA6.js",
"index.html",
"_vendor-element-B5S5pUKo.js",
"_vendor-element-CIudPaVX.js",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-misc-DszMq72k.js"
],
"css": [
"assets/LogsPage-BUgx3sZr.css"
]
},
"src/pages/ReportPage.vue": {
"file": "assets/ReportPage-BMEJM5Hr.js",
"file": "assets/ReportPage-2jS10KoG.js",
"name": "ReportPage",
"src": "src/pages/ReportPage.vue",
"isDynamicEntry": true,
"imports": [
"_vendor-element-B5S5pUKo.js",
"_vendor-element-CIudPaVX.js",
"index.html",
"_email-Mh1SHQbX.js",
"_tasks-B7oNpIBD.js",
"_system-CYbWdReq.js",
"_MetricGrid-C3Xjc9mZ.js",
"_email-CgUCpCe3.js",
"_tasks-C6JkguA6.js",
"_system-CeiBEEoE.js",
"_MetricGrid-kv-nSROj.js",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-misc-BeoNyvBp.js",
"_vendor-misc-DszMq72k.js",
"_vendor-axios-B9ygI19o.js"
],
"css": [
@@ -188,67 +213,68 @@
]
},
"src/pages/SecurityPage.vue": {
"file": "assets/SecurityPage-yzYEGeTN.js",
"file": "assets/SecurityPage-93lfkhLF.js",
"name": "SecurityPage",
"src": "src/pages/SecurityPage.vue",
"isDynamicEntry": true,
"imports": [
"index.html",
"_MetricGrid-C3Xjc9mZ.js",
"_vendor-element-B5S5pUKo.js",
"_MetricGrid-kv-nSROj.js",
"_vendor-element-CIudPaVX.js",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-misc-DszMq72k.js"
],
"css": [
"assets/SecurityPage-C2-mJ7eD.css"
]
},
"src/pages/SettingsPage.vue": {
"file": "assets/SettingsPage-DF5fL8gq.js",
"file": "assets/SettingsPage-BbHyIZsy.js",
"name": "SettingsPage",
"src": "src/pages/SettingsPage.vue",
"isDynamicEntry": true,
"imports": [
"_vendor-misc-DszMq72k.js",
"_admin-VsbfHbbH.js",
"index.html",
"_vendor-element-B5S5pUKo.js",
"_vendor-element-CIudPaVX.js",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-axios-B9ygI19o.js"
],
"css": [
"assets/SettingsPage-D-iYz1zh.css"
"assets/SettingsPage-CjIQQfeg.css"
]
},
"src/pages/SystemPage.vue": {
"file": "assets/SystemPage-DrM9-RI5.js",
"file": "assets/SystemPage-D9T-fhw-.js",
"name": "SystemPage",
"src": "src/pages/SystemPage.vue",
"isDynamicEntry": true,
"imports": [
"_system-CYbWdReq.js",
"_system-CeiBEEoE.js",
"index.html",
"_vendor-element-B5S5pUKo.js",
"_vendor-element-CIudPaVX.js",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-misc-DszMq72k.js"
],
"css": [
"assets/SystemPage-CTs6qr36.css"
]
},
"src/pages/UsersPage.vue": {
"file": "assets/UsersPage-RI5S3snx.js",
"file": "assets/UsersPage-2-Mno2hz.js",
"name": "UsersPage",
"src": "src/pages/UsersPage.vue",
"isDynamicEntry": true,
"imports": [
"_users-DzDcz9C_.js",
"_users-D9XvGIoE.js",
"index.html",
"_vendor-element-B5S5pUKo.js",
"_vendor-element-CIudPaVX.js",
"_vendor-vue-CVxSw_oJ.js",
"_vendor-axios-B9ygI19o.js",
"_vendor-misc-BeoNyvBp.js"
"_vendor-misc-DszMq72k.js"
],
"css": [
"assets/UsersPage-CgYh6JHW.css"

View File

@@ -0,0 +1 @@
import{ax as w,r as y,o as g,aj as l,n as v,q as f,L as d,E as h,t as k,J as x}from"./vendor-vue-CVxSw_oJ.js";import{i as S}from"./admin-VsbfHbbH.js";import{_ as C}from"./index-6ynv0Z9Y.js";import{a as n}from"./vendor-element-CIudPaVX.js";import"./vendor-axios-B9ygI19o.js";import"./vendor-misc-DszMq72k.js";const b={class:"callback-wrap"},B={class:"callback-text"},P={__name:"AdminSocialBindCallbackPage",setup(q){const o=w(),t=y("正在完成绑定");return g(async()=>{const c=String(window.location.hash||"").split("?")[1]||"",e=new URLSearchParams(window.location.search||c),a=String(e.get("provider")||e.get("type")||"").trim().toLowerCase(),r=String(e.get("code")||"").trim(),p=String(o.query?.provider||o.query?.type||"").trim().toLowerCase(),m=String(o.query?.code||"").trim(),s=a||p,i=r||m;if(!s||!i){n.error("快捷登录回调参数不完整"),window.location.replace("/yuyx/admin#/settings");return}try{await S(s,{provider:s,code:i}),n.success("管理员快捷登录已绑定"),window.location.replace("/yuyx/admin#/settings")}catch(u){const _=u?.response?.data;t.value=_?.error||"快捷登录绑定失败",n.error(t.value),window.setTimeout(()=>{window.location.replace("/yuyx/admin#/settings")},1200)}}),(c,e)=>{const a=l("el-skeleton"),r=l("el-card");return f(),v("div",b,[d(r,{shadow:"never",class:"callback-card"},{default:h(()=>[d(a,{rows:3,animated:""}),k("div",B,x(t.value),1)]),_:1})])}}},T=C(P,[["__scopeId","data-v-647766e7"]]);export{T as default};

View File

@@ -0,0 +1 @@
.callback-wrap[data-v-647766e7]{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;background:#f6f7fb}.callback-card[data-v-647766e7]{width:min(420px,94vw);border-radius:12px;border:1px solid var(--app-border)}.callback-text[data-v-647766e7]{margin-top:12px;color:var(--app-muted);font-size:13px;text-align:center}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{_}from"./index-DOvMEmc8.js";import{aj as c,n as s,q as t,K as r,a3 as u,y as p,t as o,G as l,L as y,E as h,D as i,H as v,J as n,I as k,x as f}from"./vendor-vue-CVxSw_oJ.js";const b={class:"metric-top"},x={key:0,class:"metric-icon"},g={class:"metric-label"},B={class:"metric-value"},C={key:0,class:"metric-hint app-muted"},N={__name:"MetricGrid",props:{items:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},minWidth:{type:Number,default:180}},setup(a){return(V,D)=>{const d=c("el-icon"),m=c("el-skeleton");return t(),s("div",{class:"metric-grid",style:f({"--metric-min":`${a.minWidth}px`})},[(t(!0),s(r,null,u(a.items,e=>(t(),s("div",{key:e?.key||e?.label,class:p(["metric-card",`metric-tone--${e?.tone||"blue"}`])},[o("div",b,[e?.icon?(t(),s("div",x,[y(d,null,{default:h(()=>[(t(),i(v(e.icon)))]),_:2},1024)])):l("",!0),o("div",g,n(e?.label||"-"),1)]),o("div",B,[a.loading?(t(),i(m,{key:0,rows:1,animated:""})):(t(),s(r,{key:1},[k(n(e?.value??0),1)],64))]),e?.hint||e?.sub?(t(),s("div",C,n(e?.hint||e?.sub),1)):l("",!0)],2))),128))],4)}}},w=_(N,[["__scopeId","data-v-28727c73"]]);export{w as M};
import{_}from"./index-6ynv0Z9Y.js";import{aj as c,n as s,q as t,K as r,a3 as u,y as p,t as o,G as l,L as y,E as h,D as i,H as v,J as n,I as k,x as f}from"./vendor-vue-CVxSw_oJ.js";const b={class:"metric-top"},x={key:0,class:"metric-icon"},g={class:"metric-label"},B={class:"metric-value"},C={key:0,class:"metric-hint app-muted"},N={__name:"MetricGrid",props:{items:{type:Array,default:()=>[]},loading:{type:Boolean,default:!1},minWidth:{type:Number,default:180}},setup(a){return(V,D)=>{const d=c("el-icon"),m=c("el-skeleton");return t(),s("div",{class:"metric-grid",style:f({"--metric-min":`${a.minWidth}px`})},[(t(!0),s(r,null,u(a.items,e=>(t(),s("div",{key:e?.key||e?.label,class:p(["metric-card",`metric-tone--${e?.tone||"blue"}`])},[o("div",b,[e?.icon?(t(),s("div",x,[y(d,null,{default:h(()=>[(t(),i(v(e.icon)))]),_:2},1024)])):l("",!0),o("div",g,n(e?.label||"-"),1)]),o("div",B,[a.loading?(t(),i(m,{key:0,rows:1,animated:""})):(t(),s(r,{key:1},[k(n(e?.value??0),1)],64))]),e?.hint||e?.sub?(t(),s("div",C,n(e?.hint||e?.sub),1)):l("",!0)],2))),128))],4)}}},w=_(N,[["__scopeId","data-v-28727c73"]]);export{w as M};

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
.page-stack[data-v-e6d9cfda]{display:flex;flex-direction:column;gap:14px;min-width:0}.card[data-v-e6d9cfda]{border-radius:var(--app-radius);border:1px solid var(--app-border);background:var(--app-card-bg);box-shadow:var(--app-shadow-soft)}.section-title[data-v-e6d9cfda]{margin:0 0 12px;font-size:15px;font-weight:800;letter-spacing:.2px}.section-head[data-v-e6d9cfda]{display:flex;align-items:center;justify-content:space-between;gap:10px;margin-bottom:12px}.section-head .section-title[data-v-e6d9cfda]{margin-bottom:0}.help[data-v-e6d9cfda]{margin-top:10px;font-size:12px;color:var(--app-muted)}.help-alert[data-v-e6d9cfda]{margin-bottom:12px}.social-list[data-v-e6d9cfda]{display:flex;flex-direction:column;gap:10px}.social-row[data-v-e6d9cfda]{min-height:58px;display:flex;align-items:center;justify-content:space-between;gap:12px;padding:10px 12px;border:1px solid var(--app-border);border-radius:10px;background:#f8fafcb8}.social-provider[data-v-e6d9cfda]{display:flex;align-items:center;gap:10px;min-width:0}.social-icon[data-v-e6d9cfda]{width:30px;height:30px;border-radius:50%;display:inline-flex;align-items:center;justify-content:center;flex:0 0 auto;color:#fff;font-size:13px;font-weight:800}.provider-wx[data-v-e6d9cfda]{background:#16a34a}.provider-qq[data-v-e6d9cfda]{background:#2563eb}.provider-alipay[data-v-e6d9cfda]{background:#1677ff}.social-info[data-v-e6d9cfda]{min-width:0;display:flex;flex-direction:column;gap:2px}.social-info strong[data-v-e6d9cfda]{font-size:14px}.social-info span[data-v-e6d9cfda]{max-width:min(52vw,360px);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;font-size:12px;color:var(--app-muted)}.social-actions[data-v-e6d9cfda]{flex:0 0 auto}.social-qr-box[data-v-e6d9cfda]{display:flex;flex-direction:column;align-items:center;gap:12px}.social-qr-prompt[data-v-e6d9cfda]{font-size:13px;color:#374151;text-align:center}@media(max-width:640px){.social-row[data-v-e6d9cfda]{align-items:flex-start;flex-direction:column}.social-actions[data-v-e6d9cfda]{width:100%;display:flex;justify-content:flex-end}}

View File

@@ -1 +0,0 @@
.page-stack[data-v-1418d488]{display:flex;flex-direction:column;gap:14px;min-width:0}.card[data-v-1418d488]{border-radius:var(--app-radius);border:1px solid var(--app-border);background:var(--app-card-bg);box-shadow:var(--app-shadow-soft)}.section-title[data-v-1418d488]{margin:0 0 12px;font-size:15px;font-weight:800;letter-spacing:.2px}.help[data-v-1418d488]{margin-top:10px;font-size:12px;color:var(--app-muted)}.help-alert[data-v-1418d488]{margin-bottom:12px}

File diff suppressed because one or more lines are too long

View File

@@ -1,4 +1,4 @@
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(`确定更新并发配置吗?
import{f as Fe,a as He,u as me,b as Oe,t as je}from"./system-CeiBEEoE.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-6ynv0Z9Y.js";import{E as _e,a as d}from"./vendor-element-CIudPaVX.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-DszMq72k.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}

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1 @@
import{a as s}from"./index-6ynv0Z9Y.js";async function e(a){const{data:n}=await s.put("/admin/username",{new_username:a});return n}async function r(a={}){const n=String(a.currentPassword||""),t=String(a.newPassword||""),{data:i}=await s.put("/admin/password",{current_password:n,new_password:t});return i}async function c(){const{data:a}=await s.post("/logout");return a}async function d(){const{data:a}=await s.get("/admin/passkeys");return a}async function u(a={}){const{data:n}=await s.post("/admin/passkeys/register/options",a);return n}async function m(a={}){const{data:n}=await s.post("/admin/passkeys/register/verify",a);return n}async function p(a){const{data:n}=await s.delete(`/admin/passkeys/${a}`);return n}async function l(a={}){const{data:n}=await s.post("/admin/passkeys/client-error",a);return n}async function w(){const{data:a}=await s.get("/admin/social-bindings");return a}async function y(a={}){const{data:n}=await s.post("/admin/social-login-url",a);return n}async function f(a={}){const{data:n}=await s.post("/admin/social-poll",a);return n}async function g(a,n={}){const{data:t}=await s.post(`/admin/social-bindings/${encodeURIComponent(a)}/callback`,n);return t}async function k(a){const{data:n}=await s.delete(`/admin/social-bindings/${encodeURIComponent(a)}`);return n}export{w as a,r as b,u as c,m as d,p as e,d as f,k as g,y as h,g as i,c as l,f as p,l as r,e as u};

View File

@@ -1 +1 @@
import{c as s,a as e}from"./index-DOvMEmc8.js";const n=s(async()=>{const{data:a}=await e.get("/email/stats");return a},1e4);async function i(){const{data:a}=await e.get("/email/settings");return a}async function r(a){const{data:t}=await e.post("/email/settings",a);return n.clear(),t}async function o(a={}){return n.run(a)}async function l(a){const{data:t}=await e.get("/email/logs",{params:a});return t}async function u(a){const{data:t}=await e.post("/email/logs/cleanup",{days:a});return n.clear(),t}export{l as a,i as b,u as c,o as f,r as u};
import{c as s,a as e}from"./index-6ynv0Z9Y.js";const n=s(async()=>{const{data:a}=await e.get("/email/stats");return a},1e4);async function i(){const{data:a}=await e.get("/email/settings");return a}async function r(a){const{data:t}=await e.post("/email/settings",a);return n.clear(),t}async function o(a={}){return n.run(a)}async function l(a){const{data:t}=await e.get("/email/logs",{params:a});return t}async function u(a){const{data:t}=await e.post("/email/logs/cleanup",{days:a});return n.clear(),t}export{l as a,i as b,u as c,o as f,r as u};

File diff suppressed because one or more lines are too long

View File

@@ -1 +1 @@
import{c as s,a as n}from"./index-DOvMEmc8.js";const o=s(async()=>{const{data:t}=await n.get("/system/config");return t},15e3);async function i(t={}){return o.run(t)}async function e(t){const{data:a}=await n.post("/system/config",t);return o.clear(),a}async function r(){const{data:t}=await n.get("/social-login/config");return t}async function f(t){const{data:a}=await n.post("/social-login/config",t||{});return o.clear(),a}async function g(t){const{data:a}=await n.post("/social-login/test",t||{});return a}export{r as a,f as b,i as f,g as t,e as u};
import{c as s,a as n}from"./index-6ynv0Z9Y.js";const o=s(async()=>{const{data:t}=await n.get("/system/config");return t},15e3);async function i(t={}){return o.run(t)}async function e(t){const{data:a}=await n.post("/system/config",t);return o.clear(),a}async function r(){const{data:t}=await n.get("/social-login/config");return t}async function f(t){const{data:a}=await n.post("/social-login/config",t||{});return o.clear(),a}async function g(t){const{data:a}=await n.post("/social-login/test",t||{});return a}export{r as a,f as b,i as f,g as t,e as u};

View File

@@ -1 +1 @@
import{c as s,a}from"./index-DOvMEmc8.js";const c=s(async()=>{const{data:t}=await a.get("/server/info");return t},3e4),o=s(async()=>{const{data:t}=await a.get("/docker_stats");return t},8e3),u=s(async()=>{const{data:t}=await a.get("/request_metrics");return t},1e4),i=s(async()=>{const{data:t}=await a.get("/slow_sql_metrics");return t},1e4),e=s(async()=>{const{data:t}=await a.get("/task/stats");return t},4e3),r=s(async()=>{const{data:t}=await a.get("/task/running");return t},2e3);async function g(t={}){return c.run(t)}async function y(t={}){return o.run(t)}async function d(t={}){return u.run(t)}async function k(t={}){return i.run(t)}async function l(t={}){return e.run(t)}async function w(t={}){return r.run(t)}async function _(t){const{data:n}=await a.get("/task/logs",{params:t});return n}async function h(t){const{data:n}=await a.post("/task/logs/clear",{days:t});return e.clear(),r.clear(),n}export{w as a,g as b,y as c,d,k as e,l as f,_ as g,h};
import{c as s,a}from"./index-6ynv0Z9Y.js";const c=s(async()=>{const{data:t}=await a.get("/server/info");return t},3e4),o=s(async()=>{const{data:t}=await a.get("/docker_stats");return t},8e3),u=s(async()=>{const{data:t}=await a.get("/request_metrics");return t},1e4),i=s(async()=>{const{data:t}=await a.get("/slow_sql_metrics");return t},1e4),e=s(async()=>{const{data:t}=await a.get("/task/stats");return t},4e3),r=s(async()=>{const{data:t}=await a.get("/task/running");return t},2e3);async function g(t={}){return c.run(t)}async function y(t={}){return o.run(t)}async function d(t={}){return u.run(t)}async function k(t={}){return i.run(t)}async function l(t={}){return e.run(t)}async function w(t={}){return r.run(t)}async function _(t){const{data:n}=await a.get("/task/logs",{params:t});return n}async function h(t){const{data:n}=await a.post("/task/logs/clear",{days:t});return e.clear(),r.clear(),n}export{w as a,g as b,y as c,d,k as e,l as f,_ as g,h};

View File

@@ -1 +1 @@
import{a as t}from"./index-DOvMEmc8.js";async function n(){const{data:s}=await t.get("/users");return s}async function o(s){const{data:a}=await t.post(`/users/${s}/approve`);return a}async function c(s){const{data:a}=await t.post(`/users/${s}/reject`);return a}async function i(s){const{data:a}=await t.delete(`/users/${s}`);return a}async function u(s,a){const{data:e}=await t.post(`/users/${s}/vip`,{days:a});return e}async function p(s){const{data:a}=await t.delete(`/users/${s}/vip`);return a}async function d(s,a){const{data:e}=await t.post(`/users/${s}/reset_password`,{new_password:a});return e}export{o as a,p as b,d as c,i as d,n as f,c as r,u as s};
import{a as t}from"./index-6ynv0Z9Y.js";async function n(){const{data:s}=await t.get("/users");return s}async function o(s){const{data:a}=await t.post(`/users/${s}/approve`);return a}async function c(s){const{data:a}=await t.post(`/users/${s}/reject`);return a}async function i(s){const{data:a}=await t.delete(`/users/${s}`);return a}async function u(s,a){const{data:e}=await t.post(`/users/${s}/vip`,{days:a});return e}async function p(s){const{data:a}=await t.delete(`/users/${s}/vip`);return a}async function d(s,a){const{data:e}=await t.post(`/users/${s}/reset_password`,{new_password:a});return e}export{o as a,p as b,d as c,i as d,n as f,c as r,u as s};

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,20 +1,19 @@
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>后台管理 - 知识管理平台</title>
<script type="module" crossorigin src="./assets/index-DOvMEmc8.js"></script>
<!doctype html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="./vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>后台管理 - 知识管理平台</title>
<script type="module" crossorigin src="./assets/index-6ynv0Z9Y.js"></script>
<link rel="modulepreload" crossorigin href="./assets/vendor-vue-CVxSw_oJ.js">
<link rel="modulepreload" crossorigin href="./assets/vendor-misc-BeoNyvBp.js">
<link rel="modulepreload" crossorigin href="./assets/vendor-element-B5S5pUKo.js">
<link rel="modulepreload" crossorigin href="./assets/vendor-misc-DszMq72k.js">
<link rel="modulepreload" crossorigin href="./assets/vendor-element-CIudPaVX.js">
<link rel="modulepreload" crossorigin href="./assets/vendor-axios-B9ygI19o.js">
<link rel="stylesheet" crossorigin href="./assets/vendor-element-C68yOrAy.css">
<link rel="stylesheet" crossorigin href="./assets/index-CPs_XZ2s.css">
</head>
<body>
<div id="app"></div>
</body>
</html>
</head>
<body>
<div id="app"></div>
</body>