мс вместо сек, идемпотентность (кнопка блокируется после успеха), v1.9

This commit is contained in:
2026-06-17 07:14:17 +04:00
parent e0c58fcbd0
commit 4474190cae
2 changed files with 10 additions and 6 deletions
+3 -3
View File
@@ -221,7 +221,7 @@ class ContractsApp:
"UPDATE documents SET parsed_text=%s, status='parsed' WHERE id=%s",
(ztext, str(zdoc_id)),
)
zelapsed = round(time_mod.time() - zf_start, 1)
zelapsed = round(time_mod.time() - zf_start, 2)
files_processed += 1
yield f"data: {json.dumps({'type': 'file_done', 'name': zname, 'time_s': zelapsed, 'elements': len(zelements)})}\n\n"
except Exception as e:
@@ -242,11 +242,11 @@ class ContractsApp:
"UPDATE documents SET parsed_text=%s, status='parsed' WHERE id=%s",
(text, str(s["doc_id"])),
)
elapsed = round(time_mod.time() - file_start, 1)
elapsed = round(time_mod.time() - file_start, 2)
files_processed += 1
yield f"data: {json.dumps({'type': 'file_done', 'name': s['filename'], 'time_s': elapsed, 'elements': len(elements)})}\n\n"
total_time = round(time_mod.time() - start_time, 1)
total_time = round(time_mod.time() - start_time, 2)
yield f"data: {json.dumps({'type': 'summary', 'total_time_s': total_time, 'total_bytes': total_bytes, 'files_processed': files_processed})}\n\n"
return Response(generate(), mimetype="text/event-stream")
+7 -3
View File
@@ -47,7 +47,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.8</span></span>
<span class="title">Сверка договоров <span style="font-weight:400;color:var(--muted);font-size:12px;">v1.9</span></span>
</div>
<div class="content">
@@ -265,7 +265,7 @@
var now = Date.now();
document.querySelectorAll('.proc-timer').forEach(function(el) {
var start = parseInt(el.dataset.start);
if (start) el.textContent = '⏳ ' + Math.round((now - start) / 1000) + 'с';
if (start) el.textContent = '⏳ ' + ((now - start) / 1000).toFixed(1) + 'с';
});
}, 500);
@@ -310,7 +310,11 @@
else if (d.type === 'summary') {
clearInterval(timerInterval);
es.close();
resetBtn();
// Идемпотентность: больше нельзя запустить
parseBtn.disabled = true;
parseBtn.innerHTML = '<i data-lucide="check" style="width:16px;height:16px;"></i> ✓ Готово';
lucide.createIcons();
var summaryRow = document.createElement('tr');
summaryRow.className = 'summary-row';