// 认证与初始化 async function init() { const token = Store.getToken(); if (token) { try { const res = await fetch('/api/user', { headers: { 'Authorization': `Bearer ${token}` } }); if (res.ok) { const user = await res.json(); document.getElementById('login-page').classList.add('hidden'); document.getElementById('main-page').classList.remove('hidden'); if (localStorage.getItem('isAdmin') === 'true') { document.getElementById('create-room-btn').classList.add('visible'); } else { document.getElementById('create-room-btn').classList.remove('visible'); } initWebSocket(); loadRooms(); updateSummaryPreview(); initSwipeGestures(); return; } } catch(e) {} Store.clearAuth(); } document.getElementById('login-page').classList.remove('hidden'); document.getElementById('main-page').classList.add('hidden'); } async function login() { const u = document.getElementById('login-user').value; const p = document.getElementById('login-pass').value; const res = await fetch('/api/login', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ username: u, password: p }) }); if (res.ok) { const data = await res.json(); Store.saveAuth(data); document.getElementById('login-page').classList.add('hidden'); document.getElementById('main-page').classList.remove('hidden'); if (data.isAdmin) { document.getElementById('create-room-btn').classList.add('visible'); } else { document.getElementById('create-room-btn').classList.remove('visible'); } initWebSocket(); loadRooms(); updateSummaryPreview(); initSwipeGestures(); } else { const err = await res.json(); document.getElementById('login-error').textContent = err.error || '登录失败'; } }