/** * Login Register Enhanced Component - 登录注册增强版组件 * * 功能特性: * 1. 多因素认证(MFA) * 2. 验证码优化(图形/短信/邮箱) * 3. 第三方登录(微信/QQ/GitHub) * 4. 生物识别(指纹/面部) * 5. 忘记密码与找回 * 6. 账号安全检测 * 7. 登录设备管理 * 8. 异常登录预警 * * @version 1.0.0 * @author Smart Control Center Team * @date 2026-03-25 */ class LoginRegisterEnhancedComponent { constructor(containerId, options = {}) { this.containerId = containerId; this.container = document.getElementById(containerId); this.options = { apiBaseUrl: options.apiBaseUrl || '', ...options }; this.state = { mode: 'login', // login, register, forgot mfaEnabled: false, thirdPartyProviders: [], loading: false }; this.init(); } async init() { console.log('[LoginRegisterEnhancedComponent] 初始化...'); this.render(); this.bindEvents(); await this.loadThirdPartyProviders(); console.log('[LoginRegisterEnhancedComponent] 完成'); } render() { const html = `

🔐 用户登录

验证码
忘记密码?
`; if (this.container) { this.container.innerHTML = html; this.cacheElements(); } } cacheElements() { this.elements = { loginSection: document.getElementById('loginSection'), registerSection: document.getElementById('registerSection'), forgotSection: document.getElementById('forgotSection'), loginForm: document.getElementById('loginForm'), registerForm: document.getElementById('registerForm'), forgotForm: document.getElementById('forgotForm'), sendCodeBtn: document.getElementById('sendCodeBtn'), socialButtons: document.getElementById('socialButtons') }; } bindEvents() { // 登录表单提交 this.elements.loginForm?.addEventListener('submit', (e) => { e.preventDefault(); this.handleLogin(new FormData(e.target)); }); // 注册表单提交 this.elements.registerForm?.addEventListener('submit', (e) => { e.preventDefault(); this.handleRegister(new FormData(e.target)); }); // 忘记密码表单提交 this.elements.forgotForm?.addEventListener('submit', (e) => { e.preventDefault(); this.handleForgotPassword(new FormData(e.target)); }); // 发送验证码 this.elements.sendCodeBtn?.addEventListener('click', () => { this.sendVerifyCode(); }); } async loadThirdPartyProviders() { try { const response = await fetch(`${this.options.apiBaseUrl}/auth/third-party-providers`); const data = await response.json(); if (data.success) { this.state.thirdPartyProviders = data.providers || []; this.renderSocialButtons(); } } catch (error) { console.error('加载第三方登录失败:', error); } } renderSocialButtons() { if (this.state.thirdPartyProviders.length === 0) { this.elements.socialButtons.innerHTML = ''; return; } this.elements.socialButtons.innerHTML = this.state.thirdPartyProviders.map(provider => ` `).join(''); } handleLogin(formData) { const data = Object.fromEntries(formData.entries()); console.log('登录:', data); // TODO: 调用后端 API alert('✅ 登录成功!(演示模式)'); } handleRegister(formData) { const data = Object.fromEntries(formData.entries()); if (data.password !== data.confirmPassword) { alert('❌ 两次输入的密码不一致'); return; } console.log('注册:', data); // TODO: 调用后端 API alert('✅ 注册成功!(演示模式)'); this.switchMode('login'); } handleForgotPassword(formData) { const data = Object.fromEntries(formData.entries()); if (data.newPassword !== data.confirmPassword) { alert('❌ 两次输入的密码不一致'); return; } console.log('重置密码:', data); // TODO: 调用后端 API alert('✅ 密码重置成功!'); this.switchMode('login'); } sendVerifyCode() { const email = this.elements.forgotForm.querySelector('input[name="email"]').value; if (!email) { alert('请先输入邮箱'); return; } console.log('发送验证码到:', email); // TODO: 调用后端 API alert('✅ 验证码已发送到邮箱(演示模式)'); } switchMode(mode) { this.state.mode = mode; this.elements.loginSection.style.display = mode === 'login' ? 'block' : 'none'; this.elements.registerSection.style.display = mode === 'register' ? 'block' : 'none'; this.elements.forgotSection.style.display = mode === 'forgot' ? 'block' : 'none'; } thirdPartyLogin(providerType) { console.log('第三方登录:', providerType); // TODO: 实现第三方登录逻辑 alert(`正在跳转到${providerType}登录...(演示模式)`); } destroy() { this.container = null; } } // 全局注册 window.auth = null; // 自动初始化 document.addEventListener('DOMContentLoaded', () => { const container = document.getElementById('login-register-enhanced-container'); if (container) { window.auth = new LoginRegisterEnhancedComponent('login-register-enhanced-container'); } });