首次完成数据库登录,注册验证。首次完成,migrate_manager.py迁移多个数据库

This commit is contained in:
Jay
2026-08-26 00:47:06 +08:00
commit 16fb5030cb
54 changed files with 1285 additions and 0 deletions
+62
View File
@@ -0,0 +1,62 @@
var form = document.getElementById('adminLoginForm');
var errorBox = document.getElementById('errorBox');
var submitBtn = document.getElementById('submitBtn');
var successPanel = document.getElementById('successPanel');
var passwordInput = document.getElementById('password');
form.addEventListener('submit', function (e) {
e.preventDefault();
var username = document.getElementById('username').value.trim();
var password = passwordInput.value;
var errors = [];
if (!username) {
errors.push('用户名不能为空');
}
if (!password) {
errors.push('密码不能为空');
} else if (password.length < 6) {
errors.push('密码长度至少为 6 位');
}
if (errors.length > 0) {
errorBox.textContent = errors.join('');
errorBox.style.display = 'block';
return;
}
errorBox.style.display = 'none';
submitBtn.disabled = true;
submitBtn.textContent = '登录中…';
setTimeout(function () {
form.style.display = 'none';
document.getElementById('welcomeName').textContent = username;
successPanel.style.display = 'block';
submitBtn.disabled = false;
submitBtn.textContent = '登 录';
}, 900);
});
document.getElementById('togglePwd').addEventListener('click', function () {
var isHidden = passwordInput.type === 'password';
passwordInput.type = isHidden ? 'text' : 'password';
this.setAttribute('aria-label', isHidden ? '隐藏密码' : '显示密码');
this.style.color = isHidden ? '#3b82f6' : '';
});
function updateCapslockHint(e) {
var hint = document.getElementById('capslockHint');
var capsOn = e.getModifierState && e.getModifierState('CapsLock');
hint.classList.toggle('show', !!capsOn);
}
passwordInput.addEventListener('keydown', updateCapslockHint);
passwordInput.addEventListener('keyup', updateCapslockHint);
document.getElementById('backBtn').addEventListener('click', function () {
successPanel.style.display = 'none';
form.style.display = 'block';
form.reset();
document.getElementById('username').focus();
});
+23
View File
@@ -0,0 +1,23 @@
document.getElementById('loginForm').addEventListener('submit', function (e) {
var errorBox = document.getElementById('errorBox');
var username = document.getElementById('username').value.trim();
var password = document.getElementById('password').value;
var errors = [];
if (!username) {
errors.push('用户名不能为空');
}
if (!password) {
errors.push('密码不能为空');
} else if (password.length < 6) {
errors.push('密码长度至少为 6 位');
}
if (errors.length > 0) {
e.preventDefault();
errorBox.textContent = errors.join('');
errorBox.style.display = 'block';
} else {
errorBox.style.display = 'none';
}
});
+43
View File
@@ -0,0 +1,43 @@
document.getElementById('registerForm').addEventListener('submit', function (e) {
var errorBox = document.getElementById('errorBox');
var username = document.getElementById('username').value.trim();
var email = document.getElementById('email').value.trim();
var password = document.getElementById('password').value;
var confirmPassword = document.getElementById('confirmPassword').value;
var agree = document.getElementById('agree').checked;
var errors = [];
if (!username) {
errors.push('用户名不能为空');
} else if (username.length < 3 || username.length > 20) {
errors.push('用户名长度需在 3-20 个字符之间');
}
if (!email) {
errors.push('邮箱不能为空');
} else if (!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
errors.push('邮箱格式不正确');
}
if (!password) {
errors.push('密码不能为空');
} else if (password.length < 6) {
errors.push('密码长度至少为 6 位');
}
if (password !== confirmPassword) {
errors.push('两次输入的密码不一致');
}
if (!agree) {
errors.push('请先阅读并同意服务条款和隐私政策');
}
if (errors.length > 0) {
e.preventDefault();
errorBox.textContent = errors.join('');
errorBox.style.display = 'block';
} else {
errorBox.style.display = 'none';
}
});