domovoy_bot/web/templates/export.html

84 lines
3.9 KiB
HTML
Raw 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 %}Экспорт - Домовой Бот{% 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 %}