127 lines
6.3 KiB
HTML
127 lines
6.3 KiB
HTML
{% 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 %}
|