/** * TalkingQ Platform - Login Page */ registerPage('login', function(container) { container.innerHTML = `
`; lucide.createIcons({ elements: [container] }); initLoginHandlers(); }); function initLoginHandlers() { const form = document.getElementById('loginForm'); const loginBtn = document.getElementById('loginBtn'); const passwordInput = document.getElementById('loginPassword'); const passwordToggle = document.getElementById('passwordToggle'); const eyeIcon = passwordToggle?.querySelector('.eye-icon'); // Password visibility toggle passwordToggle?.addEventListener('click', () => { const isPassword = passwordInput.type === 'password'; passwordInput.type = isPassword ? 'text' : 'password'; if (eyeIcon) { eyeIcon.setAttribute('data-lucide', isPassword ? 'eye-off' : 'eye'); lucide.createIcons({ elements: [passwordToggle] }); } }); // Form submission form?.addEventListener('submit', async (e) => { e.preventDefault(); const username = document.getElementById('loginUsername')?.value.trim(); const password = document.getElementById('loginPassword')?.value; const rememberMe = document.getElementById('rememberMe')?.checked; // Validation if (!username) { Toast.warning('请输入用户名或邮箱'); return; } if (!password) { Toast.warning('请输入密码'); return; } // Show loading loginBtn.querySelector('.btn-text').style.display = 'none'; loginBtn.querySelector('.btn-loading').style.display = 'flex'; loginBtn.disabled = true; try { // Simulate API call await new Promise(resolve => setTimeout(resolve, 1500)); // Mock successful login if (username && password) { // Save to localStorage if remember me is checked if (rememberMe) { localStorage.setItem('talkingq_remember', username); } // Trigger login success onLoginSuccess({ username: username, displayName: username.split('@')[0] || username, token: 'mock_token_' + Date.now() }); } else { throw new Error('登录失败'); } } catch (error) { Toast.error('登录失败,请检查用户名和密码'); } finally { loginBtn.querySelector('.btn-text').style.display = 'flex'; loginBtn.querySelector('.btn-loading').style.display = 'none'; loginBtn.disabled = false; } }); // Check for remembered username const remembered = localStorage.getItem('talkingq_remember'); if (remembered) { const usernameInput = document.getElementById('loginUsername'); if (usernameInput) usernameInput.value = remembered; const rememberCheckbox = document.getElementById('rememberMe'); if (rememberCheckbox) rememberCheckbox.checked = true; } } function onLoginSuccess(user) { // Save auth state sessionStorage.setItem('talkingq_user', JSON.stringify(user)); sessionStorage.setItem('talkingq_logged_in', 'true'); Toast.success('登录成功!'); // Small delay to ensure toast shows before navigation setTimeout(() => { navigateTo('dashboard'); }, 300); } function logout() { sessionStorage.removeItem('talkingq_user'); sessionStorage.removeItem('talkingq_logged_in'); Toast.info('已退出登录'); setTimeout(() => { navigateTo('login'); }, 300); } // Check if already logged in // Note: checkAuth is now defined in app.js