|
|
@@ -157,9 +157,18 @@ function poll() {
|
|
|
const s = String(r.data.status);
|
|
|
const el = document.getElementById('poll-status');
|
|
|
if (!r.ok || r.data.status === undefined) {
|
|
|
- // 二维码过期或上游瞬时异常:未提交验证码时自动重新生成二维码
|
|
|
+ // 登录成功后上游会销毁二维码会话:先用设备在线状态判断是否已成功
|
|
|
checkErrors++;
|
|
|
+ const st = await api('/flow/state');
|
|
|
+ if (st.data.online) { clearInterval(pollTimer); renderSuccess(st.data.detail || {}); return; }
|
|
|
+ if (st.data.subscribed === false) { clearInterval(pollTimer); renderSubscribe(st.data.subscribeDetail || '订阅已到期'); return; }
|
|
|
+ // 二维码过期或上游瞬时异常:未提交验证码时自动重新生成二维码
|
|
|
if (!codeSubmitted && checkErrors >= 2) { clearInterval(pollTimer); startLogin(); return; }
|
|
|
+ if (codeSubmitted && checkErrors >= 10) {
|
|
|
+ clearInterval(pollTimer);
|
|
|
+ showMsg('err', '登录确认异常。<br><button class="main" onclick="startLogin()">重新生成二维码</button>');
|
|
|
+ return;
|
|
|
+ }
|
|
|
if (el) el.textContent = '状态检测异常,重试中…';
|
|
|
return;
|
|
|
}
|
|
|
@@ -186,19 +195,27 @@ function poll() {
|
|
|
function renderVerify() {
|
|
|
setStep(3);
|
|
|
panel.innerHTML = '<div class="center"><div class="section-title">已扫码确认,请输入手机企业微信上显示的 6 位验证码</div>' +
|
|
|
- '<input id="code" maxlength="6" placeholder="······" inputmode="numeric">' +
|
|
|
- '<br><button class="main" id="verify">提交验证码</button></div>';
|
|
|
- document.getElementById('verify').onclick = async () => {
|
|
|
- const code = document.getElementById('code').value.trim();
|
|
|
+ '<input id="code" maxlength="6" placeholder="······" inputmode="numeric" autocomplete="one-time-code">' +
|
|
|
+ '<br><button class="main" id="verify">提交验证码</button>' +
|
|
|
+ '<div class="hint">验证码在手机企业微信确认登录后显示,输完 6 位自动提交</div></div>';
|
|
|
+ const input = document.getElementById('code');
|
|
|
+ input.focus();
|
|
|
+ const submit = async () => {
|
|
|
+ const code = input.value.trim();
|
|
|
if (!/^\\d{6}$/.test(code)) { showMsg('err', '请输入 6 位数字验证码。'); return; }
|
|
|
+ const btn = document.getElementById('verify');
|
|
|
+ btn.disabled = true;
|
|
|
showMsg('ok', '正在校验…');
|
|
|
const r = await api('/flow/verify', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ code }) });
|
|
|
- if (!r.ok) { showMsg('err', '<b>[' + (r.data.errorCode || 'QW-UP-502') + ']</b> ' + (r.data.message || '验证码校验失败') + ',请重试。'); return; }
|
|
|
+ if (!r.ok) { btn.disabled = false; showMsg('err', '<b>[' + (r.data.errorCode || 'QW-UP-502') + ']</b> ' + (r.data.message || '验证码校验失败') + ',请重试。'); return; }
|
|
|
codeSubmitted = true;
|
|
|
verifyWaits = 0;
|
|
|
panel.innerHTML = '<div class="center"><div class="section-title">验证码已提交,正在确认登录…</div><div class="hint" id="poll-status">确认中,每 3 秒自动检测…</div></div>';
|
|
|
poll();
|
|
|
};
|
|
|
+ document.getElementById('verify').onclick = submit;
|
|
|
+ input.onkeydown = (e) => { if (e.key === 'Enter') submit(); };
|
|
|
+ input.oninput = () => { if (/^\\d{6}$/.test(input.value.trim())) submit(); };
|
|
|
}
|
|
|
|
|
|
function renderSuccess(detail) {
|