commit
This commit is contained in:
parent
a211321c84
commit
e0ba11b0e9
14
index.html
14
index.html
|
@ -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>
|
||||||
|
|
117
js/script.js
117
js/script.js
|
@ -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');
|
||||||
|
|
Loading…
Reference in New Issue