This commit is contained in:
rzodkiew 2025-02-19 12:18:08 +01:00
parent 85b9141087
commit 9399b55714
4 changed files with 35 additions and 60 deletions

View File

@ -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": {

View File

@ -18,5 +18,9 @@
{
"nazwa": "konkursy",
"punkty": 15
},
{
"nazwa": "obiad",
"punkty": 25
}
]

View File

@ -9,6 +9,8 @@
<body>
<div class="container">
<h1>Zarządzanie Uczniami</h1>
<!-- Przycisk "Zapisz dane" -->
<button id="save-button">Zapisz dane</button>
<!-- Zakładki -->
<div class="tabs">
<button id="students-tab">Uczniowie</button>
@ -45,8 +47,6 @@
<button type="submit">Usuń</button>
</form>
</div>
<!-- Przycisk do zapisywania danych -->
<button id="save-button">Zapisz dane</button>
</div>
<script src="script.js"></script>
</body>

View File

@ -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 = `
<div class="stats-box">
<span class="total-points">Punkty: ${totalPoints}</span>
<span class="grade">Ocena: ${ocena}</span>
</div>
`;
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.");
}