修改底层请求逻辑,封装请求方法

This commit is contained in:
rain
2026-07-10 14:11:10 +08:00
parent 6050508144
commit 6129a9221a
66 changed files with 5861 additions and 451 deletions
+62 -14
View File
@@ -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,