diff --git a/backend/dane.json b/backend/dane.json index 676f558..e3f8977 100644 --- a/backend/dane.json +++ b/backend/dane.json @@ -50,11 +50,11 @@ "Jan-Kowalski": { "bad_frekwencja": 2, "good_frekwencja": 11, - "dobra_frekwencja": 0, + "dobra_frekwencja": 3, "aktywnosc": 0, "sprawdzian": 3, "siema": 15, - "zla_frekwencja": 10, + "zla_frekwencja": 5, "konkursy": 0 }, "Anna-Nowak": { diff --git a/backend/kryteria.json b/backend/kryteria.json index 2b59dad..5096f99 100644 --- a/backend/kryteria.json +++ b/backend/kryteria.json @@ -18,5 +18,9 @@ { "nazwa": "konkursy", "punkty": 15 + }, + { + "nazwa": "obiad", + "punkty": 25 } ] \ No newline at end of file diff --git a/index.html b/index.html index 0033c30..7446d25 100644 --- a/index.html +++ b/index.html @@ -9,6 +9,8 @@

Zarządzanie Uczniami

+ +
@@ -45,8 +47,6 @@
- -
diff --git a/script.js b/script.js index 3398529..20e6431 100644 --- a/script.js +++ b/script.js @@ -42,6 +42,7 @@ document.addEventListener("DOMContentLoaded", () => { uczniowie.forEach(student => { const studentKey = `${student.imie}-${student.nazwisko}`; const details = document.createElement("details"); + details.style.position = "relative"; // Pozycjonowanie względne dla stats-section const summary = document.createElement("summary"); summary.textContent = `${student.imie} ${student.nazwisko} (${student.klasa})`; details.appendChild(summary); @@ -59,13 +60,14 @@ document.addEventListener("DOMContentLoaded", () => { const pointsInfo = document.createElement("span"); pointsInfo.className = "points-info"; pointsInfo.textContent = `(${criteria.punkty} pkt)`; + const inputWrapper = document.createElement("div"); + inputWrapper.className = "input-wrapper"; // Nowy wrapper dla inputu const input = document.createElement("input"); input.type = "number"; input.min = "0"; - const savedStudent = dane[studentKey]; - input.value = savedStudent?.[criteria.nazwa] || 0; + input.value = dane[studentKey]?.[criteria.nazwa] || 0; - // Zapisz zmiany lokalnie w pamięci + // Zapisz zmiany lokalnie w pamięci (bez natychmiastowego zapisu) input.addEventListener("input", () => { if (!dane[studentKey]) { dane[studentKey] = {}; @@ -73,58 +75,15 @@ document.addEventListener("DOMContentLoaded", () => { dane[studentKey][criteria.nazwa] = parseInt(input.value) || 0; }); + inputWrapper.appendChild(input); // Dodaj input do wrappera 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); - } - + criteriaItem.appendChild(inputWrapper); // Dodaj wrapper z inputem criteriaList.appendChild(criteriaItem); // Oblicz sumę punktów - const count = savedStudent?.[criteria.nazwa] || 0; + const count = dane[studentKey]?.[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 @@ -133,13 +92,22 @@ document.addEventListener("DOMContentLoaded", () => { // Dodaj sekcję z punktami i oceną w prawym górnym rogu const statsSection = document.createElement("div"); statsSection.className = "stats-section"; - statsSection.innerHTML = ` -
- Punkty: ${totalPoints} - Ocena: ${ocena} -
- `; - details.appendChild(statsSection); + + const statsBox = document.createElement("div"); + statsBox.className = "stats-box"; + + const totalPointsElement = document.createElement("div"); + totalPointsElement.className = "total-points"; + totalPointsElement.textContent = `Punkty: ${totalPoints}`; + statsBox.appendChild(totalPointsElement); + + const gradeElement = document.createElement("div"); + gradeElement.className = "grade"; + gradeElement.textContent = `Ocena: ${ocena}`; + statsBox.appendChild(gradeElement); + + statsSection.appendChild(statsBox); + details.appendChild(statsSection); // Dodaj stats-section do details details.appendChild(criteriaList); studentsList.appendChild(details); @@ -163,11 +131,13 @@ document.addEventListener("DOMContentLoaded", () => { const criteriaDiv = document.createElement("div"); criteriaDiv.textContent = `${criteria.nazwa}: ${criteria.punkty} pkt`; criteriaListDiv.appendChild(criteriaDiv); + // Dodaj opcję do edycji const editOption = document.createElement("option"); editOption.value = criteria.nazwa; editOption.textContent = criteria.nazwa; editCriteriaNameSelect.appendChild(editOption); + // Dodaj opcję do usunięcia const deleteOption = document.createElement("option"); deleteOption.value = criteria.nazwa; @@ -279,6 +249,7 @@ document.addEventListener("DOMContentLoaded", () => { .then(response => { if (response.ok) { alert("Dane zostały zapisane!"); + renderStudents(); // Odśwież listę uczniów } else { alert("Wystąpił błąd podczas zapisywania danych."); }