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('');
}
}