domovoy_bot/web/templates/export.html

92 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
</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 %}