Files
cabinet/assets/components/record.js
T
2026-05-28 12:09:28 +03:00

1045 lines
43 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
const loader = require("./loader.js");
const validator = require("./validator.js");
const helper = require("./helper.js");
const onlineModeUtil = require("./onlineMode.js");
const Cookies = require('js-cookie');
function renderFormRecord(userInfo, params) {
popup.dataset.specialistid = params.specialistid;
popup.dataset.filialid = params.filialid;
popup.dataset.depnum = params.department;
popup.dataset.schedident = params.schedident;
popup.dataset.workDate = params.workDate;
popup.dataset.time = params.time;
popup.dataset.onlinemode = params.onlinemode;
// data-docName в HTML даёт dataset.docName; поддерживаем оба варианта
const docname = (params.docName ?? params.docname ?? '').toString();
const address = (params.address ?? '').toString();
const company = (params.company ?? '').toString();
const comment = (params.comment ?? '').toString();
popup.dataset.docname = docname;
popup.dataset.address = address;
popup.dataset.company = company;
popup.dataset.comment = comment;
popup.dataset.rnum = params.rnum;
popup.querySelector('.modal-title').innerHTML = onlineModeUtil.isOnlineMode(params.onlinemode)
? 'Запись на онлайн-консультацию'
: 'Записаться к врачу'
;
popup.querySelector('.modal-dialog').classList.remove('modal-lg');
var popupBody = popup.querySelector('#popup-body');
popupBody.innerHTML = '';
var div = document.createElement('div');
div.classList = 'form-group';
var licenseLink = helper.getLicenseLink(Cookies.get('region'));
if (!onlineModeUtil.isOnlineMode(params.onlinemode)) {
var license = document.createElement('a');
license.classList = "staff-info__review license-link";
license.href = licenseLink;
license.target = '_blank';
license.innerHTML = 'Отправляя данные, вы подтверждаете согласие на обработку персональных данных и принимаете условия политики их обработки';
div.append(license);
popupBody.append(div);
} else {
var license = document.createElement('p');
license.classList = "px-2";
license.innerHTML = `Для записи необходимо ознакомиться с <a href="${licenseLink}" target="_blank">политикой в отношении обработки персональных данных</a>, согласием на <a href="${licenseLink}" target="_blank">обработку персональных данных</a>.`;
div.append(license);
popupBody.append(div);
const formCheck = document.createElement('div');
formCheck.classList = "form-check";
popupBody.append(formCheck);
const formCheckInput = document.createElement('input');
formCheckInput.type="checkbox";
formCheckInput.classList="form-check-input";
formCheckInput.id="accept-btn";
formCheck.append(formCheckInput);
const formCheckLabel = document.createElement('label');
formCheckLabel.classList = "form-check-label";
formCheckLabel.htmlFor="accept-btn";
formCheckLabel.innerHTML = `
ознакомлен с <a href="${licenseLink}" target="_blank">политикой в отношении обработки персональных данных</a>,
согласием на <a href="${licenseLink}" target="_blank">обработку персональных данных</a>
и <a href="/docs/oferta.pdf" target="_blank">договором оферты</a>, <a href="/docs/ids.pdf" target="_blank">информированным добровольным согласием (ИДС)</a>.
`;
formCheck.addEventListener('click', function () {
let authButton = document.getElementById('auth-button');
let scheduleButton = document.getElementById('schedule-button');
if (userInfo) {
scheduleButton.disabled = true;
scheduleButton.classList.add('disabled');
} else {
authButton.disabled = true;
authButton.classList.add('disabled');
}
if (formCheckInput.checked) {
if (userInfo) {
scheduleButton.disabled = false;
scheduleButton.classList.remove('disabled');
} else {
authButton.disabled = false;
authButton.classList.remove('disabled');
}
}
});
formCheck.append(formCheckLabel);
}
var footer = document.createElement('div');
footer.classList = 'col-12 popup-modal-footer mt-1';
footer.style.flexWrap = 'nowrap';
footer.style.justifyContent = 'space-between';
popupBody.append(footer);
if (userInfo) {
let scheduleButton = document.createElement('button');
scheduleButton.classList = "button mb-3 w-100 submit";
scheduleButton.id = "schedule-button";
scheduleButton.disabled = params.onlinemode === 'false'? false : true;
scheduleButton.innerHTML = "Записать меня"
scheduleButton.addEventListener('click', function () {
sendReserve(popup);
});
footer.append(scheduleButton);
} else {
let authButton = document.createElement('button');
authButton.classList = "button mb-3 w-100";
authButton.id = "auth-button";
authButton.disabled = params.onlinemode === 'false'? false : true;
authButton.innerHTML = "Войти и записать меня";
authButton.dataset.controller = 'signin';
authButton.dataset.action = 'click->signin#login';
authButton.addEventListener('click', function () {
// Сохраняем данные записи в sessionStorage перед входом
// чтобы восстановить их после авторизации (на случай потери dataset)
sessionStorage.setItem('reserveData', JSON.stringify({
specialistid: params.specialistid,
filialid: params.filialid,
depnum: params.department,
schedident: params.schedident,
workDate: params.workDate,
time: params.time,
onlinemode: params.onlinemode,
comment: params.comment,
docname: params.docname,
address: params.address,
company: params.company,
rnum: params.rnum
}));
sessionStorage.setItem('reserveFlag', 'true');
popup.dataset.reserve = 'true';
});
footer.append(authButton);
}
if (popup.dataset.onlinemode === 'false') {
var buttonAnon = document.createElement('button');
buttonAnon.classList = "button mb-3 w-100";
buttonAnon.innerHTML = "Записать без авторизации"
buttonAnon.addEventListener('click', function () {
renderFormAnonym(popup);
});
var info = document.createElement('p');
info.style.color = 'red';
info.innerHTML = '* Внимание! При записи другого человека информация о записи в Вашем личном кабинете не отображается, отменить или перенести запись можно будет только позвонив в колл-центр.';
popupBody.append(info);
footer.append(buttonAnon);
}
return true;
}
function renderFormBitrix(el, nameValue = '', phoneValue = '', dateValue = '', alert= false) {
popup.querySelector('.modal-title').innerText = 'Записаться на прием';
popup.querySelector('.modal-dialog').classList.remove('modal-lg');
var popupBody = popup.querySelector('#popup-body');
popupBody.innerHTML = "";
var div = document.createElement('div');
div.classList = 'form-group';
var name = document.createElement('input');
name.classList = "form-control";
name.id = "name";
name.placeholder = 'Имя:';
name.type = "text";
if (nameValue !== '') {
name.value = nameValue;
}
div.append(name);
var validName = document.createElement('div');
validName.classList = 'msg-valid valid-name';
div.append(validName);
popupBody.append(div);
var div = document.createElement('div');
div.classList = 'form-group';
var phone = document.createElement('input');
phone.classList = "form-control";
phone.id = "phone";
phone.placeholder = 'Телефон:';
if (phoneValue !== '') {
phone.value = phoneValue;
}
phone.dataset.controller = "inputMask";
phone.type = "text";
div.append(phone);
var validPhone = document.createElement('div');
validPhone.classList = 'msg-valid valid-phone';
div.append(validPhone);
popupBody.append(div);
var div = document.createElement('div');
div.classList = 'form-group';
var date = document.createElement('input');
date.classList = "form-control";
date.id = "date";
date.placeholder = "Желаемая дата:";
date.range = "false";
if (dateValue !== '') {
date.value = dateValue;
}
date.dataset.controller = "datePicker";
date.type = "text";
div.append(date);
popupBody.append(div)
var div = document.createElement('div');
div.classList = 'form-group';
var service = document.createElement('input');
service.classList = "form-control";
service.id = "service";
service.type = "text";
if (el.dataset.comment) {
service.placeholder = 'Услуга:';
} else {
service.placeholder = 'ФИО нужного врача:';
}
if (el.dataset.comment) {
service.disabled = "true";
service.value = el.dataset.comment;
}
div.append(service);
var validService = document.createElement('div');
validService.classList = 'msg-valid valid-service';
div.append(validService);
popupBody.append(div)
var licenseLink = helper.getLicenseLink(Cookies.get('region'));
var div = document.createElement('div');
div.classList = 'form-group';
if (typeof el.dataset.company == 'undefined') {
el.dataset.company = '';
}
/* политика */
var div = document.createElement('div');
div.classList = 'form-group';
var formCheck = document.createElement('div');
formCheck.classList = 'form-check';
div.append(formCheck);
var accept = document.createElement('input');
accept.classList = "form-check-input";
accept.id = "accept";
accept.checked = false;
accept.type = "checkbox";
formCheck.append(accept);
var license = helper.getLicenseLink(Cookies.get('region'));
var label = document.createElement('label');
label.setAttribute('for' , 'accept');
var companyText = (el.dataset.company ?? '').toString();
if (companyText === 'undefined') companyText = '';
label.innerHTML = `ознакомлен(а) <a class="underline" href="${license}" target="_blank">с условиями политики в отношении обработки персональных данных</a> ${companyText}`;
formCheck.append(label);
var validAccept = document.createElement('div');
validAccept.classList = 'msg-valid valid-accept';
div.append(validAccept);
popupBody.append(div)
/* согласие */
var formCheck = document.createElement('div');
formCheck.classList = 'form-check';
div.append(formCheck);
var acceptPerson = document.createElement('input');
acceptPerson.classList = "form-check-input";
acceptPerson.id = "acceptPerson";
acceptPerson.checked = false;
acceptPerson.type = "checkbox";
formCheck.append(acceptPerson);
var licensePerson = helper.getLicensePersonLink();
var labelPerson = document.createElement('label');
labelPerson.setAttribute('for' , 'acceptPerson');
labelPerson.innerHTML = `даю согласие <a class="underline" href="${licensePerson}" target="_blank">на обработку персональных данных</a>`;
formCheck.append(labelPerson);
var validAcceptPerson = document.createElement('div');
validAcceptPerson.classList = 'msg-valid valid-acceptPerson';
div.append(validAcceptPerson);
popupBody.append(div)
if (alert) {
var div = document.createElement('div');
div.classList = 'form-group';
var span = document.createElement('span');
span.classList = 'text-danger';
span.innerHTML = 'К сожалению, в настоящий момент фиксируем сбой при отправке смс. Пожалуйста проверьте корректность данных и нажмите кнопку отправить. Оператор свяжется с Вами и запишет Вас на это время.';
div.append(span);
popupBody.append(div);
}
const btnSubmit = document.createElement('button');
btnSubmit.innerHTML = 'Отправить';
btnSubmit.classList = 'btn btn-outline-secondary'
btnSubmit.addEventListener('click', function() {
var invalid = false;
if (validator.checkAccept(accept, validAccept)) {
invalid = true;
}
if (validator.checkAccept(acceptPerson, validAcceptPerson)) {
invalid = true;
}
if (validator.checkTextRu(name, validName)) {
invalid = true;
}
if (validator.checkPhone(phone, validPhone)) {
invalid = true;
}
if (validator.checkNotEmpty(service, validService)) {
invalid = true;
}
if (invalid) {
return false;
}
var params = {
'fields' : {
'TITLE': 'Запрос услуги через личный кабинет',
'NAME': name.value,
'PHONE': [{
'VALUE': phone.value,
'VALUE_TYPE': 'WORK'
}],
'ASSIGNED_BY_ID' : 506,
'UF_CRM_1533790214': date.value,
'UF_CRM_1533790164': service.value,
'UF_CRM_1539951158': helper.getCityCRM(Cookies.get('region'))
}
};
helper.sendRequest(params, 'https://sovamed.bitrix24.ru/rest/10998/3hrv38rzo3khchj3/crm.lead.add.json', 'POST', 'json', false).then(function() {
let searchParams = new URLSearchParams(location.search);
var data = {
'subject': 'Запись в КЦ',
'requestUrl': location.href,
'sessionId': helper.getSessionId(),
'phoneNumber': phone.value,
'fio': name.value,
'tag': 'кц_запись',
'comment' : {
'docName': el.dataset.docName ?? el.dataset.docname ?? '',
'address': el.dataset.address ?? '',
'comment': el.dataset.comment ?? ''
},
'customSources': {
"source": searchParams.get('utm_source'),
"medium": searchParams.get('utm_medium'),
"campaign": searchParams.get('utm_campaign'),
"content": searchParams.get('utm_content'),
"term": searchParams.get('utm_term')
}
}
if (window.bitrix === true) {
data.regionId = helper.getRegionIdByHost()
}
helper.sendRequest(data, '/api/add-calltouch').then(function(calltouch) {
var popup = document.getElementById('popup');
if (window.bitrix) {
popup.querySelector('.modal-title').innerHTML = 'Запись на прием';
var message = '<p>Спасибо, Вы успешно записались на прием. </br>';
message += popup.dataset.comment + ', ';
message += popup.dataset.workDate + ' ' + popup.dataset.time + '</br></p>';
popup.querySelector('#popup-body').innerHTML = message;
} else {
loader.btnLoader(btnSubmit, false);
var successAlert = document.createElement('div');
successAlert.classList = 'alert alert-success alert-dismissible fade show';
successAlert.setAttribute('role', 'alert');
var divMsg = document.createElement('div');
divMsg.classList = 'alert-msg';
divMsg.innerHTML = '<p>Запись на прием подтверждена.</p>';
var docName = el.dataset.docName ?? el.dataset.docname ?? '';
if (docName && el.dataset.address) {
divMsg.innerHTML += '<p>Врач - ' + docName +'</p>';
divMsg.innerHTML += '<p>Клиника - ' + el.dataset.address +'</p>';
}
divMsg.innerHTML += '<p>Дата - ' + date.value + '</p>';
successAlert.append(divMsg);
var buttonClose = document.createElement('button');
buttonClose.classList = 'close';
buttonClose.dataset.dismiss ='alert';
buttonClose.setAttribute('aria-label', 'Close');
buttonClose.innerHTML = '<span aria-hidden="true">&times;</span>';
successAlert.append(buttonClose);
document.getElementById('alert-system').prepend(successAlert);
if (popup && typeof $(popup).modal !== 'undefined') {
$(popup).modal('hide');
}
$('html, body').animate({scrollTop:0}, '300');
}
});
});
});
popupBody.append(btnSubmit)
}
async function renderCheckEvent(hash, id) {
popup.querySelector('.modal-title').innerHTML = 'Вы записались на прием';
popup.querySelector('.modal-dialog').classList.add('modal-lg');
const popupBody = popup.querySelector('#popup-body');
popupBody.innerHTML = '';
try {
const response = await fetch('/widget/check/' + hash + '/' + id);
if (!response.ok) {
throw new Error(`HTTP error! status: ${response.status}`);
}
const blob = await response.blob();
const url = window.URL.createObjectURL(blob);
// Создаем iframe для отображения PDF
const iframe = document.createElement('iframe');
iframe.src = url;
iframe.style.width = '100%';
iframe.style.height = '80vh'; // 80% высоты viewport
iframe.style.border = 'none';
iframe.style.borderRadius = '8px';
// Очищаем содержимое модального окна и добавляем iframe
popupBody.appendChild(iframe);
} catch (error) {
console.error('Ошибка загрузки:', error);
popupBody.innerHTML = `<p style="color: red;">Ошибка загрузки: ${error.message}</p>`;
}
}
function renderFormAnonym(el) {
popup.querySelector('.modal-title').innerText = 'Записать другого человека';
popup.querySelector('.modal-dialog').classList.remove('modal-lg');
var popupBody = popup.querySelector('#popup-body');
popupBody.innerHTML = "";
var div = document.createElement('div');
div.classList = 'form-group';
var name = document.createElement('input');
name.classList = "form-control";
name.id = "name";
name.placeholder = "Ф.И.О.";
name.type = "text";
div.append(name);
var validName = document.createElement('div');
validName.classList = 'msg-valid valid-name';
div.append(validName);
popupBody.append(div)
var div = document.createElement('div');
div.classList = 'form-group';
var phone = document.createElement('input');
phone.classList = "form-control";
phone.id = "phone";
phone.placeholder = "Телефон:";
phone.dataset.controller = "inputMask";
phone.type = "text";
div.append(phone);
var validPhone = document.createElement('div');
validPhone.classList = 'msg-valid valid-phone';
div.append(validPhone);
popupBody.append(div)
var div = document.createElement('div');
div.classList = 'form-group';
var email = document.createElement('input');
email.classList = "form-control";
email.id = "email";
email.placeholder = 'Адрес электронной почты:';
email.range = "false";
email.type = "text";
div.append(email);
var validEmail = document.createElement('div');
validEmail.classList = 'msg-valid valid-email';
div.append(validEmail);
popupBody.append(div)
/* политика */
var div = document.createElement('div');
div.classList = 'form-group';
var formCheck = document.createElement('div');
formCheck.classList = 'form-check';
div.append(formCheck);
var accept = document.createElement('input');
accept.classList = "form-check-input";
accept.id = "accept";
accept.checked = false;
accept.type = "checkbox";
formCheck.append(accept);
var companyText = (el.dataset.company ?? '').toString();
if (companyText === 'undefined') companyText = '';
var license = helper.getLicenseLink(Cookies.get('region'));
var label = document.createElement('label');
label.setAttribute('for' , 'accept');
label.innerHTML = `ознакомлен(а) <a class="underline" href="${license}" target="_blank">с условиями политики в отношении обработки персональных данных</a> ${companyText}`;
formCheck.append(label);
var validAccept = document.createElement('div');
validAccept.classList = 'msg-valid valid-accept';
div.append(validAccept);
popupBody.append(div)
/* согласие */
var formCheck = document.createElement('div');
formCheck.classList = 'form-check';
div.append(formCheck);
var acceptPerson = document.createElement('input');
acceptPerson.classList = "form-check-input";
acceptPerson.id = "acceptPerson";
acceptPerson.checked = false;
acceptPerson.type = "checkbox";
formCheck.append(acceptPerson);
var licensePerson = helper.getLicensePersonLink();
var labelPerson = document.createElement('label');
labelPerson.setAttribute('for' , 'acceptPerson');
labelPerson.innerHTML = `даю согласие <a class="underline" href="${licensePerson}" target="_blank">на обработку персональных данных</a>`;
formCheck.append(labelPerson);
var validAcceptPerson = document.createElement('div');
validAcceptPerson.classList = 'msg-valid valid-acceptPerson';
div.append(validAcceptPerson);
popupBody.append(div)
/* капча */
var divCaptcha = document.createElement('div');
divCaptcha.id = 'smart-captcha';
divCaptcha.dataset.controller = 'smartCaptcha';
popupBody.append(divCaptcha);
var validGrecaptcha = document.createElement('div');
validGrecaptcha.classList = 'msg-valid valid-captcha';
popupBody.append(validGrecaptcha);
var btnSubmit = document.createElement('button');
btnSubmit.innerHTML = 'Отправить';
btnSubmit.classList = 'btn btn-outline-secondary rc mt-3'
btnSubmit.addEventListener('click', function() {
var invalid = false;
if (atob(btnVeretify.dataset.code) == veretifyPhone.value && atob(btnVeretify.dataset.veretify) == phone.value) {
invalid = false;
} else {
validVeretifyPhone.innerHTML = 'Введенное значение неверно';
invalid = true;
}
if (validator.checkTextRu(name, validName)) {
invalid = true;
}
if (validator.checkPhone(phone, validPhone)) {
invalid = true;
}
if (validator.checkEmail(email, validEmail)) {
invalid = true;
}
if (validator.checkAccept(accept, validAccept)) {
invalid = true;
}
if (validator.checkAccept(acceptPerson, validAcceptPerson)) {
invalid = true;
}
if (validator.checkSmartCaptcha(window.smartCaptcha.getResponse(), validGrecaptcha)) {
invalid = true;
}
if (invalid) {
return false;
}
loader.btnLoader(btnSubmit, true);
helper.sendRequest({'phone': phone.value}, "/api/count-record").then(function (response) {
if (response.data.count >= 2) {
alert('Для записи к двум и более врачам-пожалуйста, заполните следующую форму');
var workDate = new Date(el.dataset.workDate)
.toLocaleString('ru', {year: 'numeric',month: 'numeric',day: 'numeric'});
renderFormBitrix(el, name.value, phone.value, workDate);
} else {
const data = {
'fio': name.value,
'phone': phone.value,
'email': email.value,
'captcha': window.smartCaptcha.getResponse(),
'specialist': parseInt(el.dataset.specialistid) ?? 0,
'filial': parseInt(el.dataset.filialid) ?? 0,
'schedident': parseInt(el.dataset.schedident) ?? 0,
'workDate': el.dataset.workDate.replace(/-/g, ''),
'rnum': el.dataset.rnum ?? 0,
'time': el.dataset.time
};
helper.sendRequest(data, '/api/anonymous-reserve').then(function(reserve) {
if (location.hostname == 'cabinet.sovamed.ru' || location.hostname == 'cabinet.wmtmed.ru') {
var subject = 'Запись в без авторизации с ЛК';
var tag = 'анонимная_запись';
} else {
var subject = 'Запись в без авторизации с сайта';
var tag = 'анонимная_запись_с_сайта';
}
let searchParams = new URLSearchParams(location.search);
var data = {
'subject': subject,
'requestUrl': location.href,
'sessionId': helper.getSessionId(),
'phoneNumber': phone.value,
'email': email.value,
'fio': name.value,
'tag': tag,
'comment' : {
'docName': el.dataset.docname,
'address': el.dataset.address,
'specialistId': el.dataset.specialistid,
'filialId': el.dataset.filialid,
'schedident': el.dataset.schedident,
'workDate': el.dataset.workDate,
'time': el.dataset.time
},
'customSources': {
"source": searchParams.get('utm_source'),
"medium": searchParams.get('utm_medium'),
"campaign": searchParams.get('utm_campaign'),
"content": searchParams.get('utm_content'),
"term": searchParams.get('utm_term')
}
}
if (window.bitrix === true) {
data.regionId = helper.getRegionIdByHost()
}
helper.sendRequest(data, '/api/add-calltouch').then(function(calltouch) {
loader.btnLoader(btnSubmit, false);
if (typeof window.bitrix === 'undefined') {
var date = new Date(el.dataset.workDate);
var successAlert = document.createElement('div');
successAlert.classList = 'alert alert-success alert-dismissible fade show';
successAlert.setAttribute('role', 'alert');
var divMsg = document.createElement('div');
divMsg.classList = 'alert-msg';
divMsg.innerHTML = '<p>Запись на прием подтверждена.</p><p>Врач - '
+ el.dataset.docname +'</p><p>Клиника - '
+ el.dataset.address +'</p><p>Дата - '
+ window.dateFormat(date, 'd.m.Y') + ' ' + el.dataset.time +'</p>'
successAlert.append(divMsg);
var buttonClose = document.createElement('button');
buttonClose.classList = 'close';
buttonClose.dataset.dismiss ='alert';
buttonClose.setAttribute('aria-label', 'Close');
buttonClose.innerHTML = '<span aria-hidden="true">&times;</span>';
successAlert.append(buttonClose);
document.getElementById('alert-system').prepend(successAlert);
$('html, body').animate({scrollTop:0}, '300');
}
renderCheckEvent(reserve.data.hash, reserve.data.recordId);
});
}).catch(function(e) {
loader.btnLoader(btnSubmit, false);
console.log(e);
});
}
})
});
var inputGroup = document.createElement('div');
inputGroup.classList = 'input-group mt-3 veretify-code-block';
var veretifyPhone = document.createElement('input');
veretifyPhone.classList = "form-control";
veretifyPhone.id = "veretify-code";
veretifyPhone.name = "code";
veretifyPhone.type = "text";
veretifyPhone.placeholder = "Код из СМС"
inputGroup.append(veretifyPhone);
var appendDiv = document.createElement('div');
appendDiv.classList = 'input-group-append';
var btnVeretify = document.createElement('button');
btnVeretify.innerHTML = 'Получить код';
btnVeretify.dataset.step = 0;
btnVeretify.dataset.status = 'false'
btnVeretify.classList = 'btn btn-outline-secondary'
btnVeretify.addEventListener('click', function(evn) {
loader.btnLoader(btnVeretify, true);
validVeretifyPhone.innerHTML = '';
var invalid = false;
if (validator.checkPhone(phone, validPhone)) {
invalid = true;
}
if (validator.checkSmartCaptcha(window.smartCaptcha.getResponse(), validGrecaptcha)) {
invalid = true;
}
if (validator.checkAccept(accept, validAccept)) {
invalid = true;
}
if (validator.checkAccept(acceptPerson, validAcceptPerson)) {
invalid = true;
}
if (invalid) {
loader.btnLoader(btnVeretify, false);
return false;
}
if (btnVeretify.dataset.status == "false") {
helper.sendRequest({'phone' : phone.value, 'pcode': popup.dataset.pcode}, "/api/veretify").then(function (response) {
const myCounter = new helper.countDown({
seconds: 60,
onUpdateStatus: function(sec) {
veretifyPhone.placeholder = 'Введите код из СМС: ' + sec + ' сек';
},
onCounterEnd: function() {
if (btnVeretify.dataset.step == '1') {
notsms.classList.remove('d-none');
}
if (btnVeretify.dataset.step == '0') {
btnVeretify.dataset.status = "false";
btnVeretify.innerHTML = "Получить код"
btnVeretify.dataset.code = 'false';
btnVeretify.dataset.veretify = 'false';
btnVeretify.dataset.step = '1';
}
}
});
myCounter.start();
if (response.status == 'ERROR') {
loader.btnLoader(btnVeretify, false);
validVeretifyPhone.innerHTML = response.status_text
return false;
}
if (response.status == 'OK') {
btnVeretify.dataset.status = "OK"
btnVeretify.innerHTML = "OK"
btnVeretify.dataset.code = response.code;
btnVeretify.dataset.veretify = btoa(phone.value);
}
})
} else if (btnVeretify.dataset.status == "OK") {
if (atob(btnVeretify.dataset.code) == veretifyPhone.value && atob(btnVeretify.dataset.veretify) == phone.value) {
inputGroup.classList.remove('veretify-code-block');
inputGroup.classList.add('d-none');
popupBody.append(btnSubmit);
} else {
validVeretifyPhone.innerHTML = 'Введенное значение неверно';
}
}
loader.btnLoader(btnVeretify, false);
});
appendDiv.append(btnVeretify);
inputGroup.append(appendDiv);
var validVeretifyPhone = document.createElement('div');
validVeretifyPhone.classList = 'msg-valid valid-veretify-phone w-100';
inputGroup.append(validVeretifyPhone);
var notsms = document.createElement('a');
notsms.href="#";
notsms.classList = 'd-none w-100';
notsms.innerHTML = 'Не приходит код';
notsms.addEventListener('click', function () {
var workDate = new Date(el.dataset.workDate)
.toLocaleString('ru', {year: 'numeric',month: 'numeric',day: 'numeric'});
if (btnVeretify.dataset.step == '1') {
renderFormBitrix(el, name.value, phone.value, workDate, true);
}
});
inputGroup.append(notsms);
popupBody.append(inputGroup)
}
function validateData(data) {
const requiredFields = ['st', 'date', 'dcode', 'depnum', 'filial', 'schedident'];
for (let field of requiredFields) {
if (data[field] == "undefined" || data[field] == "NaNaNaN") {
return false;
}
}
return true;
}
function sendReserve(el) {
var onlineMode = onlineModeUtil.toOnlineType(el.dataset.onlinemode);
var workDate = new Date(el.dataset.workDate);
var time = el.dataset.time.split('-');
var button = el.querySelector('.submit');
loader.btnLoader(button, true);
let dataSchedule = {
st: time[0],
en: time[1],
date: window.dateFormat(workDate),
dcode: el.dataset.specialistid,
depnum: el.dataset.depnum,
filial: el.dataset.filialid,
onlineType: onlineMode,
schedident: el.dataset.schedident
};
const isValid = validateData(dataSchedule);
if (isValid) {
window.webSDK.scheduleRecReserve(dataSchedule).then(function (resolve) {
helper.sendRequest({'sid': el.dataset.specialistid}, '/api/doctor?sid='+ el.dataset.specialistid, 'GET').then(function (doctor) {
loader.btnLoader(button, false);
if (location.hostname == 'cabinet.sovamed.ru' || location.hostname == 'cabinet.wmtmed.ru') {
var subject = 'Прямая запись с ЛК';
var tag = 'прямая_запись';
} else {
var subject = 'Запись с сайта';
var tag = 'сайт_запись';
}
let searchParams = new URLSearchParams(location.search);
var data = {
'subject': subject,
'requestUrl': location.href,
'sessionId': helper.getSessionId(),
'phoneNumber': window.webSDK.data.user.phone,
'email': window.webSDK.data.user.email,
'fio': window.webSDK.data.user.fullName,
'tag': tag,
'comment' : {
'docName': doctor.data.name,
'address': doctor.data.filial.address,
'specialistId': doctor.data.sid,
'filialId': el.dataset.filialid,
'schedident': el.dataset.schedident,
'workDate': el.dataset.workDate,
'time': el.dataset.time
},
'customSources': {
"source": searchParams.get('utm_source'),
"medium": searchParams.get('utm_medium'),
"campaign": searchParams.get('utm_campaign'),
"content": searchParams.get('utm_content'),
"term": searchParams.get('utm_term')
}
}
if (window.bitrix === true) {
data.regionId = helper.getRegionIdByHost()
}
helper.sendRequest(data, '/api/add-calltouch').then(function() {
if (window.bitrix === true) {
var popup = document.getElementById('popup')
popup.querySelector('.modal-title').innerHTML = 'Запись на прием';
var message = '<p>Спасибо, Вы успешно записались на прием. </br>';
message += popup.dataset.comment + ', ';
message += popup.dataset.workDate + ' ' + popup.dataset.time + '</br></p>';
message += '<p>Вы всегда можете отменить или перенести запись в личном кабинете по ссылке: ';
message += '<a href="https://cabinet.sovamed.ru" >https://cabinet.sovamed.ru</a></p>';
popup.querySelector('#popup-body').innerHTML = message;
} else {
// Показываем уведомление о записи в попапе перед редиректом
var popup = document.getElementById('popup');
if (popup) {
popup.querySelector('.modal-title').innerHTML = 'Запись на прием';
var message = '<p>Спасибо, Вы успешно записались на прием. </br>';
if (popup.dataset.comment) {
message += popup.dataset.comment + ', ';
}
message += popup.dataset.workDate + ' ' + popup.dataset.time + '</br></p>';
if (onlineMode) {
message += '<p class="alert alert-warning">При отсутствии оплаты в течение 5 мин. онлайн консультация будет автоматически отменена.</p>';
}
message += '<p>Вы будете перенаправлены в раздел "Приемы"...</p>';
popup.querySelector('#popup-body').innerHTML = message;
$(popup).modal('show');
}
// Показываем уведомление в alert-system
var alertSystem = document.getElementById('alert-system');
if (alertSystem) {
var msg = onlineMode
? 'Спасибо, вы успешно записались на онлайн-консультацию. При отсутствии оплаты в течение 5 мин. онлайн консультация будет автоматически отменена.'
: 'Спасибо, вы успешно записались на прием.';
helper.addAlert(msg, alertSystem, 'alert-record-success', 'alert-success');
}
// Делаем редирект на /case-history#doctor-success после успешного создания записи
setTimeout(function() {
const to = onlineMode
? '/case-history#online'
: '/case-history#doctor-success'
;
window.location.replace(helper.getHostname() + to);
}, 2000);
}
});
});
}).catch(function (error) {
loader.btnLoader(button, false);
var alert = document.createElement('div');
alert.setAttribute('role', 'alert');
var divMsg = document.createElement('div');
divMsg.classList = 'alert-msg';
if (error.data.message !== '') {
divMsg.innerHTML = error.data.message ;
}
if (error.data.checkData.text !== '') {
divMsg.innerHTML = error.data.checkData.text;
}
alert.append(divMsg);
if (window.bitrix === true) {
alert.classList = 'alert alert-danger';
document.getElementById('popup-body').prepend(alert);
} else {
alert.classList = 'alert alert-danger alert-dismissible fade show';
var buttonClose = document.createElement('button');
buttonClose.classList = 'close';
buttonClose.dataset.dismiss ='alert';
buttonClose.setAttribute('aria-label', 'Close');
buttonClose.innerHTML = '<span aria-hidden="true">&times;</span>';
alert.append(buttonClose);
document.getElementById('alert-system').prepend(alert);
$(el).modal('hide');
$('html, body').animate({scrollTop:0}, '300');
}
});
}
}
module.exports = {
sendReserve: sendReserve,
renderFormRecord: renderFormRecord,
renderFormBitrix: renderFormBitrix,
renderFormAnonym: renderFormAnonym
};