login.js 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. const form = document.getElementById('loginForm')
  2. function Login() {
  3. if (!form.checkValidity()) {
  4. form.classList.add('was-validated')
  5. return
  6. }
  7. const formData = {
  8. username: document.getElementById('username').value,
  9. password: document.getElementById('password').value,
  10. }
  11. fetch('/api/auth/login', {
  12. method: 'POST',
  13. headers: {
  14. 'Content-Type': 'application/json',
  15. },
  16. body: JSON.stringify(formData),
  17. })
  18. .then(response => response.json())
  19. .then(data => {
  20. if (data.success) {
  21. const urlParams = new URLSearchParams(window.location.search);
  22. const redirectUrl = urlParams.get('next');
  23. if (redirectUrl) {
  24. window.location.href = redirectUrl;
  25. } else {
  26. window.location.href = `${window.location.protocol}//${window.location.host}/`
  27. }
  28. } else {
  29. showAlert('danger', data.error || '登录失败,请检查用户名和密码')
  30. }
  31. })
  32. .catch(error => {
  33. console.error('登录请求失败:', error)
  34. showAlert('danger', '网络错误,请稍后重试')
  35. })
  36. }
  37. function showAlert(type, message) {
  38. const alertContainer = document.getElementById('alert-container')
  39. const alertDiv = document.createElement('div')
  40. alertDiv.className = `alert alert-${type} alert-dismissible fade show`
  41. alertDiv.setAttribute('role', 'alert')
  42. alertDiv.innerHTML = `
  43. ${message}
  44. <button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
  45. `
  46. alertContainer.innerHTML = ''
  47. alertContainer.appendChild(alertDiv)
  48. }
  49. form.addEventListener('keyup', function (event) {
  50. if (event.key === 'Enter') {
  51. event.preventDefault();
  52. Login();
  53. }
  54. })