/
Centermant
/
web-nodejs
Обзор
Документация
Войти
/
Centermant
/
web-nodejs
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
public/lab8/task1/script.js
214 строк
8 KB
Centermant
feat(lab8.1-8.2 final)
13 ноя 2025, 02:18
13 ноя 2025, 02:18
4e12d02
Код
Авторство
О чём код?
let selectedPersonId = null; document.getElementById('projectParticipation').addEventListener('change', function() { const projectNameField = document.getElementById('projectName'); projectNameField.style.display = this.checked ? 'block' : 'none'; if (!this.checked) { projectNameField.value = ''; } }); // Функция для сохранения человека на бэкенд function savePerson() { const form = document.getElementById('registrationForm'); const formData = new FormData(form); const personData = { lastname: formData.get('lastname'), firstname: formData.get('firstname'), surname: formData.get('surname'), gender: formData.get('gender'), faculty: formData.get('faculty'), projectParticipation: formData.get('projectParticipation') === 'true', projectName: formData.get('projectName') || '' }; fetch('/api/lab8/task1/savePerson', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(personData) }) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(data => { console.log("Человек сохранён на бэкенде:", data); loadPeopleTable(); form.reset(); document.getElementById('projectName').style.display = 'none'; }) .catch(error => { console.error('Error saving person:', error); alert(`Ошибка при сохранении: ${error.message}`); }); } // Функция для загрузки и отображения таблицы с данными с бэкенда function loadPeopleTable() { fetch('/api/lab8/task1/getAll') .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(people => { const tableBody = document.getElementById('peopleTableBody'); tableBody.innerHTML = ''; people.forEach(person => { const row = document.createElement('tr'); row.setAttribute('data-id', person.id); const participationText = person.projectParticipation ? 'Да' : 'Нет'; row.innerHTML = ` <td><button type="button" class="select-btn" onclick="selectPerson(${person.id})">✓</button></td> <td>${person.lastname}</td> <td>${person.firstname}</td> <td>${person.surname}</td> <td>${person.gender}</td> <td>${person.faculty}</td> <td>${participationText}</td> <td>${person.projectName}</td> <td><button type="button" class="delete-btn" onclick="deletePerson(${person.id})">×</button></td> `; tableBody.appendChild(row); }); }) .catch(error => { console.error('Error loading people:', error); document.getElementById('peopleTableBody').innerHTML = '<tr><td colspan="9">Ошибка загрузки данных.</td></tr>'; }); } // Функция для выбора строки таблицы function selectPerson(id) { if (selectedPersonId !== null) { const prevRow = document.querySelector(`tr[data-id="${selectedPersonId}"]`); if (prevRow) prevRow.classList.remove('selected'); } const row = document.querySelector(`tr[data-id="${id}"]`); if (row) { row.classList.add('selected'); } selectedPersonId = id; console.log("Выбран человек с ID:", id); } function deletePerson(id) { fetch(`/api/lab8/task1/delete/${id}`, { method: 'DELETE' }) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(data => { console.log("Человек с ID", id, "удалён с бэкенда."); loadPeopleTable(); if (selectedPersonId === id) { selectedPersonId = null; } }) .catch(error => { console.error('Error deleting person:', error); alert(`Ошибка при удалении: ${error.message}`); }); } // Функция для получения и отображения инициалов function makeInitials() { if (selectedPersonId === null) { alert('Пожалуйста, выберите человека из таблицы.'); return; } fetch(`/api/lab8/task1/getById/${selectedPersonId}`) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(person => { const fullname = `${person.lastname} ${person.firstname} ${person.surname}`; const url = `/api/lab8/task1/makeInitials?fullname=${encodeURIComponent(fullname)}`; return fetch(url); }) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(data => { const resultDiv = document.getElementById('initialsResult'); const formattedInitials = `${data.lastname} ${data.firstnameLetter}${data.surnameLetter}`; resultDiv.innerText = `Инициалы: ${formattedInitials}`; resultDiv.style.display = 'block'; document.getElementById('statusResult').style.display = 'none'; }) .catch(error => { console.error('Error fetching initials:', error); document.getElementById('initialsResult').innerText = `Ошибка: ${error.message}`; document.getElementById('initialsResult').style.display = 'block'; }); } // Функция для получения и отображения статуса проекта function makeProjectStatus() { if (selectedPersonId === null) { alert('Пожалуйста, выберите человека из таблицы.'); return; } fetch(`/api/lab8/task1/getById/${selectedPersonId}`) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(person => { const fullname = `${person.lastname} ${person.firstname} ${person.surname}`; const participationStr = person.projectParticipation ? 'true' : 'false'; const url = `/api/lab8/task1/makeProjectStatus?fullname=${encodeURIComponent(fullname)}&projectParticipation=${participationStr}`; return fetch(url); }) .then(response => { if (!response.ok) { return response.json().then(err => { throw new Error(err.error || 'Network response was not ok'); }); } return response.json(); }) .then(data => { const resultDiv = document.getElementById('statusResult'); const formattedStatus = `${data.lastname} ${data.firstnameLetter}${data.surnameLetter} ${data.projectParticipant}`; resultDiv.innerText = `Статус проекта: ${formattedStatus}`; resultDiv.style.display = 'block'; document.getElementById('initialsResult').style.display = 'none'; }) .catch(error => { console.error('Error fetching project status:', error); document.getElementById('statusResult').innerText = `Ошибка: ${error.message}`; document.getElementById('statusResult').style.display = 'block'; }); } // Загружаем таблицу при загрузке страницы document.addEventListener('DOMContentLoaded', function() { loadPeopleTable(); });