feat: ZIP-подтверждение + статусы duplicate/warning + сводка батча
This commit is contained in:
+28
-2
@@ -35,7 +35,10 @@ function statusToHTML(st) {
|
||||
case 'unzipping': return '⏳ распаковка...';
|
||||
case 'parsing': return '⏳ парсинг...';
|
||||
case 'parsed': return '<span class="status-ok">✓ ' + (st.count || 0) + ' эл.' + (st.elapsed ? ' (' + st.elapsed + 'с)' : '') + '</span>';
|
||||
case 'error': return '<span class="status-err">✗ ' + (st.text || 'Неизвестная ошибка') + '</span>';
|
||||
case 'error': return '<span class="status-err">✗ ' + escHtml(st.text || 'Неизвестная ошибка') + '</span>';
|
||||
case 'duplicate': return '<span style="color:var(--muted);">⤿ дубликат</span>';
|
||||
case 'warning': return '<span style="color:#eab308;">⚠ ' + escHtml(st.text || 'пустой') + '</span>';
|
||||
case 'no_format': return '<span class="status-err">✗ формат не поддерживается</span>';
|
||||
default: return '';
|
||||
}
|
||||
}
|
||||
@@ -367,6 +370,16 @@ async function addZipFile(file) {
|
||||
});
|
||||
if (!zipResp.ok || !zipResp.files) throw new Error('unzip failed');
|
||||
|
||||
// Подтверждение: показать список файлов перед загрузкой
|
||||
var fileList = zipResp.files.map(function(f) { return ' • ' + f.filename + ' (' + (f.size/1024).toFixed(1) + ' KB)'; }).join('\n');
|
||||
if (!confirm('Архив «' + file.name + '» — ' + total + ' файлов:\n\n' + fileList + '\n\nЗагрузить эти файлы?')) {
|
||||
// Отмена — убрать строку ZIP
|
||||
var zipPos2 = state.files.indexOf(zipEntry);
|
||||
if (zipPos2 >= 0) state.files.splice(zipPos2, 1);
|
||||
render(state);
|
||||
return;
|
||||
}
|
||||
|
||||
// Шаг 2: обработать каждый файл из архива
|
||||
// Временная строка ZIP остаётся в таблице — обновляем её статус
|
||||
var total = zipResp.files.length;
|
||||
@@ -443,7 +456,20 @@ async function addRegularFile(file, zipSource) {
|
||||
// Бэкенд возвращает doc_id и contract_id (нижний регистр — Python keys)
|
||||
if (resp && resp.contract_id) state.contractId = resp.contract_id;
|
||||
state.files[rowIdx].doc_id = resp.doc_id;
|
||||
state.files[rowIdx].status = { kind: 'uploaded' };
|
||||
|
||||
// Дубликат?
|
||||
if (resp && resp.duplicate_of) {
|
||||
state.files[rowIdx].status = { kind: 'duplicate' };
|
||||
render(state);
|
||||
return;
|
||||
}
|
||||
// Warning от парсинга?
|
||||
if (resp && resp.warning) {
|
||||
state.files[rowIdx].status = { kind: 'warning', text: resp.warning };
|
||||
render(state);
|
||||
} else {
|
||||
state.files[rowIdx].status = { kind: 'uploaded' };
|
||||
}
|
||||
state.files[rowIdx].uploaded = true;
|
||||
|
||||
// Авто-парсинг: бэкенд парсит всё (PDF + DOCX + DOC)
|
||||
|
||||
Reference in New Issue
Block a user