1import{r as a,j as e}from"./react-vendor-B9vtMnAO.js";import{o as N}from"./origin-mark-hi7VAw5C.js";import{u as M,L as O}from"./react-router-Bzy4TCK-.js";import{c as l,a as y,s as R,r as _,R as C,b as P}from"./index-CJjDj3Aq.js";import{s as u}from"./styles-NE00jPFy.js";import{F as t}from"./index-1SF2NKAO.js";import{u as $}from"./i18n-C3YSY721.js";import{C as B}from"./index-BBYgl1RM.js";import{S as j}from"./index-BKBT2mLf.js";import{T as D}from"./index-DGVJwD6R.js";import{I as m}from"./index-BJpPvb2k.js";import{s as U,w as A,y as G,x as S}from"./antd-icons-ChdLkUcK.js";import{B as E}from"./antd-base-Cc-bVYwX.js";import{s as i}from"./index-BV-Xhf2i.js";import"./useForm-CUB94UU9.js";import"./row-BJ8Z8t-l.js";import"./index-BBzPOgzy.js";import"./useBreakpoint-UgVTaVM5.js";import"./index-CkybSiBI.js";import"./index-BxFSpEcn.js";import"./Portal-CEBIiJfV.js";import"./Skeleton-BSmhKzuT.js";import"./index-BdKPie7b.js";import"./BaseInput-BbMGKv00.js";const{Text:b}=D,f="reset_pw_countdown_end";function ue(){const[g]=t.useForm(),[I,p]=a.useState(!1),[n,k]=a.useState(!1),[w,v]=a.useState(0),h=a.useRef(null),F=M(),{t:s}=$(),d=a.useCallback(()=>{h.current&&(clearInterval(h.current),h.current=null)},[]),x=a.useCallback(o=>{d();const r=()=>{const c=Math.ceil((o-Date.now())/1e3);c<=0?(v(0),localStorage.removeItem(f),d()):v(c)};r(),h.current=setInterval(r,1e3)},[d]);a.useEffect(()=>{const o=localStorage.getItem(f);if(o){const r=parseInt(o,10);r>Date.now()?x(r):localStorage.removeItem(f)}return d},[x,d]);const T=()=>{const o=Date.now()+6e4;localStorage.setItem(f,String(o)),x(o)},q=async()=>{try{if(p(!0),n){const o=g.getFieldValue("email");if(!o){i.error(s("forgotPassword.emailRequired"));return}await P.post("/auth/send-email-code",{email:o}),i.success(s("forgotPassword.codeSentToEmail"))}else{const o=g.getFieldValue("phone");if(!o){i.error(s("login.phoneRequired"));return}await P.post("/auth/send-code",{phone:o}),i.success(s("login.codeSent"))}T()}catch(o){i.error(o.response?.data?.detail||s("login.sendCodeFailed"))}finally{p(!1)}},L=async o=>{try{p(!0);const r={code:o.code,new_password:o.newPassword};n?r.email=o.email:r.phone=o.phone,await P.post("/auth/reset-password",r),i.success(s("forgotPassword.resetSuccess")),setTimeout(()=>F(C.LOGIN),1500)}catch(r){i.error(r.response?.data?.detail||s("forgotPassword.resetFailed"))}finally{p(!1)}},z=()=>{k(!n),g.resetFields(["code"])};return e.jsxs("div",{style:{minHeight:"100vh",display:"flex",alignItems:"center",justifyContent:"center",background:l.bgPage},children:[e.jsx("div",{style:{position:"fixed",top:-120,right:-120,width:360,height:360,borderRadius:"50%",background:l.primaryLight,opacity:.5,pointerEvents:"none"}}),e.jsx("div",{style:{position:"fixed",bottom:-80,left:-80,width:260,height:260,borderRadius:"50%",background:l.accentLight,opacity:.5,pointerEvents:"none"}}),e.jsx(B,{style:{width:420,borderRadius:_.xl,boxShadow:R.lg,border:`1px solid ${l.border}`,position:"relative",zIndex:1},styles:{body:{padding:y[8]}},children:e.jsxs(j,{direction:"vertical",size:"large",style:{width:"100%"},children:[e.jsxs("div",{style:{textAlign:"center"},children:[e.jsxs("div",{style:{display:"flex",alignItems:"center",justifyContent:"center",gap:y[3],marginBottom:y[3]},children:[e.jsx("img",{src:N,alt:"","aria-hidden":"true",style:{width:40,height:40,display:"block"}}),e.jsx("span",{style:{...u.heading.h2,margin:0},children:"Qiz Origin"})]}),e.jsx(b,{style:u.text.secondary,children:s(n?"forgotPassword.resetByEmail":"forgotPassword.resetByPhone")})]}),e.jsxs(t,{form:g,onFinish:L,layout:"vertical",autoComplete:"off",children:[n?e.jsx(t.Item,{name:"email",label:s("forgotPassword.emailLabel"),rules:[{required:!0,message:s("forgotPassword.emailRequired")},{type:"email",message:s("forgotPassword.emailInvalid")}],children:e.jsx(m,{prefix:e.jsx(U,{}),placeholder:s("forgotPassword.emailPlaceholder"),size:"large"})}):e.jsx(t.Item,{name:"phone",label:s("login.phone"),rules:[{required:!0,message:s("login.phoneRequired")},{pattern:/^\+?\d{7,20}$/,message:s("login.phoneInvalid")}],children:e.jsx(m,{prefix:e.jsx(A,{}),placeholder:s("forgotPassword.phonePlaceholder"),size:"large"})}),e.jsx(t.Item,{label:s("login.verificationCode"),children:e.jsxs(j.Compact,{style:{width:"100%"},children:[e.jsx(t.Item,{name:"code",noStyle:!0,rules:[{required:!0,message:s("login.codeRequired")},{len:6,message:s("login.codeLength")}],children:e.jsx(m,{prefix:e.jsx(G,{}),placeholder:s("login.codePlaceholder"),size:"large",maxLength:6})}),e.jsx(E,{size:"large",onClick:q,disabled:w>0,loading:I,style:{width:120},children:w>0?`${w}s`:s("login.sendCode")})]})}),e.jsx(t.Item,{name:"newPassword",label:s("forgotPassword.newPassword"),rules:[{required:!0,message:s("forgotPassword.newPasswordRequired")},{min:6,message:s("login.passwordMinLength")}],children:e.jsx(m.Password,{prefix:e.jsx(S,{}),placeholder:s("login.setPasswordPlaceholder"),size:"large"})}),e.jsx(t.Item,{name:"confirmPassword",label:s("forgotPassword.confirmNewPassword"),dependencies:["newPassword"],rules:[{required:!0,message:s("forgotPassword.confirmNewPasswordRequired")},({getFieldValue:o})=>({validator(r,c){return!c||o("newPassword")===c?Promise.resolve():Promise.reject(new Error(s("login.passwordMismatch")))}})],children:e.jsx(m.Password,{prefix:e.jsx(S,{}),placeholder:s("login.confirmPasswordPlaceholder"),size:"large"})}),e.jsx(t.Item,{children:e.jsx(E,{type:"primary",htmlType:"submit",size:"large",block:!0,loading:I,style:{background:l.accentFill,borderColor:l.accentFill,boxShadow:R.accent},children:s("forgotPassword.resetPassword")})})]}),e.jsx("div",{style:{textAlign:"center"},children:e.jsxs(j,{direction:"vertical",size:"small",children:[e.jsx("a",{onClick:z,style:{cursor:"pointer"},children:e.jsx(b,{style:u.text.secondary,children:s(n?"forgotPassword.usePhone":"forgotPassword.useEmail")})}),e.jsx(O,{to:C.LOGIN,children:e.jsx(b,{style:u.text.secondary,children:s("forgotPassword.backToLogin")})})]})})]})})]})}export{ue as default};
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.