From 0caf063e0944b83852b01f2fde21f9f59a109d0d Mon Sep 17 00:00:00 2001 From: beppeb Date: Wed, 16 Jul 2025 03:27:27 +0000 Subject: [PATCH] =?UTF-8?q?feat:=20=E7=99=BB=E5=BD=95=E9=A1=B5=E9=9D=A2?= =?UTF-8?q?=E8=A1=A8=E5=8D=95=E9=AA=8C=E8=AF=81=E4=B8=8E=E6=A8=A1=E6=8B=9F?= =?UTF-8?q?=E7=99=BB=E5=BD=95=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- js/login.js | 121 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 121 insertions(+) create mode 100644 js/login.js diff --git a/js/login.js b/js/login.js new file mode 100644 index 0000000..e6f9f35 --- /dev/null +++ b/js/login.js @@ -0,0 +1,121 @@ +/** + * 登录功能实现 + * 原生JavaScript,不依赖框架 + */ + +document.addEventListener('DOMContentLoaded', function() { + const loginForm = document.getElementById('loginForm'); + const usernameInput = document.getElementById('username'); + const passwordInput = document.getElementById('password'); + const usernameError = document.getElementById('username-error'); + const passwordError = document.getElementById('password-error'); + const formMessage = document.getElementById('form-message'); + + // 用于演示的模拟用户数据 + const mockUsers = [ + { username: 'admin', password: 'admin123' }, + { username: 'user', password: 'user123' } + ]; + + /** + * 表单提交处理 + */ + loginForm.addEventListener('submit', function(e) { + e.preventDefault(); + + // 重置错误信息 + resetErrors(); + + // 获取输入值 + const username = usernameInput.value.trim(); + const password = passwordInput.value.trim(); + + // 验证表单 + let isValid = validateForm(username, password); + + if (isValid) { + // 模拟登录请求 + mockLogin(username, password); + } + }); + + /** + * 表单验证 + */ + function validateForm(username, password) { + let isValid = true; + + // 验证用户名 + if (username === '') { + displayError(usernameError, '请输入用户名'); + isValid = false; + } else if (username.length < 3) { + displayError(usernameError, '用户名长度必须至少为3个字符'); + isValid = false; + } + + // 验证密码 + if (password === '') { + displayError(passwordError, '请输入密码'); + isValid = false; + } else if (password.length < 6) { + displayError(passwordError, '密码长度必须至少为6个字符'); + isValid = false; + } + + return isValid; + } + + /** + * 显示错误信息 + */ + function displayError(element, message) { + element.textContent = message; + } + + /** + * 重置错误信息 + */ + function resetErrors() { + usernameError.textContent = ''; + passwordError.textContent = ''; + formMessage.textContent = ''; + formMessage.className = 'form-message'; + } + + /** + * 模拟登录 + */ + function mockLogin(username, password) { + // 显示加载状态 + formMessage.textContent = '登录中...'; + formMessage.className = 'form-message'; + + // 模拟网络延迟 + setTimeout(function() { + // 检查用户是否存在 + const user = mockUsers.find(user => + user.username === username && user.password === password + ); + + if (user) { + // 登录成功 + formMessage.textContent = '登录成功,即将跳转...'; + formMessage.className = 'form-message success'; + + // 保存登录状态到本地存储 + localStorage.setItem('isLoggedIn', 'true'); + localStorage.setItem('username', username); + + // 重定向到首页 + setTimeout(function() { + window.location.href = 'index.html'; + }, 1000); + } else { + // 登录失败 + formMessage.textContent = '用户名或密码错误'; + formMessage.className = 'form-message error'; + } + }, 1000); + } +}); \ No newline at end of file