/* v20 part1: header */
(function () {
'use strict';
if (window.__mobV20) return;
window.__mobV20 = true;
function $(id) { return document.getElementById(id); }
var API = 'https://api-gateway.duoweiying.cn';
function hideLogin() { var c = $('login-form-container'); if (c) c.style.display = 'none'; }
function showLoginV20() { var c = $('login-form-container'); if (c) { c.style.display = 'flex'; showSec('login'); } }
function showSec(which) {
var m = { login: 'login-form-section', reg: 'register-form-section', fp: 'forgot-password-section' };
Object.keys(m).forEach(function (k) { var el = $(m[k]); if (el) el.style.display = (k === which ? 'block' : 'none'); });
}
function setSession(token, user) {
try {
localStorage.setItem('user_token', token || '');
localStorage.setItem('user_info', JSON.stringify(user || {}));
if (user && user.id) localStorage.setItem('user_id', user.id);
} catch (e) {}
}
/* guest preview */
function guestMode() {
try { localStorage.setItem('v20_guest', '1'); hideLogin(); guestBar(); } catch (e) {}
}
function guestBar() {
try {
if ($('v20GuestBar')) return;
var d = document.createElement('div');
d.id = 'v20GuestBar';
d.style.cssText = 'position:fixed;top:0;left:0;right:0;z-index:30000;background:#eef2f7;color:#475569;font-size:12px;padding:6px 10px;display:flex;align-items:center;gap:8px;';
d.innerHTML = '👀 游客预览模式(只读体验,登录后可保存数据)登录';
document.body.appendChild(d);
var hd = document.querySelector('.mobile-header');
if (hd) hd.style.marginTop = '30px';
} catch (e) {}
}
window.__mobV20Login = function () { try { localStorage.removeItem('v20_guest'); } catch (e) {} showLoginV20(); };
window.__mobV20Guest = guestMode;
/* v20 part2: submit & tabs */
function doLogin(ev) {
if (ev && ev.preventDefault) ev.preventDefault();
var u = ($('login-username') || {}).value || '';
var p = ($('login-password') || {}).value || '';
if (!u || !p) { alert('请输入用户名和密码'); return; }
fetch(API + '/api/auth/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: u, password: p }) })
.then(function (r) { return r.json(); })
.then(function (d) {
/* WR-550: 后端可能只回 access_token / data.token, 统一取值, 否则登录成功却不落 user_token */
var _tk = (d && (d.token || d.access_token)) || (d && d.data && (d.data.token || d.data.access_token)) || '';
var _us = (d && (d.user || d.data)) || { id: u, username: u };
if (_tk) {
setSession(_tk, _us);
hideLogin();
setTimeout(function () { location.reload(); }, 200);
} else { alert('登录失败:' + ((d && (d.message || d.detail || d.msg)) || '用户名或密码错误')); }
}).catch(function () { alert('网络错误,请稍后重试'); });
}
function doRegister(ev) {
if (ev && ev.preventDefault) ev.preventDefault();
var u = ($('register-username') || {}).value || '';
var e = ($('register-email') || {}).value || '';
var p = ($('register-password') || {}).value || '';
var p2 = ($('register-confirm-password') || {}).value || '';
if (!u || !p) { alert('请填写用户名与密码'); return; }
if (p !== p2) { alert('两次密码不一致'); return; }
if (!($('v11AgreeReg') || {}).checked) { alert('请先勾选同意《用户协议与隐私政策》'); return; }
fetch(API + '/api/auth/register', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: u, email: e || u + '@dw.cn', password: p }) })
.then(function (r) { return r.json(); })
.then(function (d) {
var _us = (d && (d.user || d.data)) || {};
var _tk = (d && (d.token || d.access_token)) || (d && d.data && (d.data.token || d.data.access_token)) || '';
if (_us && _us.id) {
setSession(_tk, _us);
hideLogin();
setTimeout(function () { location.reload(); }, 200);
} else { alert('注册失败:' + ((d && (d.message || d.detail || d.msg)) || '请重试')); }
}).catch(function () { alert('网络错误,请稍后重试'); });
}
function bindTabs() {
var showReg = $('show-register'); if (showReg) showReg.onclick = function () { showSec('reg'); };
var showLogin2 = $('show-login-from-register'); if (showLogin2) showLogin2.onclick = function () { showSec('login'); };
var showFp = $('show-forgot-password'); if (showFp) showFp.onclick = function () { alert('请联系在线客服重置密码(或使用“注册”新账号)'); };
var showLg3 = $('show-login-from-forgot'); if (showLg3) showLg3.onclick = function () { showSec('login'); };
}
/* v20 part3: boot & injection */
function bindSubmit() {
var lf = $('login-form');
if (lf) { lf.addEventListener('submit', doLogin); var lb = lf.querySelector('button[type="submit"]'); if (lb) lb.onclick = doLogin; }
var rf = $('register-form');
if (rf) { rf.addEventListener('submit', doRegister); var rb = rf.querySelector('button[type="submit"]'); if (rb) rb.onclick = doRegister; }
}
function injectGuestBtn() {
try {
var section = $('login-form-container');
if (!section) return;
var card = section.querySelector('.form-section');
if (!card || $('v20GuestBtn')) return;
var g = document.createElement('button');
g.id = 'v20GuestBtn';
g.type = 'button';
g.style.cssText = 'display:block;width:100%;margin-top:10px;padding:10px;border:1px solid #e2e8f0;border-radius:9px;background:#fff;color:#64748b;font-size:13px;cursor:pointer;';
g.textContent = '👀 游客预览(只读体验界面)';
g.onclick = function () { guestMode(); };
card.appendChild(g);
} catch (e) {}
}
function boot() {
injectGuestBtn();
bindSubmit();
bindTabs();
var hasTok = !!localStorage.getItem('user_token');
if (hasTok) { hideLogin(); }
if (localStorage.getItem('v20_guest') === '1') { hideLogin(); guestBar(); }
}
if (document.readyState === 'loading') document.addEventListener('DOMContentLoaded', boot);
else boot();
setTimeout(boot, 700);
setTimeout(boot, 2200);
})();