Расширенная Фрамингемская шкала оценки сердечно-сосудистого риска
Демографические данные
Антропометрические показатели
Артериальное давление
Лабораторные показатели
Факторы риска и анамнез
Образ жизни
5 баллов
Медикаментозная терапия
Результат расчета расширенной Фрамингемской шкалы:
Расширенная Фрамингемская шкала оценки сердечно-сосудистого риска
${resultElement.innerHTML}Дата расчета: ${new Date().toLocaleDateString('ru-RU')} ${new Date().toLocaleTimeString('ru-RU')}
`); printWindow.document.close(); // Добавляем небольшую задержку перед печатью, чтобы стили успели загрузиться setTimeout(() => { printWindow.print(); // Закрытие окна после печати может не работать во всех браузерах из соображений безопасности. // printWindow.close(); }, 250); // 250ms задержка console.log("Медицинский калькулятор: Запущена печать."); // Отладочное сообщение } // Функция exportResult для экспорта в HTML function exportResult(elementId, filename) { console.log("Медицинский калькулятор: Функция 'Экспорт' вызвана (формат HTML)."); // Отладочное сообщение const resultElement = document.getElementById(elementId); if (!resultElement || resultElement.style.display === 'none') { alert('Сначала выполните расчет!'); console.warn("Медицинский калькулятор: Попытка экспорта до расчета."); // Отладочное сообщение return; } // Получаем HTML-содержимое блока с результатом const resultHTMLContent = resultElement.innerHTML; // Стили для экспортированного HTML - адаптированы из основного CSS const exportStyles = ` body { font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif; margin: 20px; color: #333; line-height: 1.6; } h2 { color: #01608c; text-align: center; margin-bottom: 20px; border-bottom: 3px solid #01608c; padding-bottom: 15px; font-size: 28px; font-weight: 700; } .result-container { /* Note: This container div might not be needed in the exported HTML, but keeping for structure */ margin-top: 0; /* Adjust margin for the export file */ padding: 0; /* Adjust padding */ background: none; /* Remove background */ border-left: none; /* Remove border */ } .result-title { font-size: 20px; font-weight: 700; color: #2c3e50; margin-bottom: 15px; } .result-text { font-size: 16px; line-height: 1.6; color: #34495e; } .risk-low { color: #27ae60; font-weight: 600; } .risk-moderate { color: #f39c12; font-weight: 600; } .risk-high { color: #e74c3c; font-weight: 600; } .risk-very-high { color: #c0392b; font-weight: 700; } .score-display { background: #3498db; color: white; padding: 15px; border-radius: 10px; text-align: center; font-size: 24px; font-weight: 700; margin: 15px 0; } .recommendations { background: #e8f4fd; padding: 20px; border-radius: 10px; margin-top: 15px; border-left: 4px solid #3498db; } .recommendations h4 { color: #2c3e50; margin-bottom: 10px; } .recommendations ul { margin-left: 20px; color: #34495e; } .recommendations li { margin-bottom: 5px; } `; // Создаем полный HTML документ для экспорта const htmlContent = `Расширенная Фрамингемская шкала оценки сердечно-сосудистого риска
${resultHTMLContent}Дата расчета: ${new Date().toLocaleDateString('ru-RU')} ${new Date().toLocaleTimeString('ru-RU')}
`; // Создаем Blob с типом text/html const blob = new Blob([htmlContent], { type: 'text/html;charset=utf-8' }); const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = `${filename}_${new Date().toISOString().split('T')[0]}.html`; // Изменяем расширение на .html link.style.display = 'none'; // Скрываем ссылку document.body.appendChild(link); // Добавляем в body (необходимо для click в некоторых браузерах) link.click(); document.body.removeChild(link); // Удаляем ссылку после клика // Освобождаем URL объекта URL.revokeObjectURL(link.href); console.log("Медицинский калькулятор: Запущен экспорт в HTML."); // Отладочное сообщение } // Инициализация слушателей событий const initCalculatorEvents = function() { console.log("Медицинский калькулятор: Инициализация слушателей событий..."); // Отладочное сообщение 5 const container = document.querySelector('.medical-calculator-isolated .calculator-container'); const floatingButtonsContainer = document.querySelector('.floating-buttons'); // Get the floating buttons container if (!container) { console.error('Медицинский калькулятор: Контейнер калькулятора (.medical-calculator-isolated .calculator-container) не найден.'); // Отладочное сообщение 6 // Попробуем переинициализировать через короткое время, если контейнер не найден сразу setTimeout(initCalculatorEvents, 500); // Повторить попытку через 500мс return; } console.log("Медицинский калькулятор: Контейнер калькулятора найден. Привязываю делегированный слушатель к нему:", container); // Отладочное сообщение // --- Делегированный слушатель для кнопок калькулятора --- container.addEventListener('click', function(event) { // console.log("Медицинский калькулятор: Клик внутри контейнера калькулятора.", event.target); // Отладочное сообщение (может быть много!) // Проверяем, была ли нажата кнопка (или элемент внутри кнопки) внутри button-group const clickedButton = event.target.closest('.medical-calculator-isolated .button-group .btn'); if (clickedButton) { // Предотвращаем действие по умолчанию (например, отправку формы, если бы кнопка была внутри