import { getCookie, deleteCookie } from '/static/js/cookies.js'; class ClientManager { constructor() { this.userData = null; this.accessData = null; this.init(); } async init() { try { // Получаем данные пользователя из cookie this.userData = await getCookie('toolbox_user'); this.accessData = await getCookie('toolbox_access'); if (!this.userData || !this.accessData) { console.warn('User data or access data not found in cookie'); this.clearUserCookie(); window.location.href = '/user/login'; } // Вставляем данные пользователя в DOM this.renderUserInfo(); // Инициализируем обработчики this.initLogoutHandler(); this.initHoverEffects(); this.addAvatarErrorHandler(); } catch (error) { console.error('Error initializing client manager:', error); } } renderUserInfo() { if (!this.userData) { // Если нет данных, показываем заглушку this.renderFallbackUser(); return; } // Находим элементы для обновления const avatar = document.querySelector('.client-avatar'); const nameElement = document.querySelector('.client-name'); const roleElement = document.querySelector('.client-role'); // Обновляем аватар if (avatar) { avatar.src = this.userData.photo || 'static/images/users/default.png'; avatar.alt = this.userData.username || 'Пользователь'; } // Обновляем имя if (nameElement) { nameElement.textContent = this.userData.username || 'Неизвестный пользователь'; } // Обновляем роль if (roleElement) { const role = this.accessData.title || 'Неизвестная роль'; roleElement.textContent = role; } } renderFallbackUser() { const userCard = document.querySelector('.client-card'); if (userCard) { userCard.innerHTML = `
Гость
Гость
Не авторизован
Войти
`; } } initLogoutHandler() { const logoutBtn = document.getElementById('clientLogoutBtn'); if (logoutBtn) { logoutBtn.addEventListener('click', (e) => { e.preventDefault(); this.handleLogout(logoutBtn); }); } } handleLogout(button) { // Анимация нажатия button.style.transform = 'scale(0.95)'; // Добавляем иконку загрузки const originalContent = button.innerHTML; button.innerHTML = ` Выход... `; button.disabled = true; // Очищаем cookie пользователя this.clearUserCookie(); // Очищаем локальное хранилище localStorage.clear(); // Переход на страницу выхода setTimeout(() => { window.location.href = '/user/login'; }, 800); } clearUserCookie() { try { const cookieNames = ['toolbox_user', 'toolbox_access']; cookieNames.forEach(cookieName => { deleteCookie(cookieName); }); } catch (error) { console.warn('Error clearing cookies:', error); } } initHoverEffects() { const clientCard = document.querySelector('.client-card'); if (clientCard) { clientCard.addEventListener('mouseenter', () => { clientCard.style.transform = 'translateY(-4px) scale(1.01)'; }); clientCard.addEventListener('mouseleave', () => { clientCard.style.transform = 'translateY(0) scale(1)'; }); } } addAvatarErrorHandler() { const avatar = document.querySelector('.client-avatar'); if (avatar) { avatar.onerror = () => { avatar.src = 'static/images/users/default.png'; }; } } } // Инициализация при загрузке документа document.addEventListener('DOMContentLoaded', () => { // Инициализируем менеджер пользователя window.clientManager = new ClientManager(); // Добавляем анимацию появления const elements = document.querySelectorAll('.animate-fade-up'); elements.forEach((el, index) => { el.style.animationDelay = `${index * 0.1}s`; }); }); // Экспорт для использования в других модулях export { ClientManager };