84 lines
3.9 KiB
HTML
84 lines
3.9 KiB
HTML
{% extends "base.html" %}
|
||
|
||
{% block title %}Экспорт - Домовой Бот{% endblock %}
|
||
{% block nav_export %}active{% endblock %}
|
||
|
||
{% block content %}
|
||
<h2 class="mb-4" style="color: var(--matrix-green); text-shadow: 0 0 10px var(--matrix-green);">>_ ЭКСПОРТ_ДАННЫХ</h2>
|
||
|
||
<div class="row">
|
||
<div class="col-md-6">
|
||
<div class="card border-success">
|
||
<div class="card-header border-success">
|
||
<i class="bi bi-file-earmark-json"></i> ЭКСПОРТ В JSON & GITEA
|
||
</div>
|
||
<div class="card-body">
|
||
<p>Экспорт ВСЕХ пользователей и сообщений. Файл будет автоматически отправлен в Gitea.</p>
|
||
<button class="btn btn-matrix w-100" onclick="exportJSON()">
|
||
<i class="bi bi-cloud-arrow-up"></i> ЗАПУСТИТЬ ПОЛНЫЙ ЭКСПОРТ
|
||
</button>
|
||
<div id="exportResult" class="mt-3"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<div class="col-md-6">
|
||
<div class="card border-success">
|
||
<div class="card-header border-success">
|
||
<i class="bi bi-graph-up"></i> СТАТИСТИКА ВЫГРУЗОК
|
||
</div>
|
||
<div class="card-body">
|
||
<div class="h4 text-matrix mb-3">
|
||
Всего выгрузок: <span class="badge bg-success">{{ export_stats.total }}</span>
|
||
</div>
|
||
<p>Последняя выгрузка:<br>
|
||
<span class="text-success">{{ fmt_local(export_stats.last_date) if export_stats.last_date else 'Никогда' }}</span></p>
|
||
<hr class="border-success">
|
||
<p class="text-muted small">
|
||
Автоматический экспорт выполняется раз в неделю (вс, 03:00) и пушится в репозиторий.
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{% endblock %}
|
||
|
||
{% block extra_script %}
|
||
<script>
|
||
async function exportJSON() {
|
||
const resultDiv = document.getElementById('exportResult');
|
||
const btn = document.querySelector('button[onclick="exportJSON()"]');
|
||
|
||
resultDiv.innerHTML = '<div class="alert alert-info"><div class="spinner-border spinner-border-sm me-2"></div>Сбор данных и отправка в Gitea...</div>';
|
||
btn.disabled = true;
|
||
|
||
try {
|
||
const response = await fetch('/api/export/json');
|
||
const data = await response.json();
|
||
|
||
if (response.ok && data.success) {
|
||
resultDiv.innerHTML = `
|
||
<div class="alert alert-success">
|
||
✅ <b>Успех!</b><br>
|
||
Файл: <code>${data.filename}</code><br>
|
||
Сообщений: ${data.messages}<br>
|
||
Статус Git: ${data.git ? '🚀 Отправлено в Gitea' : '❌ Ошибка Git'}<br>
|
||
<br>
|
||
<a href="/exports/${data.filename}" class="btn btn-outline-success btn-sm w-100 mb-2">
|
||
<i class="bi bi-download"></i> СКАЧАТЬ ФАЙЛ ЛОКАЛЬНО
|
||
</a>
|
||
<small>Страница обновится через 10 сек...</small>
|
||
</div>
|
||
`;
|
||
setTimeout(() => location.reload(), 10000);
|
||
} else {
|
||
resultDiv.innerHTML = `<div class="alert alert-danger">❌ Ошибка: ${data.error || 'Неизвестно'}</div>`;
|
||
}
|
||
} catch (error) {
|
||
resultDiv.innerHTML = `<div class="alert alert-danger">❌ Ошибка сети: ${error.message}</div>`;
|
||
} finally {
|
||
btn.disabled = false;
|
||
}
|
||
}
|
||
</script>
|
||
{% endblock %}
|