123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- /**
- * ЭЛЕКТРОННЫЙ ЖУРНАЛ «ШКАЛА»: РАЗРЕШ АДМИНИСТРАЦИИ НА ПРОПУСК УРОКОВ
- * Copyright © 2024, А.М.Гольдин. Modified BSD License
- */
- "use strict";
- // Добавление разрешения
- const permitAdd = async () => {
- let dtStart = dqs("#permitStart").value,
- dtFin = dqs("#permitFinish").value,
- dtDoc = dqs("#permitDocDate").value + " № "
- + dqs("#permitDocNum").value.trim(),
- clName = dqs("#permitSelClass").value;
- let pupLogins = [];
- document.querySelectorAll("#permitTable td:nth-child(2)").forEach(e => {
- if (e.innerHTML) pupLogins.push(e.id.replace("check--", ''));
- });
- let pupVal = pupLogins.length;
- if (!pupVal) {info (1, "Не выбраны учащиеся!"); return;}
-
- let permResp = await apireq(
- "permitAdd",
- [dtStart, dtFin, dtDoc, clName, pupLogins]
- );
- if (permResp != "success") {
- info(1, "Ошибка на сервере.<br>Разрешение не добавлено. " + permResp);
- return;
- }
- info (0, `Разрешение (${pupVal} учащ.)<br>успешно добавлено.`);
- permUnselAll();
- dqs("#permChAll").innerHTML = "Отметить всех";
- }
- // Отметить одного учащегося в таблице / снять отметку
- const permCheck = tdElem => {
- tdElem.innerHTML = tdElem.innerHTML ? '' : '■';
- }
- // Отметить в таблице всех учащихся
- const permSelAll = () => {
- document.querySelectorAll("#permitTable td:nth-child(2)").forEach(e => {
- e.innerHTML = '■';
- })
- }
- // Снять отметку в таблице со всех учащихся
- const permUnselAll = () => {
- document.querySelectorAll("#permitTable td:nth-child(2)").forEach(e => {
- e.innerHTML = '';
- })
- }
- // Формирование таблицы со списком детей и полями типа checkbox
- const permitPupListShow = async () => {
- let clName = dqs("#permitSelClass").value,
- permitResp, pupLgnArr, pupFioArr;
- // Получаем список учащихся
- permitResp = await apireq("gradesGet", [clName, '', "a"]);
- if (permitResp == "none") {
- info(1, "Не могу получить список учащихся");
- return;
- }
- let permitObj = JSON.parse(permitResp);
- // Формируем массивы фио детей и их логинов
- pupLgnArr = permitObj.puList ? permitObj.puList : [];
- pupFioArr = permitObj.pnList;
-
- // Формируем содержимое таблицы выбора учащихся
- if (pupLgnArr.length) {
- let tblPupilInner = '';
- for (let i=0; i<pupLgnArr.length; i++) tblPupilInner +=
- `<tr><td>${pupFioArr[i]}</td>` +
- `<td id="check--${pupLgnArr[i]}" onclick="permCheck(this)"></td></tr>`;
- dqs("#permitTable").innerHTML = tblPupilInner;
- dqs("#permChAll").innerHTML = "Отметить всех";
- }
- else dqs("#permitTable").innerHTML =
- "<tr><td colspan='2'>В этом классе нет учащихся!</td></tr>";
- }
- // Формирование контента страницы
- createSection("permit", `
- <div id="permitAddForm">
- <h3>Разрешение на пропуск занятий</h3>
- С <input type="date" id="permitStart">
- <nobr>по <input type="date" id="permitFinish"></nobr><br>
- <b>Документ:</b> дата <input type="date" id="permitDocDate">
- <nobr>номер <input type="text" id="permitDocNum" value="0"></nobr><br>
- <b>Выберите класс:</b>
- <select id="permitSelClass" onChange="permitPupListShow()"></select>
- <button type="button" id="permChAll" onclick="
- if (this.innerHTML == 'Отметить всех') {
- permSelAll (); this.innerHTML = 'Снять все отметки';
- }
- else {
- permUnselAll (); this.innerHTML = 'Отметить всех';
- }
- ">Отметить всех</button>
- <table id="permitTable"></table>
- <p><b>Будьте внимательны!</b><br>
- Отменить разрешение сможет только классный руководитель.</p>
- <button type="button" onClick="permitAdd()">Предоставить разрешение</button>
- </div>
- `);
- // Динамически подгружаем контент страницы (имя метода = имени пункта меню!)
- getContent.permit = async () => {
- // Сегодняшняя дата во все поля
- let now = (new Date()).toISOString().split('T')[0];
- dqs("#permitStart").value = now;
- dqs("#permitFinish").value = now;
- dqs("#permitDocDate").value = now;
-
- // Заполняем select выбора класса
- let selClassInner = '';
- let apiResp = await apireq("classesList");
- if (apiResp == "none") {info(1, "Не могу получить данные"); return;}
- let permitClasses = classSort(JSON.parse(apiResp));
- for (let cl of permitClasses)
- selClassInner += `<option>${cl}</option>`;
-
- dqs("#permitSelClass").innerHTML = selClassInner;
- if (selClassInner) {
- dqs("#permitAddForm").style.display = "block";
- permitPupListShow(); // показываем таблицу с учащимися выбранного класса
- }
- else {
- dqs("#permitAddForm").style.display = "none";
- info(1, "Классов пока нет.");
- }
- };
|