document.addEventListener("DOMContentLoaded", () => { const studentsList = document.getElementById("students-list"); const criteriaContent = document.getElementById("criteria-content"); const saveButton = document.getElementById("save-button"); const studentsTab = document.getElementById("students-tab"); const criteriaTab = document.getElementById("criteria-tab"); const addCriteriaForm = document.getElementById("add-criteria-form"); const editCriteriaForm = document.getElementById("edit-criteria-form"); const deleteCriteriaForm = document.getElementById("delete-criteria-form"); const criteriaListDiv = document.getElementById("criteria-list"); const editCriteriaNameSelect = document.getElementById("edit-criteria-name"); const deleteCriteriaNameSelect = document.getElementById("delete-criteria-name"); let uczniowie = []; let kryteria = []; let dane = {}; let progiOcen = []; // Ładowanie danych z serwera Promise.all([ fetch("http://localhost:4000/uczniowie").then(response => response.json()), fetch("http://localhost:4000/kryteria").then(response => response.json()), fetch("http://localhost:4000/dane").then(response => response.json()), fetch("http://localhost:4000/oceny").then(response => response.json()) ]) .then(([uczniowieData, kryteriaData, daneData, ocenyData]) => { uczniowie = uczniowieData.uczniowie; kryteria = kryteriaData; dane = daneData; progiOcen = ocenyData.progi; console.log("Uczniowie:", uczniowie); console.log("Kryteria:", kryteria); console.log("Dane:", dane); console.log("Progi ocen:", progiOcen); renderStudents(); renderCriteria(); }) .catch(error => console.error("Błąd ładowania danych:", error)); // Renderuj uczniów function renderStudents() { studentsList.innerHTML = ""; uczniowie.forEach(student => { const studentKey = `${student.imie}-${student.nazwisko}`; const details = document.createElement("details"); const summary = document.createElement("summary"); summary.textContent = `${student.imie} ${student.nazwisko} (${student.klasa})`; details.appendChild(summary); const criteriaList = document.createElement("div"); criteriaList.className = "criteria-list"; let totalPoints = 0; kryteria.forEach(criteria => { const criteriaItem = document.createElement("div"); criteriaItem.className = "criteria-item"; const label = document.createElement("span"); label.textContent = criteria.nazwa; const pointsInfo = document.createElement("span"); pointsInfo.className = "points-info"; pointsInfo.textContent = `(${criteria.punkty} pkt)`; const input = document.createElement("input"); input.type = "number"; input.min = "0"; const savedStudent = dane[studentKey]; input.value = savedStudent?.[criteria.nazwa] || 0; // Zapisz zmiany lokalnie w pamięci input.addEventListener("input", () => { if (!dane[studentKey]) { dane[studentKey] = {}; } dane[studentKey][criteria.nazwa] = parseInt(input.value) || 0; }); criteriaItem.appendChild(label); criteriaItem.appendChild(pointsInfo); criteriaItem.appendChild(input); // Dodaj podkategorie, jeśli istnieją if (criteria.podkategorie && criteria.podkategorie.length > 0) { const subCriteriaList = document.createElement("div"); subCriteriaList.className = "sub-criteria-list"; criteria.podkategorie.forEach(subCriteria => { const subCriteriaItem = document.createElement("div"); subCriteriaItem.className = "sub-criteria-item"; const subLabel = document.createElement("span"); subLabel.textContent = subCriteria.nazwa; const subPointsInfo = document.createElement("span"); subPointsInfo.className = "points-info"; subPointsInfo.textContent = `(${subCriteria.punkty} pkt)`; const subInput = document.createElement("input"); subInput.type = "number"; subInput.min = "0"; subInput.value = savedStudent?.[subCriteria.nazwa] || 0; // Zapisz zmiany lokalnie w pamięci subInput.addEventListener("input", () => { if (!dane[studentKey]) { dane[studentKey] = {}; } dane[studentKey][subCriteria.nazwa] = parseInt(subInput.value) || 0; }); subCriteriaItem.appendChild(subLabel); subCriteriaItem.appendChild(subPointsInfo); subCriteriaItem.appendChild(subInput); subCriteriaList.appendChild(subCriteriaItem); }); criteriaItem.appendChild(subCriteriaList); } criteriaList.appendChild(criteriaItem); // Oblicz sumę punktów const count = savedStudent?.[criteria.nazwa] || 0; totalPoints += count * criteria.punkty; // Jeśli są podkategorie, dodaj ich punkty if (criteria.podkategorie) { criteria.podkategorie.forEach(subCriteria => { const subCount = savedStudent?.[subCriteria.nazwa] || 0; totalPoints += subCount * subCriteria.punkty; }); } }); // Wybierz ocenę na podstawie punktów const ocena = progiOcen.find(prog => totalPoints >= prog.min)?.ocena || 1; // Dodaj sekcję z punktami i oceną w prawym górnym rogu const statsSection = document.createElement("div"); statsSection.className = "stats-section"; statsSection.innerHTML = `