Cross-Team Task Management Dashboard
A shared space for teams to track and manage their workload.
Manage Teams
Add a New Task
No teams added yet.
'; return; } appData.teams.forEach(team => { const teamEl = document.createElement('div'); teamEl.className = 'flex items-center justify-between p-2 bg-white border rounded-md'; teamEl.innerHTML = ` ${team.name} `; teamListContainer.appendChild(teamEl); }); }; const populateTeamSelector = () => { assignTeamSelector.innerHTML = ''; if (appData.teams.length === 0) { assignTeamSelector.innerHTML = ''; addTaskBtn.disabled = true; return; } addTaskBtn.disabled = false; appData.teams.forEach(team => { const option = document.createElement('option'); option.value = team.id; option.textContent = team.name; assignTeamSelector.appendChild(option); }); }; addTeamBtn.addEventListener('click', () => { const name = newTeamNameInput.value.trim(); if (!name) { showMessage('Please enter a team name.'); return; } appData.teams.push({ id: Date.now(), name }); saveData(); renderManagementView(); newTeamNameInput.value = ''; showMessage('Team added successfully!', false); }); teamListContainer.addEventListener('click', (e) => { if (e.target.classList.contains('delete-team-btn')) { const teamId = parseInt(e.target.dataset.teamId, 10); if (confirm('Are you sure you want to delete this team? All associated tasks will also be removed.')) { appData.teams = appData.teams.filter(t => t.id !== teamId); appData.tasks = appData.tasks.filter(t => t.teamId !== teamId); saveData(); renderManagementView(); } } }); addTaskBtn.addEventListener('click', () => { const content = taskContentInput.value.trim(); const teamId = parseInt(assignTeamSelector.value, 10); if (!content || !teamId) { showMessage('Please provide a task description and select a team.'); return; } const newTask = { id: Date.now(), teamId, content, status: 'todo' }; appData.tasks.push(newTask); saveData(); taskContentInput.value = ''; showMessage('Task added to "To Do" list!', false); }); // --- PDF DOWNLOAD --- downloadPdfBtn.addEventListener('click', () => { showMessage('Preparing PDF...', false); const { jsPDF } = window.jspdf; const element = document.getElementById('pdf-export-area'); html2canvas(element, { scale: 2, useCORS: true, windowWidth: element.scrollWidth, windowHeight: element.scrollHeight }).then(canvas => { const imgData = canvas.toDataURL('image/png'); const pdf = new jsPDF({ orientation: 'landscape', unit: 'in', format: 'letter' }); const pdfWidth = pdf.internal.pageSize.getWidth() - 1; const pdfHeight = (canvas.height * pdfWidth) / canvas.width; pdf.addImage(imgData, 'PNG', 0.5, 0.5, pdfWidth, pdfHeight); pdf.save('Cross_Team_Dashboard.pdf'); showMessage('PDF downloaded successfully!', false); }).catch(err => { console.error("PDF Generation Error:", err); showMessage("An error occurred during PDF generation."); }); }); // --- INITIALIZATION --- const initializeApp = () => { loadData(); switchTab('tab1'); }; initializeApp(); });