From 1714abf766a3aeb2ccab5e8bae731cdead73453c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E2=80=9CNaeel=E2=80=9D?= Date: Wed, 17 Jun 2026 12:47:59 +0400 Subject: [PATCH] =?UTF-8?q?fix:=20Promise=20=D1=80=D0=B5=D0=B7=D0=BE=D0=BB?= =?UTF-8?q?=D0=B2=D0=B8=D0=BB=D1=81=D1=8F=20=D0=BD=D0=B0=20=D0=BF=D1=80?= =?UTF-8?q?=D0=BE=D0=B3=D1=80=D0=B5=D1=81=D1=81=D0=B5,=20contractId=20?= =?UTF-8?q?=D0=BD=D0=B5=20=D1=81=D1=82=D0=B0=D0=B2=D0=B8=D0=BB=D1=81=D1=8F?= =?UTF-8?q?,=20v1.14?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- site/templates/upload.html | 64 +++++++++++++------------------------- 1 file changed, 21 insertions(+), 43 deletions(-) diff --git a/site/templates/upload.html b/site/templates/upload.html index 81d580b..0159342 100644 --- a/site/templates/upload.html +++ b/site/templates/upload.html @@ -59,7 +59,7 @@
Nubes - Сверка договоров v1.13 + Сверка договоров v1.14
@@ -155,9 +155,9 @@ window.removeFile = removeFile; - // ── Загрузка файла (XHR с прогрессом) ────────────────────── + // ── Загрузка файла (XHR, возвращает Promise только при успехе/ошибке) ── - function uploadFile(file, cid) { + function uploadFileXHR(file, cid, onProgress) { return new Promise(function(resolve, reject) { var xhr = new XMLHttpRequest(); var url = '/' + (cid ? '?cid=' + cid : ''); @@ -165,9 +165,8 @@ xhr.timeout = 120000; xhr.upload.onprogress = function(e) { - if (e.lengthComputable) { - var pct = Math.round(e.loaded / e.total * 100); - resolve({_progress: true, pct: pct}); + if (e.lengthComputable && onProgress) { + onProgress(Math.round(e.loaded / e.total * 100)); } }; @@ -203,56 +202,35 @@ var f = newFiles[i]; if (fileQueue.find(function(q) { return q.name === f.name && q.size === f.size && !q.isZipChild; })) continue; - // Добавить строку с прогрессом var entry = { name: f.name, lastModified: f.lastModified, size: f.size, status: '↑ 0%' }; fileQueue.push(entry); var rowIdx = fileQueue.length - 1; renderTable(); - var row = document.getElementById('row_' + rowIdx); - var startTime = Date.now(); - // Загружаем - var lastPct = 0; - var done = false; - - uploadFile(f, contractId).then( - function(res) { - if (done) return; - if (res._progress) { - var pct = res.pct; - if (pct !== lastPct) { - lastPct = pct; - fileQueue[rowIdx].status = '↑ ' + pct + '%'; - renderTable(); - } - return; // ждём следующий прогресс или завершение - } - // Завершено - done = true; - contractId = res.contract_id; - var elapsed = ((Date.now() - startTime) / 1000).toFixed(1); - fileQueue[rowIdx].status = '✓ ' + elapsed + 'с'; - fileQueue[rowIdx].uploaded = true; + try { + var resp = await uploadFileXHR(f, contractId, function(pct) { + fileQueue[rowIdx].status = '↑ ' + pct + '%'; renderTable(); + }); + contractId = resp.contract_id; + var elapsed = ((Date.now() - startTime) / 1000).toFixed(1); + fileQueue[rowIdx].status = '✓ ' + elapsed + 'с'; + fileQueue[rowIdx].uploaded = true; + renderTable(); - // ZIP: показать содержимое - if (f.type === 'application/zip' || f.name.toLowerCase().endsWith('.zip')) { - showZipContents(f); - } - }, - function(err) { - if (done) return; - done = true; - fileQueue[rowIdx].status = '✗ ' + err.message + ''; - renderTable(); + if (f.type === 'application/zip' || f.name.toLowerCase().endsWith('.zip')) { + await showZipContents(f); } - ); + } catch(err) { + fileQueue[rowIdx].status = '✗ ' + err.message + ''; + renderTable(); + } } fileInput.value = ''; fileInput.disabled = false; - parseBtn.disabled = false; + parseBtn.disabled = (contractId === null); parseBtn.innerHTML = ' Парсинг'; lucide.createIcons(); });