Add privacy policy page and consent checkbox to both modals (152-FZ compliance)

This commit is contained in:
2026-05-28 09:44:17 +00:00
parent 9de7538309
commit e88e33e7e8
4 changed files with 208 additions and 1 deletions
+33 -1
View File
@@ -142,6 +142,12 @@
<div class="access-products-loading">Загрузка...</div>
</div>
</div>
<div class="access-consent-field">
<label class="access-consent-label">
<input type="checkbox" id="am-consent" />
<span>Согласен на <a href="/privacy" target="_blank" class="access-consent-link">обработку персональных данных</a></span>
</label>
</div>
<div id="am-error" class="access-modal-error" style="display:none"></div>
</div>
<div class="access-modal-footer">
@@ -168,6 +174,7 @@
<div class="access-field"><label>Телефон <span class="req">*</span></label><input id="am-phone" type="tel" placeholder="+7 (999) 000-00-00" /></div>
<div class="access-field"><label>Ваш менеджер в MONT</label><input id="am-manager" type="text" placeholder="Если известно — укажите имя" /></div>
<div class="access-field"><label>Интересующие продукты</label><div id="am-products" class="access-products-wrap"><div class="access-products-loading">Загрузка...</div></div></div>
<div class="access-consent-field"><label class="access-consent-label"><input type="checkbox" id="am-consent" /><span>Согласен на <a href="/privacy" target="_blank" class="access-consent-link">обработку персональных данных</a></span></label></div>
<div id="am-error" class="access-modal-error" style="display:none"></div>`;
document.querySelector('.access-modal-footer').innerHTML = `<button type="button" class="access-btn-cancel" id="am-cancel">Отмена</button><button type="button" class="access-btn-submit" id="am-submit">Запросить доступ</button>`;
document.getElementById('am-cancel').addEventListener('click', closeModal);
@@ -241,6 +248,7 @@
const emailRe = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const phoneRe = /^[\+\d][\d\s\-\(\)]{6,18}$/;
const consentEl = document.getElementById('am-consent');
const fields = [
{ el: nameEl, check: () => !!name, msg: 'Введите имя и фамилию' },
{ el: companyEl, check: () => !!company, msg: 'Введите название компании' },
@@ -253,6 +261,14 @@
if (f.el && !f.check()) { f.el.classList.add('am-invalid'); errors.push(f.msg); }
else if (f.el) f.el.classList.remove('am-invalid');
});
if (!consentEl || !consentEl.checked) {
errors.push('Необходимо согласие на обработку персональных данных');
const cf = document.querySelector('.access-consent-field');
if (cf) cf.classList.add('am-invalid-consent');
} else {
const cf = document.querySelector('.access-consent-field');
if (cf) cf.classList.remove('am-invalid-consent');
}
if (errors.length) {
if (errorEl) { errorEl.textContent = errors.join(' • '); errorEl.style.display = 'block'; }
@@ -336,6 +352,12 @@
<label>Сообщение <span class="req">*</span></label>
<textarea id="cm-text" class="access-textarea" placeholder="Ваш вопрос или предложение..." rows="4"></textarea>
</div>
<div class="access-consent-field">
<label class="access-consent-label">
<input type="checkbox" id="cm-consent" />
<span>Согласен на <a href="/privacy" target="_blank" class="access-consent-link">обработку персональных данных</a></span>
</label>
</div>
<div id="cm-error" class="access-modal-error" style="display:none"></div>
</div>
<div class="access-modal-footer" id="cm-footer">
@@ -359,7 +381,8 @@
<div class="access-field"><label>Email <span class="req">*</span></label><input id="cm-email" type="email" placeholder="ivan@company.ru" /></div>
<div class="access-field"><label>Телефон <span class="req">*</span></label><input id="cm-phone" type="tel" placeholder="+7 (999) 000-00-00" /></div>
<div class="access-field"><label>Сообщение <span class="req">*</span></label><textarea id="cm-text" class="access-textarea" placeholder="Ваш вопрос или предложение..." rows="4"></textarea></div>
<div id="cm-error" class="access-modal-error" style="display:none"></div>`;
<div class="access-consent-field"><label class="access-consent-label"><input type="checkbox" id="cm-consent" /><span>Согласен на <a href="/privacy" target="_blank" class="access-consent-link">обработку персональных данных</a></span></label></div>
<div id="cm-error" class="access-modal-error" style="display:none"></div>`;
document.getElementById('cm-footer').innerHTML = `<button type="button" class="access-btn-cancel" id="cm-cancel">Отмена</button><button type="button" class="access-btn-submit" id="cm-submit">Отправить</button>`;
document.getElementById('cm-cancel').addEventListener('click', closeContact);
document.getElementById('cm-submit').addEventListener('click', submitContact);
@@ -401,6 +424,7 @@
const emailRe = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
const phoneRe = /^[\+\d][\d\s\-\(\)]{6,18}$/;
const consentEl = document.getElementById('cm-consent');
const fields = [
{ el: nameEl, check: () => !!name, msg: 'Введите имя' },
{ el: emailEl, check: () => emailRe.test(email), msg: 'Введите корректный email' },
@@ -413,6 +437,14 @@
if (f.el && !f.check()) { f.el.classList.add('am-invalid'); errors.push(f.msg); }
else if (f.el) f.el.classList.remove('am-invalid');
});
if (!consentEl || !consentEl.checked) {
errors.push('Необходимо согласие на обработку персональных данных');
const cf = document.querySelector('#contact-modal .access-consent-field');
if (cf) cf.classList.add('am-invalid-consent');
} else {
const cf = document.querySelector('#contact-modal .access-consent-field');
if (cf) cf.classList.remove('am-invalid-consent');
}
if (errors.length) {
if (errorEl) { errorEl.textContent = errors.join(' • '); errorEl.style.display = 'block'; }
+137
View File
@@ -0,0 +1,137 @@
<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="utf-8"/>
<meta name="viewport" content="width=device-width, initial-scale=1"/>
<title>Политика конфиденциальности — Полигон MONT</title>
<meta name="robots" content="noindex"/>
<link rel="icon" type="image/svg+xml" href="/static/favicon.svg"/>
<link rel="icon" type="image/png" href="/static/favicon.png"/>
<style>
*, *::before, *::after { box-sizing: border-box; margin: 0; padding: 0; }
body {
background: linear-gradient(160deg, #070f1c 0%, #0a1f3a 100%);
min-height: 100vh;
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif;
color: #c8d8ea;
padding: 40px 20px 60px;
}
.wrap {
max-width: 780px;
margin: 0 auto;
}
.back-link {
display: inline-flex;
align-items: center;
gap: 6px;
color: #5b9bd5;
text-decoration: none;
font-size: 0.9rem;
margin-bottom: 32px;
opacity: 0.85;
transition: opacity 0.2s;
}
.back-link:hover { opacity: 1; }
h1 {
font-size: 1.7rem;
font-weight: 700;
color: #e8f1fb;
margin-bottom: 6px;
}
.subtitle {
font-size: 0.9rem;
color: #6a8aaa;
margin-bottom: 36px;
}
h2 {
font-size: 1.05rem;
font-weight: 600;
color: #d0e4f7;
margin: 28px 0 10px;
}
p, li {
font-size: 0.95rem;
line-height: 1.7;
color: #a8bdd4;
}
ul {
padding-left: 20px;
margin-top: 6px;
}
li { margin-bottom: 4px; }
a { color: #5b9bd5; }
.divider {
border: none;
border-top: 1px solid rgba(255,255,255,0.07);
margin: 32px 0;
}
.contact-box {
background: rgba(255,255,255,0.04);
border: 1px solid rgba(255,255,255,0.08);
border-radius: 10px;
padding: 20px 24px;
margin-top: 28px;
}
.contact-box p { color: #a8bdd4; }
.contact-box strong { color: #d0e4f7; }
</style>
</head>
<body>
<div class="wrap">
<a class="back-link" href="/">&#8592; Вернуться на главную</a>
<h1>Политика конфиденциальности</h1>
<p class="subtitle">Последнее обновление: 28 мая 2026 г.</p>
<p>Настоящая Политика конфиденциальности описывает, как ООО «МОНТ» (далее — «Оператор») осуществляет сбор, использование и хранение персональных данных пользователей, оставивших заявку на получение доступа к Инфраструктурному полигону MONT (<strong>stend.4mont.ru</strong>, <strong>stand.mont.ru</strong>).</p>
<h2>1. Оператор персональных данных</h2>
<p>ООО «МОНТ»<br>
Юридический адрес: г. Москва<br>
Сайт: <a href="https://www.mont.com/" target="_blank">www.mont.com</a><br>
Email для обращений по вопросам ПД: <a href="mailto:privacy@mont.com">privacy@mont.com</a></p>
<h2>2. Какие данные мы собираем</h2>
<p>При заполнении формы запроса доступа мы получаем:</p>
<ul>
<li>Имя и фамилия</li>
<li>Название компании</li>
<li>Адрес электронной почты</li>
<li>Номер телефона</li>
<li>Имя вашего менеджера в MONT (необязательно)</li>
<li>Список интересующих продуктов</li>
</ul>
<h2>3. Цели обработки</h2>
<p>Персональные данные обрабатываются исключительно для рассмотрения заявки на доступ к демостендам и последующей связи с вами по вопросам предоставления доступа.</p>
<h2>4. Правовое основание</h2>
<p>Обработка персональных данных осуществляется на основании вашего явного согласия в соответствии со ст. 6, ч. 1, п. 1 и ст. 9 Федерального закона № 152-ФЗ «О персональных данных».</p>
<h2>5. Передача данных третьим лицам</h2>
<p>Персональные данные не хранятся в базе данных портала. После отправки формы данные передаются ответственным сотрудникам MONT по защищённому каналу для обработки заявки. Данные не продаются и не передаются третьим лицам в коммерческих целях.</p>
<h2>6. Срок хранения</h2>
<p>Данные хранятся в течение срока, необходимого для обработки заявки и предоставления доступа, но не более 1 года с момента подачи заявки, если иное не требуется законодательством РФ.</p>
<h2>7. Ваши права</h2>
<p>В соответствии с 152-ФЗ вы вправе:</p>
<ul>
<li>получить информацию об обработке ваших персональных данных;</li>
<li>потребовать уточнения, блокирования или уничтожения ваших данных;</li>
<li>отозвать согласие на обработку персональных данных в любой момент.</li>
</ul>
<p>Для реализации любого из перечисленных прав направьте запрос на <a href="mailto:privacy@mont.com">privacy@mont.com</a>.</p>
<h2>8. Защита данных</h2>
<p>Передача данных осуществляется по зашифрованному соединению (HTTPS). Доступ к данным имеют только уполномоченные сотрудники MONT.</p>
<hr class="divider"/>
<div class="contact-box">
<p><strong>Вопросы по обработке персональных данных:</strong><br>
<a href="mailto:privacy@mont.com">privacy@mont.com</a></p>
</div>
</div>
</body>
</html>