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

View File

@ -30,19 +30,24 @@ const categories = {
] ]
}; };
// Zmienna przechowująca aktualną kategorię // Zmienne globalne
let currentCategory = 'frekwencja'; let currentCategory = 'frekwencja';
let currentClass = '';
let studentsData = [];
let currentDay = 0;
const baseDate = new Date();
// Funkcja do wczytywania pliku JSON // Funkcja do wczytywania pliku JSON
async function fetchJSONFile(filePath) { async function fetchJSONFile(filePath) {
try { try {
const response = await fetch(filePath); const response = await fetch(filePath);
if (!response.ok) { if (!response.ok) {
throw new Error(`HTTP error! Status: ${response.status}`); throw new Error(`Błąd HTTP! Status: ${response.status}`);
} }
return await response.json(); return await response.json();
} catch (error) { } 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); const classes = await fetchJSONFile(classFilePath);
if (classes) { if (classes) {
console.log('Classes loaded:', classes); console.log('Załadowane klasy:', classes);
const selectClass = document.getElementById("select-class-select"); const selectClass = document.getElementById("select-class-select");
selectClass.innerHTML = ""; // Clear existing options selectClass.innerHTML = ""; // Wyczyść istniejące opcje
classes.forEach(classInfo => { classes.forEach(classInfo => {
const option = document.createElement('option'); const option = document.createElement('option');
option.value = classInfo.class; option.value = classInfo.file_path;
option.textContent = `Klasa: ${classInfo.class}`; option.textContent = `Klasa: ${classInfo.class}`;
selectClass.appendChild(option); 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() { selectClass.addEventListener('change', function() {
const selectedClass = this.value; const selectedClassFile = this.value;
console.log(`Wybrano klasę: ${selectedClass}`); console.log(`Wybrano klasę: ${selectedClassFile}`);
// Wczytaj dane uczniów dla wybranej klasy loadStudents(selectedClassFile);
// To implement based on how you store student data per class
// For example:
// loadStudents(selectedClass);
// But for now, assuming studentsData is global
}); });
// Optionally, set a default selected class // Opcjonalnie, ustaw domyślnie pierwszą klasę i załaduj jej uczniów
if (classes.length > 0) { if (classes.length > 0) {
selectClass.value = classes[0].class; selectClass.selectedIndex = 0;
// Load students for the first class const defaultClassFile = classes[0].file_path;
// loadStudents(classes[0].class); 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 // Funkcja do wczytania pliku criteria.json
async function loadCriteria() { async function loadCriteria() {
const criteriaFilePath = '/data/criteria.json'; const criteriaFilePath = '/data/criteria.json';
const criteria = await fetchJSONFile(criteriaFilePath); 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 // 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 // Funkcja do przełączania głównych zakładek
function showTab(tabName) { function showTab(tabName) {
// Ukryj wszystkie główne taby // Ukryj wszystkie główne taby
@ -182,7 +191,7 @@ function loadDayData() {
const studentId = student.name.replace(/ /g, '-'); const studentId = student.name.replace(/ /g, '-');
const behavior = student.behavior[`day${currentDay}`] || {}; const behavior = student.behavior[`day${currentDay}`] || {};
// Get criteria for the current category // Pobierz kryteria dla aktualnej kategorii
const categoryColumns = categories[currentCategory]; const categoryColumns = categories[currentCategory];
categoryColumns.forEach(column => { categoryColumns.forEach(column => {
const checkbox = document.getElementById(`${column.id}-${studentId}`); const checkbox = document.getElementById(`${column.id}-${studentId}`);
@ -199,7 +208,7 @@ function loadDayData() {
function saveDayData() { function saveDayData() {
studentsData.forEach(student => { studentsData.forEach(student => {
const studentId = student.name.replace(/ /g, '-'); const studentId = student.name.replace(/ /g, '-');
const behavior = student.behavior[`day${currentDay}`] || {}; let behavior = student.behavior[`day${currentDay}`] || {};
const categoryColumns = categories[currentCategory]; const categoryColumns = categories[currentCategory];
@ -278,35 +287,35 @@ function generateTable(category) {
const thead = table.querySelector('thead tr'); const thead = table.querySelector('thead tr');
const tbody = table.querySelector('tbody'); const tbody = table.querySelector('tbody');
// Clear existing headers and body // Wyczyść istniejące nagłówki i wiersze
thead.innerHTML = ''; thead.innerHTML = '';
tbody.innerHTML = ''; tbody.innerHTML = '';
// Add 'Imię i Nazwisko' header // Dodaj nagłówek 'Imię i Nazwisko'
const thName = document.createElement('th'); const thName = document.createElement('th');
thName.textContent = "Imię i Nazwisko"; thName.textContent = "Imię i Nazwisko";
thead.appendChild(thName); thead.appendChild(thName);
// Get columns for the category // Pobierz kolumny dla wybranej kategorii
const categoryColumns = categories[category]; const categoryColumns = categories[category];
// Add headers for category // Dodaj nagłówki dla kryteriów w kategorii
categoryColumns.forEach(column => { categoryColumns.forEach(column => {
const th = document.createElement('th'); const th = document.createElement('th');
th.textContent = column.name; th.textContent = column.name;
thead.appendChild(th); thead.appendChild(th);
}); });
// Generate rows // Generuj wiersze dla uczniów
studentsData.forEach(student => { studentsData.forEach(student => {
const row = document.createElement('tr'); const row = document.createElement('tr');
// Name cell // Komórka z imieniem i nazwiskiem
const tdName = document.createElement('td'); const tdName = document.createElement('td');
tdName.textContent = student.name; tdName.textContent = student.name;
row.appendChild(tdName); row.appendChild(tdName);
// Checkbox cells // Komórki z checkboxami dla kryteriów
categoryColumns.forEach(column => { categoryColumns.forEach(column => {
const td = document.createElement('td'); const td = document.createElement('td');
const checkbox = document.createElement('input'); const checkbox = document.createElement('input');