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

2 lines
4.2 KiB
JavaScript

(function(t,y){if(typeof module=="object"&&module.exports){module.exports=y(t);return}t.CaptchaPages=y(t)})(typeof globalThis!="undefined"?globalThis:window,function(t){"use strict";var y=["318px","318px"],L=0;function V(){return t.GenealogyApi&&t.GenealogyApi.defaultClient}function b(a,e){return(e||t.document).querySelector(a)}function T(a){if(t.MessageUtil&&t.MessageUtil.show){t.MessageUtil.show(a);return}t.console&&t.console.warn&&t.console.warn(a)}function p(a,e){var r=a||{};return{tenantId:r.tenantId||e.tenantId,subject:r.subject||""}}function j(a){var e=a||{},r=e.payload||{};return Object.assign({},r,{type:e.captchaType||r.type||"SLIDER",id:r.id||e.challengeId,challengeId:e.challengeId,providerCode:e.providerCode||"tianai",captchaType:e.captchaType||r.type||"SLIDER"})}function m(a){var e=a||{};return Number(e.code)!==200||!e.data?e:Object.assign({},e,{data:j(e.data)})}function w(a,e,r){var n=e||{},i=a||{},o=x(i.data||{});return{tenantId:n.tenantId||r.tenantId,subject:n.subject||"",challengeId:n.challengeId||i.challengeId||i.id,providerCode:n.providerCode||"tianai",captchaType:n.captchaType||"SLIDER",payload:{track:o}}}function x(a){var e=Object.assign({},a||{}),r=Array.isArray(e.trackList)?e.trackList:[],n=r[0]||{},i=r[r.length-1]||{};return typeof e.left=="undefined"&&(e.left=h(i.x)-h(n.x)),typeof e.top=="undefined"&&(e.top=h(i.y)-h(n.y)),e}function h(a){var e=Number(a);return Number.isFinite(e)?e:0}function k(a){var e=a||{};return Number(e.code)===200&&e.data&&e.data.passed===!1?Object.assign({},e,{code:4001,msg:e.data.message||e.msg||"验证失败"}):e}function R(a){var e=a||{},r=e.data||{};return Number(e.code)!==200||r.passed===!1?"":r.validToken||e.validToken||""}function I(a){return b('input[name="validToken"]',a)}function A(){if(!t.layui||!t.layui.layer||!t.layui.layer.open||!t.document)throw new Error("缺少 layui.layer 验证码弹层依赖");var a="captcha-layer-"+ ++L,e='[data-captcha-layer-box="'+a+'"]',r=t.layui.layer.open({type:1,title:!1,closeBtn:0,area:y,offset:"auto",content:'<div data-captcha-layer-box="'+a+'"></div>'}),n=b(e);if(!n)throw t.layui.layer.close(r),new Error("缺少 Layui 验证码实际挂载点");return{box:n,layerIndex:r}}function f(a){a&&(a.box&&(a.box.innerHTML=""),t.layui&&t.layui.layer&&t.layui.layer.close&&t.layui.layer.close(a.layerIndex))}function O(a,e){var r=I(a);r&&(r.value=e||"")}function E(a){return a?a.required!==!1:!0}function D(a,e,r,n,i){var o=e||{},d,v,N=p(o,r),q={},C,g;if(!t.TAC||!t.CaptchaConfig)return i(new Error("滑动验证组件未加载")),null;try{d=A(),v=d.box}catch(u){return i(u),null}g=new t.CaptchaConfig({bindEl:v,requestCaptchaDataUrl:r.captchaChallengeUrl(o.operationCode),validCaptchaUrl:r.captchaVerifyUrl(o.operationCode),requestHeaders:{clientid:r.clientId},validSuccess:function(u,s,l){var c=R(u);if(!c){l&&l.destroyWindow&&l.destroyWindow(),f(d),i(new Error("滑动验证未返回有效票据"));return}O(a,c),l&&l.destroyWindow&&l.destroyWindow(),f(d),n(c)},validFail:function(u,s,l){l&&l.reloadCaptcha&&l.reloadCaptcha(),T(u&&(u.msg||u.message)||"滑动验证失败,请重试")},btnCloseFun:function(u,s){s&&s.destroyWindow(),f(d),i(new Error("已取消滑动验证"))}}),g.addRequestChain({preRequest:function(u,s){return u==="requestCaptchaData"&&(s.data=p(o,r)),u==="validCaptcha"&&(s.data=w(s.data,Object.assign({},N,q),r)),!0},postRequest:function(u,s,l){if(u==="requestCaptchaData"){var c=m(l);q={challengeId:c.data&&c.data.challengeId,providerCode:c.data&&c.data.providerCode,captchaType:c.data&&c.data.captchaType},Object.keys(l||{}).forEach(function(S){delete l[S]}),Object.assign(l,c)}return u==="validCaptcha"&&Object.assign(l,k(l)),!0}});try{C=new t.TAC(g),C.init()}catch(u){return f(d),i(u),null}return C}async function U(a,e){var r=V(),n=I(a),i=e||{},o;if(!r)return"";if(n&&n.value)return n.value;if(!i.operationCode)return"";try{if(o=await r.captchaRequirement(i.operationCode,p(i,r)),!E(o))return"CAPTCHA_NOT_REQUIRED"}catch(d){o=null}return new Promise(function(d,v){D(a,i,r,d,v)}).catch(function(d){return T(d.message||"请先完成滑动验证"),""})}return{buildChallengeBody:p,adaptChallengeResponse:m,buildVerifyBody:w,normalizeVerifyTrack:x,createCaptchaLayer:A,closeCaptchaLayer:f,extractValidToken:R,normalizeVerifyResponse:k,shouldRequireCaptcha:E,ensureToken:U}});