From f10b8c3f75627dabcea1398d5309c49ae8e2ed96 Mon Sep 17 00:00:00 2001 From: Dauren777 Date: Wed, 3 Jun 2026 12:04:37 +0000 Subject: [PATCH] =?UTF-8?q?Email-=D1=83=D0=B2=D0=B5=D0=B4=D0=BE=D0=BC?= =?UTF-8?q?=D0=BB=D0=B5=D0=BD=D0=B8=D1=8F:=20=D0=BF=D0=BE=D0=B4=D1=82?= =?UTF-8?q?=D0=B2=D0=B5=D1=80=D0=B6=D0=B4=D0=B5=D0=BD=D0=B8=D0=B5=20=D1=81?= =?UTF-8?q?=20=D0=BE=D1=82=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=BE=D0=B9=20?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=BF=D0=BE=D1=87=D1=82=D1=83=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=87=D0=B0=D1=82=D1=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.html | 119 +++++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 111 insertions(+), 8 deletions(-) diff --git a/index.html b/index.html index 311e7ba..b7ed775 100644 --- a/index.html +++ b/index.html @@ -299,6 +299,10 @@ body{ +
+ + +
+
+
+
@@ -390,7 +397,14 @@ body{
-
✅ Аудит сохранён! Данные доступны в Дашборде и Истории.
+
@@ -533,7 +547,7 @@ function saveRegisteredUsers(data){localStorage.setItem('safetyAuditRegisteredUs function getAllUsers(){return{...getRegisteredUsers(),...PREDEFINED_USERS}} // ========== STATE ========== -let currentUser=null,currentPanel='newAudit',editId=null,charts={}; +let currentUser=null,currentPanel='newAudit',editId=null,charts={},lastSubmitted=null; function isAdmin(){return currentUser&¤tUser.login==='admin'} @@ -552,6 +566,7 @@ function init(){ document.getElementById('regLogin').addEventListener('keydown',function(e){if(e.key==='Enter')doRegister();}); document.getElementById('regPass').addEventListener('keydown',function(e){if(e.key==='Enter')doRegister();}); document.getElementById('regName').addEventListener('keydown',function(e){if(e.key==='Enter')doRegister();}); + document.getElementById('regEmail').addEventListener('keydown',function(e){if(e.key==='Enter')doRegister();}); } init(); @@ -759,6 +774,7 @@ function submitAudit(){ observerRole:document.getElementById('pabObserverRole').value.trim(), supervisor:document.getElementById('pabSupervisor').value.trim(), supervisorRole:document.getElementById('pabSupervisorRole').value.trim(), + email:document.getElementById('pabEmail').value.trim()||currentUser.email||'', overallSafe:overallSafe, categories:cats, totalViolations:totalViolations, @@ -772,10 +788,8 @@ function submitAudit(){ else{audits.unshift(entry);} saveAudits(audits); resetAuditForm(); - const s=document.getElementById('formSuccess'); - s.style.display='block'; - setTimeout(()=>s.style.display='none',3000); - window.scrollTo({top:0,behavior:'smooth'}); + lastSubmitted=entry; + showSuccess(entry); } function resetAuditForm(){ @@ -790,6 +804,7 @@ function resetAuditForm(){ document.getElementById('pabObserverRole').value=''; document.getElementById('pabSupervisor').value=''; document.getElementById('pabSupervisorRole').value=''; + document.getElementById('pabEmail').value=currentUser?currentUser.email||'':''; setOverall('safe'); editId=null; CATEGORIES.forEach(cat=>{ @@ -809,6 +824,88 @@ function resetAuditForm(){ document.getElementById('formSuccess').style.display='none'; } +function showSuccess(entry){ + const catsWithVio=CATEGORIES.filter(cat=>{ + const c=entry.categories&&entry.categories[cat.id]; + return c&&c.items.length>0; + }).map(c=>c.title).join(', ')||'все категории безопасны'; + + document.getElementById('successDetail').innerHTML=` + Бланк №${entry.number||'—'} | ${entry.date} | ${entry.timeStart||'—'}—${entry.timeEnd||'—'}
+ Место: ${entry.location} | Тип: ${entry.workType||'—'}
+ Наблюдатель: ${entry.observer} | Статус: ${entry.overallSafe?'ВСЕ БЕЗОПАСНО':'ВЫЯВЛЕНО '+entry.totalViolations+' НАРУШЕНИЙ'}
+ Категории с нарушениями: ${catsWithVio} + ${entry.email?'
Копия отправляется на: '+entry.email+'':''}`; + + const s=document.getElementById('formSuccess'); + s.style.display='block'; + window.scrollTo({top:s.offsetTop-80,behavior:'smooth'}); + setTimeout(()=>{if(s.style.display==='block')s.style.display='none';},30000); +} + +function sendEmailConfirm(){ + if(!lastSubmitted)return; + const e=lastSubmitted; + const emailTo=e.email||currentUser.email||''; + const subject='ПАБ №'+(e.number||'—')+' от '+e.date; + const body=`ПОДТВЕРЖДЕНИЕ ПОВЕДЕНЧЕСКОГО АУДИТА БЕЗОПАСНОСТИ (ПАБ) + +Бланк ПАБ №: ${e.number||'—'} +Дата: ${e.date} +Время: ${e.timeStart||'—'} — ${e.timeEnd||'—'} +Место: ${e.location} +Тип работы: ${e.workType||'—'} +Наблюдатель: ${e.observer} (${e.observerRole||'—'}) +Руководитель: ${e.supervisor||'—'} (${e.supervisorRole||'—'}) +Статус: ${e.overallSafe?'ВСЕ БЕЗОПАСНО':'ВЫЯВЛЕНО НАРУШЕНИЙ: '+e.totalViolations} + +=== РЕЗУЛЬТАТЫ ПО КАТЕГОРИЯМ === +${CATEGORIES.map(cat=>{ + const cdata=e.categories&&e.categories[cat.id]; + const items=cdata?cdata.items:[]; + return cat.title+': '+(items.length===0?'БЕЗОПАСНО':items.length+' наруш.: '+items.map(it=>it.item+(it.other?' ('+it.other+')':'')).join('; ')); +}).join('\n')} + +${e.violations&&e.violations.length>0?'\n=== НЕСООТВЕТСТВИЯ ===\n'+e.violations.map((v,i)=>(i+1)+'. '+v.nc+' | Исп: '+v.executor+' | Меры: '+v.measure+' | Отв: '+v.responsible).join('\n'):''} + +Аудит проведён в системе ПАБ. ${e.overallSafe?'Нарушений не выявлено.':'Требуются корректирующие меры.'}`; + + if(emailTo&&emailTo.includes('@')){ + window.location.href='mailto:'+encodeURIComponent(emailTo)+'?subject='+encodeURIComponent(subject)+'&body='+encodeURIComponent(body); + }else{ + alert('Не указан email для отправки. Укажите email в форме аудита или при регистрации.'); + } +} + +function printConfirm(){ + if(!lastSubmitted)return; + const e=lastSubmitted; + const w=window.open('','_blank','width=700,height=800'); + w.document.write(`ПАБ №${e.number||'—'} + + +

БЛАНК ПАБ №${e.number||'—'} от ${e.date}

+

Время: ${e.timeStart||'—'} — ${e.timeEnd||'—'} | Место: ${e.location}

+

Тип работы: ${e.workType||'—'} | Наблюдаемых: ${e.workerCount||0}

+

Наблюдатель: ${e.observer} (${e.observerRole||'—'})

+

Руководитель: ${e.supervisor||'—'} (${e.supervisorRole||'—'})

+

Статус: ${e.overallSafe?'ВСЕ БЕЗОПАСНО':'ВЫЯВЛЕНО '+e.totalViolations+' НАРУШЕНИЙ'}

+${CATEGORIES.map(cat=>{ + const cdata=e.categories&&e.categories[cat.id]; + const items=cdata?cdata.items:[]; + let rows=''; + items.forEach(it=>{rows+='☒'+it.item+(it.other?' — '+it.other:'')+'';}); + return '

'+cat.title+' — '+(items.length===0?'БЕЗОПАСНО':items.length+' наруш.')+'

'+rows+'
'; +}).join('')} +${e.violations&&e.violations.length>0?'

НЕСООТВЕТСТВИЯ

'+e.violations.map((v,i)=>'').join('')+'
НесоответствиеИсполнительМерыОтветственныйДата
'+(i+1)+''+v.nc+''+v.executor+''+v.measure+''+v.responsible+''+v.date+'
':''} +`); + w.document.close(); +} + // ========== DATA STORAGE ========== function getAudits(){try{return JSON.parse(localStorage.getItem('safetyAudits')||'[]')}catch(e){return[]}} function saveAudits(data){localStorage.setItem('safetyAudits',JSON.stringify(data))} @@ -827,6 +924,7 @@ function doRegister(){ const login=document.getElementById('regLogin').value.trim().toLowerCase(); const pass=document.getElementById('regPass').value.trim(); const name=document.getElementById('regName').value.trim(); + const email=document.getElementById('regEmail').value.trim(); const role=document.getElementById('regRole').value; const err=document.getElementById('regError'); const ok=document.getElementById('regSuccess'); @@ -834,16 +932,18 @@ function doRegister(){ if(!login||login.length<2){err.textContent='Логин должен быть минимум 2 символа';err.style.display='block';return;} if(!pass||pass.length<3){err.textContent='Пароль должен быть минимум 3 символа';err.style.display='block';return;} if(!name){err.textContent='Укажите ФИО';err.style.display='block';return;} + if(!email||!email.includes('@')){err.textContent='Укажите корректный Email';err.style.display='block';return;} const allUsers=getAllUsers(); if(allUsers[login]){err.textContent='Такой логин уже занят';err.style.display='block';return;} err.style.display='none'; const users=getRegisteredUsers(); - users[login]={pass:pass,name:name,role:role}; + users[login]={pass:pass,name:name,email:email,role:role}; saveRegisteredUsers(users); ok.style.display='block'; document.getElementById('regLogin').value=''; document.getElementById('regPass').value=''; document.getElementById('regName').value=''; + document.getElementById('regEmail').value=''; document.getElementById('loginUser').value=login; setTimeout(()=>{switchLoginTab('login');ok.style.display='none';},2000); } @@ -865,13 +965,15 @@ function doLogout(){ document.getElementById('loginScreen').style.display='flex'; document.getElementById('appScreen').style.display='none'; document.getElementById('loginUser').value='';document.getElementById('loginPass').value=''; - document.getElementById('regLogin').value='';document.getElementById('regPass').value='';document.getElementById('regName').value=''; + document.getElementById('regLogin').value='';document.getElementById('regPass').value='';document.getElementById('regName').value='';document.getElementById('regEmail').value=''; document.getElementById('loginError').style.display='none';document.getElementById('regError').style.display='none';document.getElementById('regSuccess').style.display='none'; } function showApp(){ document.getElementById('loginScreen').style.display='none'; document.getElementById('appScreen').style.display='block'; document.getElementById('displayName').textContent=currentUser.login+' ('+currentUser.role+')'; + document.getElementById('pabObserver').value=currentUser.name; + document.getElementById('pabEmail').value=currentUser.email||''; switchPanel('newAudit',document.querySelector('[data-panel="newAudit"]')); } @@ -1049,6 +1151,7 @@ function editAudit(id){ document.getElementById('pabObserverRole').value=a.observerRole||''; document.getElementById('pabSupervisor').value=a.supervisor||''; document.getElementById('pabSupervisorRole').value=a.supervisorRole||''; + document.getElementById('pabEmail').value=a.email||''; setOverall(a.overallSafe?'safe':'danger'); CATEGORIES.forEach(cat=>{ const cdata=a.categories&&a.categories[cat.id];