Task Board
Se încarcă...
@@ -396,6 +549,86 @@ // Init Lucide icons lucide.createIcons(); + + // Dashboard + function initDashboard() { + const collapsed = localStorage.getItem('dashboardCollapsed'); + const dashboard = document.getElementById('dashboard'); + // Default collapsed + if (collapsed === null || collapsed === 'true') { + dashboard.classList.add('collapsed'); + } + loadDashboardStatus(); + } + + function toggleDashboard() { + const dashboard = document.getElementById('dashboard'); + dashboard.classList.toggle('collapsed'); + localStorage.setItem('dashboardCollapsed', dashboard.classList.contains('collapsed')); + } + + async function loadDashboardStatus() { + try { + const response = await fetch('status.json?' + Date.now()); + if (response.ok) { + const status = await response.json(); + updateDashboard(status); + } + } catch (e) { + console.log('No status.json yet'); + } + updateCronList(); + } + + function updateDashboard(status) { + // ANAF + const anafEl = document.getElementById('anafStatus'); + if (status.anaf) { + anafEl.textContent = status.anaf.status; + anafEl.className = 'status-value ' + (status.anaf.ok ? 'ok' : 'warning'); + } + + // Git + const gitEl = document.getElementById('gitStatus'); + if (status.git) { + gitEl.textContent = status.git.status; + gitEl.className = 'status-value ' + (status.git.clean ? 'ok' : 'warning'); + } + + // Last report + const reportEl = document.getElementById('lastReport'); + const timeEl = document.getElementById('reportTime'); + if (status.lastReport) { + reportEl.textContent = status.lastReport.summary || 'OK'; + timeEl.textContent = status.lastReport.time ? '(' + status.lastReport.time + ')' : ''; + } + + // Summary in header + const summaryEl = document.getElementById('dashboardSummary'); + let summary = []; + if (status.anaf) summary.push('ANAF: ' + status.anaf.status); + if (status.git) summary.push('Git: ' + status.git.status); + summaryEl.textContent = summary.join(' · '); + } + + function updateCronList() { + const now = new Date(); + const hour = now.getHours(); + + const jobs = [ + { time: '07:30', name: 'coaching', done: hour >= 8 }, + { time: '08:30', name: 'raport', done: hour >= 9 }, + { time: '20:00', name: 'raport', done: hour >= 20 }, + { time: '21:00', name: 'coaching', done: hour >= 21 } + ]; + + const listEl = document.getElementById('cronList'); + listEl.innerHTML = jobs.map(job => + `${job.time} ${job.name}` + ).join(' · '); + } + + initDashboard(); let tasksData = null; let draggedTask = null; diff --git a/kanban/status.json b/kanban/status.json new file mode 100644 index 0000000..198014c --- /dev/null +++ b/kanban/status.json @@ -0,0 +1,21 @@ +{ + "anaf": { + "status": "OK", + "ok": true, + "lastCheck": "2026-01-30T13:50:00Z" + }, + "git": { + "status": "curat", + "clean": true, + "files": 0 + }, + "agents": { + "count": 5, + "list": ["echo-work", "echo-health", "echo-growth", "echo-sprijin", "echo-scout"] + }, + "lastReport": { + "type": "test", + "summary": "Ecosistem configurat, totul în ordine", + "time": "30 ian 2026, 13:55" + } +}