Skills Matrix Dashboard

Team Skills Matrix

Legend:
0 - None
1 - Beginner
2 - Intermediate
3 - Advanced
4 - Expert

Manage Skills

    Manage Team Members

      Set Proficiency Levels

      Please add skills, members, and set their ratings on the "Manage" tab.

      '; return; } let tableHTML = ''; skills.forEach(skill => { tableHTML += ``; }); tableHTML += ''; teamMembers.forEach(member => { tableHTML += ``; skills.forEach(skill => { const ratingKey = `${member.id}-${skill.id}`; const rating = ratings[ratingKey] || 0; tableHTML += ``; }); tableHTML += ``; }); tableHTML += '
      Member${skill.name}
      ${member.name}${rating}
      '; matrixContainer.innerHTML = tableHTML; }; const downloadPDF = () => { const { jsPDF } = window.jspdf; const doc = new jsPDF({ orientation: 'landscape' }); doc.setFontSize(18); doc.text("Team Skills Matrix Report", 14, 22); doc.autoTable({ html: '#sm-matrix-table-container table', startY: 30, styles: { halign: 'center' }, headStyles: { fillColor: [74, 105, 189] }, didParseCell: (data) => { // Color cells based on proficiency if(data.section === 'body' && data.column.index > 0) { const rating = parseInt(data.cell.text[0]) || 0; const colorMap = {0:'#e9ecef', 1:'#d1e7ff', 2:'#9fcdff', 3:'#6baefd', 4:'#3891fc'}; data.cell.styles.fillColor = colorMap[rating]; } } }); doc.save('Skills-Matrix-Report.pdf'); }; const saveData = () => localStorage.setItem('sm_data', JSON.stringify({skills, teamMembers, ratings})); const loadData = () => { const data = JSON.parse(localStorage.getItem('sm_data')) || {}; skills = data.skills || []; teamMembers = data.teamMembers || []; ratings = data.ratings || {}; }; // Event Listeners addSkillBtn.addEventListener('click', addSkill); addMemberBtn.addEventListener('click', addMember); mainContainer.querySelector('#sm-config').addEventListener('click', (e) => { if(e.target.tagName === 'BUTTON' && e.target.dataset.type) { deleteItem(e.target.dataset.type, parseInt(e.target.dataset.id)); } }); ratingsContainer.addEventListener('change', (e) => { if (e.target.classList.contains('rating-select')) { ratings[e.target.dataset.key] = parseInt(e.target.value); saveData(); renderMatrix(); } }); let currentTabIndex = 0; const tabs = mainContainer.querySelectorAll('.sm-tab-link'); window.sm_changeTab = (event, tabName) => { currentTabIndex = Array.from(tabs).findIndex(t => t === event.currentTarget); Array.from(mainContainer.querySelectorAll('.sm-tab-content')).forEach(c => c.classList.remove('active')); Array.from(tabs).forEach(t => t.classList.remove('active')); mainContainer.querySelector('#' + tabName).classList.add('active'); event.currentTarget.classList.add('active'); }; mainContainer.querySelector('#sm-download-pdf-btn').addEventListener('click', downloadPDF); // Initialization loadData(); updateAllUI(); });
      Scroll to Top