БЫЛО: Каждая из 14 страниц имела своё собственное вшитое меню
с разным набором кнопок (от 4 до 10 пунктов)
СТАЛО: Все 14 страниц наследуют base.html с единым меню из 14 пунктов
в 4 разделах: Пользователи / Коммуникации / Контент / Система
Убрано 1949 строк дублирующегося кода, добавлено 1323 строки чистого контента.
Экономия: -626 строк (32% сокращение).
Переписанные страницы:
- dashboard.html, users.html, verification.html
- phones.html, polls.html, events.html
- schedules.html, ads.html, scheduled_posts.html, export.html
Результат: На ЛЮБОЙ странице пользователь видит ВСЕ 14 пунктов меню.
Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
73 lines
2.5 KiB
HTML
73 lines
2.5 KiB
HTML
{% extends "base.html" %}
|
||
|
||
{% block title %}Экспорт - Домовой Бот{% endblock %}
|
||
|
||
{% block nav_export %}active{% endblock %}
|
||
|
||
{% block content %}
|
||
<h2 class="mb-4">Экспорт данных</h2>
|
||
|
||
<div class="row">
|
||
<div class="col-md-6">
|
||
<div class="card">
|
||
<div class="card-header">
|
||
<i class="bi bi-file-earmark-json"></i> Экспорт в JSON
|
||
</div>
|
||
<div class="card-body">
|
||
<p>Экспортирует всех пользователей и сообщения в JSON формат.</p>
|
||
<button class="btn btn-primary" 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">
|
||
<div class="card-header">
|
||
<i class="bi bi-info-circle"></i> Информация
|
||
</div>
|
||
<div class="card-body">
|
||
<p>Экспорт включает:</p>
|
||
<ul>
|
||
<li>Всех пользователей</li>
|
||
<li>Все сообщения</li>
|
||
<li>Даты и время</li>
|
||
<li>Квартиры и телефоны</li>
|
||
</ul>
|
||
<p class="text-muted small">
|
||
Файл сохраняется в папке exports/
|
||
</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>';
|
||
|
||
try {
|
||
const response = await fetch('/api/export/json');
|
||
const data = await response.json();
|
||
|
||
if (data.success) {
|
||
resultDiv.innerHTML = `
|
||
<div class="alert alert-success">
|
||
✅ Экспорт успешно!<br>
|
||
Файл: ${data.filepath}
|
||
</div>
|
||
`;
|
||
} else {
|
||
resultDiv.innerHTML = '<div class="alert alert-danger">Ошибка экспорта</div>';
|
||
}
|
||
} catch (error) {
|
||
resultDiv.innerHTML = `<div class="alert alert-danger">Ошибка: ${error.message}</div>`;
|
||
}
|
||
}
|
||
</script>
|
||
{% endblock %}
|