/**
* 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');
}
});