From 2bd9ec9621e944a90b62ce1f5be8d930caded62d Mon Sep 17 00:00:00 2001 From: WASRUSGEN Date: Sat, 30 May 2026 15:05:40 +0300 Subject: [PATCH] feat: signature + stamp integrated into generated documents (view + print) --- mockup.html | 71 +++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 69 insertions(+), 2 deletions(-) diff --git a/mockup.html b/mockup.html index 0c4a7a3..77b23b0 100644 --- a/mockup.html +++ b/mockup.html @@ -2389,7 +2389,7 @@ body{font-family:var(--font-ui);background:var(--surf);color:var(--ink);line-hei 📷 Загрузить фото печати - @@ -4761,6 +4761,59 @@ var _docMode = 'view'; var _docData = null; // текущий документ var _docIsClean = true; // true = клиент не вносил правок → колонтитул разрешён +// Стандартные размеры печатей (px при 96dpi → для print используем мм) +var STAMP_SIZES = { + round: { w: 151, h: 151, label: 'Круглая ⌀ 40 мм' }, + rect_ip: { w: 264, h: 144, label: 'ИП 38×70 мм' }, + rect_ooo: { w: 219, h: 144, label: 'ООО 38×58 мм' }, + triangle: { w: 189, h: 135, label: 'Треугольная 35×50 мм' }, +}; + +function _getRequisiteImages() { + var sig = localStorage.getItem('zashita_sig') || null; + var stamp = localStorage.getItem('zashita_stamp') || null; + var stampType = (document.getElementById('stamp-type-sel') || {}).value + || localStorage.getItem('zashita_stamp_type') || 'round'; + return { sig: sig, stamp: stamp, stampType: stampType }; +} + +function _buildSignatureBlock(req, forPrint) { + // req = {sig, stamp, stampType} + if (!req.sig && !req.stamp) return ''; + + var stampSize = STAMP_SIZES[req.stampType] || STAMP_SIZES.round; + // При печати: px → mm (96dpi: 1mm ≈ 3.78px) + var sigH = forPrint ? '14mm' : '56px'; + var stW = forPrint ? Math.round(stampSize.w/3.78) + 'mm' : stampSize.w * 0.4 + 'px'; + var stH = forPrint ? Math.round(stampSize.h/3.78) + 'mm' : stampSize.h * 0.4 + 'px'; + + var html = '
'; + + // Подпись слева + if (req.sig) { + html += '
' + + '
Подпись
' + + '' + + '
'; + } else { + html += '
'; + } + + // Печать справа + if (req.stamp) { + html += '
' + + '
М.П.
' + + '' + + '
'; + } + + html += '
'; + return html; +} + function _showGeneratedDoc(data) { _docData = data; _docMode = 'view'; @@ -4850,6 +4903,8 @@ function _renderDocModal() { : '
' +
               (data.text||'').replace(/') +
+        // Блок подписи и печати (если загружены)
+        (function(){ var r = _getRequisiteImages(); return r.sig||r.stamp ? _buildSignatureBlock(r, false) : ''; })() +
       '' +
 
       // ── Нижняя панель действий
@@ -5091,19 +5146,25 @@ function _printDoc() {
       ''
     : ''; // редактировался клиентом — без пометок
 
+  var req = _getRequisiteImages();
+  var sigBlock = (req.sig || req.stamp) ? _buildSignatureBlock(req, true) : '';
+
   var w = window.open('', '_blank');
   w.document.write(
     '' + ((_docData && _docData.title) || 'Документ') + '' +
     '' +
     '' +
       '
' + (text.tagName === 'TEXTAREA'
         ? text.value.replace(/' +
+      sigBlock +
       footer +
     '