grusers.js 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. /**
  2. * ЭЛЕКТРОННЫЙ ЖУРНАЛ «ШКАЛА»: РЕДАКТИРОВАНИE СОСТАВА МЕЖКЛАССНЫХ ГРУПП
  3. * Copyright © 2020, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // Массив групп данного учителя: [["23Б", "Химия"], ...]
  7. let grusList = [];
  8. // Показ выбранной учителем группы
  9. const grusShow = async grName => {
  10. // Очищаем блок добавления нового ученика
  11. dqs("#grusDatalist").innerHTML = '';
  12. dqs("#grusDatalist").style.display = "none";
  13. dqs("#grusFindPup").value = '';
  14. // Получаем список группы и публикуем с иконками удаления учащихся
  15. let apiResp = await apireq("interGroupGet", grName);
  16. if (apiResp == "none") {info(1, "Ошибка на сервере"); return;}
  17. let pupArr = JSON.parse(apiResp);
  18. let listInner = pupArr.length ?
  19. `<p>Список группы ${grName}</p>` :
  20. `<p>В группе ${grName} нет учащихся</p>`;
  21. let i=1;
  22. for (let pup of pupArr) {
  23. listInner += `<div>
  24. <span onClick="grusPupDel('${pup[2]}')" title="Удалить">&#10060;</span>
  25. <span>${i}.&nbsp;</span>${pup[0]} (${pup[1]})</div>`;
  26. i++;
  27. }
  28. dqs("#grusPupList").innerHTML = listInner;
  29. }
  30. // Удаление ученика из группы
  31. const grusPupDel = async pupLgn => {
  32. let grName = dqs("#grusSelGr").value;
  33. if (!confirm("Вы уверены?")) return;
  34. let apiResp = await apireq("interGroupPup", ["del", grName, pupLgn]);
  35. if (apiResp == "none") {
  36. info(1, "Ошибка на сервере.<br>Учащийся не удален");
  37. return;
  38. }
  39. grusShow(grName);
  40. }
  41. // Добавление ученика в группу
  42. const grusPupAdd = async pupLgn => {
  43. let grName = dqs("#grusSelGr").value;
  44. dqs("#grusDatalist").innerHTML = '';
  45. dqs("#grusDatalist").style.display = "none";
  46. dqs("#grusFindPup").value = '';
  47. let apiResp = await apireq("interGroupPup", ["add", grName, pupLgn]);
  48. if (apiResp == "none") {
  49. info(1, "Ошибка на сервере.<br>Учащийся не добавлен");
  50. return;
  51. }
  52. grusShow(grName);
  53. dqs("#grusFindPup").focus();
  54. }
  55. // Подгрузка datalist в блоке выбора ученика для добавления
  56. const grusDataGet = async fragm => {
  57. dqs("#grusDatalist").innerHTML = '';
  58. dqs("#grusDatalist").style.display = "none";
  59. if (!dqs("#grusSelGr").value) {info(1, "Сначала выберите группу"); return;}
  60. if (fragm.length < 3) return;
  61. fragm = fragm.trim();
  62. let dtListInner = '';
  63. let apiResp = await apireq("usFind", ["Учащийся", '0', fragm]);
  64. if (apiResp != "none") {
  65. let deti = JSON.parse(apiResp);
  66. deti.filter(p => !p.block).map(p => {
  67. dtListInner += `<button type="button" `
  68. + `onclick="grusPupAdd('${p.login}')">`
  69. + `${p.famil} ${p.name} (${p.unit})</button>`;
  70. });
  71. if (dtListInner) {
  72. dqs("#grusDatalist").innerHTML = dtListInner;
  73. dqs("#grusDatalist").style.display = "block";
  74. }
  75. }
  76. }
  77. // Формирование контента странички
  78. createSection("grusers", `
  79. <h3>Редактирование состава групп внеурочной деятельности</h3>
  80. <select id="grusSelGr" onChange="grusShow(this.value)"></select>
  81. <div id="grusPupList"></div>
  82. <h3>Добавить учащегося в группу</h3>
  83. <input type="text" id="grusFindPup" placeholder="Начните вводить фамилию"
  84. onKeyUp="grusDataGet(this.value)">
  85. <div id="grusDatalist"></div>
  86. `);
  87. // Динамически подгружаем список групп данного учителя в массив grusList
  88. // и публикуем его на страничке (имя метода = имени пункта меню!)
  89. // uLogin из замыкания (определен в login.js)
  90. getContent.grusers = async () => {
  91. let selInner = "<option value=''>== ВЫБЕРИТЕ ГРУППУ ==</option>";
  92. let apiResp = await apireq("interGroupList");
  93. grusList = JSON.parse(apiResp)
  94. . filter(x => x[2] == uLogin).map(x => [x[0], x[1]]);
  95. if (grusList.length) {
  96. grusList.sort((a, b) => a[0].localeCompare(b[0], "ru"));
  97. for (let g of grusList) {
  98. let grTitle = g[1].length > 30 ? g[1].substr(0, 30) + "..." : g[1];
  99. selInner += `<option value="${g[0]}">${g[0]}: ${grTitle}</option>`;
  100. }
  101. }
  102. else selInner =
  103. "<option value=''>У вас нет групп внеурочной деятельности</option>";
  104. dqs("#grusSelGr").innerHTML = selInner;
  105. }