// Settings page main.js // Auth check const token = localStorage.getItem('token'); const role = localStorage.getItem('role'); if (!token || role !== 'ADMIN') { window.location.href = '/'; } // Configuration const ROUTES = { general: { title: 'Общие настройки', file: 'views/general.html' }, }; let currentTab = null; // DOM Elements const appContent = document.getElementById('app-content'); const pageTitle = document.getElementById('page-title'); const navItems = document.querySelectorAll('.nav-item[data-tab]'); const sidebar = document.querySelector('.sidebar'); const sidebarOverlay = document.getElementById('sidebar-overlay'); const menuToggle = document.getElementById('menu-toggle'); const sidebarCloseBtn = document.getElementById('sidebar-close-btn'); const main = document.querySelector('.main'); // Init sidebar state from localStorage if (window.innerWidth > 768 && localStorage.getItem('sidebar-collapsed') === 'true') { sidebar.classList.add('collapsed'); main.classList.add('sidebar-collapsed'); } // Menu Toggle (Hamburger) menuToggle.addEventListener('click', () => { if (window.innerWidth <= 768) { sidebar.classList.toggle('open'); sidebarOverlay.classList.toggle('open'); } else { sidebar.classList.remove('collapsed'); main.classList.remove('sidebar-collapsed'); localStorage.setItem('sidebar-collapsed', 'false'); } }); // Sidebar Close (X button) sidebarCloseBtn?.addEventListener('click', () => { if (window.innerWidth <= 768) { sidebar.classList.remove('open'); sidebarOverlay.classList.remove('open'); } else { sidebar.classList.toggle('collapsed'); main.classList.toggle('sidebar-collapsed'); localStorage.setItem('sidebar-collapsed', sidebar.classList.contains('collapsed')); } }); sidebarOverlay.addEventListener('click', () => { sidebar.classList.remove('open'); sidebarOverlay.classList.remove('open'); }); // Navigation navItems.forEach(item => { item.addEventListener('click', (e) => { e.preventDefault(); const tab = item.dataset.tab; switchTab(tab); }); }); async function switchTab(tab) { if (currentTab === tab || !ROUTES[tab]) return; navItems.forEach(n => n.classList.remove('active')); document.querySelector(`.nav-item[data-tab="${tab}"]`)?.classList.add('active'); pageTitle.textContent = ROUTES[tab].title; try { appContent.innerHTML = '
Загрузка...
'; const response = await fetch(ROUTES[tab].file); if (!response.ok) throw new Error('Failed to load view'); const html = await response.text(); appContent.innerHTML = html; currentTab = tab; } catch (e) { appContent.innerHTML = `
Ошибка загрузки: ${e.message}
`; console.error(e); } // Close mobile menu if open sidebar.classList.remove('open'); sidebarOverlay.classList.remove('open'); } // Load default tab switchTab('general');