Files
jiapu/dist/public/js/auth-pages.js
T

2 lines
8.4 KiB
JavaScript

(function(t,c){if(typeof module=="object"&&module.exports){module.exports=c(t);return}t.AuthPages=c(t),t.document&&t.document.addEventListener("DOMContentLoaded",function(){t.AuthPages.init()})})(typeof globalThis!="undefined"?globalThis:window,function(t){"use strict";var c=t.document,o={login:{selector:"#login-password-form",operationCode:"password-login",successUrl:"profile.html"},"sms-login":{selector:"#login-sms-form",operationCode:"sms-login",successUrl:"profile.html"},register:{selector:"#register-form",operationCode:"register",successUrl:"login.html"},"password-reset":{selector:"#password-reset-form",operationCode:"forgot-password",successUrl:"login.html"}},q=60;function w(e){return t.hex_md5?t.hex_md5(e):t.md5?t.md5(e):e}function T(e,n){var r=n||w,i={phone:e.phone,password:r(e.password)};return e.validToken&&(i.validToken=e.validToken),i}function b(e){return{phone:e.phone,smsCode:e.smsCode}}function I(e,n){var r=n||w;return{phone:e.phone,password:r(e.password),nickName:e.nickName||e.phone,smsCode:e.smsCode}}function N(e,n){var r=n||w;return{phone:e.phone,smsCode:e.smsCode,newPassword:r(e.newPassword)}}function f(){return t.GenealogyApi&&t.GenealogyApi.defaultClient}async function O(e){if(t.PublicNavigation){t.PublicNavigation.clearUser();try{t.PublicNavigation.storeUser(await e.currentProfile())}catch(n){t.PublicNavigation.clearUser()}}}function x(e){var n=o[e]||{};return n.operationCode||""}function g(e){var n=o[e]||{};return n.successUrl||""}function G(e){var n=e==null?"":String(e).trim();return typeof e=="number"&&!Number.isSafeInteger(e)?"":/^[1-9][0-9]*$/.test(n)?n:""}function B(e){var n=(Array.isArray(e)?e:[]).map(function(r){return G(r&&r.genealogyId)}).filter(Boolean).filter(function(r,i,s){return s.indexOf(r)===i});return n.length===1?"profile-family-home.html?genealogyId="+encodeURIComponent(n[0]):"profile-families.html"}async function C(e,n){if(n!=="login"&&n!=="sms-login"||!e||!e.genealogiesMine)return g(n);try{return B(await e.genealogiesMine())}catch(r){return g(n)}}function y(e,n){var r=x(n);return r}async function _(e,n,r){return n?!t.CaptchaPages||!t.CaptchaPages.ensureToken?(S("验证码组件未加载,请刷新后重试"),!1):!!await t.CaptchaPages.ensureToken(e,{operationCode:n,subject:r}):!0}function p(e,n){return(n||c).querySelector(e)}function d(e,n){return Array.prototype.slice.call((n||c).querySelectorAll(e))}function u(e){var n={};return d("input[name], textarea[name], select[name]",e).forEach(function(r){n[r.name]=String(r.value||"").trim()}),n}function P(e){var n=p('input[name="validToken"]',e);n&&(n.value="")}function U(e){var n=p('input[name="validToken"]',e),r=n&&n.value||"";return n&&(n.value=""),r}function E(e){var n,r=q,i;!e||typeof t.setInterval!="function"||(e.__smsCooldownTimer&&typeof t.clearInterval=="function"&&t.clearInterval(e.__smsCooldownTimer),n=e.getAttribute("data-sms-code-label")||e.textContent.trim(),e.setAttribute("data-sms-code-label",n),e.disabled=!0,e.textContent=r+" 秒后重试",i=t.setInterval(function(){if(r-=1,r>0){e.textContent=r+" 秒后重试";return}typeof t.clearInterval=="function"&&t.clearInterval(i),e.__smsCooldownTimer=null,e.disabled=!1,e.textContent=n},1e3),e.__smsCooldownTimer=i)}function L(e,n){e&&(e.classList.toggle("is-loading",n),"disabled"in e&&(e.disabled=n),e.setAttribute("aria-busy",n?"true":"false"))}function m(e){return Number(e&&(e.status||e.code))===403?"forbidden":"error"}function a(e,n,r){var i=p("[data-auth-form-status]",e);if(i){if(!n){i.innerHTML="";return}if(t.ProfileUI&&t.ProfileUI.setApiState){t.ProfileUI.setApiState(i,r||"error",n);return}i.textContent=n}}function l(e,n,r){e&&(e.dataset.defaultLabel||(e.dataset.defaultLabel=e.textContent),e.disabled=!!n,e.textContent=n?r:e.dataset.defaultLabel,e.setAttribute("aria-busy",n?"true":"false"))}function S(e){if(t.MessageUtil&&t.MessageUtil.show){t.MessageUtil.show(e);return}t.console&&t.console.warn&&t.console.warn(e)}function M(e){return/^1\d{10}$/.test(e||"")}function k(e){return/^\d{4}$/.test(e||"")}function A(e,n){return e?e.length<6?"密码至少需要 6 位":"":n}function R(e,n){var r=n||{};if(!r.phone)return"请填写手机号";if(!M(r.phone))return"请输入正确的手机号";if(e==="login")return A(r.password,"请填写密码");if(e==="sms-login")return r.smsCode?k(r.smsCode)?"":"请输入正确的短信验证码":"请填写短信验证码";if(e==="register"){if(!r.smsCode)return"请填写短信验证码";if(!k(r.smsCode))return"请输入正确的短信验证码";var i=A(r.password,"请填写密码");return i||(r.confirmPassword?r.password!==r.confirmPassword?"两次输入的密码不一致":"":"请再次输入密码")}if(e==="password-reset"){if(!r.smsCode)return"请填写验证码";if(!k(r.smsCode))return"请输入正确的短信验证码";var s=A(r.newPassword,"请填写新密码");if(s)return s;if(!r.confirmPassword)return"请再次输入新密码";if(r.newPassword!==r.confirmPassword)return"两次输入的新密码不一致"}return""}function j(e){var n=e||{};return n.phone?M(n.phone)?"":"请输入正确的手机号":"请填写手机号"}function h(e,n,r){var i=n==="send-code"?j(r):R(n,r);return i?(a(e,i,"error"),!1):!0}function v(e,n){var r=p(e);r&&r.addEventListener("submit",function(i){i.preventDefault(),n(r,p('[type="submit"]',r))})}function $(e){d(".login-mode-tab").forEach(function(n){var r=n.getAttribute("aria-controls")===e;n.classList.toggle("is-active",r),n.setAttribute("aria-selected",r?"true":"false")}),d(".login-mode-panel").forEach(function(n){var r=n.id===e;n.hidden=!r,r||P(n)})}async function V(e,n){var r=f(),i=u(e);if(!r){a(e,"接口初始化失败,请刷新后重试","error");return}if(h(e,"login",i)){if(!await _(e,y(e,"login"),i.phone)){a(e,"请完成验证后再提交登录。","error");return}i=u(e),i.validToken=U(e),l(n,!0,"正在登录…"),a(e,"正在验证账号…","loading");try{await r.login(T(i)),await O(r),t.NavigationUtil.open(await C(r,"login"))}catch(s){a(e,s.message||"登录失败",m(s))}finally{l(n,!1,"正在登录…")}}}async function z(e,n){var r=f(),i=u(e);if(!r){a(e,"接口初始化失败,请刷新后重试","error");return}if(h(e,"sms-login",i)){l(n,!0,"正在登录…"),a(e,"正在验证短信验证码…","loading");try{await r.loginBySms(b(i)),await O(r),t.NavigationUtil.open(await C(r,"sms-login"))}catch(s){a(e,s.message||"短信登录失败",m(s))}finally{l(n,!1,"正在登录…")}}}async function H(e,n){var r=f(),i=u(e);if(!r){a(e,"接口初始化失败,请刷新后重试","error");return}if(h(e,"register",i)){l(n,!0,"正在注册…"),a(e,"正在创建账号…","loading");try{await r.register(I(i)),t.NavigationUtil.open(g("register"))}catch(s){a(e,s.message||"注册失败",m(s))}finally{l(n,!1,"正在注册…")}}}async function W(e){var n=f(),r=e.closest("form"),i=u(r),s=Y(r),F=y(r,s);if(!n){a(r,"接口初始化失败,请刷新后重试","error");return}if(h(r,"send-code",i)){if(!await _(r,F,i.phone)){a(r,"请完成验证后再获取验证码。","error");return}i=u(r),i.validToken=U(r),L(e,!0),a(r,"正在发送验证码…","loading");try{await n.sendSmsCode(F,{phone:i.phone,validToken:i.validToken||""}),S("验证码已发送"),a(r,""),L(e,!1),E(e)}catch(D){a(r,D.message||"验证码发送失败",m(D)),L(e,!1)}}}async function J(e,n){var r=f(),i=u(e);if(!r){a(e,"接口初始化失败,请刷新后重试","error");return}if(h(e,"password-reset",i)){l(n,!0,"正在重设…"),a(e,"正在重设密码…","loading");try{await r.resetPassword(N(i)),S("密码已重设,请重新登录"),t.NavigationUtil.open(g("password-reset"))}catch(s){a(e,s.message||"重设密码失败",m(s))}finally{l(n,!1,"正在重设…")}}}function K(){d("[data-api-send-code]").forEach(function(e){e.addEventListener("click",function(n){n.preventDefault(),W(e)})})}function Q(){d(".login-mode-tab").forEach(function(e){e.addEventListener("click",function(){$(e.getAttribute("aria-controls"))})})}function X(){d('form input[name="phone"]').forEach(function(e){e.addEventListener("input",function(){P(e.closest("form"))})})}function Y(e){return e&&Object.keys(o).find(function(n){return o[n].selector==="#"+e.id})||""}function Z(){c&&(v(o.login.selector,V),v(o["sms-login"].selector,z),v(o.register.selector,H),v(o["password-reset"].selector,J),Q(),K(),X())}return{buildLoginBody:T,buildSmsLoginBody:b,buildRegisterBody:I,buildPasswordResetBody:N,clearCaptchaToken:P,takeCaptchaToken:U,startSmsCooldown:E,getCaptchaOperation:x,getFormCaptchaOperation:y,getSuccessUrl:g,getPostLoginUrl:B,resolvePostLoginUrl:C,validateAuthValues:R,init:Z}});