@@ -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) {