Online Workload Distribution Analyzer

Online Workload Distribution Analyzer

Visualize team tasks, identify imbalances, and optimize productivity.

Workload Dashboard

Hours Assigned per Team Member

Analysis & Task List

Workload Insights

Full Task Breakdown

Configure Your Data

Team Members

Assign Tasks

${m.name} has ${m.totalHours} hours assigned and ${status}

`; }).join(''); if (team.length > 0) { insightsContainer.innerHTML += `

The average workload is ${averageHours.toFixed(1)} hours per person.

`; } tableContainer.innerHTML = ` ${tasks.map(t => { const member = team.find(m => m.id === t.memberId); return `` }).join('')}
TaskAssigned ToHours
${t.desc} ${member ? member.name : 'Unassigned'} ${t.hours}
`; }; // --- Event Handlers --- const handleAddMember = (e) => { e.preventDefault(); const nameInput = getElement('member-name'); if (nameInput.value.trim()) { team.push({ id: Date.now(), name: nameInput.value.trim() }); nameInput.value = ''; saveData(); renderAll(); } }; const handleTeamListClick = (e) => { if (e.target.classList.contains('delete-member-btn')) { const memberId = parseInt(e.target.dataset.id); team = team.filter(m => m.id !== memberId); tasks = tasks.filter(t => t.memberId !== memberId); // Also remove their tasks saveData(); renderAll(); } }; const handleAddTask = (e) => { e.preventDefault(); const descInput = getElement('task-description'); const hoursInput = getElement('task-hours'); const assigneeSelect = getElement('task-assignee'); if (descInput.value.trim() && hoursInput.value && assigneeSelect.value) { tasks.push({ id: Date.now(), desc: descInput.value.trim(), hours: parseInt(hoursInput.value), memberId: parseInt(assigneeSelect.value) }); e.target.reset(); saveData(); renderAll(); } }; const generatePDF = () => { const content = getElement('pdf-content'); if (!content) return; content.classList.add('pdf-mode'); // Add class to hide no-pdf elements html2canvas(content, { scale: 2 }).then(canvas => { content.classList.remove('pdf-mode'); // Remove class after capture const imgData = canvas.toDataURL('image/png'); const { jsPDF } = window.jspdf; const pdf = new jsPDF({ orientation: 'p', unit: 'mm', format: 'a4' }); const pdfWidth = pdf.internal.pageSize.getWidth(); const ratio = canvas.width / canvas.height; const pdfImgWidth = pdfWidth - 20; const pdfImgHeight = pdfImgWidth / ratio; pdf.addImage(imgData, 'PNG', 10, 10, pdfImgWidth, pdfImgHeight); pdf.save('Workload_Analysis.pdf'); }); }; // --- Initial Setup & Event Listeners --- tabs.forEach(tab => { tab.addEventListener('click', () => { currentTab = parseInt(tab.dataset.tab); tabs.forEach(t => t.classList.remove('active')); tab.classList.add('active'); tabContents.forEach(c => c.classList.remove('active')); getElement(`tab-${currentTab}`).classList.add('active'); }); }); getElement('add-member-form').addEventListener('submit', handleAddMember); getElement('team-list').addEventListener('click', handleTeamListClick); getElement('add-task-form').addEventListener('submit', handleAddTask); getElement('download-pdf-btn').addEventListener('click', generatePDF); loadData(); renderAll(); });
Scroll to Top