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 // ── Автозагрузка при выборе файлов ──────────────────────────