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

191 lines
7.0 KiB
JavaScript

import { Controller } from 'stimulus';
import Cookies from 'js-cookie';
const loader = require("./../components/loader.js");
const helper = require("./../components/helper.js");
/*
* Delete this file or adapt it for your use!
*/
export default class extends Controller {
connect() {
$(document.querySelector('.login-menu')).on('click', function(){
$(this).toggleClass('active');
});
$(document.querySelector('.burger')).on('click', function(){
$(this).toggleClass('active');
$('.left-sidebar').toggleClass('menu-active');
});
loader.loadSDK('menu').then(function(webSDK) {
webSDK.on('init', function() {
if (this.data.user.authenticated) {
runWebSDK(webSDK);
}
});
})
let runWebSDK = function (webSDK) {
this.bonus(webSDK);
if (location.pathname != '/case-history') {
this.caseHistory(webSDK);
}
}.bind(this)
this.tel().catch(error => {
console.error('Ошибка в tel():', error);
});
}
caseHistory(webSDK) {
let countRecord = document.getElementById('countRecord');
window.webSDK.loadScheduleRecList({
st: 20170101,
en: window.dateFormat(new Date((new Date()).getFullYear(), (new Date()).getMonth() + 6, 0)),
start: 0,
length: 500
}).then(function (resolve) {
if (countRecord) {
if (resolve.data.length > 0) {
var count = 0;
for (var i = 0; i < resolve.data.length; i++) {
if (resolve.data[i].workDate >= window.dateFormat(new Date())) {
count++;
}
}
countRecord.innerHTML = count;
if (count !== 0) {
countRecord.classList.remove('d-none');
}
if (location.pathname == '/') {
var caseHistoryWidget = document.getElementById('case-history-widget');
caseHistoryWidget.innerHTML = '';
if (resolve.data.length > 0) {
var count = 0;
for (var i = 0; i < resolve.data.length; i++) {
if (resolve.data[i].workDate >= window.dateFormat(new Date()) && count < 4) {
var date = window.newDate(resolve.data[i].workDate);
var item = document.createElement('span');
item.innerHTML = window.getWeekDay(date) + ', ' + window.dateFormat(date, 'd-m-Y') + ' ' + resolve.data[i].startTime;
item.classList = 'line-item';
caseHistoryWidget.append(item);
count++;
}
}
if (count == 0) {
var item = document.createElement('span');
item.innerHTML = 'Записей не найдено';
item.classList = 'line-item empty-item';
caseHistoryWidget.append(item);
}
} else {
var item = document.createElement('span');
item.innerHTML = 'Записей не найдено';
item.classList = 'line-item empty-item';
caseHistoryWidget.append(item);
}
}
}
}
});
}
bonus() {
var bonusWidget = document.getElementById('bonus-widget');
var bonusMenu = document.getElementById('bonus-menu');
window.webSDK.loadBonusList().then(function (resolve) {
if (resolve.length > 0) {
if (typeof resolve[0]['amountrub'] !== 'undefined') {
if (bonusMenu) {
bonusMenu.innerHTML = resolve[0]['amountrub'];
bonusMenu.classList.remove('d-none');
}
if (bonusWidget) {
bonusWidget.innerHTML = resolve[0]['amountrub'];
}
}
}
});
}
signOut(event) {
if (event) {
event.preventDefault();
}
const pcode = String(window?.webSDK?.data?.user?.id || '');
const body = new URLSearchParams();
if (pcode) {
body.append('pcode', pcode);
}
fetch('/api/usrlog/logout', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
},
credentials: 'same-origin',
keepalive: true,
body: body.toString()
}).catch(() => {
//
}).finally(() => {
window.webSDK.logout();
window.location.href = '/logout';
});
}
async tel() {
const apiUrl = helper.getApiHostname();
const regionId = parseInt(Cookies.get('region'));
try {
const response = await fetch(`${apiUrl}/filial/list?regionId=${regionId}`);
if (!response.ok) {
throw new Error(`Response status: ${response.status}`);
}
const result = await response.json();
const btnCallbackClinic = document.getElementById('btn-callback-clinic');
const phone = result.data?.[0]?.phone;
if (!btnCallbackClinic || !phone) {
return;
}
const digits = String(phone).replace(/\D/g, '');
const normalizedDigits = digits.length === 11 && digits.startsWith('8')
? `7${digits.slice(1)}`
: digits;
const displayPhone = normalizedDigits.length === 11 && normalizedDigits.startsWith('7')
? `+7(${normalizedDigits.slice(1, 4)})${normalizedDigits.slice(4, 7)}-${normalizedDigits.slice(7, 9)}-${normalizedDigits.slice(9, 11)}`
: String(phone).trim();
// Делаем номер доступным для других частей фронта (например, карточки специалистов)
window.clinicPhone = displayPhone;
window.clinicPhoneRaw = normalizedDigits;
btnCallbackClinic.innerText = displayPhone;
btnCallbackClinic.href = normalizedDigits ? `tel:+${normalizedDigits}` : `tel:${displayPhone}`;
} catch (error) {
console.error(error.message);
}
}
}