diff --git a/deploy/app.js b/deploy/app.js
index aac1fd3..f89c4b7 100644
--- a/deploy/app.js
+++ b/deploy/app.js
@@ -56,22 +56,75 @@ function resetStepper(fromId) {
function renderTable() {
if (fileQueue.length === 0) {
- fileTable.innerHTML = '
| Нет файлов — выберите .docx / .pdf |
';
+ fileTable.innerHTML = '| Нет файлов — выберите .docx / .pdf |
';
} else {
fileTable.innerHTML = fileQueue.map(function(f, i) {
- return '' +
- '| ' + escHtml(f.name) + ' | ' +
+ var rows = '
' +
+ '| ' +
+ (f.doc_id ? '▸' : '') +
+ escHtml(f.name) + ' | ' +
'' + formatDate(f.lastModified) + ' | ' +
'' + formatSize(f.size) + ' | ' +
'' + (f.status || '') + ' | ' +
' | ' +
' | ' +
- '
';
+ '' +
+ '| Загрузка... |
';
+ return rows;
}).join('');
}
lucide.createIcons();
}
+// ── Раскрыть/скрыть результат классификации под строкой файла ──
+window.toggleClassifyDetail = async function(i) {
+ var detailRow = document.getElementById('detail_' + i);
+ var expandIcon = document.getElementById('expand_' + i);
+ if (!detailRow) return;
+
+ if (detailRow.style.display !== 'none') {
+ detailRow.style.display = 'none';
+ if (expandIcon) expandIcon.textContent = '▸';
+ return;
+ }
+
+ var f = fileQueue[i];
+ if (!f || !f.doc_id) return;
+
+ detailRow.style.display = '';
+ if (expandIcon) expandIcon.textContent = '▾';
+
+ try {
+ var resp = await fetch(VM_API + '/api/documents/' + f.doc_id);
+ var qData = await resp.json();
+ if (!qData.ok) { detailRow.cells[0].innerHTML = 'Ошибка загрузки'; return; }
+
+ var html = '';
+ if (qData.classify_status === 'classified') {
+ html += '🏷️ Результат классификации
';
+ html += '';
+ if (qData.doc_type) html += 'Тип: ' + escHtml(qData.doc_type) + '';
+ if (qData.own_number) html += 'Номер: ' + escHtml(qData.own_number) + '';
+ if (qData.parent_number) html += 'Родительский: ' + escHtml(qData.parent_number) + '';
+ if (qData.doc_date) html += 'Дата: ' + escHtml(qData.doc_date) + '';
+ if (qData.counterparty) html += 'Контрагент: ' + escHtml(qData.counterparty) + '';
+ html += '
';
+ if (qData.classify_raw) {
+ html += 'Сырой ответ LLM
';
+ html += '' + escHtml(qData.classify_raw) + '
';
+ html += ' ';
+ }
+ } else if (qData.classify_status === 'failed') {
+ html += '✗ Ошибка классификации: ' + escHtml(qData.error_message || '?') + '';
+ } else {
+ html += 'Ещё не классифицирован';
+ }
+ detailRow.cells[0].innerHTML = html;
+ } catch(e) {
+ detailRow.cells[0].innerHTML = 'Ошибка: ' + escHtml(e.message) + '';
+ }
+};
+
// moveUp/moveDown/removeFile/openAbout/closeAbout — вынесены в app_utils.js
// ── Автозагрузка при выборе файлов ──────────────────────────