vdtut.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. /**
  2. * ЭЛЕКТРОННЫЙ ЖУРНАЛ «ШКАЛА»: ВНЕУРОЧНАЯ ДЕЯТЕЛЬНОСТЬ (ИНТЕРФЕЙС КЛ. РУК.)
  3. * Copyright © 2021, А.М.Гольдин. Modified BSD License
  4. */
  5. "use strict";
  6. // Объект со списком всех групп внеур. деятельности с указанием педагогов
  7. // vtGroups = {"23Б": ["Жуковедение", "Пупкин В. И."], ...}
  8. // (загружается в конце скрипта)
  9. let vtGroups = {};
  10. // Собственно показ данных одного ученика
  11. // В аргументе приходит что-то вроде "pupkin^Пупкин Василий"
  12. const vtShow = async pupil => {
  13. dqs("#vtData").innerHTML = "<img src='static/preloader.gif'>";
  14. // Получаем данные ученика с помощью API в объект
  15. // vtObj = {"23Б": {d628: "нн5", d831b: "4", ...} ...}
  16. let apiResp = await apireq("electGet", [pupil.split('^')[0]]);
  17. if (apiResp == "none") {
  18. dqs("#vtData").innerHTML = "<p>Не удалось получить данные</p>";
  19. return;
  20. }
  21. let vtObj = JSON.parse(apiResp);
  22. // Публикуем
  23. if (!Object.keys(vtObj).length) {
  24. dqs("#vtData").innerHTML =
  25. "<h3>Этим учащимся курсы внеурочной деятельности не изучаются</h3>";
  26. return;
  27. }
  28. let vtData = "<table>";
  29. for (let gr of Object.keys(vtObj)) {
  30. let group = vtGroups[gr][0],
  31. ped = "<nobr>" + vtGroups[gr][1] + "</nobr>",
  32. gradesObj = vtObj[gr],
  33. grades = '';
  34. if (!Object.keys(gradesObj).length) grades = "Отметок нет";
  35. else for (let dt of Object.keys(gradesObj)) {
  36. let grd = gradesObj[dt].replace(/999/g, "зач");
  37. if (dt.length > 4 && grd == "0") grd = "н/а";
  38. dt = dt.length > 4 ?
  39. `<b>${DTSIT[dt][0]}</b>` :
  40. `<em>${dateConv(dt)}</em>`;
  41. grades += `<span>${dt}: ${grd}</span>`;
  42. }
  43. vtData += `<tr><td>${group}</td><td>${ped}</td><td>${grades}</td></tr>`;
  44. }
  45. dqs("#vtData").innerHTML = vtData + "</table>";
  46. }
  47. // Формирование списка детей в селекте выбора учащегося
  48. const vtPupListShow = async () => {
  49. dqs("#vtData").innerHTML = '';
  50. let clName = dqs("#vtSelClass").value;
  51. let apiResp = await apireq("pupilsList", [clName]);
  52. if (apiResp != "none") {
  53. let vtClList = JSON.parse(apiResp);
  54. let selPupilInner = `<option value=''>== Выберите учащегося ==</option>`;
  55. for (let pup of vtClList) {
  56. let imya = pup[0].split(' ')[1] || 'N';
  57. let famI = pup[0].split(' ')[0] + ` ${imya[0]}.`;
  58. selPupilInner +=
  59. `<option value="${pup[1]}^${pup[0]}">${famI}</option>`;
  60. }
  61. dqs("#vtSelPupil").innerHTML = selPupilInner;
  62. }
  63. else {
  64. dqs("#vtSelPupil").innerHTML = '';
  65. dqs("#vtData").innerHTML = "<h3>В этом классе нет учащихся</h3>";
  66. }
  67. }
  68. // Формирование контента страницы
  69. createSection("vdtut", `
  70. <select id="vtSelClass" onChange="vtPupListShow()"></select>
  71. <select id="vtSelPupil" onChange="vtShow(this.value)"></select>
  72. <div id="vtData" style="margin-top:20px"></div>
  73. `);
  74. // Динамически подгружаем контент страницы (имя метода = имени пункта меню!)
  75. getContent.vdtut = async () => {
  76. // Получаем список всех учителей {"pupkin": "Пупкин В. И.", ...}
  77. let apiResp = await apireq("teachList");
  78. let teachList = {};
  79. for (let t of JSON.parse(apiResp)) teachList[t.login] = t.fio;
  80. // Получаем объект со списком всех групп внеур. деятельности и педагогов
  81. // vtGroups = {"23Б": ["Жуковедение", "Пупкин В. И."], ...}
  82. apiResp = await apireq("interGroupList");
  83. for (let gr of JSON.parse(apiResp))
  84. vtGroups[gr[0]] = [gr[1], teachList[gr[2]]];
  85. let selClassInner = '';
  86. for (let cl of uTutorCls) selClassInner += `<option>${cl}</option>`;
  87. dqs("#vtSelClass").innerHTML = selClassInner;
  88. vtPupListShow(); // показываем список детей
  89. dqs("#vtData").innerHTML = '';
  90. };