domovoy_bot/web/templates/sudrf.html

127 lines
6.3 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% extends "base.html" %}
{% block title %}ГАС Правосудие - МКД ЛенКом 37{% endblock %}
{% block nav_sudrf %}active{% endblock %}
{% block content %}
<div class="mb-3">
<h4 class="mb-1" style="font-size: 16px; font-weight: bold;">Сбор материалов судебных дел (ГАС «Правосудие»)</h4>
<div class="small text-muted">Автоматизированная выгрузка карточек дел, определений и решений для базы NotebookLM</div>
</div>
<div class="row g-3">
<!-- Инструкция и Статус -->
<div class="col-md-6">
<div class="card h-100">
<div class="card-header">
ИНСТРУКЦИЯ И УПРАВЛЕНИЕ
</div>
<div class="card-body d-flex flex-column justify-content-between">
<div>
<p class="small text-muted">
Модуль собирает электронные документы судебных процессов по дому (ej.sudrf.ru), преобразует вложения в PDF и загружает в единый аналитический контур.
</p>
<div class="mb-3">
<div style="font-weight: bold;">Шаг 1: Подготовка сессии</div>
<div class="small text-muted">Нажмите кнопку «Запустить сессию» ниже. Будет открыт браузер на виртуальном рабочем столе.</div>
</div>
<div class="mb-3">
<div style="font-weight: bold;">Шаг 2: Вход через Госуслуги (ЕСИА)</div>
<div class="small text-muted">Перейдите по ссылке VNC и подтвердите вход по СМС в личном кабинете.</div>
</div>
<div>
<div style="font-weight: bold;">Шаг 3: Автоматический экспорт</div>
<div class="small text-muted">После авторизации скрипт перехватит сессию, скачает дела и сформирует PDF.</div>
</div>
</div>
<div class="mt-3 pt-3 border-top" style="border-color: var(--border-light) !important;">
<div class="d-flex justify-content-between align-items-center mb-2">
<span>Статус процесса:</span>
<div id="sudrfStatusBadge" class="badge-status">ПРОВЕРКА</div>
</div>
<button id="runSudrfParserBtn" class="btn-unix btn-unix-primary w-100 py-2">
<i class="bi bi-play-circle"></i> Запустить сборку ГАС Правосудие
</button>
</div>
</div>
</div>
</div>
<!-- VNC и Логи -->
<div class="col-md-6">
<div class="card h-100">
<div class="card-header d-flex justify-content-between align-items-center">
<span>VNC-ЭКРАН И ЖУРНАЛ СКАНИРОВАНИЯ</span>
<button id="refreshSudrfStatusBtn" class="btn-unix">
<i class="bi bi-arrow-clockwise"></i> Обновить
</button>
</div>
<div class="card-body d-flex flex-column">
<a href="http://192.168.10.116:6080/vnc.html" target="_blank" class="btn-unix w-100 text-center py-2 mb-2">
<i class="bi bi-display"></i> Открыть VNC экран (noVNC)
</a>
<div class="small text-muted mb-2">
<i>Экран браузера отображается в noVNC сразу после запуска сессии.</i>
</div>
<div class="small text-muted mb-1">Журнал работы:</div>
<pre id="sudrfLogs" class="flex-grow-1 mb-0" style="min-height: 220px; overflow-y: scroll; background-color: #ffffff; border: 1px solid var(--border-color); font-size: 11px;"></pre>
</div>
</div>
</div>
</div>
<script>
document.getElementById('runSudrfParserBtn').addEventListener('click', async function() {
const btn = this;
if (!confirm('Запустить сборку судебного архива ГАС Правосудие? Потребуется войти через Госуслуги во VNC.')) return;
btn.disabled = true;
btn.innerHTML = '<span class="spinner-border spinner-border-sm"></span> Сессия запускается...';
try {
const response = await fetch('/api/sudrf/run', { method: 'POST' });
const result = await response.json();
alert(result.message);
} catch (e) {
alert('Ошибка при запуске: ' + e);
} finally {
btn.disabled = false;
btn.innerHTML = '<i class="bi bi-play-circle"></i> Запустить сборку ГАС Правосудие';
refreshSudrfStatus();
}
});
async function refreshSudrfStatus() {
const badge = document.getElementById('sudrfStatusBadge');
const logs = document.getElementById('sudrfLogs');
try {
const response = await fetch('/api/sudrf/status');
const data = await response.json();
if (data.alive) {
badge.className = 'badge-status badge-success';
badge.innerText = 'РАБОТАЕТ';
} else {
badge.className = 'badge-status';
badge.innerText = 'ОЖИДАНИЕ';
}
logs.innerText = data.log || 'Лог чист';
logs.scrollTop = logs.scrollHeight;
} catch (e) {
badge.className = 'badge-status badge-warning';
badge.innerText = 'ОШИБКА API';
}
}
document.getElementById('refreshSudrfStatusBtn').addEventListener('click', refreshSudrfStatus);
window.addEventListener('load', refreshSudrfStatus);
setInterval(refreshSudrfStatus, 30000);
</script>
{% endblock %}