From d2eeb631f1780b3ba4cf88442eebfff1cafcb4d0 Mon Sep 17 00:00:00 2001 From: tore Date: Tue, 22 Sep 2026 10:47:40 +0000 Subject: [PATCH] =?UTF-8?q?fix:=20=D1=8D=D0=BA=D1=80=D0=B0=D0=BD=201=20?= =?UTF-8?q?=E2=80=94=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD?= =?UTF-8?q?=D1=8B=20=D0=BA=D0=BD=D0=BE=D0=BF=D0=BA=D0=B8=20=C2=AB=D0=97?= =?UTF-8?q?=D0=B0=D0=B3=D1=80=D1=83=D0=B7=D0=BA=D0=B0=20=D1=84=D0=B0=D0=B9?= =?UTF-8?q?=D0=BB=D0=BE=D0=B2=C2=BB=20=D0=B8=20=C2=AB=D0=97=D0=B0=D0=B3?= =?UTF-8?q?=D1=80=D1=83=D0=B7=D0=B8=D1=82=D1=8C=C2=BB,=20=D0=B6=D0=B4?= =?UTF-8?q?=D1=83=D1=89=D0=B8=D0=B5=20=D1=84=D0=B0=D0=B9=D0=BB=D1=8B=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D1=81=D0=B2=D0=B5=D1=87=D0=B5=D0=BD=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- script.js | 66 +++++++++++++++++++++++++++++++++++++++++++++++++------ style.css | 2 ++ 2 files changed, 61 insertions(+), 7 deletions(-) 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; }