1045 lines
43 KiB
JavaScript
1045 lines
43 KiB
JavaScript
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">×</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">×</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">×</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
|
||
}; |