141 lines
4.8 KiB
JavaScript
141 lines
4.8 KiB
JavaScript
document.addEventListener('DOMContentLoaded', function() {
|
|
// 密码显示/隐藏切换
|
|
const togglePasswordButtons = document.querySelectorAll('.toggle-password');
|
|
|
|
togglePasswordButtons.forEach(button => {
|
|
button.addEventListener('click', function() {
|
|
const passwordField = this.previousElementSibling;
|
|
const type = passwordField.getAttribute('type') === 'password' ? 'text' : 'password';
|
|
passwordField.setAttribute('type', type);
|
|
|
|
// 更改图标
|
|
const icon = this.querySelector('i');
|
|
if (type === 'text') {
|
|
icon.classList.remove('fa-eye');
|
|
icon.classList.add('fa-eye-slash');
|
|
} else {
|
|
icon.classList.remove('fa-eye-slash');
|
|
icon.classList.add('fa-eye');
|
|
}
|
|
});
|
|
});
|
|
|
|
// 密码一致性检查
|
|
const passwordInput = document.getElementById('password');
|
|
const confirmPasswordInput = document.getElementById('confirm_password');
|
|
const passwordMatchMessage = document.getElementById('password-match-message');
|
|
|
|
function checkPasswordMatch() {
|
|
if (confirmPasswordInput.value === '') {
|
|
passwordMatchMessage.textContent = '';
|
|
passwordMatchMessage.className = 'form-text';
|
|
return;
|
|
}
|
|
|
|
if (passwordInput.value === confirmPasswordInput.value) {
|
|
passwordMatchMessage.textContent = '密码匹配';
|
|
passwordMatchMessage.className = 'form-text text-success';
|
|
} else {
|
|
passwordMatchMessage.textContent = '密码不匹配';
|
|
passwordMatchMessage.className = 'form-text text-danger';
|
|
}
|
|
}
|
|
|
|
passwordInput.addEventListener('input', checkPasswordMatch);
|
|
confirmPasswordInput.addEventListener('input', checkPasswordMatch);
|
|
|
|
// 发送邮箱验证码
|
|
const sendVerificationCodeButton = document.getElementById('sendVerificationCode');
|
|
const emailInput = document.getElementById('email');
|
|
|
|
sendVerificationCodeButton.addEventListener('click', function() {
|
|
const email = emailInput.value.trim();
|
|
|
|
// 验证邮箱格式
|
|
if (!email) {
|
|
alert('请输入邮箱地址');
|
|
return;
|
|
}
|
|
|
|
const emailRegex = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
if (!emailRegex.test(email)) {
|
|
alert('请输入有效的邮箱地址');
|
|
return;
|
|
}
|
|
|
|
// 禁用按钮,防止重复点击
|
|
this.disabled = true;
|
|
this.textContent = '发送中...';
|
|
|
|
// 发送AJAX请求
|
|
fetch('/user/send_verification_code', {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json',
|
|
},
|
|
body: JSON.stringify({ email: email }),
|
|
})
|
|
.then(response => response.json())
|
|
.then(data => {
|
|
if (data.success) {
|
|
// 成功发送,开始倒计时
|
|
startCountdown(this);
|
|
alert(data.message);
|
|
} else {
|
|
// 发送失败,恢复按钮状态
|
|
this.disabled = false;
|
|
this.textContent = '发送验证码';
|
|
alert(data.message || '发送失败,请稍后重试');
|
|
}
|
|
})
|
|
.catch(error => {
|
|
console.error('Error:', error);
|
|
this.disabled = false;
|
|
this.textContent = '发送验证码';
|
|
alert('发送失败,请稍后重试');
|
|
});
|
|
});
|
|
|
|
// 验证码倒计时(60秒)
|
|
function startCountdown(button) {
|
|
let seconds = 60;
|
|
const originalText = '发送验证码';
|
|
|
|
const countdownInterval = setInterval(() => {
|
|
seconds--;
|
|
button.textContent = `${seconds}秒后重发`;
|
|
|
|
if (seconds <= 0) {
|
|
clearInterval(countdownInterval);
|
|
button.textContent = originalText;
|
|
button.disabled = false;
|
|
}
|
|
}, 1000);
|
|
}
|
|
|
|
// 表单提交前验证
|
|
const addUserForm = document.getElementById('addUserForm');
|
|
|
|
addUserForm.addEventListener('submit', function(event) {
|
|
// 检查密码是否匹配
|
|
if (passwordInput.value !== confirmPasswordInput.value) {
|
|
event.preventDefault();
|
|
alert('两次输入的密码不匹配,请重新输入');
|
|
return;
|
|
}
|
|
|
|
// 如果还有其他前端验证,可以继续添加
|
|
});
|
|
|
|
// 自动填充用户名为昵称的默认值
|
|
const usernameInput = document.getElementById('username');
|
|
const nicknameInput = document.getElementById('nickname');
|
|
|
|
usernameInput.addEventListener('change', function() {
|
|
// 只有当昵称字段为空时才自动填充
|
|
if (!nicknameInput.value) {
|
|
nicknameInput.value = this.value;
|
|
}
|
|
});
|
|
});
|