diff --git a/app-frontend/src/pages/LoginPage.vue b/app-frontend/src/pages/LoginPage.vue index 3216787..5763580 100644 --- a/app-frontend/src/pages/LoginPage.vue +++ b/app-frontend/src/pages/LoginPage.vue @@ -215,6 +215,13 @@ function savePendingSocialBind(data) { } } +function hasSocialCallback() { + const params = new URLSearchParams(window.location.search || '') + const provider = String(params.get('provider') || params.get('type') || '').trim() + const code = String(params.get('code') || '').trim() + return Boolean(provider && code) +} + async function handleSocialCallback() { const params = new URLSearchParams(window.location.search || '') const provider = String(params.get('provider') || params.get('type') || '').trim() @@ -391,8 +398,11 @@ function goRegister() { } onMounted(async () => { + if (hasSocialCallback()) { + await handleSocialCallback() + return + } await loadSocialConfig() - await handleSocialCallback() if (needCaptcha.value) { await refreshLoginCaptcha() } diff --git a/static/app/.vite/manifest.json b/static/app/.vite/manifest.json index 4c8fc65..3e03218 100644 --- a/static/app/.vite/manifest.json +++ b/static/app/.vite/manifest.json @@ -302,7 +302,7 @@ "name": "vendor-vue" }, "index.html": { - "file": "assets/app-D7SWy-KG.js", + "file": "assets/app-BV_xMlg4.js", "name": "app", "src": "index.html", "isEntry": true, @@ -323,7 +323,7 @@ ] }, "login.html": { - "file": "assets/login-C88J0b5r.js", + "file": "assets/login-D0qy0-VA.js", "name": "login", "src": "login.html", "isEntry": true, @@ -401,7 +401,7 @@ ] }, "src/pages/LoginPage.vue": { - "file": "assets/LoginPage-N6sdjwkY.js", + "file": "assets/LoginPage-B-9NNWX9.js", "name": "LoginPage", "src": "src/pages/LoginPage.vue", "isDynamicEntry": true, @@ -418,7 +418,7 @@ "_auth-CuW_jyJD.js" ], "css": [ - "assets/LoginPage-CSaMrhQm.css" + "assets/LoginPage-udDwyYMW.css" ] }, "src/pages/RegisterPage.vue": { diff --git a/static/app/assets/LoginPage-B-9NNWX9.js b/static/app/assets/LoginPage-B-9NNWX9.js new file mode 100644 index 0000000..3747446 --- /dev/null +++ b/static/app/assets/LoginPage-B-9NNWX9.js @@ -0,0 +1 @@ +import{f as G,g as o,h as ke,i as _e,j as i,k as a,l as u,n as Y,t as v,w as h,v as y,m as Z,p as Ce,q as ee,o as c}from"./vendor-vue-Da_zwKNU.js";import{S as Se}from"./SocialLoginButtons-BaFXslgf.js";import{_ as xe}from"./style-CEbARg1o.js";import"./base-C_0HtztH.js";import"./el-overlay-ckkTzDcK.js";import"./aria-DLpFpzDe.js";import"./http-BDcxFXLM.js";import"./vendor-axios-B9ygI19o.js";import"./index-D04QrwME.js";import"./auth-CuW_jyJD.js";const Re={class:"login-page"},Ee={class:"login-container"},Pe={class:"form-group"},Te={class:"form-group"},Le={key:1,class:"form-group"},Ue={class:"captcha-row"},Ve=["src"],Oe=["disabled"],$e={key:2,class:"social-login-area"},Be={class:"action-links"},Ie={class:"modal-card"},Ne={class:"modal-head"},Ae={key:0,class:"modal-tip warn"},qe={key:1,class:"modal-tip error"},ze={class:"form-group"},Fe={class:"form-group"},je={class:"captcha-row"},Ke=["src"],De={class:"modal-actions"},Me=["disabled"],We={class:"modal-card"},Ge={class:"modal-head"},He={key:0,class:"modal-tip error"},Je={class:"form-group"},Xe={class:"form-group"},Qe={class:"captcha-row"},Ye=["src"],Ze={class:"modal-actions"},et=["disabled"],tt={__name:"LoginPage",setup(at){const r=G({username:"",password:"",captcha:""}),b=o(!1),E=o(""),z=o(""),P=o(!1),w=o(!1),F=o(!1),j=o(""),T=o(""),k=o(!1),_=o(!1),d=G({username:"",captcha:""}),L=o(""),K=o(""),U=o(!1),S=o(""),m=o(""),p=G({email:"",captcha:""}),V=o(""),D=o(""),O=o(!1),f=o(""),te=ke(()=>!0),H=o(!1),$=o({enabled:!1,providers:[]}),B=o(!1),I={token:"zsglpt_social_pending_bind_token",provider:"zsglpt_social_pending_bind_provider",nickname:"zsglpt_social_pending_bind_nickname",avatar:"zsglpt_social_pending_bind_avatar_url"};function ae(t){const e=String(t).replace(/([.*+?^${}()|[\]\\])/g,"\\$1"),s=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return s?decodeURIComponent(s[1]):""}class se extends Error{constructor(e,s,n){super(e||"请求失败"),this.name="ApiError",this.response={status:Number(s||0),data:n||{}}}}async function g(t,e={}){const s=String(e.method||"GET").toUpperCase(),n={...e.headers||{}},R=Object.prototype.hasOwnProperty.call(e,"body");if(R&&!n["Content-Type"]&&(n["Content-Type"]="application/json"),!["GET","HEAD","OPTIONS"].includes(s)){const Q=ae("csrf_token");Q&&(n["X-CSRF-Token"]=Q)}const q=await fetch(`/api${t}`,{method:s,headers:n,credentials:"include",body:R?JSON.stringify(e.body??{}):void 0});let C={};try{C=await q.json()}catch{C={}}if(!q.ok)throw new se(C?.error||C?.message||`请求失败 (${q.status})`,q.status,C);return C}const oe=()=>g("/email/verify-status"),M=()=>g("/generate_captcha",{method:"POST",body:{}}),ne=t=>g("/login",{method:"POST",body:t||{}}),re=t=>g("/resend-verify-email",{method:"POST",body:t||{}}),le=t=>g("/forgot-password",{method:"POST",body:t||{}}),ie=()=>g("/auth/social/config"),ce=t=>g("/auth/social/callback",{method:"POST",body:t||{}});async function J(){if(!H.value)try{const t=await oe();w.value=!!t?.email_enabled,F.value=!!t?.register_verify_enabled}catch{w.value=!1,F.value=!1}finally{H.value=!0}}function l(t,e){j.value=String(t||""),T.value=String(e||"")}function ue(){j.value="",T.value=""}async function x(){try{const t=await M();z.value=t?.session_id||"",E.value=t?.captcha_image||"",r.captcha=""}catch{z.value="",E.value=""}}async function N(){try{const t=await M();K.value=t?.session_id||"",L.value=t?.captcha_image||"",d.captcha=""}catch{K.value="",L.value=""}}async function A(){try{const t=await M();D.value=t?.session_id||"",V.value=t?.captcha_image||"",p.captcha=""}catch{D.value="",V.value=""}}function X(){const t=new URLSearchParams(window.location.search||""),e=String(t.get("next")||"").trim(),s=e&&e.startsWith("/")&&!e.startsWith("//")&&!e.startsWith("/\\")?e:"";window.setTimeout(()=>{window.location.href=s||"/app"},300)}function de(){const t=new URL(window.location.href);return t.pathname="/login",t.search="",t.hash="",t.toString()}async function pe(){try{const t=await ie();$.value={enabled:!!t?.enabled,providers:Array.isArray(t?.providers)?t.providers:[]}}catch{$.value={enabled:!1,providers:[]}}}function me(t){try{window.sessionStorage.setItem(I.token,t?.bind_token||""),window.sessionStorage.setItem(I.provider,t?.provider||""),window.sessionStorage.setItem(I.nickname,t?.nickname||""),window.sessionStorage.setItem(I.avatar,t?.avatar_url||"")}catch{}}function ve(){const t=new URLSearchParams(window.location.search||""),e=String(t.get("provider")||t.get("type")||"").trim(),s=String(t.get("code")||"").trim();return!!(e&&s)}async function fe(){const t=new URLSearchParams(window.location.search||""),e=String(t.get("provider")||t.get("type")||"").trim(),s=String(t.get("code")||"").trim();if(!e||!s)return!1;B.value=!0,l("success","正在完成快捷登录...");try{const n=await ce({provider:e,code:s,mode:"login"});if(n?.requires_register&&n?.bind_token)return me(n),l("success","请完成注册后继续"),window.setTimeout(()=>{window.location.href="/register"},500),!0;if(n?.success||n?.bound)return l("success","快捷登录成功,正在跳转..."),X(),!0;l("error","快捷登录失败")}catch(n){const R=n?.response?.data;l("error",R?.error||R?.message||"快捷登录失败")}finally{B.value=!1}return!0}async function W(){if(ue(),!r.username.trim()||!r.password.trim()){l("error","用户名和密码不能为空");return}if(b.value&&!r.captcha.trim()){l("error","请输入验证码");return}P.value=!0;try{const t=r.username.trim();await ne({username:t,password:r.password,captcha_session:z.value,captcha:r.captcha.trim(),need_captcha:b.value}),l("success","登录成功,正在跳转..."),X()}catch(t){const e=t?.response?.status,s=t?.response?.data,n=s?.error||s?.message||"登录失败";l("error",n),s?.need_captcha?(b.value=!0,await x()):b.value&&e===400&&await x()}finally{P.value=!1}}async function ge(){await J(),k.value=!0,S.value="",m.value="",d.username="",d.captcha="",await N()}async function he(){if(m.value="",S.value="",!w.value){m.value="邮件功能未启用,请联系管理员重置密码。";return}const t=d.username.trim();if(!t){m.value="请输入用户名";return}if(!d.captcha.trim()){m.value="请输入验证码";return}U.value=!0;try{const e=await le({username:t,captcha_session:K.value,captcha:d.captcha.trim()});l("success",e?.message||"已发送重置邮件"),k.value=!1}catch(e){const s=e?.response?.data,n=s?.error||"发送失败";s?.code==="email_not_bound"?S.value=n:m.value=n,await N()}finally{U.value=!1}}async function ye(){if(await J(),!F.value){l("error","当前未启用注册邮箱验证,无需重发验证邮件。");return}_.value=!0,p.email="",p.captcha="",f.value="",await A()}async function be(){f.value="";const t=p.email.trim();if(!t){f.value="请输入邮箱";return}if(!p.captcha.trim()){f.value="请输入验证码";return}O.value=!0;try{const e=await re({email:t,captcha_session:D.value,captcha:p.captcha.trim()});l("success",e?.message||"验证邮件已发送,请查收"),_.value=!1}catch(e){const s=e?.response?.data;f.value=s?.error||"发送失败",await A()}finally{O.value=!1}}function we(){window.location.href="/register"}return _e(async()=>{if(ve()){await fe();return}await pe(),b.value&&await x()}),(t,e)=>(c(),i("div",Re,[a("div",Ee,[e[19]||(e[19]=a("div",{class:"login-header"},[a("span",{class:"login-badge"},"用户登录"),a("h1",null,"用户登录系统"),a("p",null,"知识管理平台")],-1)),T.value?(c(),i("div",{key:0,class:Y(["notice",j.value==="success"?"is-success":"is-error"])},v(T.value),3)):u("",!0),a("div",Pe,[e[14]||(e[14]=a("label",{for:"username"},"用户账号",-1)),h(a("input",{id:"username","onUpdate:modelValue":e[0]||(e[0]=s=>r.username=s),class:"text-input",placeholder:"请输入用户名",autocomplete:"username"},null,512),[[y,r.username]])]),a("div",Te,[e[15]||(e[15]=a("label",{for:"password"},"密码",-1)),h(a("input",{id:"password","onUpdate:modelValue":e[1]||(e[1]=s=>r.password=s),class:"text-input",type:"password",placeholder:"请输入密码",autocomplete:"current-password",onKeyup:Z(W,["enter"])},null,544),[[y,r.password]])]),b.value?(c(),i("div",Le,[e[16]||(e[16]=a("label",{for:"captcha"},"验证码",-1)),a("div",Ue,[h(a("input",{id:"captcha","onUpdate:modelValue":e[2]||(e[2]=s=>r.captcha=s),class:"text-input captcha-input",placeholder:"请输入验证码",onKeyup:Z(W,["enter"])},null,544),[[y,r.captcha]]),E.value?(c(),i("img",{key:0,class:"captcha-img",src:E.value,alt:"验证码",title:"点击刷新",onClick:x},null,8,Ve)):u("",!0),a("button",{type:"button",class:"captcha-refresh",onClick:x},"刷新")])])):u("",!0),a("button",{type:"button",class:"btn-login",disabled:P.value||B.value,onClick:W},v(P.value||B.value?"登录中...":"登录系统"),9,Oe),$.value.enabled?(c(),i("div",$e,[e[17]||(e[17]=a("div",{class:"divider"},[a("span",null,"快捷登录")],-1)),Ce(Se,{providers:$.value.providers,mode:"login","redirect-uri":de(),block:"",onError:e[3]||(e[3]=s=>l("error",s))},null,8,["providers","redirect-uri"])])):u("",!0),a("div",Be,[a("button",{type:"button",class:"link-btn",onClick:ge},"忘记密码?"),te.value?(c(),i("button",{key:0,type:"button",class:"link-btn",onClick:ye},"重发验证邮件")):u("",!0)]),a("div",{class:"register-row"},[e[18]||(e[18]=a("span",null,"还没有账号?",-1)),a("button",{type:"button",class:"link-btn",onClick:we},"立即注册")])]),k.value?(c(),i("div",{key:0,class:"modal-mask",onClick:e[8]||(e[8]=ee(s=>k.value=!1,["self"]))},[a("section",Ie,[a("div",Ne,[e[20]||(e[20]=a("h3",null,"找回密码",-1)),a("button",{type:"button",class:"modal-close",onClick:e[4]||(e[4]=s=>k.value=!1)},"关闭")]),a("p",{class:Y(["modal-tip",{warn:!w.value}])},v(w.value?"输入用户名并完成验证码,我们将向该账号绑定的邮箱发送重置链接。":"邮件功能未启用,无法通过邮箱找回密码。"),3),S.value?(c(),i("p",Ae,v(S.value),1)):u("",!0),m.value?(c(),i("p",qe,v(m.value),1)):u("",!0),a("div",ze,[e[21]||(e[21]=a("label",{for:"forgot-username"},"用户名",-1)),h(a("input",{id:"forgot-username","onUpdate:modelValue":e[5]||(e[5]=s=>d.username=s),class:"text-input",placeholder:"请输入用户名"},null,512),[[y,d.username]])]),a("div",Fe,[e[22]||(e[22]=a("label",{for:"forgot-captcha"},"验证码",-1)),a("div",je,[h(a("input",{id:"forgot-captcha","onUpdate:modelValue":e[6]||(e[6]=s=>d.captcha=s),class:"text-input captcha-input",placeholder:"请输入验证码"},null,512),[[y,d.captcha]]),L.value?(c(),i("img",{key:0,class:"captcha-img",src:L.value,alt:"验证码",title:"点击刷新",onClick:N},null,8,Ke)):u("",!0),a("button",{type:"button",class:"captcha-refresh",onClick:N},"刷新")])]),a("div",De,[a("button",{type:"button",class:"btn-ghost",onClick:e[7]||(e[7]=s=>k.value=!1)},"取消"),a("button",{type:"button",class:"btn-login",disabled:U.value||!w.value,onClick:he},v(U.value?"发送中...":"发送重置邮件"),9,Me)])])])):u("",!0),_.value?(c(),i("div",{key:1,class:"modal-mask",onClick:e[13]||(e[13]=ee(s=>_.value=!1,["self"]))},[a("section",We,[a("div",Ge,[e[23]||(e[23]=a("h3",null,"重发验证邮件",-1)),a("button",{type:"button",class:"modal-close",onClick:e[9]||(e[9]=s=>_.value=!1)},"关闭")]),e[26]||(e[26]=a("p",{class:"modal-tip"},"用于注册邮箱验证:请输入邮箱并完成验证码。",-1)),f.value?(c(),i("p",He,v(f.value),1)):u("",!0),a("div",Je,[e[24]||(e[24]=a("label",{for:"resend-email"},"邮箱",-1)),h(a("input",{id:"resend-email","onUpdate:modelValue":e[10]||(e[10]=s=>p.email=s),class:"text-input",placeholder:"name@example.com"},null,512),[[y,p.email]])]),a("div",Xe,[e[25]||(e[25]=a("label",{for:"resend-captcha"},"验证码",-1)),a("div",Qe,[h(a("input",{id:"resend-captcha","onUpdate:modelValue":e[11]||(e[11]=s=>p.captcha=s),class:"text-input captcha-input",placeholder:"请输入验证码"},null,512),[[y,p.captcha]]),V.value?(c(),i("img",{key:0,class:"captcha-img",src:V.value,alt:"验证码",title:"点击刷新",onClick:A},null,8,Ye)):u("",!0),a("button",{type:"button",class:"captcha-refresh",onClick:A},"刷新")])]),a("div",Ze,[a("button",{type:"button",class:"btn-ghost",onClick:e[12]||(e[12]=s=>_.value=!1)},"取消"),a("button",{type:"button",class:"btn-login",disabled:O.value,onClick:be},v(O.value?"发送中...":"发送"),9,et)])])])):u("",!0)]))}},mt=xe(tt,[["__scopeId","data-v-4e362f14"]]);export{mt as default}; diff --git a/static/app/assets/LoginPage-CSaMrhQm.css b/static/app/assets/LoginPage-CSaMrhQm.css deleted file mode 100644 index 6db16f9..0000000 --- a/static/app/assets/LoginPage-CSaMrhQm.css +++ /dev/null @@ -1 +0,0 @@ -.login-page[data-v-a3fd4ee2]{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;position:relative;background:linear-gradient(135deg,#eef2ff,#f6f7fb 45%,#ecfeff)}.login-page[data-v-a3fd4ee2]:before{content:"";position:fixed;inset:0;background:radial-gradient(800px 500px at 15% 20%,rgba(59,130,246,.18),transparent 60%),radial-gradient(700px 420px at 85% 70%,rgba(124,58,237,.16),transparent 55%);pointer-events:none}.login-container[data-v-a3fd4ee2]{width:100%;max-width:420px;background:#fff;border-radius:16px;box-shadow:0 18px 60px #11182726;border:1px solid rgba(17,24,39,.08);padding:36px 30px;position:relative;z-index:1}.login-header[data-v-a3fd4ee2]{text-align:center;margin-bottom:26px}.login-badge[data-v-a3fd4ee2]{display:inline-block;background:#3b82f61a;color:#1d4ed8;padding:6px 14px;border-radius:999px;font-size:12px;font-weight:700;margin-bottom:14px}.login-header h1[data-v-a3fd4ee2]{font-size:24px;color:#111827;margin:0 0 10px;letter-spacing:.2px}.login-header p[data-v-a3fd4ee2]{margin:0;color:#6b7280;font-size:14px}.notice[data-v-a3fd4ee2]{margin-bottom:14px;padding:10px 12px;border-radius:10px;font-size:13px;font-weight:600}.notice.is-error[data-v-a3fd4ee2]{color:#b91c1c;background:#fee2e2;border:1px solid #fecaca}.notice.is-success[data-v-a3fd4ee2]{color:#065f46;background:#d1fae5;border:1px solid #a7f3d0}.form-group[data-v-a3fd4ee2]{margin-bottom:16px}.form-group label[data-v-a3fd4ee2]{display:block;margin-bottom:8px;color:#111827;font-weight:700;font-size:13px}.text-input[data-v-a3fd4ee2]{width:100%;height:44px;border-radius:10px;border:1px solid rgba(17,24,39,.18);padding:0 12px;font-size:14px;color:#111827;background:#ffffffeb;outline:none;transition:border-color .18s,box-shadow .18s;box-sizing:border-box}.text-input[data-v-a3fd4ee2]:focus{border-color:#3b82f6cc;box-shadow:0 0 0 4px #3b82f624}.btn-login[data-v-a3fd4ee2]{width:100%;height:44px;border:none;border-radius:10px;background:linear-gradient(135deg,#2563eb,#7c3aed);color:#fff;font-size:14px;font-weight:800;cursor:pointer;transition:transform .15s,filter .15s}.social-login-area[data-v-a3fd4ee2]{margin-top:14px}.divider[data-v-a3fd4ee2]{display:flex;align-items:center;gap:10px;margin:14px 0 10px;color:#64748b;font-size:12px;font-weight:700}.divider[data-v-a3fd4ee2]:before,.divider[data-v-a3fd4ee2]:after{content:"";height:1px;flex:1;background:#1118271f}.btn-login[data-v-a3fd4ee2]:disabled,.btn-ghost[data-v-a3fd4ee2]:disabled,.captcha-refresh[data-v-a3fd4ee2]:disabled{cursor:not-allowed;opacity:.72}.btn-login[data-v-a3fd4ee2]:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.02)}.action-links[data-v-a3fd4ee2]{margin-top:14px;display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.link-btn[data-v-a3fd4ee2]{border:none;background:none;color:#2563eb;font-size:13px;font-weight:700;cursor:pointer;padding:0}.link-btn[data-v-a3fd4ee2]:hover{text-decoration:underline}.register-row[data-v-a3fd4ee2]{margin-top:16px;display:flex;justify-content:center;align-items:center;gap:8px;color:#6b7280;font-size:13px}.captcha-row[data-v-a3fd4ee2]{display:flex;align-items:center;gap:10px;width:100%}.captcha-input[data-v-a3fd4ee2]{flex:1;min-width:0}.captcha-img[data-v-a3fd4ee2]{height:44px;border:1px solid rgba(17,24,39,.14);border-radius:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.captcha-refresh[data-v-a3fd4ee2]{height:42px;padding:0 12px;border:1px solid rgba(17,24,39,.14);border-radius:10px;background:#f8fafc;color:#111827;font-size:13px;cursor:pointer}.captcha-refresh[data-v-a3fd4ee2]:hover{background:#f1f5f9}.modal-mask[data-v-a3fd4ee2]{position:fixed;inset:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;padding:16px;z-index:20}.modal-card[data-v-a3fd4ee2]{width:min(560px,96vw);border-radius:14px;background:#fff;border:1px solid rgba(17,24,39,.08);box-shadow:0 16px 42px #0f172a47;padding:16px}.modal-head[data-v-a3fd4ee2]{display:flex;align-items:center;justify-content:space-between;gap:10px}.modal-head h3[data-v-a3fd4ee2]{margin:0;font-size:16px;font-weight:800;color:#0f172a}.modal-close[data-v-a3fd4ee2]{height:30px;padding:0 10px;border-radius:8px;border:1px solid rgba(17,24,39,.16);background:#fff;color:#334155;cursor:pointer}.modal-tip[data-v-a3fd4ee2]{margin:12px 0;padding:10px;border-radius:10px;background:#eff6ff;border:1px solid #bfdbfe;color:#1e3a8a;font-size:13px}.modal-tip.warn[data-v-a3fd4ee2]{background:#fffbeb;border-color:#fde68a;color:#92400e}.modal-tip.error[data-v-a3fd4ee2]{background:#fef2f2;border-color:#fecaca;color:#991b1b}.modal-actions[data-v-a3fd4ee2]{margin-top:14px;display:flex;justify-content:flex-end;gap:10px}.btn-ghost[data-v-a3fd4ee2]{min-width:86px;height:40px;border-radius:10px;border:1px solid rgba(17,24,39,.2);background:#fff;color:#334155;font-size:13px;font-weight:700;cursor:pointer}@media(max-width:480px){.login-page[data-v-a3fd4ee2]{align-items:flex-start;padding:16px 10px 10px}.login-container[data-v-a3fd4ee2]{max-width:100%;padding:26px 18px;border-radius:14px}.login-header h1[data-v-a3fd4ee2]{font-size:22px}.captcha-img[data-v-a3fd4ee2]{height:42px}.captcha-refresh[data-v-a3fd4ee2]{height:40px;padding:0 10px}.modal-card[data-v-a3fd4ee2]{padding:14px}} diff --git a/static/app/assets/LoginPage-N6sdjwkY.js b/static/app/assets/LoginPage-N6sdjwkY.js deleted file mode 100644 index 33eff31..0000000 --- a/static/app/assets/LoginPage-N6sdjwkY.js +++ /dev/null @@ -1 +0,0 @@ -import{f as G,g as o,h as we,i as ke,j as i,k as a,l as u,n as Y,t as v,w as h,v as y,m as Z,p as _e,q as ee,o as c}from"./vendor-vue-Da_zwKNU.js";import{S as Ce}from"./SocialLoginButtons-BaFXslgf.js";import{_ as Se}from"./style-CEbARg1o.js";import"./base-C_0HtztH.js";import"./el-overlay-ckkTzDcK.js";import"./aria-DLpFpzDe.js";import"./http-BDcxFXLM.js";import"./vendor-axios-B9ygI19o.js";import"./index-D04QrwME.js";import"./auth-CuW_jyJD.js";const xe={class:"login-page"},Ee={class:"login-container"},Re={class:"form-group"},Te={class:"form-group"},Pe={key:1,class:"form-group"},Le={class:"captcha-row"},Ve=["src"],Ue=["disabled"],Oe={key:2,class:"social-login-area"},$e={class:"action-links"},Ie={class:"modal-card"},Be={class:"modal-head"},Ne={key:0,class:"modal-tip warn"},Ae={key:1,class:"modal-tip error"},qe={class:"form-group"},ze={class:"form-group"},Fe={class:"captcha-row"},je=["src"],Ke={class:"modal-actions"},De=["disabled"],Me={class:"modal-card"},We={class:"modal-head"},Ge={key:0,class:"modal-tip error"},He={class:"form-group"},Je={class:"form-group"},Xe={class:"captcha-row"},Qe=["src"],Ye={class:"modal-actions"},Ze=["disabled"],et={__name:"LoginPage",setup(tt){const l=G({username:"",password:"",captcha:""}),b=o(!1),R=o(""),z=o(""),T=o(!1),w=o(!1),F=o(!1),j=o(""),P=o(""),k=o(!1),_=o(!1),d=G({username:"",captcha:""}),L=o(""),K=o(""),V=o(!1),S=o(""),m=o(""),p=G({email:"",captcha:""}),U=o(""),D=o(""),O=o(!1),f=o(""),te=we(()=>!0),H=o(!1),$=o({enabled:!1,providers:[]}),I=o(!1),B={token:"zsglpt_social_pending_bind_token",provider:"zsglpt_social_pending_bind_provider",nickname:"zsglpt_social_pending_bind_nickname",avatar:"zsglpt_social_pending_bind_avatar_url"};function ae(t){const e=String(t).replace(/([.*+?^${}()|[\]\\])/g,"\\$1"),s=document.cookie.match(new RegExp(`(?:^|; )${e}=([^;]*)`));return s?decodeURIComponent(s[1]):""}class se extends Error{constructor(e,s,n){super(e||"请求失败"),this.name="ApiError",this.response={status:Number(s||0),data:n||{}}}}async function g(t,e={}){const s=String(e.method||"GET").toUpperCase(),n={...e.headers||{}},E=Object.prototype.hasOwnProperty.call(e,"body");if(E&&!n["Content-Type"]&&(n["Content-Type"]="application/json"),!["GET","HEAD","OPTIONS"].includes(s)){const Q=ae("csrf_token");Q&&(n["X-CSRF-Token"]=Q)}const q=await fetch(`/api${t}`,{method:s,headers:n,credentials:"include",body:E?JSON.stringify(e.body??{}):void 0});let C={};try{C=await q.json()}catch{C={}}if(!q.ok)throw new se(C?.error||C?.message||`请求失败 (${q.status})`,q.status,C);return C}const oe=()=>g("/email/verify-status"),M=()=>g("/generate_captcha",{method:"POST",body:{}}),ne=t=>g("/login",{method:"POST",body:t||{}}),le=t=>g("/resend-verify-email",{method:"POST",body:t||{}}),re=t=>g("/forgot-password",{method:"POST",body:t||{}}),ie=()=>g("/auth/social/config"),ce=t=>g("/auth/social/callback",{method:"POST",body:t||{}});async function J(){if(!H.value)try{const t=await oe();w.value=!!t?.email_enabled,F.value=!!t?.register_verify_enabled}catch{w.value=!1,F.value=!1}finally{H.value=!0}}function r(t,e){j.value=String(t||""),P.value=String(e||"")}function ue(){j.value="",P.value=""}async function x(){try{const t=await M();z.value=t?.session_id||"",R.value=t?.captcha_image||"",l.captcha=""}catch{z.value="",R.value=""}}async function N(){try{const t=await M();K.value=t?.session_id||"",L.value=t?.captcha_image||"",d.captcha=""}catch{K.value="",L.value=""}}async function A(){try{const t=await M();D.value=t?.session_id||"",U.value=t?.captcha_image||"",p.captcha=""}catch{D.value="",U.value=""}}function X(){const t=new URLSearchParams(window.location.search||""),e=String(t.get("next")||"").trim(),s=e&&e.startsWith("/")&&!e.startsWith("//")&&!e.startsWith("/\\")?e:"";window.setTimeout(()=>{window.location.href=s||"/app"},300)}function de(){const t=new URL(window.location.href);return t.pathname="/login",t.search="",t.hash="",t.toString()}async function pe(){try{const t=await ie();$.value={enabled:!!t?.enabled,providers:Array.isArray(t?.providers)?t.providers:[]}}catch{$.value={enabled:!1,providers:[]}}}function me(t){try{window.sessionStorage.setItem(B.token,t?.bind_token||""),window.sessionStorage.setItem(B.provider,t?.provider||""),window.sessionStorage.setItem(B.nickname,t?.nickname||""),window.sessionStorage.setItem(B.avatar,t?.avatar_url||"")}catch{}}async function ve(){const t=new URLSearchParams(window.location.search||""),e=String(t.get("provider")||t.get("type")||"").trim(),s=String(t.get("code")||"").trim();if(!e||!s)return!1;I.value=!0,r("success","正在完成快捷登录...");try{const n=await ce({provider:e,code:s,mode:"login"});if(n?.requires_register&&n?.bind_token)return me(n),r("success","请完成注册后继续"),window.setTimeout(()=>{window.location.href="/register"},500),!0;if(n?.success||n?.bound)return r("success","快捷登录成功,正在跳转..."),X(),!0;r("error","快捷登录失败")}catch(n){const E=n?.response?.data;r("error",E?.error||E?.message||"快捷登录失败")}finally{I.value=!1}return!0}async function W(){if(ue(),!l.username.trim()||!l.password.trim()){r("error","用户名和密码不能为空");return}if(b.value&&!l.captcha.trim()){r("error","请输入验证码");return}T.value=!0;try{const t=l.username.trim();await ne({username:t,password:l.password,captcha_session:z.value,captcha:l.captcha.trim(),need_captcha:b.value}),r("success","登录成功,正在跳转..."),X()}catch(t){const e=t?.response?.status,s=t?.response?.data,n=s?.error||s?.message||"登录失败";r("error",n),s?.need_captcha?(b.value=!0,await x()):b.value&&e===400&&await x()}finally{T.value=!1}}async function fe(){await J(),k.value=!0,S.value="",m.value="",d.username="",d.captcha="",await N()}async function ge(){if(m.value="",S.value="",!w.value){m.value="邮件功能未启用,请联系管理员重置密码。";return}const t=d.username.trim();if(!t){m.value="请输入用户名";return}if(!d.captcha.trim()){m.value="请输入验证码";return}V.value=!0;try{const e=await re({username:t,captcha_session:K.value,captcha:d.captcha.trim()});r("success",e?.message||"已发送重置邮件"),k.value=!1}catch(e){const s=e?.response?.data,n=s?.error||"发送失败";s?.code==="email_not_bound"?S.value=n:m.value=n,await N()}finally{V.value=!1}}async function he(){if(await J(),!F.value){r("error","当前未启用注册邮箱验证,无需重发验证邮件。");return}_.value=!0,p.email="",p.captcha="",f.value="",await A()}async function ye(){f.value="";const t=p.email.trim();if(!t){f.value="请输入邮箱";return}if(!p.captcha.trim()){f.value="请输入验证码";return}O.value=!0;try{const e=await le({email:t,captcha_session:D.value,captcha:p.captcha.trim()});r("success",e?.message||"验证邮件已发送,请查收"),_.value=!1}catch(e){const s=e?.response?.data;f.value=s?.error||"发送失败",await A()}finally{O.value=!1}}function be(){window.location.href="/register"}return ke(async()=>{await pe(),await ve(),b.value&&await x()}),(t,e)=>(c(),i("div",xe,[a("div",Ee,[e[19]||(e[19]=a("div",{class:"login-header"},[a("span",{class:"login-badge"},"用户登录"),a("h1",null,"用户登录系统"),a("p",null,"知识管理平台")],-1)),P.value?(c(),i("div",{key:0,class:Y(["notice",j.value==="success"?"is-success":"is-error"])},v(P.value),3)):u("",!0),a("div",Re,[e[14]||(e[14]=a("label",{for:"username"},"用户账号",-1)),h(a("input",{id:"username","onUpdate:modelValue":e[0]||(e[0]=s=>l.username=s),class:"text-input",placeholder:"请输入用户名",autocomplete:"username"},null,512),[[y,l.username]])]),a("div",Te,[e[15]||(e[15]=a("label",{for:"password"},"密码",-1)),h(a("input",{id:"password","onUpdate:modelValue":e[1]||(e[1]=s=>l.password=s),class:"text-input",type:"password",placeholder:"请输入密码",autocomplete:"current-password",onKeyup:Z(W,["enter"])},null,544),[[y,l.password]])]),b.value?(c(),i("div",Pe,[e[16]||(e[16]=a("label",{for:"captcha"},"验证码",-1)),a("div",Le,[h(a("input",{id:"captcha","onUpdate:modelValue":e[2]||(e[2]=s=>l.captcha=s),class:"text-input captcha-input",placeholder:"请输入验证码",onKeyup:Z(W,["enter"])},null,544),[[y,l.captcha]]),R.value?(c(),i("img",{key:0,class:"captcha-img",src:R.value,alt:"验证码",title:"点击刷新",onClick:x},null,8,Ve)):u("",!0),a("button",{type:"button",class:"captcha-refresh",onClick:x},"刷新")])])):u("",!0),a("button",{type:"button",class:"btn-login",disabled:T.value||I.value,onClick:W},v(T.value||I.value?"登录中...":"登录系统"),9,Ue),$.value.enabled?(c(),i("div",Oe,[e[17]||(e[17]=a("div",{class:"divider"},[a("span",null,"快捷登录")],-1)),_e(Ce,{providers:$.value.providers,mode:"login","redirect-uri":de(),block:"",onError:e[3]||(e[3]=s=>r("error",s))},null,8,["providers","redirect-uri"])])):u("",!0),a("div",$e,[a("button",{type:"button",class:"link-btn",onClick:fe},"忘记密码?"),te.value?(c(),i("button",{key:0,type:"button",class:"link-btn",onClick:he},"重发验证邮件")):u("",!0)]),a("div",{class:"register-row"},[e[18]||(e[18]=a("span",null,"还没有账号?",-1)),a("button",{type:"button",class:"link-btn",onClick:be},"立即注册")])]),k.value?(c(),i("div",{key:0,class:"modal-mask",onClick:e[8]||(e[8]=ee(s=>k.value=!1,["self"]))},[a("section",Ie,[a("div",Be,[e[20]||(e[20]=a("h3",null,"找回密码",-1)),a("button",{type:"button",class:"modal-close",onClick:e[4]||(e[4]=s=>k.value=!1)},"关闭")]),a("p",{class:Y(["modal-tip",{warn:!w.value}])},v(w.value?"输入用户名并完成验证码,我们将向该账号绑定的邮箱发送重置链接。":"邮件功能未启用,无法通过邮箱找回密码。"),3),S.value?(c(),i("p",Ne,v(S.value),1)):u("",!0),m.value?(c(),i("p",Ae,v(m.value),1)):u("",!0),a("div",qe,[e[21]||(e[21]=a("label",{for:"forgot-username"},"用户名",-1)),h(a("input",{id:"forgot-username","onUpdate:modelValue":e[5]||(e[5]=s=>d.username=s),class:"text-input",placeholder:"请输入用户名"},null,512),[[y,d.username]])]),a("div",ze,[e[22]||(e[22]=a("label",{for:"forgot-captcha"},"验证码",-1)),a("div",Fe,[h(a("input",{id:"forgot-captcha","onUpdate:modelValue":e[6]||(e[6]=s=>d.captcha=s),class:"text-input captcha-input",placeholder:"请输入验证码"},null,512),[[y,d.captcha]]),L.value?(c(),i("img",{key:0,class:"captcha-img",src:L.value,alt:"验证码",title:"点击刷新",onClick:N},null,8,je)):u("",!0),a("button",{type:"button",class:"captcha-refresh",onClick:N},"刷新")])]),a("div",Ke,[a("button",{type:"button",class:"btn-ghost",onClick:e[7]||(e[7]=s=>k.value=!1)},"取消"),a("button",{type:"button",class:"btn-login",disabled:V.value||!w.value,onClick:ge},v(V.value?"发送中...":"发送重置邮件"),9,De)])])])):u("",!0),_.value?(c(),i("div",{key:1,class:"modal-mask",onClick:e[13]||(e[13]=ee(s=>_.value=!1,["self"]))},[a("section",Me,[a("div",We,[e[23]||(e[23]=a("h3",null,"重发验证邮件",-1)),a("button",{type:"button",class:"modal-close",onClick:e[9]||(e[9]=s=>_.value=!1)},"关闭")]),e[26]||(e[26]=a("p",{class:"modal-tip"},"用于注册邮箱验证:请输入邮箱并完成验证码。",-1)),f.value?(c(),i("p",Ge,v(f.value),1)):u("",!0),a("div",He,[e[24]||(e[24]=a("label",{for:"resend-email"},"邮箱",-1)),h(a("input",{id:"resend-email","onUpdate:modelValue":e[10]||(e[10]=s=>p.email=s),class:"text-input",placeholder:"name@example.com"},null,512),[[y,p.email]])]),a("div",Je,[e[25]||(e[25]=a("label",{for:"resend-captcha"},"验证码",-1)),a("div",Xe,[h(a("input",{id:"resend-captcha","onUpdate:modelValue":e[11]||(e[11]=s=>p.captcha=s),class:"text-input captcha-input",placeholder:"请输入验证码"},null,512),[[y,p.captcha]]),U.value?(c(),i("img",{key:0,class:"captcha-img",src:U.value,alt:"验证码",title:"点击刷新",onClick:A},null,8,Qe)):u("",!0),a("button",{type:"button",class:"captcha-refresh",onClick:A},"刷新")])]),a("div",Ye,[a("button",{type:"button",class:"btn-ghost",onClick:e[12]||(e[12]=s=>_.value=!1)},"取消"),a("button",{type:"button",class:"btn-login",disabled:O.value,onClick:ye},v(O.value?"发送中...":"发送"),9,Ze)])])])):u("",!0)]))}},pt=Se(et,[["__scopeId","data-v-a3fd4ee2"]]);export{pt as default}; diff --git a/static/app/assets/LoginPage-udDwyYMW.css b/static/app/assets/LoginPage-udDwyYMW.css new file mode 100644 index 0000000..6705b67 --- /dev/null +++ b/static/app/assets/LoginPage-udDwyYMW.css @@ -0,0 +1 @@ +.login-page[data-v-4e362f14]{min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px;position:relative;background:linear-gradient(135deg,#eef2ff,#f6f7fb 45%,#ecfeff)}.login-page[data-v-4e362f14]:before{content:"";position:fixed;inset:0;background:radial-gradient(800px 500px at 15% 20%,rgba(59,130,246,.18),transparent 60%),radial-gradient(700px 420px at 85% 70%,rgba(124,58,237,.16),transparent 55%);pointer-events:none}.login-container[data-v-4e362f14]{width:100%;max-width:420px;background:#fff;border-radius:16px;box-shadow:0 18px 60px #11182726;border:1px solid rgba(17,24,39,.08);padding:36px 30px;position:relative;z-index:1}.login-header[data-v-4e362f14]{text-align:center;margin-bottom:26px}.login-badge[data-v-4e362f14]{display:inline-block;background:#3b82f61a;color:#1d4ed8;padding:6px 14px;border-radius:999px;font-size:12px;font-weight:700;margin-bottom:14px}.login-header h1[data-v-4e362f14]{font-size:24px;color:#111827;margin:0 0 10px;letter-spacing:.2px}.login-header p[data-v-4e362f14]{margin:0;color:#6b7280;font-size:14px}.notice[data-v-4e362f14]{margin-bottom:14px;padding:10px 12px;border-radius:10px;font-size:13px;font-weight:600}.notice.is-error[data-v-4e362f14]{color:#b91c1c;background:#fee2e2;border:1px solid #fecaca}.notice.is-success[data-v-4e362f14]{color:#065f46;background:#d1fae5;border:1px solid #a7f3d0}.form-group[data-v-4e362f14]{margin-bottom:16px}.form-group label[data-v-4e362f14]{display:block;margin-bottom:8px;color:#111827;font-weight:700;font-size:13px}.text-input[data-v-4e362f14]{width:100%;height:44px;border-radius:10px;border:1px solid rgba(17,24,39,.18);padding:0 12px;font-size:14px;color:#111827;background:#ffffffeb;outline:none;transition:border-color .18s,box-shadow .18s;box-sizing:border-box}.text-input[data-v-4e362f14]:focus{border-color:#3b82f6cc;box-shadow:0 0 0 4px #3b82f624}.btn-login[data-v-4e362f14]{width:100%;height:44px;border:none;border-radius:10px;background:linear-gradient(135deg,#2563eb,#7c3aed);color:#fff;font-size:14px;font-weight:800;cursor:pointer;transition:transform .15s,filter .15s}.social-login-area[data-v-4e362f14]{margin-top:14px}.divider[data-v-4e362f14]{display:flex;align-items:center;gap:10px;margin:14px 0 10px;color:#64748b;font-size:12px;font-weight:700}.divider[data-v-4e362f14]:before,.divider[data-v-4e362f14]:after{content:"";height:1px;flex:1;background:#1118271f}.btn-login[data-v-4e362f14]:disabled,.btn-ghost[data-v-4e362f14]:disabled,.captcha-refresh[data-v-4e362f14]:disabled{cursor:not-allowed;opacity:.72}.btn-login[data-v-4e362f14]:hover:not(:disabled){transform:translateY(-1px);filter:brightness(1.02)}.action-links[data-v-4e362f14]{margin-top:14px;display:flex;align-items:center;justify-content:space-between;gap:8px;flex-wrap:wrap}.link-btn[data-v-4e362f14]{border:none;background:none;color:#2563eb;font-size:13px;font-weight:700;cursor:pointer;padding:0}.link-btn[data-v-4e362f14]:hover{text-decoration:underline}.register-row[data-v-4e362f14]{margin-top:16px;display:flex;justify-content:center;align-items:center;gap:8px;color:#6b7280;font-size:13px}.captcha-row[data-v-4e362f14]{display:flex;align-items:center;gap:10px;width:100%}.captcha-input[data-v-4e362f14]{flex:1;min-width:0}.captcha-img[data-v-4e362f14]{height:44px;border:1px solid rgba(17,24,39,.14);border-radius:8px;cursor:pointer;-webkit-user-select:none;user-select:none}.captcha-refresh[data-v-4e362f14]{height:42px;padding:0 12px;border:1px solid rgba(17,24,39,.14);border-radius:10px;background:#f8fafc;color:#111827;font-size:13px;cursor:pointer}.captcha-refresh[data-v-4e362f14]:hover{background:#f1f5f9}.modal-mask[data-v-4e362f14]{position:fixed;inset:0;background:#0f172a73;display:flex;align-items:center;justify-content:center;padding:16px;z-index:20}.modal-card[data-v-4e362f14]{width:min(560px,96vw);border-radius:14px;background:#fff;border:1px solid rgba(17,24,39,.08);box-shadow:0 16px 42px #0f172a47;padding:16px}.modal-head[data-v-4e362f14]{display:flex;align-items:center;justify-content:space-between;gap:10px}.modal-head h3[data-v-4e362f14]{margin:0;font-size:16px;font-weight:800;color:#0f172a}.modal-close[data-v-4e362f14]{height:30px;padding:0 10px;border-radius:8px;border:1px solid rgba(17,24,39,.16);background:#fff;color:#334155;cursor:pointer}.modal-tip[data-v-4e362f14]{margin:12px 0;padding:10px;border-radius:10px;background:#eff6ff;border:1px solid #bfdbfe;color:#1e3a8a;font-size:13px}.modal-tip.warn[data-v-4e362f14]{background:#fffbeb;border-color:#fde68a;color:#92400e}.modal-tip.error[data-v-4e362f14]{background:#fef2f2;border-color:#fecaca;color:#991b1b}.modal-actions[data-v-4e362f14]{margin-top:14px;display:flex;justify-content:flex-end;gap:10px}.btn-ghost[data-v-4e362f14]{min-width:86px;height:40px;border-radius:10px;border:1px solid rgba(17,24,39,.2);background:#fff;color:#334155;font-size:13px;font-weight:700;cursor:pointer}@media(max-width:480px){.login-page[data-v-4e362f14]{align-items:flex-start;padding:16px 10px 10px}.login-container[data-v-4e362f14]{max-width:100%;padding:26px 18px;border-radius:14px}.login-header h1[data-v-4e362f14]{font-size:22px}.captcha-img[data-v-4e362f14]{height:42px}.captcha-refresh[data-v-4e362f14]{height:40px;padding:0 10px}.modal-card[data-v-4e362f14]{padding:14px}} diff --git a/static/app/assets/app-D7SWy-KG.js b/static/app/assets/app-BV_xMlg4.js similarity index 96% rename from static/app/assets/app-D7SWy-KG.js rename to static/app/assets/app-BV_xMlg4.js index ca5c57c..55ada24 100644 --- a/static/app/assets/app-D7SWy-KG.js +++ b/static/app/assets/app-BV_xMlg4.js @@ -1,2 +1,2 @@ -const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./LoginPage-N6sdjwkY.js","./vendor-vue-Da_zwKNU.js","./SocialLoginButtons-BaFXslgf.js","./base-C_0HtztH.js","./base-CiSqh4F9.css","./el-overlay-ckkTzDcK.js","./aria-DLpFpzDe.js","./http-BDcxFXLM.js","./vendor-axios-B9ygI19o.js","./index-D04QrwME.js","./el-overlay-hkg5a9kt.css","./auth-CuW_jyJD.js","./style-CEbARg1o.js","./style-BHGuKLUF.css","./SocialLoginButtons-qO3SCoE7.css","./LoginPage-CSaMrhQm.css","./RegisterPage-Bypz6ilN.js","./el-card-cnxuvbL3.js","./el-card-BqOrgVp1.css","./el-alert-BgJljmz-.js","./el-button-xGNUoXVX.js","./el-button-BRDnKxwT.css","./el-input-nl0Ylqa_.js","./el-input-D6B3r8CH.css","./el-alert-B-NgiIln.css","./password-7ryi82gE.js","./RegisterPage-LYXwWYc1.css","./ResetPasswordPage-Znm7wIOo.js","./ResetPasswordPage-DAB63ins.css","./SocialBindCallbackPage-BXLD-LiQ.js","./el-skeleton-item-cWa5ANvD.js","./el-skeleton-item-BLY1jEuR.css","./settings-C8OWd3zp.js","./SocialBindCallbackPage-BZgzv_7a.css","./VerifyResultPage-Du3cLyZ2.js","./VerifyResultPage-BnGv8vyq.css","./AppLayout-8mkxrTVV.js","./user-DIrCtqzm.js","./el-popper-_4NhtSRX.js","./el-popper-BrfLRiIr.css","./user-B5lTGWdM.css","./AppLayout-C0FaVSZn.css","./AccountsPage-DZM5eF8A.js","./accounts-HALpNswY.js","./accounts-DqlHDq0H.css","./el-select-BADfKG7m.js","./el-select-B0XIb2QK.css","./vendor-realtime-CA1CrNgP.js","./AccountsPage-DKewJ7S7.css","./SchedulesPage-vAAprGPM.js","./el-pagination-D16TMO1B.js","./el-pagination-B1FwbX1n.css","./SchedulesPage-Dxq2ghmQ.css","./ScreenshotsPage-DrfiqfWk.js","./ScreenshotsPage-BhLfAzHf.css"])))=>i.map(i=>d[i]); -import{_ as v}from"./style-CEbARg1o.js";import{r as g,c as R,o as y,a as A,b as L,d as k,e as b}from"./vendor-vue-Da_zwKNU.js";const w={};function V(p,l){const a=g("RouterView");return y(),R(a)}const O=v(w,[["render",V]]),T="modulepreload",D=function(p,l){return new URL(p,l).href},f={},o=function(l,a,u){let _=Promise.resolve();if(a&&a.length>0){let P=function(e){return Promise.all(e.map(s=>Promise.resolve(s).then(c=>({status:"fulfilled",value:c}),c=>({status:"rejected",reason:c}))))};const n=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),h=t?.nonce||t?.getAttribute("nonce");_=P(a.map(e=>{if(e=D(e,u),e in f)return;f[e]=!0;const s=e.endsWith(".css"),c=s?'[rel="stylesheet"]':"";if(u)for(let i=n.length-1;i>=0;i--){const m=n[i];if(m.href===e&&(!s||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${c}`))return;const r=document.createElement("link");if(r.rel=s?"stylesheet":T,s||(r.as="script"),r.crossOrigin="",r.href=e,h&&r.setAttribute("nonce",h),document.head.appendChild(r),s)return new Promise((i,m)=>{r.addEventListener("load",i),r.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${e}`)))})}))}function d(n){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=n,window.dispatchEvent(t),!t.defaultPrevented)throw n}return _.then(n=>{for(const t of n||[])t.status==="rejected"&&d(t.reason);return l().catch(d)})},I=()=>o(()=>import("./LoginPage-N6sdjwkY.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url),S=()=>o(()=>import("./RegisterPage-Bypz6ilN.js"),__vite__mapDeps([16,3,1,4,17,18,19,20,9,21,22,7,8,6,23,24,11,25,12,13,26]),import.meta.url),C=()=>o(()=>import("./ResetPasswordPage-Znm7wIOo.js"),__vite__mapDeps([27,3,1,4,17,18,19,20,9,21,22,7,8,6,23,24,11,25,12,13,28]),import.meta.url),$=()=>o(()=>import("./SocialBindCallbackPage-BXLD-LiQ.js"),__vite__mapDeps([29,3,1,4,17,18,30,31,11,7,8,32,12,13,33]),import.meta.url),E=()=>o(()=>import("./VerifyResultPage-Du3cLyZ2.js"),__vite__mapDeps([34,3,1,4,17,18,20,9,21,12,13,35]),import.meta.url),B=()=>o(()=>import("./AppLayout-8mkxrTVV.js"),__vite__mapDeps([36,3,1,4,37,19,20,9,21,22,7,8,6,23,24,38,5,10,39,40,30,31,11,32,2,12,13,14,25,41]),import.meta.url),N=()=>o(()=>import("./AccountsPage-DZM5eF8A.js"),__vite__mapDeps([42,3,1,4,5,6,7,8,9,10,19,20,21,22,23,24,43,37,38,39,40,44,30,31,45,46,17,18,32,47,12,13,48]),import.meta.url),j=()=>o(()=>import("./SchedulesPage-vAAprGPM.js"),__vite__mapDeps([49,3,1,4,38,22,7,8,6,20,9,21,23,5,10,39,19,24,45,46,43,37,40,44,50,51,17,18,30,31,12,13,52]),import.meta.url),q=()=>o(()=>import("./ScreenshotsPage-DrfiqfWk.js"),__vite__mapDeps([53,3,1,4,5,6,7,8,9,10,50,45,38,22,20,21,23,39,46,51,17,18,30,31,12,13,54]),import.meta.url),x=[{path:"/",redirect:"/login"},{path:"/login",name:"login",component:I},{path:"/register",name:"register",component:S},{path:"/reset-password/:token",name:"reset_password",component:C},{path:"/social-bind-callback",name:"social_bind_callback",component:$},{path:"/api/verify-email/:token",name:"verify_email",component:E},{path:"/api/verify-bind-email/:token",name:"verify_bind_email",component:E},{path:"/app",component:B,children:[{path:"",redirect:"/app/accounts"},{path:"accounts",name:"accounts",component:N},{path:"schedules",name:"schedules",component:j},{path:"screenshots",name:"screenshots",component:q}]},{path:"/:pathMatch(.*)*",redirect:"/login"}],M=A({history:L(),routes:x});k(O).use(b()).use(M).mount("#app"); +const __vite__mapDeps=(i,m=__vite__mapDeps,d=(m.f||(m.f=["./LoginPage-B-9NNWX9.js","./vendor-vue-Da_zwKNU.js","./SocialLoginButtons-BaFXslgf.js","./base-C_0HtztH.js","./base-CiSqh4F9.css","./el-overlay-ckkTzDcK.js","./aria-DLpFpzDe.js","./http-BDcxFXLM.js","./vendor-axios-B9ygI19o.js","./index-D04QrwME.js","./el-overlay-hkg5a9kt.css","./auth-CuW_jyJD.js","./style-CEbARg1o.js","./style-BHGuKLUF.css","./SocialLoginButtons-qO3SCoE7.css","./LoginPage-udDwyYMW.css","./RegisterPage-Bypz6ilN.js","./el-card-cnxuvbL3.js","./el-card-BqOrgVp1.css","./el-alert-BgJljmz-.js","./el-button-xGNUoXVX.js","./el-button-BRDnKxwT.css","./el-input-nl0Ylqa_.js","./el-input-D6B3r8CH.css","./el-alert-B-NgiIln.css","./password-7ryi82gE.js","./RegisterPage-LYXwWYc1.css","./ResetPasswordPage-Znm7wIOo.js","./ResetPasswordPage-DAB63ins.css","./SocialBindCallbackPage-BXLD-LiQ.js","./el-skeleton-item-cWa5ANvD.js","./el-skeleton-item-BLY1jEuR.css","./settings-C8OWd3zp.js","./SocialBindCallbackPage-BZgzv_7a.css","./VerifyResultPage-Du3cLyZ2.js","./VerifyResultPage-BnGv8vyq.css","./AppLayout-8mkxrTVV.js","./user-DIrCtqzm.js","./el-popper-_4NhtSRX.js","./el-popper-BrfLRiIr.css","./user-B5lTGWdM.css","./AppLayout-C0FaVSZn.css","./AccountsPage-DZM5eF8A.js","./accounts-HALpNswY.js","./accounts-DqlHDq0H.css","./el-select-BADfKG7m.js","./el-select-B0XIb2QK.css","./vendor-realtime-CA1CrNgP.js","./AccountsPage-DKewJ7S7.css","./SchedulesPage-vAAprGPM.js","./el-pagination-D16TMO1B.js","./el-pagination-B1FwbX1n.css","./SchedulesPage-Dxq2ghmQ.css","./ScreenshotsPage-DrfiqfWk.js","./ScreenshotsPage-BhLfAzHf.css"])))=>i.map(i=>d[i]); +import{_ as v}from"./style-CEbARg1o.js";import{r as g,c as R,o as y,a as A,b as L,d as k,e as b}from"./vendor-vue-Da_zwKNU.js";const w={};function V(p,l){const a=g("RouterView");return y(),R(a)}const O=v(w,[["render",V]]),T="modulepreload",D=function(p,l){return new URL(p,l).href},f={},o=function(l,a,u){let _=Promise.resolve();if(a&&a.length>0){let P=function(e){return Promise.all(e.map(s=>Promise.resolve(s).then(c=>({status:"fulfilled",value:c}),c=>({status:"rejected",reason:c}))))};const n=document.getElementsByTagName("link"),t=document.querySelector("meta[property=csp-nonce]"),h=t?.nonce||t?.getAttribute("nonce");_=P(a.map(e=>{if(e=D(e,u),e in f)return;f[e]=!0;const s=e.endsWith(".css"),c=s?'[rel="stylesheet"]':"";if(u)for(let i=n.length-1;i>=0;i--){const m=n[i];if(m.href===e&&(!s||m.rel==="stylesheet"))return}else if(document.querySelector(`link[href="${e}"]${c}`))return;const r=document.createElement("link");if(r.rel=s?"stylesheet":T,s||(r.as="script"),r.crossOrigin="",r.href=e,h&&r.setAttribute("nonce",h),document.head.appendChild(r),s)return new Promise((i,m)=>{r.addEventListener("load",i),r.addEventListener("error",()=>m(new Error(`Unable to preload CSS for ${e}`)))})}))}function d(n){const t=new Event("vite:preloadError",{cancelable:!0});if(t.payload=n,window.dispatchEvent(t),!t.defaultPrevented)throw n}return _.then(n=>{for(const t of n||[])t.status==="rejected"&&d(t.reason);return l().catch(d)})},I=()=>o(()=>import("./LoginPage-B-9NNWX9.js"),__vite__mapDeps([0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]),import.meta.url),S=()=>o(()=>import("./RegisterPage-Bypz6ilN.js"),__vite__mapDeps([16,3,1,4,17,18,19,20,9,21,22,7,8,6,23,24,11,25,12,13,26]),import.meta.url),C=()=>o(()=>import("./ResetPasswordPage-Znm7wIOo.js"),__vite__mapDeps([27,3,1,4,17,18,19,20,9,21,22,7,8,6,23,24,11,25,12,13,28]),import.meta.url),$=()=>o(()=>import("./SocialBindCallbackPage-BXLD-LiQ.js"),__vite__mapDeps([29,3,1,4,17,18,30,31,11,7,8,32,12,13,33]),import.meta.url),E=()=>o(()=>import("./VerifyResultPage-Du3cLyZ2.js"),__vite__mapDeps([34,3,1,4,17,18,20,9,21,12,13,35]),import.meta.url),B=()=>o(()=>import("./AppLayout-8mkxrTVV.js"),__vite__mapDeps([36,3,1,4,37,19,20,9,21,22,7,8,6,23,24,38,5,10,39,40,30,31,11,32,2,12,13,14,25,41]),import.meta.url),N=()=>o(()=>import("./AccountsPage-DZM5eF8A.js"),__vite__mapDeps([42,3,1,4,5,6,7,8,9,10,19,20,21,22,23,24,43,37,38,39,40,44,30,31,45,46,17,18,32,47,12,13,48]),import.meta.url),j=()=>o(()=>import("./SchedulesPage-vAAprGPM.js"),__vite__mapDeps([49,3,1,4,38,22,7,8,6,20,9,21,23,5,10,39,19,24,45,46,43,37,40,44,50,51,17,18,30,31,12,13,52]),import.meta.url),q=()=>o(()=>import("./ScreenshotsPage-DrfiqfWk.js"),__vite__mapDeps([53,3,1,4,5,6,7,8,9,10,50,45,38,22,20,21,23,39,46,51,17,18,30,31,12,13,54]),import.meta.url),x=[{path:"/",redirect:"/login"},{path:"/login",name:"login",component:I},{path:"/register",name:"register",component:S},{path:"/reset-password/:token",name:"reset_password",component:C},{path:"/social-bind-callback",name:"social_bind_callback",component:$},{path:"/api/verify-email/:token",name:"verify_email",component:E},{path:"/api/verify-bind-email/:token",name:"verify_bind_email",component:E},{path:"/app",component:B,children:[{path:"",redirect:"/app/accounts"},{path:"accounts",name:"accounts",component:N},{path:"schedules",name:"schedules",component:j},{path:"screenshots",name:"screenshots",component:q}]},{path:"/:pathMatch(.*)*",redirect:"/login"}],M=A({history:L(),routes:x});k(O).use(b()).use(M).mount("#app"); diff --git a/static/app/assets/login-C88J0b5r.js b/static/app/assets/login-D0qy0-VA.js similarity index 83% rename from static/app/assets/login-C88J0b5r.js rename to static/app/assets/login-D0qy0-VA.js index 5ab94ac..8b3bda9 100644 --- a/static/app/assets/login-C88J0b5r.js +++ b/static/app/assets/login-D0qy0-VA.js @@ -1 +1 @@ -import"./style-CEbARg1o.js";import{d as o}from"./vendor-vue-Da_zwKNU.js";import p from"./LoginPage-N6sdjwkY.js";import"./SocialLoginButtons-BaFXslgf.js";import"./base-C_0HtztH.js";import"./el-overlay-ckkTzDcK.js";import"./aria-DLpFpzDe.js";import"./http-BDcxFXLM.js";import"./vendor-axios-B9ygI19o.js";import"./index-D04QrwME.js";import"./auth-CuW_jyJD.js";o(p).mount("#app"); +import"./style-CEbARg1o.js";import{d as o}from"./vendor-vue-Da_zwKNU.js";import p from"./LoginPage-B-9NNWX9.js";import"./SocialLoginButtons-BaFXslgf.js";import"./base-C_0HtztH.js";import"./el-overlay-ckkTzDcK.js";import"./aria-DLpFpzDe.js";import"./http-BDcxFXLM.js";import"./vendor-axios-B9ygI19o.js";import"./index-D04QrwME.js";import"./auth-CuW_jyJD.js";o(p).mount("#app"); diff --git a/static/app/index.html b/static/app/index.html index 9007cdc..1569f30 100644 --- a/static/app/index.html +++ b/static/app/index.html @@ -1,16 +1,17 @@ - - - - - - 知识管理平台 - + + + + + + 知识管理平台 + - - - -
- - + + + +
+ + + diff --git a/static/app/login.html b/static/app/login.html index c9ddf27..a865987 100644 --- a/static/app/login.html +++ b/static/app/login.html @@ -1,10 +1,10 @@ - - - - - - 知识管理平台 - + + + + + + 知识管理平台 + @@ -15,15 +15,15 @@ - + - - - - -
- - + + + + +
+ +