This commit is contained in:
konradm 2024-10-17 14:15:45 +02:00
parent a211321c84
commit e0ba11b0e9
2 changed files with 73 additions and 66 deletions

View File

@ -2,7 +2,6 @@
<html lang="pl">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ocena Zachowania</title>
<link rel="stylesheet" href="css/style.css">
</head>
@ -114,6 +113,11 @@
<div class="select-class" id="select-class-container">
<p>Wybierz klasę:</p>
<select class="select-class" id="select-class-select">
<!-- Opcje będą ładowane dynamicznie -->
</select>
</div>
<div class="category-buttons">
<button data-category="frekwencja" onclick="showInnerTab('frekwencja')">Frekwencja</button>
<button data-category="olimpiady" onclick="showInnerTab('olimpiady')">Olimpiady</button>
@ -121,14 +125,8 @@
<button data-category="reprezentacja" onclick="showInnerTab('reprezentacja')">Reprezentacja Szkoły</button>
<button data-category="aktywnosc" onclick="showInnerTab('aktywnosc')">Aktywność</button>
</div>
<select class="select-class" id="select-class-select">
<option value="">Klasa 1</option>
<option value="">Klasa 2</option>
<option value="">Klasa 3</option>
</select>
</div>
<!-- Przykładowa tabela uczniów -->
<!-- Tabela uczniów -->
<table id="student-table">
<thead>
<tr>

View File

