chore: initial import for test contour with k3s CI
This commit is contained in:
@@ -0,0 +1,377 @@
|
||||
import { Controller } from 'stimulus';
|
||||
|
||||
const loader = require("./../components/loader.js");
|
||||
const helper = require("./../components/helper.js");
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
loader.loadSDK('securityCard').then(function(webSDK) {
|
||||
webSDK.on('init', function() {
|
||||
if (this.data.user.authenticated) {
|
||||
runWebSDK(webSDK);
|
||||
} else {
|
||||
window.location.pathname = '/logout'
|
||||
}
|
||||
});
|
||||
})
|
||||
|
||||
var securityCard = this.element;
|
||||
var date = new Date();
|
||||
var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);
|
||||
|
||||
let runWebSDK = function (webSDK) {
|
||||
if (document.location.search == '?tab=allTest') {
|
||||
securityCard.querySelector('.load').innerHTML = 'Загрузка данных';
|
||||
|
||||
securityTabs.querySelectorAll('a').forEach(function (el) {
|
||||
if ('allTest' == el.dataset.allowTarget) {
|
||||
el.classList.add('tab-item--active');
|
||||
} else {
|
||||
el.classList.remove('tab-item--active');
|
||||
}
|
||||
});
|
||||
// allTest
|
||||
treatPlaceList(webSDK, lastDate, securityCard, 'all');
|
||||
} else {
|
||||
treatPlaceList(webSDK, lastDate, securityCard, 'all');
|
||||
}
|
||||
}.bind(this)
|
||||
|
||||
var securityTabs = document.getElementById('security-tabs');
|
||||
|
||||
if (securityTabs) {
|
||||
var tabsDecktop = securityTabs.querySelectorAll('a');
|
||||
|
||||
if (tabsDecktop.length > 0) {
|
||||
tabsDecktop.forEach(function (el) {
|
||||
el.addEventListener('click', function (evn) {
|
||||
evn.target.classList = 'tab-item tab-item--active';
|
||||
securityCard.querySelector('.section-wrap').innerHTML = '';
|
||||
securityCard.querySelector('.load').innerHTML = 'Загрузка данных';
|
||||
|
||||
securityTabs.querySelectorAll('a').forEach(function (a) {
|
||||
if (evn.target.dataset.allowTarget != a.dataset.allowTarget) {
|
||||
a.classList.remove('tab-item--active');
|
||||
}
|
||||
});
|
||||
|
||||
if (evn.target.dataset.allowTarget == 'allTest') {
|
||||
document.title = 'Результаты анализов';
|
||||
document.getElementById('page-title').innerHTML = 'Результаты анализов';
|
||||
} else {
|
||||
document.title = 'Медицинская карта';
|
||||
document.getElementById('page-title').innerHTML = 'Медицинская карта';
|
||||
}
|
||||
|
||||
treatPlaceList(window.webSDK, lastDate, securityCard, evn.target.dataset.allowTarget);
|
||||
});
|
||||
});
|
||||
} else {
|
||||
securityTabs.addEventListener('change', function(evn) {
|
||||
securityCard.querySelector('.section-wrap').innerHTML = '';
|
||||
treatPlaceList(window.webSDK, lastDate, securityCard, evn.target.value);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function treatPlaceList(webSDK, lastDate, securityCard, allowTarget) {
|
||||
var sectionWrap = securityCard.querySelector('.section-wrap');
|
||||
var load = securityCard.querySelector('.load');
|
||||
|
||||
if (allowTarget == 'referrals') {
|
||||
webSDK.loadReferralList({
|
||||
start: 0,
|
||||
length: 50
|
||||
}).then(function (refferals) {
|
||||
|
||||
if (refferals.length == 0) {
|
||||
securityCard.querySelector('.load').innerHTML = 'Записей не найдено';
|
||||
}
|
||||
|
||||
refferals.forEach(function (item) {
|
||||
var row = document.createElement('div');
|
||||
row.classList = 'row';
|
||||
|
||||
var col6 = document.createElement('div');
|
||||
col6.classList = 'col-md-6';
|
||||
|
||||
var dateTag = document.createElement('p');
|
||||
dateTag.innerHTML = '<p><b><span class="month"></span>, <span class="date"></span></b></p><p class="refname"></p><p class="fromfname"></p>';
|
||||
col6.append(dateTag);
|
||||
row.append(col6);
|
||||
|
||||
var col6 = document.createElement('div');
|
||||
col6.classList = 'col-md-6';
|
||||
col6.innerHTML = '<p class="refcomment"></p><p>Специалист: <br><span class="fromdname"></span></p><p class="refstatusname"></p>';
|
||||
row.append(col6);
|
||||
|
||||
var refferalsItem = document.createElement('div');
|
||||
refferalsItem.classList = 'block-item p-2 mt-1';
|
||||
refferalsItem.append(row);
|
||||
|
||||
refferalsItem.classList.remove('d-none');
|
||||
refferalsItem.querySelector('.refname').innerHTML = item.refname;
|
||||
refferalsItem.querySelector('.refcomment').innerHTML = item.refcomment;
|
||||
refferalsItem.querySelector('.fromfname').innerHTML = item.fromfname;
|
||||
refferalsItem.querySelector('.fromdname').innerHTML = item.fromdname;
|
||||
refferalsItem.querySelector('.refstatusname').innerHTML = item.refstatusname;
|
||||
|
||||
var date = window.newDate(item.refdate);
|
||||
refferalsItem.querySelector('.month').innerHTML = getWeekDay(date);
|
||||
refferalsItem.querySelector('.date').innerHTML = window.dateFormat(date, 'd-m-Y')
|
||||
|
||||
sectionWrap.append(refferalsItem);
|
||||
});
|
||||
}).catch(function (e) {
|
||||
helper.sendRequest({
|
||||
data: {'error': e, method: 'loadReferralList'}
|
||||
}, helper.getHostname() + '/api/log', "POST", "json", true, "application/json");
|
||||
});
|
||||
} else {
|
||||
webSDK.loadTreatPlaceList({
|
||||
st: 20150101,
|
||||
en: window.dateFormat(lastDate),
|
||||
start: 0,
|
||||
length: 100
|
||||
}).then(function (resolve) {
|
||||
console.log("loadTreatPlaceList")
|
||||
|
||||
if (resolve.data.length > 0) {
|
||||
var count = 0;
|
||||
load.classList.remove('d-none');
|
||||
|
||||
for (var i = 0; i < resolve.data.length; i++) {
|
||||
if (allowTarget == 'allTest') {
|
||||
if (analysis(resolve.data[i].protocolName)) {
|
||||
count++;
|
||||
sectionWrap.classList.remove('d-none');
|
||||
|
||||
addItem(resolve.data[i], sectionWrap, webSDK);
|
||||
}
|
||||
} else if (allowTarget == 'all') {
|
||||
count = resolve.data.length
|
||||
sectionWrap.classList.remove('d-none');
|
||||
|
||||
addItem(resolve.data[i], sectionWrap, webSDK);
|
||||
}
|
||||
}
|
||||
|
||||
load.classList.add('d-none');
|
||||
|
||||
if (count == 0) {
|
||||
load.classList.remove('d-none');
|
||||
}
|
||||
|
||||
} else {
|
||||
securityCard.querySelector('.load').innerHTML = 'Записей не найдено';
|
||||
load.classList.remove('d-none');
|
||||
}
|
||||
}).catch(function (e) {
|
||||
helper.sendRequest({
|
||||
data: {'error': e, method: 'loadTreatPlaceList'}
|
||||
}, helper.getHostname() + '/api/log', "POST", "json", true, "application/json");
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
function analysis(protocolName) {
|
||||
const regex = /анализ/gm;
|
||||
let m;
|
||||
var result = false;
|
||||
|
||||
while ((m = regex.exec(protocolName)) !== null) {
|
||||
if (m.index === regex.lastIndex) {
|
||||
regex.lastIndex++;
|
||||
}
|
||||
|
||||
m.some(function(match, groupIndex) {
|
||||
result = true;
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function addItem(item, wrap, webSDK) {
|
||||
wrap.insertAdjacentHTML('beforeend', `
|
||||
<div class="col-md-12 mt-3 px-0">
|
||||
<div class="block-title">${getWeekDay(window.newDate(item.date))} ${window.dateFormat(window.newDate(item.date), 'd-m-Y')}</div>
|
||||
<div class="block-content py-3 col-md-12">
|
||||
<div class="row">
|
||||
<div class="col-md-10 col-sm-12">
|
||||
<b>${item.protocolName}</b>
|
||||
<p class="pt-2">Специалист: <br> ${item.doctorName}</p>
|
||||
</div>
|
||||
<div class="col-md-2 col-sm-12">
|
||||
<button type="button"
|
||||
class="card-item__btn button ${helper.isMobile() ? 'w-100' : ''}"
|
||||
data-protocol-id="${item.protocolId}"
|
||||
data-treatcode="${item.treatcode}">
|
||||
${helper.isMobile() ? 'Скачать' : 'Просмотр'}
|
||||
</button>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
${item.attachments.length > 0 ? `
|
||||
<div class="card-item__doc mt-2">
|
||||
<p>Список изображений (файлов):</p>
|
||||
${item.attachments.map(attachment => `
|
||||
<div class="row">
|
||||
<div class="col-md-8 d-none d-md-block">
|
||||
${attachment.attachmentName}
|
||||
</div>
|
||||
|
||||
<div class="col-md-2 col-sm-6">
|
||||
<button type="button" class="button ${helper.isMobile() ? 'w-100' : ''}"
|
||||
data-attachment-type="download"
|
||||
data-attachment-id="${attachment.attachmentId}"
|
||||
data-treatcode="${item.treatcode}"
|
||||
data-protocol-id="${item.protocolId}">
|
||||
Скачать
|
||||
</button></br>
|
||||
</div>
|
||||
|
||||
<div class="col-md-2 d-none d-md-block">
|
||||
<button type="button" class="button ${helper.isMobile() ? 'w-100' : ''}"
|
||||
data-attachment-type="raw"
|
||||
data-attachment-id="${attachment.attachmentId}"
|
||||
data-treatcode="${item.treatcode}"
|
||||
data-protocol-id="${item.protocolId}">
|
||||
Просмотр
|
||||
</button></br>
|
||||
</div>
|
||||
</div>
|
||||
`).join('')}
|
||||
</div>
|
||||
` : ''}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
`);
|
||||
|
||||
const cardItem = wrap.lastElementChild;
|
||||
|
||||
if (item.attachments.length > 0) {
|
||||
const attachmentLinks = cardItem.querySelectorAll('button[data-attachment-id]');
|
||||
attachmentLinks.forEach(link => {
|
||||
link.addEventListener('click', function(e) {
|
||||
e.preventDefault();
|
||||
const popup = document.getElementById('popup');
|
||||
const modalBody = popup.querySelector('.modal-body');
|
||||
modalBody.dataset.attachmentType = this.dataset.attachmentType;
|
||||
modalBody.innerHTML = `
|
||||
<div class="text-center py-4">
|
||||
<div class="spinner-border text-primary" role="status">
|
||||
<span class="visually-hidden">Загрузка...</span>
|
||||
</div>
|
||||
<p class="mt-2">Загрузка файла...</p>
|
||||
</div>
|
||||
`;
|
||||
|
||||
webSDK.downloadTreatPlaceAttachment({
|
||||
protocolId: this.dataset.protocolId,
|
||||
treatcode: this.dataset.treatcode,
|
||||
attachmentId: this.dataset.attachmentId,
|
||||
download: this.dataset.attachmentType
|
||||
}).then(function(blob) {
|
||||
if (modalBody.dataset.attachmentType === 'download') {
|
||||
return false;
|
||||
}
|
||||
|
||||
modalBody.innerHTML = '';
|
||||
|
||||
const objectURL = URL.createObjectURL(blob.result);
|
||||
|
||||
if (blob.result.type === 'application/pdf' ||
|
||||
blob.result.type === 'application/x-pdf') {
|
||||
|
||||
// Для PDF создаем iframe
|
||||
const iframe = document.createElement('iframe');
|
||||
iframe.src = objectURL;
|
||||
iframe.style.width = "100%";
|
||||
iframe.style.height = "500px";
|
||||
iframe.style.border = "none";
|
||||
iframe.title = "PDF документ";
|
||||
iframe.type = 'application/pdf';
|
||||
|
||||
popup.querySelector('.modal-body').appendChild(iframe);
|
||||
|
||||
} else if (blob.result.type.startsWith('image/')) {
|
||||
// Для изображений создаем img
|
||||
const image = document.createElement('img');
|
||||
image.src = objectURL;
|
||||
image.style.width = "100%";
|
||||
image.style.maxHeight = "80vh";
|
||||
image.style.objectFit = "contain";
|
||||
image.alt = "Изображение";
|
||||
|
||||
popup.querySelector('.modal-body').appendChild(image);
|
||||
|
||||
} else {
|
||||
// Для других типов файлов - кнопка скачивания
|
||||
const downloadLink = document.createElement('a');
|
||||
downloadLink.href = objectURL;
|
||||
downloadLink.download = 'document';
|
||||
downloadLink.className = 'btn btn-primary';
|
||||
downloadLink.textContent = 'Скачать файл';
|
||||
downloadLink.style.margin = '20px auto';
|
||||
downloadLink.style.display = 'block';
|
||||
downloadLink.style.width = '200px';
|
||||
|
||||
popup.querySelector('.modal-body').appendChild(downloadLink);
|
||||
|
||||
// Также показываем информацию о типе файла
|
||||
const info = document.createElement('p');
|
||||
info.textContent = `Тип файла: ${blob.result.type}`;
|
||||
info.style.textAlign = 'center';
|
||||
popup.querySelector('.modal-body').appendChild(info);
|
||||
}
|
||||
|
||||
$(popup).modal('show');
|
||||
|
||||
// Очистка памяти при закрытии модального окна
|
||||
$(popup).on('hidden.bs.modal', function() {
|
||||
URL.revokeObjectURL(objectURL);
|
||||
$(popup).off('hidden.bs.modal');
|
||||
});
|
||||
|
||||
}).catch(function (e) {
|
||||
console.error('Error downloading file:', e);
|
||||
helper.sendRequest({
|
||||
data: {'error': e, method: 'TreatPlaceAttachment'}
|
||||
}, helper.getHostname() + '/api/log', "POST", "json", true, "application/json");
|
||||
|
||||
popup.querySelector('.modal-body').innerHTML = `
|
||||
<div class="alert alert-danger">
|
||||
<h5>Ошибка загрузки файла</h5>
|
||||
<p>${e.message || 'Неизвестная ошибка'}</p>
|
||||
<button class="btn btn-secondary" onclick="$(popup).modal('hide')">Закрыть</button>
|
||||
</div>
|
||||
`;
|
||||
$(popup).modal('show');
|
||||
});
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
const btnInfo = cardItem.querySelector('.card-item__btn');
|
||||
btnInfo.addEventListener('click', function () {
|
||||
const popup = document.getElementById('popup');
|
||||
popup.querySelector('.modal-body').innerHTML = '';
|
||||
webSDK.loadTreatPlaceView({
|
||||
protocolId: this.dataset.protocolId,
|
||||
treatcode: this.dataset.treatcode,
|
||||
container: popup.querySelector('.modal-body')
|
||||
});
|
||||
|
||||
if (!helper.isMobile()) {
|
||||
$(popup).modal('show');
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user