修改底层请求逻辑,封装请求方法
This commit is contained in:
+62
-14
@@ -10,6 +10,8 @@
|
||||
'use strict';
|
||||
|
||||
var DEFAULT_SCENE_CODE = 'WEB_H5_LOGIN';
|
||||
var CAPTCHA_LAYER_AREA = ['318px', '318px'];
|
||||
var captchaLayerSeed = 0;
|
||||
|
||||
function getApi() {
|
||||
return root.GenealogyApi && root.GenealogyApi.defaultClient;
|
||||
@@ -111,11 +113,44 @@
|
||||
return query('input[name="validToken"]', form);
|
||||
}
|
||||
|
||||
function getCaptchaBox(form) {
|
||||
// 优先使用页面级弹窗挂载点,避免 TAC 验证码挤占表单布局。
|
||||
return query('.auth-captcha-modal[data-captcha-box]')
|
||||
|| query('[data-captcha-box]', form)
|
||||
|| query('[data-captcha-box]');
|
||||
function createCaptchaLayer() {
|
||||
// Layui 只负责提供默认弹层容器,验证码外观完全由 TAC 自带文件决定。
|
||||
if (!root.layui || !root.layui.layer || !root.layui.layer.open || !root.document) {
|
||||
throw new Error('缺少 layui.layer 验证码弹层依赖');
|
||||
}
|
||||
|
||||
var layerId = 'captcha-layer-' + (++captchaLayerSeed);
|
||||
var selector = '[data-captcha-layer-box="' + layerId + '"]';
|
||||
var layerIndex = root.layui.layer.open({
|
||||
type: 1,
|
||||
title: false,
|
||||
closeBtn: 0,
|
||||
// 尺寸来自 TAC 原生 #tianai-captcha-parent,提前交给 Layui 计算居中位置。
|
||||
area: CAPTCHA_LAYER_AREA,
|
||||
offset: 'auto',
|
||||
content: '<div data-captcha-layer-box="' + layerId + '"></div>'
|
||||
});
|
||||
var box = query(selector);
|
||||
|
||||
if (!box) {
|
||||
root.layui.layer.close(layerIndex);
|
||||
throw new Error('缺少 Layui 验证码实际挂载点');
|
||||
}
|
||||
|
||||
return {
|
||||
box: box,
|
||||
layerIndex: layerIndex
|
||||
};
|
||||
}
|
||||
|
||||
function closeCaptchaLayer(captchaLayer) {
|
||||
// 组件结束后清空第三方 DOM 并关闭本次创建的 Layui 层。
|
||||
if (!captchaLayer) return;
|
||||
|
||||
if (captchaLayer.box) captchaLayer.box.innerHTML = '';
|
||||
if (root.layui && root.layui.layer && root.layui.layer.close) {
|
||||
root.layui.layer.close(captchaLayer.layerIndex);
|
||||
}
|
||||
}
|
||||
|
||||
function writeValidToken(form, token) {
|
||||
@@ -132,7 +167,8 @@
|
||||
|
||||
function createTac(form, options, api, resolve, reject) {
|
||||
var settings = options || {};
|
||||
var box = getCaptchaBox(form);
|
||||
var captchaLayer;
|
||||
var box;
|
||||
var context = buildChallengeBody(settings, api);
|
||||
var lastChallenge = {};
|
||||
var captcha;
|
||||
@@ -143,8 +179,11 @@
|
||||
return null;
|
||||
}
|
||||
|
||||
if (!box) {
|
||||
reject(new Error('缺少滑动验证容器'));
|
||||
try {
|
||||
captchaLayer = createCaptchaLayer();
|
||||
box = captchaLayer.box;
|
||||
} catch (error) {
|
||||
reject(error);
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -159,12 +198,15 @@
|
||||
var token = extractValidToken(response);
|
||||
|
||||
if (!token) {
|
||||
if (captchaInstance && captchaInstance.destroyWindow) captchaInstance.destroyWindow();
|
||||
closeCaptchaLayer(captchaLayer);
|
||||
reject(new Error('滑动验证未返回有效票据'));
|
||||
return;
|
||||
}
|
||||
|
||||
writeValidToken(form, token);
|
||||
if (captchaInstance && captchaInstance.destroyWindow) captchaInstance.destroyWindow();
|
||||
closeCaptchaLayer(captchaLayer);
|
||||
resolve(token);
|
||||
},
|
||||
validFail: function (response, captchaControl, captchaInstance) {
|
||||
@@ -173,6 +215,7 @@
|
||||
},
|
||||
btnCloseFun: function (event, captchaInstance) {
|
||||
if (captchaInstance) captchaInstance.destroyWindow();
|
||||
closeCaptchaLayer(captchaLayer);
|
||||
reject(new Error('已取消滑动验证'));
|
||||
}
|
||||
});
|
||||
@@ -213,11 +256,15 @@
|
||||
}
|
||||
});
|
||||
|
||||
captcha = new root.TAC(config, {
|
||||
bgUrl: 'public/tac/images/dun.jpeg',
|
||||
logoUrl: null
|
||||
});
|
||||
captcha.init();
|
||||
try {
|
||||
captcha = new root.TAC(config);
|
||||
captcha.init();
|
||||
} catch (error) {
|
||||
closeCaptchaLayer(captchaLayer);
|
||||
reject(error);
|
||||
return null;
|
||||
}
|
||||
|
||||
return captcha;
|
||||
}
|
||||
|
||||
@@ -252,7 +299,8 @@
|
||||
buildChallengeBody: buildChallengeBody,
|
||||
adaptChallengeResponse: adaptChallengeResponse,
|
||||
buildVerifyBody: buildVerifyBody,
|
||||
getCaptchaBox: getCaptchaBox,
|
||||
createCaptchaLayer: createCaptchaLayer,
|
||||
closeCaptchaLayer: closeCaptchaLayer,
|
||||
extractValidToken: extractValidToken,
|
||||
normalizeVerifyResponse: normalizeVerifyResponse,
|
||||
shouldRequireCaptcha: shouldRequireCaptcha,
|
||||
|
||||
Reference in New Issue
Block a user