@ -30,19 +30,24 @@ const categories = {
]
};
// Zmienna przechowująca aktualną kategorię
// Zmienne globalne
let currentCategory = 'frekwencja';
let currentClass = '';
let studentsData = [];
let currentDay = 0;
const baseDate = new Date();
// Funkcja do wczytywania pliku JSON
async function fetchJSONFile(filePath) {
try {
const response = await fetch(filePath);
if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`);
throw new Error(`Błąd HTTP! Status: ${response.status}`);
}
return await response.json();
} catch (error) {
console.error("Error fetching JSON file:", error);
console.error("Błąd podczas pobierania pliku JSON:", error);
return null;
}
}
@ -52,73 +57,77 @@ async function loadClasses() {
const classes = await fetchJSONFile(classFilePath);
if (classes) {
console.log('Classes loaded:', classes);
console.log('Załadowane klasy:', classes);
const selectClass = document.getElementById("select-class-select");
selectClass.innerHTML = ""; // Clear existing options
selectClass.innerHTML = ""; // Wyczyść istniejące opcje
classes.forEach(classInfo => {
const option = document.createElement('option');
option.value = classInfo.class;
option.value = classInfo.file_path;
option.textContent = `Klasa: ${classInfo.class}`;
selectClass.appendChild(option);
console.log("DODANO KLASE ", classInfo.class, " DO SELECT");
console.log("Dodano klasę ", classInfo.class, " do SELECT");
});
// Add event listener for class selection
// Dodaj nasłuchiwacz zdarzeń na zmianę wyboru klasy
selectClass.addEventListener('change', function() {
const selectedClass = this.value;
console.log(`Wybrano klasę: ${selectedClass}`);
// Wczytaj dane uczniów dla wybranej klasy
// To implement based on how you store student data per class
// For example:
// loadStudents(selectedClass);
// But for now, assuming studentsData is global
const selectedClassFile = this.value;
console.log(`Wybrano klasę: ${selectedClassFile}`);
loadStudents(selectedClassFile);
});
// Optionally, set a default selected class
// Opcjonalnie, ustaw domyślnie pierwszą klasę i załaduj jej uczniów
if (classes.length > 0) {
selectClass.value = classes[0].class;
// Load students for the first class
// loadStudents(classes[0].class);
selectClass.selectedIndex = 0;
const defaultClassFile = classes[0].file_path;
loadStudents(defaultClassFile);
}
}
}
// Funkcja do wczytania danych uczniów dla wybranej klasy
async function loadStudents(classFilePath) {
if (!classFilePath) {
console.warn("Nie wybrano żadnej klasy.");
return;
}
const studentsFilePath = `/data/${classFilePath}`;
const data = await fetchJSONFile(studentsFilePath);
if (data && Array.isArray(data.students)) {
console.log(`Uczniowie załadowani z pliku ${classFilePath}:`, data);
studentsData = data.students; // Aktualizuj globalną tablicę uczniów
// Inicjalizacja 'behavior' dla każdego ucznia, jeśli jest niezdefiniowany
studentsData.forEach(student => {
if (!student.behavior) {
student.behavior = {};
}
});
currentClass = classFilePath; // Ustaw aktualną klasę
generateTable(currentCategory); // Regeneruj tabelę z aktualną kategorią
} else {
console.error("Błąd: Nie udało się załadować danych uczniów lub dane są niepoprawne.");
studentsData = []; // Jeśli nie udało się załadować danych, wyczyść tablicę uczniów
currentClass = '';
generateTable(currentCategory); // Regeneruj pustą tabelę
}
}
// Funkcja do wczytania pliku criteria.json
async function loadCriteria() {
const criteriaFilePath = '/data/criteria.json';
const criteria = await fetchJSONFile(criteriaFilePath);
console.log("Criteria loaded:", criteria);
console.log("Załadowane kryteria:", criteria);
// Implementacja dalszego przetwarzania kryteriów, jeśli jest potrzebna
}
// Dane uczniów (przykładowe, powinny być ładowane z plików JSON)
let studentsData = [
{ name: "Jan Kowalski", behavior: {} },
{ name: "Anna Nowak", behavior: {} },
{ name: "Piotr Wiśniewski", behavior: {} },
{ name: "Katarzyna Zielińska", behavior: {} }
];
// To store student data per class, you might need a data structure like:
// let allStudentsData = {
// "1A": [...],
// "2B": [...],
// ...
// };
// let allStudentsData = {};
// function loadStudents(className) {
// // Load students data for the class from allStudentsData[className]
// // And set studentsData accordingly
// }
let currentDay = 0;
const baseDate = new Date();
// Funkcja do przełączania głównych zakładek
function showTab(tabName) {
// Ukryj wszystkie główne taby
@ -182,7 +191,7 @@ function loadDayData() {
const studentId = student.name.replace(/ /g, '-');
const behavior = student.behavior[`day${currentDay}`] || {};
// Get criteria for the current category
// Pobierz kryteria dla aktualnej kategorii
const categoryColumns = categories[currentCategory];
categoryColumns.forEach(column => {
const checkbox = document.getElementById(`${column.id}-${studentId}`);
@ -199,7 +208,7 @@ function loadDayData() {
function saveDayData() {
studentsData.forEach(student => {
const studentId = student.name.replace(/ /g, '-');
const behavior = student.behavior[`day${currentDay}`] || {};
let behavior = student.behavior[`day${currentDay}`] || {};
const categoryColumns = categories[currentCategory];
@ -278,35 +287,35 @@ function generateTable(category) {
const thead = table.querySelector('thead tr');
const tbody = table.querySelector('tbody');
// Clear existing headers and body
// Wyczyść istniejące nagłówki i wiersze
thead.innerHTML = '';
tbody.innerHTML = '';
// Add 'Imię i Nazwisko' header
// Dodaj nagłówek 'Imię i Nazwisko'
const thName = document.createElement('th');
thName.textContent = "Imię i Nazwisko";
thead.appendChild(thName);
// Get columns for the category
// Pobierz kolumny dla wybranej kategorii
const categoryColumns = categories[category];
// Add headers for category
// Dodaj nagłówki dla kryteriów w kategorii
categoryColumns.forEach(column => {
const th = document.createElement('th');
th.textContent = column.name;
thead.appendChild(th);
});
// Generate rows
// Generuj wiersze dla uczniów
studentsData.forEach(student => {
const row = document.createElement('tr');
// Name cell
// Komórka z imieniem i nazwiskiem
const tdName = document.createElement('td');
tdName.textContent = student.name;
row.appendChild(tdName);
// Checkbox cells
// Komórki z checkboxami dla kryteriów
categoryColumns.forEach(column => {
const td = document.createElement('td');
const checkbox = document.createElement('input');