Zapis.html 7.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239
  1. {{define "Zapis"}}
  2. <div class="zap">
  3. <input required id="ONAME" placeholder="Фамилия Имя Отчество" type="text" />
  4. <input required id="OCAUSE" placeholder="Причина обращения" type="text" />
  5. <input required id="passport" placeholder="Номер паспорта" type="text" />
  6. <input required id="OPHONE" placeholder="Номер телефона" type="text" />
  7. <input required id="ODATE" type="date" />
  8. <select required class="time" id="OTIME"
  9. >Время</select
  10. >
  11. <div class="voice">
  12. Согласие на обработку персональных данных
  13. <input type="checkbox" id="accept" />
  14. </div>
  15. <button id="ButtonOrderQuery" disabled>Записаться на приём</button>
  16. </div>
  17. <script>
  18. let passport = document.querySelector("#passport");
  19. if (passport) {
  20. passport.onkeydown = function (event) {
  21. if (
  22. event.keyCode == 8 ||
  23. event.keyCode == 9 ||
  24. event.keyCode == 13 ||
  25. event.keyCode == 46
  26. ) {
  27. return;
  28. }
  29. if (event.keyCode > 47 && event.keyCode < 58) {
  30. if (11 <= this.value.length) {
  31. event.preventDefault();
  32. return;
  33. }
  34. let index = this.value.indexOf(" ");
  35. if (index != -1) {
  36. this.value =
  37. this.value.slice(0, index) +
  38. this.value.slice(index + 1);
  39. }
  40. if (this.value.length > 3) {
  41. this.value =
  42. this.value.slice(0, 4) + " " + this.value.slice(4);
  43. }
  44. } else {
  45. event.preventDefault();
  46. }
  47. };
  48. }
  49. let accept = document.querySelector("#accept");
  50. if (accept) {
  51. accept.onchange = function () {
  52. let btn = document.querySelector(".zap button");
  53. if (btn) {
  54. let valid = document.querySelectorAll(".zap input:invalid");
  55. if (this.checked && valid.length == 0) {
  56. btn.disabled = false;
  57. } else {
  58. btn.disabled = true;
  59. }
  60. }
  61. };
  62. }
  63. ///////////////////////////
  64. function OrderQuery() {
  65. /**
  66. * @type {HTMLInputElement}
  67. */
  68. var ONAME = document.querySelector("#ONAME");
  69. /**
  70. * @type {HTMLInputElement}
  71. */
  72. var OCAUSE = document.querySelector("#OCAUSE");
  73. /**
  74. * @type {HTMLInputElement}
  75. */
  76. var OPHONE = document.querySelector("#OPHONE");
  77. /**
  78. * @type {HTMLInputElement}
  79. */
  80. var OPASSPORT = document.querySelector("#passport");
  81. /**
  82. * @type {HTMLSelectElement}
  83. */
  84. var ODATE = document.querySelector("#ODATE");
  85. /**
  86. * @type {HTMLSelectElement}
  87. */
  88. var OTIME = document.querySelector("#OTIME");
  89. if (ONAME.value.split(" ").length != 3) {
  90. VKKOWork.Messenger.Show("Вы ввели Фамили/Имя/Отчество неверно");
  91. return;
  92. }
  93. if (OCAUSE.value.length == 0) {
  94. VKKOWork.Messenger.Show("Введите причину обращения");
  95. return;
  96. }
  97. if (OPHONE.value.length < 11) {
  98. VKKOWork.Messenger.Show("Вы ввели номер телефона неверно");
  99. return;
  100. }
  101. if (ODATE.value.length == 0) {
  102. VKKOWork.Messenger.Show("Вы не выбрали дату");
  103. return;
  104. }
  105. if (OTIME.value.length == 0) {
  106. VKKOWork.Messenger.Show("Вы не выбрали время");
  107. return;
  108. }
  109. VKKOWork.XHR.POST(
  110. function (r) {
  111. if ("Error" in r && r.Error == null) {
  112. VKKOWork.Messenger.Show("Операция успешно выполнена");
  113. } else {
  114. VKKOWork.Messenger.Show("Ошибка: " + r.Error);
  115. }
  116. },
  117. "/order-insert",
  118. {
  119. Name: ONAME.value,
  120. Cause: OCAUSE.value,
  121. Phone: OPHONE.value,
  122. Passport: passport.value,
  123. Date: ODATE.value,
  124. Time: OTIME.value * 1,
  125. }
  126. );
  127. OTIME.selectedIndex = -1;
  128. OPASSPORT.value = ODATE.value = OPHONE.value = OCAUSE.value = ONAME.value = "";
  129. }
  130. let times = [
  131. "13:00",
  132. "13:36",
  133. "14:12",
  134. "14:48",
  135. "15:24",
  136. ];
  137. function loadTime() {
  138. let date = document.querySelector("#ODATE");
  139. if (!date) {
  140. return;
  141. }
  142. VKKOWork.XHR.POST(
  143. function (result) {
  144. if ("Time" in result && result.Time != null) {
  145. let time = document.querySelector("#OTIME");
  146. if (time) {
  147. while (time.children.length > 0) {
  148. time.children[0].remove();
  149. }
  150. for (let t of result.Time) {
  151. let option = document.createElement("option");
  152. option.value = t;
  153. option.text = times[t];
  154. time.append(option);
  155. }
  156. }
  157. }
  158. },
  159. "/order-select-time",
  160. { Date: date.value }
  161. );
  162. }
  163. /**
  164. * @type {HTMLButtonElement}
  165. */
  166. var Button = document.querySelector("#ButtonOrderQuery");
  167. if (Button) {
  168. Button.onclick = OrderQuery;
  169. }
  170. function ManageOrderPacient() {
  171. VKKOWork.XHR.POST(function (data) {
  172. if (data != null && "Data" in data && data.Data != null) {
  173. data = data.Data;
  174. } else {
  175. VKKOWork.Messenger.Show("Данные не были получены");
  176. return;
  177. }
  178. /**
  179. * @type {HTMLTableElement}
  180. */
  181. var ManageOrderPacient = document.querySelector(
  182. "#ManageOrderPacient"
  183. );
  184. while (ManageOrderPacient.children.length > 0) {
  185. ManageOrderPacient.children[0].remove();
  186. }
  187. //o."ID", o."Name", o."Reseption", o."Snils", o."Phone", a."Date", a."Time", a."Doctor"
  188. ManageOrderPacient.innerHTML =
  189. "<tr><th>Дата</th><th>Время</th><th>Доктор</th><th>Клиент</th><th>Телефон</th><th>СНИЛС</th><th>Прием</th></tr>";
  190. for (const order of data) {
  191. let row = document.createElement("tr");
  192. row.innerHTML =
  193. "<td>" +
  194. order.Date.slice(0, 10) +
  195. "</td><td>" +
  196. times[order.Time] +
  197. "</td><td>" +
  198. order.Doctor +
  199. "</td><td>" +
  200. order.Name +
  201. "</td><td>" +
  202. order.Phone +
  203. "</td><td>" +
  204. order.Snils +
  205. "</td><td>" +
  206. (order.Reseption == true ? "Первичный" : "Вторичный") +
  207. "</td>";
  208. ManageOrderPacient.append(row);
  209. }
  210. ManageOrderPacient.selectedIndex = -1;
  211. }, "/order-select");
  212. }
  213. var __DateSel = document.querySelector("#ODATE");
  214. __DateSel.onchange = loadTime;
  215. </script>
  216. {{end}}