Создание вкладки "Расписание занятий"
This commit is contained in:
@@ -86,6 +86,15 @@
|
|||||||
</svg>
|
</svg>
|
||||||
Дисциплины
|
Дисциплины
|
||||||
</a>
|
</a>
|
||||||
|
<a href="#" class="nav-item" data-tab="schedule">
|
||||||
|
<svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<rect x="3" y="4" width="18" height="18" rx="2" ry="2"></rect>
|
||||||
|
<line x1="16" y1="2" x2="16" y2="6"></line>
|
||||||
|
<line x1="8" y1="2" x2="8" y2="6"></line>
|
||||||
|
<line x1="3" y1="10" x2="21" y2="10"></line>
|
||||||
|
</svg>
|
||||||
|
Расписание занятий
|
||||||
|
</a>
|
||||||
</nav>
|
</nav>
|
||||||
<div class="sidebar-footer">
|
<div class="sidebar-footer">
|
||||||
<button class="btn-logout" id="btn-logout">
|
<button class="btn-logout" id="btn-logout">
|
||||||
|
|||||||
@@ -7,6 +7,7 @@ import { initEduForms } from './views/edu-forms.js';
|
|||||||
import { initEquipments } from './views/equipments.js';
|
import { initEquipments } from './views/equipments.js';
|
||||||
import { initClassrooms } from './views/classrooms.js';
|
import { initClassrooms } from './views/classrooms.js';
|
||||||
import { initSubjects } from './views/subjects.js';
|
import { initSubjects } from './views/subjects.js';
|
||||||
|
import {initSchedule} from "./views/schedule.js";
|
||||||
|
|
||||||
// Configuration
|
// Configuration
|
||||||
const ROUTES = {
|
const ROUTES = {
|
||||||
@@ -16,6 +17,8 @@ const ROUTES = {
|
|||||||
equipments: { title: 'Оборудование', file: 'views/equipments.html', init: initEquipments },
|
equipments: { title: 'Оборудование', file: 'views/equipments.html', init: initEquipments },
|
||||||
classrooms: { title: 'Аудитории', file: 'views/classrooms.html', init: initClassrooms },
|
classrooms: { title: 'Аудитории', file: 'views/classrooms.html', init: initClassrooms },
|
||||||
subjects: { title: 'Дисциплины и преподаватели', file: 'views/subjects.html', init: initSubjects },
|
subjects: { title: 'Дисциплины и преподаватели', file: 'views/subjects.html', init: initSubjects },
|
||||||
|
// Новая вкладка
|
||||||
|
schedule: { title: 'Расписание занятий', file: 'views/schedule.html', init: initSchedule },
|
||||||
};
|
};
|
||||||
|
|
||||||
let currentTab = null;
|
let currentTab = null;
|
||||||
|
|||||||
48
frontend/admin/js/views/schedule.js
Normal file
48
frontend/admin/js/views/schedule.js
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
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 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(subjectName)}</td>
|
||||||
|
<td>${escapeHtml(day)}</td>
|
||||||
|
<td>${escapeHtml(week)}</td>
|
||||||
|
<td>${escapeHtml(time)}</td>
|
||||||
|
</tr>`;
|
||||||
|
}).join('');
|
||||||
|
}
|
||||||
|
|
||||||
|
await loadSchedule();
|
||||||
|
}
|
||||||
23
frontend/admin/views/schedule.html
Normal file
23
frontend/admin/views/schedule.html
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
<div class="card">
|
||||||
|
<h2>Расписание занятий</h2>
|
||||||
|
<div class="table-wrap">
|
||||||
|
<table id="schedule-table">
|
||||||
|
<thead>
|
||||||
|
<tr>
|
||||||
|
<th>ID</th>
|
||||||
|
<th>Преподаватель</th>
|
||||||
|
<th>Группа</th>
|
||||||
|
<th>Дисциплина</th>
|
||||||
|
<th>День недели</th>
|
||||||
|
<th>Неделя</th>
|
||||||
|
<th>Время</th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody id="schedule-tbody">
|
||||||
|
<tr>
|
||||||
|
<td colspan="7" class="loading-row">Загрузка...</td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
Reference in New Issue
Block a user