document.addEventListener('DOMContentLoaded', function() { // Check authentication const token = localStorage.getItem('posToken'); if (!token) { window.location.href = `${basePath}/index.html`; return; } // Toggle user dropdown const userDropdown = document.querySelector('.user-dropdown-toggle'); if (userDropdown) { userDropdown.addEventListener('click', function(e) { e.preventDefault(); e.stopPropagation(); // หยุดการ propagate event ไปยัง document const dropdownMenu = document.querySelector('.user-dropdown-menu'); dropdownMenu.classList.toggle('show'); }); } // Prevent dropdown close when clicking on dropdown menu items const dropdownMenu = document.querySelector('.user-dropdown-menu'); if (dropdownMenu) { dropdownMenu.addEventListener('click', function(e) { // อนุญาตให้ click ที่ logout ทำงานได้ แต่ป้องกันการปิด dropdown เมื่อคลิกที่เมนูอื่น if (!e.target.matches('#logoutBtn') && !e.target.closest('#logoutBtn')) { e.stopPropagation(); } }); } // Toggle sidebar (responsive) const toggleSidebar = document.querySelector('.toggle-sidebar'); if (toggleSidebar) { toggleSidebar.addEventListener('click', function() { document.querySelector('.sidebar').classList.toggle('collapsed'); document.querySelector('.content-area').classList.toggle('expanded'); }); } // Setup profile link const profileLink = document.querySelector('.user-dropdown-menu a[href="#"]:first-child'); if (profileLink) { profileLink.addEventListener('click', function(e) { e.preventDefault(); openProfileModal(); }); } // Change password button const changePasswordBtn = document.getElementById('changePasswordBtn'); if (changePasswordBtn) { changePasswordBtn.addEventListener('click', function(e) { e.preventDefault(); localStorage.removeItem('posToken'); localStorage.removeItem('posUser'); window.location.href = `${basePath}/index.html`; }); } // Set user name const userJson = localStorage.getItem('posUser'); if (userJson) { const user = JSON.parse(userJson); const userNameElem = document.querySelector('.user-name'); if (userNameElem) { userNameElem.textContent = user.full_name || user.username; } } // Logout button const logoutBtn = document.getElementById('logoutBtn'); if (logoutBtn) { logoutBtn.addEventListener('click', function(e) { e.preventDefault(); localStorage.removeItem('posToken'); localStorage.removeItem('posUser'); window.location.href = `${basePath}/index.html`; }); } }); // API Request helper async function apiRequest(endpoint, method = 'GET', data = null) { const token = localStorage.getItem('posToken'); const headers = { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }; const options = { method, headers }; if (data && (method === 'POST' || method === 'PUT')) { options.body = JSON.stringify(data); } try { console.log(`API Request to: ${apiPath}/${endpoint}`, options); // Debug line const response = await fetch(`${apiPath}/${endpoint}`, options); const result = await response.json(); console.log('API Response:', result); // Debug line if (!response.ok) { // Handle unauthorized (token expired) if (response.status === 401) { localStorage.removeItem('posToken'); localStorage.removeItem('posUser'); window.location.href = `${basePath}/index.html`; return {status: 'error', message: 'Session expired. Please login again.'}; } throw new Error(result.message || 'API request failed'); } return result; } catch (error) { console.error('API Request Error:', error); return {status: 'error', message: error.message}; } } // Format currency function formatCurrency(amount) { return new Intl.NumberFormat('th-TH', { style: 'currency', currency: 'THB', minimumFractionDigits: 2 }).format(amount); } function showNotification(message, type = 'info') { const container = document.getElementById('notification-container'); if (!container) return; const notification = document.createElement('div'); notification.className = `notification notification-${type}`; notification.innerHTML = `
`; container.appendChild(notification); // Auto remove after 5 seconds setTimeout(() => { if (notification.parentNode) { notification.parentNode.removeChild(notification); } }, 5000); // Close button const closeBtn = notification.querySelector('.notification-close'); if (closeBtn) { closeBtn.addEventListener('click', () => { if (notification.parentNode) { notification.parentNode.removeChild(notification); } }); } } function openProfileModal() { // ตรวจสอบว่า modal มีอยู่แล้วหรือไม่ let profileModal = document.getElementById('profileModal'); // ถ้ายังไม่มี modal ให้สร้างใหม่ if (!profileModal) { // สร้าง modal element profileModal = document.createElement('div'); profileModal.id = 'profileModal'; profileModal.className = 'modal'; // สร้าง HTML content สำหรับ modal profileModal.innerHTML = ` `; // เพิ่ม modal เข้าไปใน document document.body.appendChild(profileModal); // เพิ่ม event listeners สำหรับปุ่ม document.querySelector('#profileModal .close-modal').addEventListener('click', function() { profileModal.classList.remove('show'); }); document.getElementById('cancelProfileBtn').addEventListener('click', function() { profileModal.classList.remove('show'); }); document.getElementById('saveProfileBtn').addEventListener('click', saveProfileChanges); } // ดึงข้อมูลผู้ใช้จาก localStorage const userJson = localStorage.getItem('posUser'); if (userJson) { const user = JSON.parse(userJson); // กรอกข้อมูลในฟอร์ม document.getElementById('profileUsername').value = user.username || ''; document.getElementById('profileFullName').value = user.full_name || ''; document.getElementById('profileEmail').value = user.email || ''; document.getElementById('profileRole').value = user.role || ''; } // แสดง modal profileModal.classList.add('show'); } // Function to save profile changes async function saveProfileChanges() { try { const fullName = document.getElementById('profileFullName').value; const email = document.getElementById('profileEmail').value; if (!fullName || !email) { showNotification('Please fill in all required fields', 'error'); return; } const response = await apiRequest('users/profile', 'PUT', { full_name: fullName, email: email }); if (response.status === 'success') { // อัพเดตข้อมูลใน localStorage const userJson = localStorage.getItem('posUser'); if (userJson) { const user = JSON.parse(userJson); user.full_name = fullName; user.email = email; localStorage.setItem('posUser', JSON.stringify(user)); // อัพเดตชื่อที่แสดงบน UI const userNameElem = document.querySelector('.user-name'); if (userNameElem) { userNameElem.textContent = fullName || user.username; } } showNotification('Profile updated successfully', 'success'); document.getElementById('profileModal').classList.remove('show'); } else { showNotification(response.message || 'Failed to update profile', 'error'); } } catch (error) { console.error('Error updating profile:', error); showNotification('Error updating profile: ' + error.message, 'error'); } }