import { api } from '../api.js'; import { escapeHtml, showAlert, hideAlert } from '../utils.js'; export async function initDepartment() { const form = document.getElementById('department-schedule-form'); const departmentSelect = document.getElementById('filter-department'); const container = document.getElementById('schedule-blocks-container'); let departments = []; // Загрузка кафедр try { departments = await api.get('/api/departments'); departmentSelect.innerHTML = '' + departments.map(d => ``).join(''); } catch (e) { departmentSelect.innerHTML = ''; } form.addEventListener('submit', async (e) => { e.preventDefault(); hideAlert('schedule-form-alert'); const departmentId = departmentSelect.value; const period = document.getElementById('filter-period').value; const semesterType = document.querySelector('input[name="semesterType"]:checked')?.value; if (!departmentId || !period || !semesterType) { showAlert('schedule-form-alert', 'Заполните все поля', 'error'); return; } const deptName = departmentSelect.options[departmentSelect.selectedIndex].text; try { const params = new URLSearchParams({ departmentId, semesterType, period }); // Запрос на бэк const data = await api.get(`/api/department/schedule?${params.toString()}`); const semesterName = semesterType === 'spring' ? 'весенний' : (semesterType === 'autumn' ? 'осенний' : semesterType); const periodName = period.replace('-', '/'); // Display 2024-2025 as 2024/2025 renderScheduleBlock(deptName, semesterName, periodName, data); form.reset(); } catch (err) { showAlert('schedule-form-alert', err.message || 'Ошибка загрузки данных', 'error'); } }); function renderScheduleBlock(deptName, semester, period, schedule) { const details = document.createElement('details'); details.className = 'table-item'; details.open = true; // Сразу открываем новый блок details.innerHTML = `
Данные к составлению расписания Кафедра: ${escapeHtml(deptName)} Семестр: ${escapeHtml(semester)} Уч. год: ${escapeHtml(period)}
${schedule ? schedule.length : 0} записей
${renderRows(schedule)}
Специальность Курс/семестр Группа Дисциплина Вид занятий Часов в неделю Деление на подгруппы Преподаватель
`; container.prepend(details); } function renderRows(schedule) { if (!schedule || schedule.length === 0) { return 'Нет данных'; } return schedule.map(r => ` ${escapeHtml(r.specialityCode || '-')} ${(() => { const course = r.groupCourse || '-'; const semester = r.semester || '-'; if (course === '-' && semester === '-') return '-'; return `${course} | ${semester}`; })()} ${escapeHtml(r.groupName || '-')} ${escapeHtml(r.subjectName || '-')} ${escapeHtml(r.lessonType || '-')} ${escapeHtml(r.numberOfHours || '-')} ${r.division === true ? '✓' : (r.division === false ? '' : escapeHtml(''))} ${(() => { const jobTitle = r.teacherJobTitle || '-'; const teacherName = r.teacherName || '-'; if (jobTitle === '-' && teacherName === '-') return '-'; return `${jobTitle}, ${teacherName}`; })()} `).join(''); } }