Согласно СанПиН, администрация радиационного объекта несет ответственность за радиационную безопасность и должна обеспечивать подготовку и аттестацию по вопросам обеспечения радиационной безопасности руководителей и исполнителей работ, специалистов служб радиационной безопасности, других лиц, постоянно или временно выполняющих работы с источниками ионизирующего излучения.
Сотрудники организаций, работающие с источниками ионизирующего излучения (персонал группы «А»)
document.addEventListener("DOMContentLoaded", function () { // Проверяем, было ли уже показано окно сегодня или форма была отправлена const today = new Date().toDateString(); const lastShownDate = localStorage.getItem('wheelLastShownDate'); const formSubmitted = localStorage.getItem('wheelFormSubmitted');
// Если форма была отправлена или окно уже показывалось сегодня - не показываем if (formSubmitted === 'true' || lastShownDate === today) { return; }
// Задержка показа на 5 секунд setTimeout(function() { const modal = document.createElement("div"); modal.id = "wheel-modal"; modal.innerHTML = `
`; document.body.appendChild(modal);
const canvas = document.getElementById("wheelCanvas"); const ctx = canvas.getContext("2d"); const spinButton = document.getElementById("spin-button"); const spinZag = document.querySelector(".spin-zag"); const resultText = document.getElementById("result-text"); const formContainer = document.getElementById("form-container"); const successMessage = document.getElementById("success-message"); const closeButton = document.querySelector(".close-button"); const modalOverlay = document.querySelector(".modal-overlay"); const wheelContainer = document.querySelector(".wheel-container"); const segments = []; let spinning = false; let angle = 0; let spinAngle = 0; let idleSpeed = 0.5; let isIdleSpinning = true; let animationId = null; let wheelSize = 600; let currentPrize = "";
function resizeCanvas() { if (window.innerWidth <= 480) { wheelSize = 350; } else if (window.innerWidth <= 768) { wheelSize = 450; } else { wheelSize = 600; } canvas.width = wheelSize; canvas.height = wheelSize; drawWheel(); } function drawWheel() { const numSegments = segments.length; const arc = (2 * Math.PI) / numSegments; const centerX = canvas.width / 2; const centerY = canvas.height / 2; const radius = centerX - 5; ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.strokeStyle = "white"; ctx.lineWidth = 2; for (let i = 0; i < numSegments; i++) { const angle = i * arc; ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.lineTo( centerX + Math.cos(angle) * radius, centerY + Math.sin(angle) * radius ); ctx.stroke(); } for (let i = 0; i < numSegments; i++) { const startAngle = i * arc; const endAngle = startAngle + arc; ctx.beginPath(); ctx.moveTo(centerX, centerY); ctx.arc(centerX, centerY, radius, startAngle, endAngle); ctx.closePath(); ctx.fillStyle = i % 2 === 0 ? "#9E5B9B" : "#192f59"; ctx.fill(); ctx.strokeStyle = "white"; ctx.lineWidth = 2; ctx.stroke(); const textAngle = startAngle + arc / 2; let fontSize; if (wheelSize <= 350) { fontSize = 10; } else if (wheelSize <= 450) { fontSize = 12; } else { fontSize = 14; } ctx.save(); ctx.translate(centerX, centerY); ctx.rotate(textAngle); ctx.fillStyle = "#fff"; ctx.textAlign = "center"; ctx.font = `bold ${fontSize}px Arial`; const text = segments[i]; const maxCharsPerLine = wheelSize <= 350 ? 10 : 15; const lines = splitTextIntoLines(text, maxCharsPerLine); lines.forEach((line, index) => { const yOffset = (index - (lines.length - 1) / 2) * (fontSize + 2); ctx.fillText(line, radius * 0.7, yOffset); });
ctx.restore(); } }
function splitTextIntoLines(text, maxCharsPerLine) { const words = text.split(' '); const lines = []; let currentLine = words[0];
for (let i = 1; i < words.length; i++) { if (currentLine.length + words[i].length + 1 <= maxCharsPerLine) { currentLine += ' ' + words[i]; } else { lines.push(currentLine); currentLine = words[i]; } } lines.push(currentLine); return lines; } function animateWheel() { if (isIdleSpinning && !spinning) { angle += idleSpeed; } else if (spinning) { angle += spinAngle; spinAngle *= 0.98; if (spinAngle < 0.1) { spinning = false; spinAngle = 0; const winningIndex = Math.floor(segments.length - (angle / (360 / segments.length)) % segments.length); currentPrize = segments[winningIndex]; resultText.innerHTML = "Вы выиграли: " + currentPrize; formContainer.style.display = "block"; setHiddenPrizeValue(currentPrize); } } ctx.clearRect(0, 0, canvas.width, canvas.height); ctx.save(); ctx.translate(canvas.width / 2, canvas.height / 2); ctx.rotate((angle * Math.PI) / 180); ctx.translate(-canvas.width / 2, -canvas.height / 2); drawWheel(); ctx.restore(); animationId = requestAnimationFrame(animateWheel); } function setHiddenPrizeValue(prize) { const checkInterval = setInterval(() => { const prizeField = document.querySelector('input[name="hidden-prize"]'); if (prizeField) { prizeField.value = prize; console.log('Приз установлен:', prize); clearInterval(checkInterval); } }, 100); }
function startSpin() { if (spinning) return; isIdleSpinning = false; spinning = true; spinAngle = Math.random() * 20 + 15; spinButton.style.display = "none"; spinZag.style.display = "none"; resultText.innerHTML = ""; formContainer.style.display = "none"; successMessage.style.display = "none"; } function closeModal(event) { // Если кликнули на крестик или оверлей if (event.target.classList.contains("close-button") || event.target.classList.contains("modal-overlay")) { event.stopPropagation(); // Останавливаем всплытие
// Находим оверлей и скрываем его const modalOverlay = document.querySelector("#wheel-modal .modal-overlay"); if (modalOverlay) { modalOverlay.style.display = "none"; }
// Останавливаем анимацию колеса cancelAnimationFrame(animationId); } }
// Вешаем обработчик на body (делегирование событий) document.body.addEventListener("click", closeModal);
// Устанавливаем дату последнего показа localStorage.setItem('wheelLastShownDate', today);
window.addEventListener('resize', resizeCanvas); resizeCanvas(); animateWheel(); spinButton.addEventListener("click", startSpin); closeButton.addEventListener("click", closeModal); modalOverlay.addEventListener("click", closeModal);
document.addEventListener("wpcf7mailsent", function () { console.log('Отправлен приз:', currentPrize); successMessage.style.display = "block"; formContainer.style.display = "none";
// Помечаем форму как отправленную localStorage.setItem('wheelFormSubmitted', 'true');
setTimeout(function() { modal.style.display = "none"; cancelAnimationFrame(animationId); successMessage.style.display = "none"; angle = 0; isIdleSpinning = true; spinButton.style.display = "block"; spinZag.style.display = "block"; }, 5000); }, false); }, 5000); // Задержка 5 секунд перед показом });