Admin group: single table, defense actions in cells; flash messages as toasts

This commit is contained in:
2026-09-28 16:23:29 +03:00
parent d3f70b0a25
commit c28fd373d6
15 changed files with 149 additions and 187 deletions

View File

@@ -65,9 +65,10 @@ function csSerialize() {
$id('grade-comments').value = JSON.stringify(out);
}
/* ---------- Индивидуальные задания (защита) ---------- */
/* ---------- Индивидуальное задание (защита) ---------- */
function openDefenseForm(btn) {
/** Открывает диалог задания; кнопка может не нести data-* (тогда это «назначить новое»). */
function openDefense(btn) {
var form = $id('defense-form');
if (!form) return;
form.reset();
@@ -76,29 +77,41 @@ function openDefenseForm(btn) {
if (student) $id('defense-student-select').value = student;
if (lab) $id('defense-lab-select').value = lab;
$id('defense-md').value = btn.getAttribute('data-md') || '';
var session = btn.getAttribute('data-session') || '';
var status = btn.getAttribute('data-status') || '';
var actions = $id('defense-actions');
if (session) {
$id('defense-issue-form').action = '/admin/defenses/' + session + '/issue-code';
$id('defense-reset-form').action = '/admin/defenses/' + session + '/reset';
if ($id('defense-action-lab')) $id('defense-action-lab').value = lab;
if ($id('defense-reset-lab')) $id('defense-reset-lab').value = lab;
$id('defense-reset-form').hidden = status !== 'ready';
if (actions) actions.hidden = false;
} else if (actions) {
actions.hidden = true;
}
var d = $id('modal-defense');
if (d && d.showModal) d.showModal();
}
function showDefenseText(btn) {
function showDefenseFromModal() {
var el = $id('defense-text-body');
if (el) el.textContent = btn.getAttribute('data-md') || '(пусто)';
if (el) el.textContent = $id('defense-md').value || '(пусто)';
var title = $id('defense-text-title');
if (title) title.textContent = (btn.getAttribute('data-student-name') || '') + ' — ' + (btn.getAttribute('data-lab-name') || '');
if (title) {
var s = $id('defense-student-select');
var l = $id('defense-lab-select');
var who = s && s.selectedOptions[0] ? s.selectedOptions[0].textContent : '';
var lab = l && l.selectedOptions[0] ? l.selectedOptions[0].textContent : '';
title.textContent = who + ' — ' + lab;
}
var d = $id('modal-defense-text');
if (d && d.showModal) d.showModal();
}
function filterDefense() {
var s = $id('defense-lab-filter');
if (!s) return;
var labId = s.value;
document.querySelectorAll('#defense-table tr[data-lab]').forEach(function (tr) {
tr.style.display = (!labId || tr.getAttribute('data-lab') === labId) ? '' : 'none';
});
}
/* ---------- Матрица: фокус на лабораторной и закрепление варианта ---------- */
/* ---------- Матрица: фокус на лабораторной ---------- */
function focusLab() {
var s = $id('lab-focus');
@@ -113,4 +126,4 @@ document.addEventListener('submit', function (ev) {
if (ev.target && ev.target.id === 'grade-form') csSerialize();
}, true);
window.addEventListener('DOMContentLoaded', function () { filterDefense(); focusLab(); });
window.addEventListener('DOMContentLoaded', function () { focusLab(); });