diff --git a/script.js b/script.js index a87fa60..9ce7ba7 100644 --- a/script.js +++ b/script.js @@ -228,7 +228,7 @@ function vUpload() { for (var i = 0; i < D.files.length; i++) if (D.files[i].s === "ready") readyCount++; var all = readyCount === D.files.length; - var head = ""; + var head = headReady; if (all && !D.running) { head = '
' + 'Все материалы получены — пакет готов к запуску анализа' + @@ -236,15 +236,23 @@ function vUpload() { } var rows = D.files.map(function (f, i) { - return "" + - '' + esc(f.n) + '' + + var statusCell = pill(f.s); + if (f.s === "wait") statusCell += ' ждёт загрузки'; + return "" + + '' + esc(f.n) + "" + '' + esc(f.t) + "" + '' + esc(f.d) + "" + - '' + pill(f.s) + "" + - '
" + + '' + statusCell + "" + + '' + ""; }).join(""); + var headReady = hasWaiting + ? '
' + + "Пакет не собран" + + 'Не все файлы получены от кандидата — анализ станет доступен после загрузки остальных материалов.
' + : ""; + return '
Процесс' + '' + 'Заявка ' + num("ЭД-2026-118") + "
" + vStepper() + "
" + @@ -268,8 +276,8 @@ function vUpload() { '
' + (s.u ? pill("ok", "Синхронизирован") : pill("checked", "Синхронизация")) + "
"; }).join("") + "" + '

Что на этом экране

' + - "

Перед запуском анализа проверьте комплектность: для сверки нужны пояснительная записка и подтверждающие материалы. " + - "Анализ идёт по пяти источникам — законодательству и внутренним правилам. Статус «Готово к анализу» появляется после проверки каждого файла.

"; + "

Строками идёт по заявке и пакету документов. Статусы файлов: «Ожидает проверки» — файл ещё получен не был, «Готово к анализу» — файл проверен и получен. " + + "Когда собран весь пакет, вверху экрана появляется кнопка «Запустить анализ ИИ».

"; } /* ---------- Экран 2. Результаты анализа ИИ ---------- */ @@ -477,6 +485,50 @@ function nowTime() { } /* ---------- Действия ---------- */ +S.uploadFiles = function () { + var input = document.createElement("input"); + input.type = "file"; + input.multiple = true; + input.accept = ".pdf,.docx,.xlsx,.csv,.txt,.doc"; + input.onchange = function () { + var files = input.files || []; + if (files.length === 0) return; + var added = 0; + for (var i = 0; i < files.length; i++) { + var f = files[i]; + var exists = false; + for (var j = 0; j < D.files.length; j++) { + if (D.files[j].s === "wait" && D.files[j].n.toLowerCase().indexOf(f.name.toLowerCase().slice(0, 20)) >= 0) { + D.files[j].s = "ready"; + D.files[j].d = nowTime(); + exists = true; + added++; + break; + } + } + if (!exists) { + var ext = (f.name.lastIndexOf(".") >= 0) ? f.name.slice(f.name.lastIndexOf(".")) : ""; + var typeLabel = "Подтверждающий документ"; + if (f.name.toLowerCase().indexOf("записк") >= 0) typeLabel = "Пояснительная записка"; + D.files.push({ n: f.name, t: typeLabel, d: nowTime() + " (загрузка)", s: "ready" }); + added++; + } + } + save(); + render(); + toast(added + " файл(ов) добавлено в пакет", "ok"); + var allNow = D.files.every(function (x) { return x.s === "ready"; }); + if (allNow) toast("Пакет собран — анализ стал доступен", "ok"); + }; + input.click(); +}; + +S.fileReady = function (i) { + D.files[i].s = "ready"; + render(); + toast("Файл отмечен как готовый к анализу", "ok"); +}; + S.go = function (id) { D.view = id; render(); }; S.analyze = function () { diff --git a/style.css b/style.css index 37a77a8..433609b 100644 --- a/style.css +++ b/style.css @@ -8,6 +8,8 @@ /* Кнопки в строке таблицы */ .row-act { display: flex; align-items: center; justify-content: flex-end; gap: var(--kt-ai-space-2); } +tr[data-wait="true"] td { opacity: .7; } +tr[data-wait="true"] td:first-child { color: var(--kt-ai-status-warn-fg); font-weight: var(--kt-ai-weight-medium); } /* Шапка приложения: заголовок + подзаголовок */ .tb-title { display: flex; flex-direction: column; gap: 1px; min-width: 0; }