login.js

2.85 KB
27/04/2025 15:26
JS
login.js
document.addEventListener('DOMContentLoaded', function() {
  // Check if already logged in
  const token = localStorage.getItem('posToken');
  if (token) {
    verifyToken(token);
  }

  // Login form submission
  const loginForm = document.getElementById('loginForm');
  const loginMessage = document.getElementById('loginMessage');

  loginForm.addEventListener('submit', function(e) {
    e.preventDefault();

    const username = document.getElementById('username').value;
    const password = document.getElementById('password').value;

    // Reset message
    loginMessage.innerHTML = '';
    loginMessage.className = 'login-message';

    // Call API
    fetch(`${apiPath}/auth/login`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        username: username,
        password: password
      })
    })
      .then(response => response.json())
      .then(data => {
        if (data.status === 'success') {
          // Save token and user info
          localStorage.setItem('posToken', data.data.token);
          localStorage.setItem('posUser', JSON.stringify(data.data.user));

          // Redirect based on role
          redirectByRole(data.data.user.role);
        } else {
          loginMessage.innerHTML = data.message;
          loginMessage.className = 'login-message error';
        }
      })
      .catch(error => {
        loginMessage.innerHTML = 'An error occurred. Please try again.';
        loginMessage.className = 'login-message error';
        console.error('Login error:', error);
      });
  });

  // Verify token function
  function verifyToken(token) {
    fetch(`${apiPath}/auth/verify`, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        token: token
      })
    })
      .then(response => response.json())
      .then(data => {
        if (data.status === 'success') {
          // Token is valid, redirect based on role
          redirectByRole(data.data.user.role);
        } else {
          // Token is invalid, clear storage
          localStorage.removeItem('posToken');
          localStorage.removeItem('posUser');
        }
      })
      .catch(error => {
        console.error('Token verification error:', error);
        // On error, clear storage
        localStorage.removeItem('posToken');
        localStorage.removeItem('posUser');
      });
  }

  // Redirect based on user role
  function redirectByRole(role) {
    switch (role) {
      case 'admin':
      case 'manager':
        window.location.href = `${basePath}/admin/index.html`;
        break;
      case 'cashier':
        window.location.href = `${basePath}/pos/index.html`;
        break;
      default:
        loginMessage.innerHTML = 'Unknown user role';
        loginMessage.className = 'login-message error';
        break;
    }
  }
});