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};