diff --git a/login.html b/login.html index d4b84dc..ced9638 100644 --- a/login.html +++ b/login.html @@ -4,7 +4,6 @@ 宇森 · 登录 - @@ -71,7 +72,6 @@
-
@@ -81,32 +81,41 @@
- +
- +
+ + +
@@ -128,8 +137,6 @@ // 回跳目标(进入游戏流程带 ?next=world.html) const params = new URLSearchParams(location.search); const nextUrl = params.get('next') || 'world.html'; - const hint = document.getElementById('hint'); - if (params.get('next')) hint.classList.remove('hidden'); // 已登录则直接跳走 (async () => { try { const me = await API.me(); if (me && me.uid) location.href = nextUrl; } catch (e) {} @@ -149,6 +156,34 @@ tabLogin.onclick = () => switchTab('login'); tabReg.onclick = () => switchTab('reg'); + // 密码显示/隐藏切换(眼睛按钮) + document.querySelectorAll('.pw-toggle').forEach(btn => { + btn.addEventListener('click', () => { + const input = document.getElementById(btn.dataset.target); + if (!input) return; + if (input.type === 'password') { + input.type = 'text'; + btn.textContent = '🙈'; + btn.setAttribute('aria-label', '隐藏密码'); + } else { + input.type = 'password'; + btn.textContent = '👁'; + btn.setAttribute('aria-label', '显示密码'); + } + input.focus(); + }); + }); + + // 昵称默认 = 账号:账号变更时若昵称仍空/等于上次账号值,则同步;用户改过昵称则保留 + const rLogin = document.getElementById('rLogin'); + const rName = document.getElementById('rName'); + let lastLoginVal = ''; + rLogin.addEventListener('input', () => { + const v = rLogin.value.trim(); + if (rName.value === '' || rName.value === lastLoginVal) rName.value = v; + lastLoginVal = v; + }); + loginForm.addEventListener('submit', async (e) => { e.preventDefault(); showMsg(''); @@ -170,16 +205,19 @@ regForm.addEventListener('submit', async (e) => { e.preventDefault(); showMsg(''); - const payload = { - name: document.getElementById('rName').value.trim(), - login: document.getElementById('rLogin').value.trim(), - email: document.getElementById('rEmail').value.trim(), - password: document.getElementById('rPwd').value, - }; - if (!payload.login || !payload.password){ showMsg('账号和密码必填', 'err'); return; } + const login = document.getElementById('rLogin').value.trim(); + const name = document.getElementById('rName').value.trim(); + const password = document.getElementById('rPwd').value; + const pwd2 = document.getElementById('rPwd2').value; + if (!login) { showMsg('请填写账号', 'err'); return; } + if (password.length < 8) { showMsg('密码至少 8 位', 'err'); return; } + if (!/[a-zA-Z]/.test(password) || !/\d/.test(password)) { + showMsg('密码必须同时包含字母和数字', 'err'); return; + } + if (password !== pwd2) { showMsg('两次密码输入不一致', 'err'); return; } const btn = regForm.querySelector('.submit'); btn.disabled = true; btn.textContent = '注册中…'; try { - const r = await API.register(payload); + const r = await API.register({ name, login, password }); if (r.ok){ location.href = nextUrl; } else { showMsg(r.error || '注册失败', 'err'); } } catch (err) {