fix: Promise резолвился на прогрессе, contractId не ставился, v1.14
This commit is contained in:
+21
-43
@@ -59,7 +59,7 @@
|
||||
<body>
|
||||
<div class="topbar">
|
||||
<img src="{{ url_for('static', filename='nubes-logo.svg') }}" alt="Nubes">
|
||||
<span class="title">Сверка договоров <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.13</span></span>
|
||||
<span class="title">Сверка договоров <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.14</span></span>
|
||||
</div>
|
||||
|
||||
<div class="content">
|
||||
@@ -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: '<span style="color:var(--muted);">↑ 0%</span>' };
|
||||
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 = '<span style="color:var(--muted);">↑ ' + pct + '%</span>';
|
||||
renderTable();
|
||||
}
|
||||
return; // ждём следующий прогресс или завершение
|
||||
}
|
||||
// Завершено
|
||||
done = true;
|
||||
contractId = res.contract_id;
|
||||
var elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
||||
fileQueue[rowIdx].status = '<span class="status-ok">✓ ' + elapsed + 'с</span>';
|
||||
fileQueue[rowIdx].uploaded = true;
|
||||
try {
|
||||
var resp = await uploadFileXHR(f, contractId, function(pct) {
|
||||
fileQueue[rowIdx].status = '<span style="color:var(--muted);">↑ ' + pct + '%</span>';
|
||||
renderTable();
|
||||
});
|
||||
contractId = resp.contract_id;
|
||||
var elapsed = ((Date.now() - startTime) / 1000).toFixed(1);
|
||||
fileQueue[rowIdx].status = '<span class="status-ok">✓ ' + elapsed + 'с</span>';
|
||||
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 = '<span class="status-err">✗ ' + err.message + '</span>';
|
||||
renderTable();
|
||||
if (f.type === 'application/zip' || f.name.toLowerCase().endsWith('.zip')) {
|
||||
await showZipContents(f);
|
||||
}
|
||||
);
|
||||
} catch(err) {
|
||||
fileQueue[rowIdx].status = '<span class="status-err">✗ ' + err.message + '</span>';
|
||||
renderTable();
|
||||
}
|
||||
}
|
||||
|
||||
fileInput.value = '';
|
||||
fileInput.disabled = false;
|
||||
parseBtn.disabled = false;
|
||||
parseBtn.disabled = (contractId === null);
|
||||
parseBtn.innerHTML = '<i data-lucide="play" style="width:16px;height:16px;"></i> Парсинг';
|
||||
lucide.createIcons();
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user