Добавил для групп поле численности.
В модалку на UI добавил отображение численности групп и вместимости аудиторий, проверку на доступность и вместимость.
This commit is contained in:
@@ -68,6 +68,7 @@ export async function initGroups() {
|
||||
<tr>
|
||||
<td>${g.id}</td>
|
||||
<td>${escapeHtml(g.name)}</td>
|
||||
<td>${escapeHtml(g.groupSize)}</td>
|
||||
<td><span class="badge badge-ef">${escapeHtml(g.educationFormName)}</span></td>
|
||||
<td><button class="btn-delete" data-id="${g.id}">Удалить</button></td>
|
||||
</tr>`).join('');
|
||||
@@ -77,13 +78,15 @@ export async function initGroups() {
|
||||
e.preventDefault();
|
||||
hideAlert('create-group-alert');
|
||||
const name = document.getElementById('new-group-name').value.trim();
|
||||
const groupSize = document.getElementById('new-group-size').value;
|
||||
const educationFormId = newGroupEfSelect.value;
|
||||
|
||||
if (!name) { showAlert('create-group-alert', 'Введите название группы', 'error'); return; }
|
||||
if (!groupSize) { showAlert('create-group-alert', 'Введите размер группы', 'error'); return; }
|
||||
if (!educationFormId) { showAlert('create-group-alert', 'Выберите форму обучения', 'error'); return; }
|
||||
|
||||
try {
|
||||
const data = await api.post('/api/groups', { name, educationFormId: Number(educationFormId) });
|
||||
const data = await api.post('/api/groups', { name, groupSize, educationFormId: Number(educationFormId) });
|
||||
showAlert('create-group-alert', `Группа "${escapeHtml(data.name)}" создана`, 'success');
|
||||
createGroupForm.reset();
|
||||
loadGroups();
|
||||
|
||||
@@ -79,8 +79,19 @@ export async function initUsers() {
|
||||
|
||||
// Заполнение select группами
|
||||
function renderGroupOptions() {
|
||||
if (!groups || groups.length === 0) {
|
||||
lessonClassroomSelect.innerHTML = '<option value="">Нет доступных групп</option>';
|
||||
return;
|
||||
}
|
||||
|
||||
lessonGroupSelect.innerHTML = '<option value="">Выберите группу</option>' +
|
||||
groups.map(g => `<option value="${g.id}">${escapeHtml(g.name)}</option>`).join('');
|
||||
groups.map(g => {
|
||||
let optionText = escapeHtml(g.name);
|
||||
if(g.groupSize) {
|
||||
optionText += ` (численность: ${g.groupSize} чел.)`;
|
||||
}
|
||||
return `<option value="${g.id}">${optionText}</option>`;
|
||||
}).join('');
|
||||
}
|
||||
|
||||
// Заполнение select дисциплинами
|
||||
@@ -90,10 +101,40 @@ export async function initUsers() {
|
||||
}
|
||||
|
||||
function renderClassroomsOptions() {
|
||||
if (!classrooms || classrooms.length ===0) {
|
||||
lessonClassroomSelect.innerHTML = '<option value="">Нет доступных аудиторий</option>';
|
||||
return;
|
||||
}
|
||||
|
||||
const selectedGroupId = lessonGroupSelect.value;
|
||||
const selectedGroup = groups?.find(g => g.id == selectedGroupId);
|
||||
const groupSize = selectedGroup?.groupSize || 0;
|
||||
|
||||
lessonClassroomSelect.innerHTML = '<option value="">Выберите аудиторию</option>' +
|
||||
classrooms.map(c => `<option value="${c.id}">${escapeHtml(c.name)}</option>`).join('');
|
||||
classrooms.map(c => {
|
||||
let optionText = escapeHtml(c.name);
|
||||
// Добавление текста с инфой о вместимости чел.
|
||||
if(c.capacity) {
|
||||
optionText += ` (вместимость: ${c.capacity} чел.)`;
|
||||
}
|
||||
|
||||
// Если аудитория занята, то рисуем крестик допом
|
||||
if (c.isAvailable === false) {
|
||||
optionText += ` ❌ Занята`
|
||||
// Если свободна, но меньше численности группы, отображаем воскл. знак
|
||||
} else if (selectedGroupId && groupSize > 0 && c.capacity && groupSize > c.capacity) {
|
||||
optionText += ` ⚠️ Недостаточно места`;
|
||||
}
|
||||
|
||||
|
||||
return `<option value="${c.id}">${optionText}</option>`;
|
||||
}).join('');
|
||||
}
|
||||
|
||||
lessonGroupSelect.addEventListener('change', function() {
|
||||
renderClassroomsOptions();
|
||||
});
|
||||
|
||||
// NEW: функция обновления списка времени в зависимости от дня
|
||||
function updateTimeOptions(dayValue) {
|
||||
let times = [];
|
||||
|
||||
@@ -7,6 +7,10 @@
|
||||
<label for="new-group-name">Название группы</label>
|
||||
<input type="text" id="new-group-name" placeholder="ИВТ-21-1" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="new-group-size">Численность группы</label>
|
||||
<input type="text" id="new-group-size" placeholder="20" required>
|
||||
</div>
|
||||
<div class="form-group">
|
||||
<label for="new-group-ef">Форма обучения</label>
|
||||
<select id="new-group-ef">
|
||||
@@ -35,6 +39,7 @@
|
||||
<tr>
|
||||
<th>ID</th>
|
||||
<th>Название</th>
|
||||
<th>Численность (чел.)</th>
|
||||
<th>Форма обучения</th>
|
||||
<th>Действия</th>
|
||||
</tr>
|
||||
|
||||
Reference in New Issue
Block a user