From ddc3404556a3f845671881a2bda7236680a8d408 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Thu, 18 Jun 2026 21:12:30 +0400 Subject: [PATCH] =?UTF-8?q?v1.0.33:=20cfthread=20=E2=80=94=20=D0=BC=D0=B3?= =?UTF-8?q?=D0=BD=D0=BE=D0=B2=D0=B5=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BE=D1=82?= =?UTF-8?q?=D0=B2=D0=B5=D1=82=20+=20=D0=BE=D0=B4=D0=B8=D0=BD=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=BF=D1=80=D0=BE=D1=81=20=D0=BD=D0=B0=20=D0=B2=D1=81?= =?UTF-8?q?=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- index.cfm | 63 ++++++++-------- upload.cfm | 210 +++++++++++++++++++++-------------------------------- 2 files changed, 115 insertions(+), 158 deletions(-) diff --git a/index.cfm b/index.cfm index 5aa6f75..71f12c5 100644 --- a/index.cfm +++ b/index.cfm @@ -64,7 +64,7 @@
Nubes - Сверка договоров v1.0.32 — Lucee + Сверка договоров v1.0.33 — Lucee
@@ -221,7 +221,7 @@ fileInput.addEventListener('change', function() { renderTable(); }); -// ── Загрузка (читаем все → шлём по одному) ───────────── +// ── Загрузка (читаем все → шлём одним JSON) ──────────── uploadBtn.addEventListener('click', function() { if (fileQueue.length === 0) return; uploadBtn.disabled = true; @@ -233,13 +233,13 @@ uploadBtn.addEventListener('click', function() { var readIdx = 0; function readAll() { - if (readIdx >= pending.length) { sendSeq(0); return; } + if (readIdx >= pending.length) { sendAll(); return; } var f = pending[readIdx]; f.status = 'читаю...'; renderTable(); var reader = new FileReader(); reader.onload = function(e) { - payloads.push({file: f, b64: e.target.result.split(',')[1]}); + payloads.push({filename: f.name, data: e.target.result.split(',')[1]}); readIdx++; uploadTimer.textContent = 'Чтение ' + readIdx + '/' + pending.length; readAll(); @@ -253,46 +253,49 @@ uploadBtn.addEventListener('click', function() { reader.readAsDataURL(f.file); } - function sendSeq(i) { - if (i >= payloads.length) { + function sendAll() { + if (payloads.length === 0) { uploadTimer.style.display = 'none'; uploadBtn.disabled = false; - var hasErrors = fileQueue.some(function(f) { return f.status && f.status.indexOf('error') === 0; }); - if (contractId && !hasErrors) { - document.getElementById('actionsCard').style.display = 'block'; - document.getElementById('chatCard').style.display = 'block'; - } return; } - var p = payloads[i]; - var f = p.file; - uploadTimer.textContent = 'Отправка ' + (i+1) + '/' + payloads.length; - var payload = {filename: f.name, data: p.b64}; - if (contractId) payload.contract_id = contractId; + uploadTimer.textContent = 'Отправка...'; + var body = {files: payloads}; + if (contractId) body.contract_id = contractId; - fetch('/upload.cfm?_=' + Date.now() + '_' + i, { + fetch('/upload.cfm', { method: 'POST', headers: {'Content-Type': 'application/json'}, - body: JSON.stringify(payload) + body: JSON.stringify(body) }).then(function(r) { return r.json(); }) - .then(function(r) { - if (r.OK) { - contractId = r.CONTRACT_ID; - f.doc_id = r.DOC_ID; - f.status = 'uploaded'; + .then(function(data) { + uploadTimer.style.display = 'none'; + uploadBtn.disabled = false; + if (data.OK) { + contractId = data.CONTRACT_ID || contractId; + for (var i = 0; i < pending.length; i++) { + pending[i].status = 'uploaded'; + } var elapsed = ((Date.now() - uploadStartTime) / 1000).toFixed(1); - log('✅ ' + f.name + ' (' + formatSize(f.size) + ') — ' + elapsed + 'с'); + log('✅ ' + pending.length + ' файлов — ' + elapsed + 'с'); } else { - f.status = 'error: ' + (r.ERROR || 'неизв.'); - log('❌ ' + f.name + ': ' + (r.ERROR || '')); + for (var i = 0; i < pending.length; i++) { + pending[i].status = 'error: ' + (data.ERROR || 'неизв.'); + } + log('❌ ' + (data.ERROR || 'неизв.')); } renderTable(); - sendSeq(i + 1); + if (contractId) { + document.getElementById('actionsCard').style.display = 'block'; + document.getElementById('chatCard').style.display = 'block'; + } }).catch(function(e) { - f.status = 'error: ' + e.message; - log('❌ ' + f.name + ': ' + e.message); + uploadTimer.style.display = 'none'; + uploadBtn.disabled = false; + for (var i = 0; i < pending.length; i++) { + pending[i].status = 'error: ' + e.message; + } renderTable(); - sendSeq(i + 1); }); } diff --git a/upload.cfm b/upload.cfm index 866b2bc..2a92f88 100644 --- a/upload.cfm +++ b/upload.cfm @@ -5,156 +5,110 @@ - - OK - + OK - + - - - #serializeJSON(result)# - + + #serializeJSON(result)# - - - - - - - - - - - - - - - - - INSERT INTO documents (filename, mime_type, original_bytes, status) - VALUES ( - , - , - , - 'uploaded' - ) - - - SELECT id FROM documents - WHERE filename = - AND status = 'uploaded' ORDER BY created_at DESC LIMIT 1 - - - - - - - INSERT INTO contracts (number, client) VALUES ( - , '' - ) - - - SELECT id FROM contracts ORDER BY created_at DESC LIMIT 1 - - - + + + + + + + + + + + + + + + - - INSERT INTO supplements (contract_id, document_id, type) VALUES ( - , - , - - ) - - - - - - - - - - - #serializeJSON(result)# - - + + + INSERT INTO documents (filename, mime_type, original_bytes, status) + VALUES (,,,'uploaded') + + + SELECT id FROM documents WHERE filename= AND status='uploaded' ORDER BY created_at DESC LIMIT 1 + + + + + + INSERT INTO contracts (number, client) VALUES (,'') + + + SELECT id FROM contracts ORDER BY created_at DESC LIMIT 1 + + + + + + INSERT INTO supplements (contract_id, document_id, type) VALUES (,,) + + + + + + + + - - - - - - #serializeJSON(result)# - - - - - - - - - - - - - - - INSERT INTO documents (filename, mime_type, original_bytes, status) - VALUES ( - , - , - , - 'uploaded' - ) - - - SELECT id FROM documents - WHERE filename = - AND status = 'uploaded' ORDER BY created_at DESC LIMIT 1 - - - - - - - INSERT INTO contracts (number, client) VALUES ( - , '' - ) - - - SELECT id FROM contracts ORDER BY created_at DESC LIMIT 1 - - + + + + + + - - INSERT INTO supplements (contract_id, document_id, type) VALUES ( - , - , - - ) - - - - - + + + + INSERT INTO documents (filename, mime_type, original_bytes, status) VALUES (,,,'uploaded') + + + SELECT id FROM documents WHERE filename= AND status='uploaded' ORDER BY created_at DESC LIMIT 1 + + + + + + INSERT INTO contracts (number, client) VALUES (,'') + + + SELECT id FROM contracts ORDER BY created_at DESC LIMIT 1 + + + + + + INSERT INTO supplements (contract_id, document_id, type) VALUES (,,) + + + + - +