50 lines
2.2 KiB
JavaScript
50 lines
2.2 KiB
JavaScript
import { api } from '../api.js';
|
||
import { escapeHtml } from '../utils.js';
|
||
|
||
export async function initSchedule() {
|
||
const tbody = document.getElementById('schedule-tbody');
|
||
|
||
async function loadSchedule() {
|
||
try {
|
||
// Предполагается, что на сервере есть endpoint GET /api/lessons,
|
||
// возвращающий массив объектов с полями:
|
||
// id, teacher (объект с username), group (объект с name),
|
||
// subject (объект с name), day, week, time.
|
||
const lessons = await api.get('/api/users/lessons');
|
||
renderSchedule(lessons);
|
||
} catch (e) {
|
||
tbody.innerHTML = `<tr><td colspan="7" class="loading-row">Ошибка загрузки: ${escapeHtml(e.message)}</td></tr>`;
|
||
}
|
||
}
|
||
|
||
function renderSchedule(lessons) {
|
||
if (!lessons || !lessons.length) {
|
||
tbody.innerHTML = '<tr><td colspan="7" class="loading-row">Нет занятий</td></tr>';
|
||
return;
|
||
}
|
||
|
||
tbody.innerHTML = lessons.map(lesson => {
|
||
// Извлекаем имена из вложенных объектов или используем запасные поля
|
||
const teacherName = lesson.teacher?.username || lesson.teacherName || '—';
|
||
const groupName = lesson.group?.name || lesson.groupName || '—';
|
||
const educationForm = lesson.educationForm?.name || lesson.educationFormName || '-';
|
||
const subjectName = lesson.subject?.name || lesson.subjectName || '—';
|
||
const day = lesson.day || '—';
|
||
const week = lesson.week || '—';
|
||
const time = lesson.time || '—';
|
||
|
||
return `<tr>
|
||
<td>${escapeHtml(lesson.id)}</td>
|
||
<td>${escapeHtml(teacherName)}</td>
|
||
<td>${escapeHtml(groupName)}</td>
|
||
<td>${escapeHtml(educationForm)}</td>
|
||
<td>${escapeHtml(subjectName)}</td>
|
||
<td>${escapeHtml(day)}</td>
|
||
<td>${escapeHtml(week)}</td>
|
||
<td>${escapeHtml(time)}</td>
|
||
</tr>`;
|
||
}).join('');
|
||
}
|
||
|
||
await loadSchedule();
|
||
} |