/**
* TalkingQ Platform - Login Page
*/
registerPage('login', function(container) {
container.innerHTML = `
智能运营,尽在掌控
实时监控 AI 玩具运营数据,优化用户体验
`;
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