/* 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] 图形验证码接入就绪'); })();