/* v41 (2026-09-18, P0-16): 手机端"忘记密码"接入图形验证码防刷
- 新增图形验证码(SVG,后端 /api/account-service/captcha 下发,一次性)
- 原有捕获阶段拦截 #show-forgot-password 的逻辑保持不变 */
(function () {
'use strict';
if (window.__mobV41) return; window.__mobV41 = true;
var API = 'https://api-gateway.duoweiying.cn';
var capId = '';
function el(id) { return document.getElementById(id); }
function msg(t) { var m = el('v40Msg'); if (m) m.textContent = t; }
function loadCaptcha() {
var box = el('v40CapImg');
if (!box) return;
box.textContent = '加载中…';
fetch(API + '/api/account-service/captcha')
.then(function (r) { return r.json(); })
.then(function (j) {
if (j && j.success && j.data && j.data.svg) {
capId = j.data.captcha_id;
box.innerHTML = j.data.svg;
var s = box.querySelector('svg');
if (s) { s.style.width = '110px'; s.style.height = '42px'; }
} else { box.textContent = '点击重试'; }
})
.catch(function () { box.textContent = '点击重试'; });
}
function inject() {
var send = el('v40Send');
if (!send || el('v40Cap')) return false;
var row = document.createElement('div');
row.style.cssText = 'display:flex;gap:8px;align-items:center;margin-bottom:10px;';
row.innerHTML =
'' +
'
点击加载
';
send.parentNode.insertBefore(row, send);
el('v40CapImg').onclick = loadCaptcha;
loadCaptcha();
return true;
}
/* 覆盖 v40 的发送逻辑:先校验图形验证码再提交 */
function hook() {
var send = el('v40Send');
if (!send || send._v41) return false;
send._v41 = true;
var clone = send.cloneNode(true);
send.parentNode.replaceChild(clone, send);
clone.onclick = function () {
var acct = (el('v40Acct').value || '').trim();
var cap = (el('v40Cap').value || '').trim();
if (!acct) { msg('请输入手机号或用户名'); return; }
if (!cap) { msg('请先填写右侧图形验证码的计算结果'); return; }
msg('发送中…');
fetch(API + '/api/account-service/send-code', {
method: 'POST', headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ account: acct, captcha_id: capId, captcha_code: cap })
}).then(function (r) { return r.json(); }).then(function (j) {
if (j && j.success) {
var s2 = el('v40Step2'); if (s2) s2.style.display = 'block';
msg('📨 验证码已下发到您的通知中心,请到「我的 → 消息通知」查看(10 分钟内有效)');
} else {
msg('发送失败:' + ((j && (j.message || j.detail)) || '请稍后重试'));
loadCaptcha();
var c = el('v40Cap'); if (c) c.value = '';
}
}).catch(function () { msg('网络错误,请重试'); loadCaptcha(); });
};
return true;
}
var n = 0;
var t = setInterval(function () {
try { inject(); hook(); } catch (e) {}
if (++n > 60) clearInterval(t);
}, 300);
document.addEventListener('DOMContentLoaded', function () { inject(); hook(); });
console.log('[MobV41] 图形验证码接入就绪');
})();