function toggleDrawer() { if (IS_GUEST) return; const drawer = document.getElementById('task-drawer'); const backdrop = document.getElementById('drawer-backdrop'); const isHidden = drawer.classList.contains('translate-x-full'); if (isHidden) { drawer.classList.remove('translate-x-full'); backdrop.classList.remove('hidden'); } else { drawer.classList.add('translate-x-full'); backdrop.classList.add('hidden'); } } function setFilter(status) { currentFilter = status; ['ALL', 'IN_PROGRESS', 'BACKLOG', 'COMPLETED'].forEach(f => { const btn = document.getElementById(`filter-${f}`); if (btn) { btn.className = (f === status) ? "px-3 py-1.5 rounded-t-lg border-b-2 border-indigo-600 text-indigo-600 font-bold whitespace-nowrap" : "px-3 py-1.5 rounded-t-lg border-b-2 border-transparent whitespace-nowrap"; } }); renderTasks(); } async function loadTasks() { if (IS_GUEST || !API_TOKEN) return; try { const res = await fetch('/api/v1/tasks', { headers: { 'Authorization': `Bearer ${API_TOKEN}` } }); if (res.status === 401) { logout(); return; } allTasks = await res.json(); document.getElementById('task-count-badge').innerText = allTasks.length; renderTasks(); } catch (err) { document.getElementById('tasks-container').innerHTML = `
Ошибка загрузки задач
`; } } function renderTasks() { const container = document.getElementById('tasks-container'); const filtered = allTasks.filter(t => currentFilter === 'ALL' || t.status === currentFilter); if (filtered.length === 0) { container.innerHTML = `
Нет задач с выбранным фильтром
`; return; } container.innerHTML = filtered.map(t => { let statusBadge = 'bg-slate-100 text-slate-600 border-slate-200'; let cardBg = 'bg-white'; if (t.status === 'COMPLETED') { statusBadge = 'bg-emerald-50 text-emerald-700 border-emerald-300 font-semibold'; cardBg = 'bg-emerald-50/20'; } else if (t.status === 'IN_PROGRESS') { statusBadge = 'bg-amber-50 text-amber-700 border-amber-300 font-bold'; cardBg = 'bg-amber-50/20 border-amber-200'; } let priorityBadge = 'text-slate-500 bg-slate-100 border-slate-200'; if (t.priority === 'HIGH') priorityBadge = 'text-red-700 bg-red-50 border-red-200 font-bold'; let dueDateHtml = t.due_date ? `
Срок: ${t.due_date}
` : ''; return `
${t.task_id} ${t.priority || 'HIGH'}
${t.status}

${t.title}

${t.module}
${dueDateHtml}
`; }).join(''); }