fix: экран 1 — добавлены кнопки «Загрузка файлов» и «Загрузить», ждущие файлы подсвечены
This commit is contained in:
parent
26564269d6
commit
d2eeb631f1
66
script.js
66
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 = '<div class="kt-ai-banner" data-tone="ok" style="margin-bottom:var(--kt-ai-stack-block);display:flex;align-items:center;gap:var(--kt-ai-space-5)">' +
|
||||
'<span style="flex:1;min-width:0">Все материалы получены — пакет готов к запуску анализа</span>' +
|
||||
@ -236,15 +236,23 @@ function vUpload() {
|
||||
}
|
||||
|
||||
var rows = D.files.map(function (f, i) {
|
||||
return "<tr>" +
|
||||
'<td data-label="Файл">' + esc(f.n) + '</td>' +
|
||||
var statusCell = pill(f.s);
|
||||
if (f.s === "wait") statusCell += ' <span class="kt-ai-chip" data-tone="orange" style="margin-left:var(--kt-ai-space-2)">ждёт загрузки</span>';
|
||||
return "<tr" + (f.s === "wait" ? ' data-wait="true"' : "") + ">" +
|
||||
'<td data-label="Файл">' + esc(f.n) + "</td>" +
|
||||
'<td data-label="Тип"><span class="kt-ai-meta">' + esc(f.t) + "</span></td>" +
|
||||
'<td data-label="Загружен"><span class="kt-ai-num" style="font-size:var(--kt-ai-text-xs)">' + esc(f.d) + "</span></td>" +
|
||||
'<td data-label="Статус">' + pill(f.s) + "</td>" +
|
||||
'<td><div class="row-act"><button class="kt-ai-icon-button" title="Просмотреть содержимое" onclick="S.viewFile(' + i + ")'>" + icon("eye") + "</button></div></td>" +
|
||||
'<td data-label="Статус">' + statusCell + "</td>" +
|
||||
'<td class="row-act"><button class="kt-ai-btn" data-size="sm" data-variant="ghost" onclick="S.viewFile(' + i + ')">Смотреть</button></td>' +
|
||||
"</tr>";
|
||||
}).join("");
|
||||
|
||||
var headReady = hasWaiting
|
||||
? '<div class="kt-ai-banner" data-tone="info" style="margin-bottom:var(--kt-ai-stack-block)">' +
|
||||
"<strong>Пакет не собран</strong>" +
|
||||
'<span class="kt-ai-meta" style="display:block;margin-top:2px">Не все файлы получены от кандидата — анализ станет доступен после загрузки остальных материалов.</span></div>'
|
||||
: "";
|
||||
|
||||
return '<section class="sec"><div class="sec-h">Процесс' +
|
||||
'<span class="spacer"></span>' +
|
||||
'<span class="kt-ai-meta">Заявка ' + num("ЭД-2026-118") + "</span></div>" + vStepper() + "</section>" +
|
||||
@ -268,8 +276,8 @@ function vUpload() {
|
||||
'<div>' + (s.u ? pill("ok", "Синхронизирован") : pill("checked", "Синхронизация")) + "</div></div>";
|
||||
}).join("") + "</div></section>" +
|
||||
'<section class="kt-ai-conclusion"><h3>Что на этом экране</h3>' +
|
||||
"<p>Перед запуском анализа проверьте комплектность: для сверки нужны пояснительная записка и подтверждающие материалы. " +
|
||||
"Анализ идёт по пяти источникам — законодательству и внутренним правилам. Статус «Готово к анализу» появляется после проверки каждого файла.</p></section>";
|
||||
"<p>Строками идёт по заявке и пакету документов. Статусы файлов: «Ожидает проверки» — файл ещё получен не был, «Готово к анализу» — файл проверен и получен. " +
|
||||
"Когда собран весь пакет, вверху экрана появляется кнопка «Запустить анализ ИИ».</p></section>";
|
||||
}
|
||||
|
||||
/* ---------- Экран 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 () {
|
||||
|
||||
@ -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; }
|
||||
|
||||
Loading…
Reference in New Issue
Block a user