diff --git a/public/main.js b/public/main.js index 55fc4e0..6d96811 100644 --- a/public/main.js +++ b/public/main.js @@ -1,63 +1,107 @@ // main.js - Главный файл инициализации -// Глобальная переменная для вида задач (используем window, чтобы избежать конфликтов) -window.currentTaskView = 'all'; // 'all', 'my_assigned', 'assigned_to_me' -let allTasksCache = []; // Кэш всех задач (может быть полезен) +let currentTaskView = 'all'; // 'all', 'my_assigned', 'assigned_to_me' +let allTasksCache = []; // Кэш всех задач document.addEventListener('DOMContentLoaded', function() { checkAuth(); - // setupEventListeners убран отсюда – будет вызван после загрузки всех скриптов + setupEventListeners(); + + // Инициализация выбора времени initializeTimeSelectors(); + // Инициализация фильтра const taskViewFilter = document.getElementById('task-view-filter'); if (taskViewFilter) { - taskViewFilter.value = window.currentTaskView; + taskViewFilter.value = currentTaskView; } // По умолчанию показываем секцию задач showSection('tasks'); }); -// Функция настройки обработчиков событий – будет вызвана после загрузки всех скриптов function setupEventListeners() { - console.log('🔧 Настройка обработчиков событий...'); + // Форма входа + document.getElementById('login-form').addEventListener('submit', login); - const loginForm = document.getElementById('login-form'); - if (loginForm) loginForm.addEventListener('submit', login); + // Формы задач + document.getElementById('create-task-form').addEventListener('submit', createTask); + document.getElementById('edit-task-form').addEventListener('submit', updateTask); + document.getElementById('copy-task-form').addEventListener('submit', copyTask); + document.getElementById('edit-assignment-form').addEventListener('submit', updateAssignment); + document.getElementById('rework-task-form').addEventListener('submit', sendForRework); - const createForm = document.getElementById('create-task-form'); - if (createForm) createForm.addEventListener('submit', createTask); - - const editForm = document.getElementById('edit-task-form'); - if (editForm) editForm.addEventListener('submit', updateTask); - - const copyForm = document.getElementById('copy-task-form'); - if (copyForm) copyForm.addEventListener('submit', copyTask); - - const editAssignmentForm = document.getElementById('edit-assignment-form'); - if (editAssignmentForm) editAssignmentForm.addEventListener('submit', updateAssignment); - - const reworkForm = document.getElementById('rework-task-form'); - if (reworkForm) reworkForm.addEventListener('submit', sendForRework); - - const filesInput = document.getElementById('files'); - if (filesInput) filesInput.addEventListener('change', updateFileList); - - const editFilesInput = document.getElementById('edit-files'); - if (editFilesInput) editFilesInput.addEventListener('change', updateEditFileList); + // Файлы + document.getElementById('files').addEventListener('change', updateFileList); + document.getElementById('edit-files').addEventListener('change', updateEditFileList); + // Настройки уведомлений const notificationForm = document.getElementById('notification-settings-form'); - if (notificationForm) notificationForm.addEventListener('submit', saveNotificationSettings); + if (notificationForm) { + notificationForm.addEventListener('submit', saveNotificationSettings); + } + // Инициализация загрузки файлов initializeFileUploads(); } // Функция для изменения вида задач function changeTaskView() { const select = document.getElementById('task-view-filter'); - window.currentTaskView = select.value; + currentTaskView = select.value; loadTasks(); } +// Переопределяем функцию loadTasks для фильтрации +(function() { + // Сохраняем оригинальную функцию loadTasks + const originalLoadTasks = window.loadTasks; + + // Создаем новую функцию + window.loadTasks = async function() { + // Вызываем оригинальную функцию + if (typeof originalLoadTasks === 'function') { + await originalLoadTasks(); + } + + // Кэшируем все задачи + if (window.tasks && Array.isArray(window.tasks)) { + allTasksCache = [...window.tasks]; + + // Фильтруем задачи в зависимости от выбранного вида + if (currentTaskView !== 'all' && currentUser) { + let filteredTasks = []; + + if (currentTaskView === 'my_assigned') { + // Показываем задачи, которые я назначил (я - создатель) + filteredTasks = window.tasks.filter(task => { + return parseInt(task.created_by) === currentUser.id; + }); + + } else if (currentTaskView === 'assigned_to_me') { + // Показываем задачи, назначенные мне (я - исполнитель) + filteredTasks = window.tasks.filter(task => { + // Проверяем, назначена ли задача текущему пользователю + if (task.assignments && Array.isArray(task.assignments)) { + return task.assignments.some(assignment => + parseInt(assignment.user_id) === currentUser.id + ); + } + return false; + }); + } + + // Обновляем глобальный массив задач + window.tasks = filteredTasks; + + // Перерисовываем задачи + if (window.renderTasks && typeof window.renderTasks === 'function') { + window.renderTasks(); + } + } + } + }; +})(); + // Обновленная функция для создания задачи async function createTask(event) { event.preventDefault(); @@ -452,16 +496,11 @@ function showSection(sectionName) { document.getElementById(sectionName + '-section').classList.add('active'); if (sectionName === 'tasks') { - window.currentTaskView = 'all'; loadTasks(); } else if (sectionName === 'logs') { loadActivityLogs(); } else if (sectionName === 'kanban') { loadKanbanTasks(); - } else if (sectionName === 'mytasks') { - showMyTasksSection(); // из loadMyCreatedTasks.js - } else if (sectionName === 'runtasks') { - showRunTasksSection(); // из loadMyCreatedTasks.js } // Загрузка профиля при переходе в личный кабинет @@ -475,4 +514,4 @@ function showSection(sectionName) { function showKanbanSection() { showSection('kanban'); } -window.setupEventListeners = setupEventListeners; \ No newline at end of file +