async function doLogin() { const user = document.getElementById('loginUser').value.trim(); const pass = document.getElementById('loginPass').value.trim(); if (!user || !pass) { document.getElementById('loginError').textContent = '请输入用户名和密码'; return; } try { const res = await fetch(API + '/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: user, password: pass }) }); const data = await res.json(); if (!res.ok) { document.getElementById('loginError').textContent = data.error; return; } token = data.token; username = data.username; localStorage.setItem('token', token); localStorage.setItem('username', username); showPage('homePage'); } catch (e) { document.getElementById('loginError').textContent = '网络错误'; } } function doLogout() { token = null; username = null; localStorage.removeItem('token'); localStorage.removeItem('username'); showPage('loginPage'); }