92 lines
3.9 KiB
HTML
92 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
|
||
</div>
|
||
<div class="card-body">
|
||
<p>Экспорт всех пользователей и сообщений в JSON формат.</p>
|
||
<button class="btn btn-matrix w-100" onclick="exportJSON()">
|
||
<i class="bi bi-download"></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-info-circle"></i> ИНФОРМАЦИЯ
|
||
</div>
|
||
<div class="card-body">
|
||
<p>Экспорт включает:</p>
|
||
<ul class="text-success opacity-75">
|
||
<li>Всех пользователей</li>
|
||
<li>Все сообщения</li>
|
||
<li>Даты и время</li>
|
||
<li>Квартиры и телефоны</li>
|
||
</ul>
|
||
<p class="text-muted small">
|
||
Файл сохраняется в директории <code>exports/</code>
|
||
</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{% endblock %}
|
||
|
||
{% block extra_script %}
|
||
<script>
|
||
async function exportJSON() {
|
||
const resultDiv = document.getElementById('exportResult');
|
||
resultDiv.innerHTML = '<div class="alert alert-info"><div class="spinner-border spinner-border-sm me-2"></div>Генерация файла...</div>';
|
||
|
||
try {
|
||
const response = await fetch('/api/export/json');
|
||
|
||
if (response.ok) {
|
||
// Получаем файл как blob
|
||
const blob = await response.blob();
|
||
const url = window.URL.createObjectURL(blob);
|
||
|
||
// Извлекаем имя файла из заголовка или генерим сами
|
||
const contentDisposition = response.headers.get('Content-Disposition');
|
||
let fileName = 'domovoy_export.json';
|
||
if (contentDisposition && contentDisposition.indexOf('filename=') !== -1) {
|
||
fileName = contentDisposition.split('filename=')[1].replace(/"/g, '');
|
||
}
|
||
|
||
// Создаем невидимую ссылку для скачивания
|
||
const a = document.createElement('a');
|
||
a.href = url;
|
||
a.download = fileName;
|
||
document.body.appendChild(a);
|
||
a.click();
|
||
window.URL.revokeObjectURL(url);
|
||
a.remove();
|
||
|
||
resultDiv.innerHTML = `
|
||
<div class="alert alert-success">
|
||
✅ Файл успешно сгенерирован и отправлен в загрузки!<br>
|
||
<small>Имя файла: ${fileName}</small>
|
||
</div>
|
||
`;
|
||
} else {
|
||
const errorData = await response.json();
|
||
resultDiv.innerHTML = `<div class="alert alert-danger">❌ Ошибка: ${errorData.error || 'Неизвестная ошибка'}</div>`;
|
||
}
|
||
} catch (error) {
|
||
resultDiv.innerHTML = `<div class="alert alert-danger">❌ Ошибка сети: ${error.message}</div>`;
|
||
}
|
||
}
|
||
</script>
|
||
{% endblock %}
|