domovoy_bot/web/templates/dashboard.html
Admin cef2ac3714 v1.19 ИГ рассылка + объявления 14 дней + настройки
🔥 ОБЪЯВЛЕНИЯ:
• Срок действия: 7 → 14 дней

🎯 ИНИЦИАТИВНАЯ ГРУППА:
• Добавлена кнопка 'Рассылка ИГ' в меню
• Команда /ig_broadcast для членов ИГ
• Поддержка текста + фото + файлов
• Настройка лимита в веб-панели

⚙️ ВЕБ-ПАНЕЛЬ:
• Новая страница /settings
• Настройка лимита рассылки ИГ (секунды)
• Кнопки статистики фильтруют пользователей
• Индикатор активного фильтра

🎨 UI:
• Исправлен <font> → emoji (Telegram не поддерживает)
• Цветные заголовки через emoji

📁 ФАЙЛЫ:
• handlers/ads.py: 14 дней
• handlers/initiative_group.py: рассылка ИГ
• web/app.py: API настроек
• web/templates/settings.html: страница настроек
• utils/ui_styles.py: без <font> тегов
• database: settings table

Co-authored-by: Qwen-Coder <qwen-coder@alibabacloud.com>
2026-03-10 17:01:30 +00:00

207 lines
8.8 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.

<!DOCTYPE html>
<html lang="ru">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Домовой Бот - Админ Панель</title>
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/css/bootstrap.min.css" rel="stylesheet">
<link href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.11.0/font/bootstrap-icons.css" rel="stylesheet">
<style>
:root {
--primary-color: #2c3e50;
--secondary-color: #3498db;
--success-color: #27ae60;
--warning-color: #f39c12;
--danger-color: #e74c3c;
}
body {
background-color: #f8f9fa;
}
.sidebar {
min-height: 100vh;
background: linear-gradient(180deg, var(--primary-color) 0%, #1a252f 100%);
}
.sidebar .nav-link {
color: rgba(255,255,255,0.8);
padding: 1rem;
transition: all 0.3s;
}
.sidebar .nav-link:hover,
.sidebar .nav-link.active {
color: white;
background-color: rgba(255,255,255,0.1);
}
.sidebar .nav-link i {
margin-right: 0.5rem;
}
.stat-card {
border-radius: 10px;
padding: 1.5rem;
color: white;
margin-bottom: 1rem;
transition: transform 0.3s;
}
.stat-card:hover {
transform: translateY(-5px);
}
.stat-card.primary { background: linear-gradient(135deg, var(--secondary-color), #2980b9); }
.stat-card.success { background: linear-gradient(135deg, var(--success-color), #229954); }
.stat-card.warning { background: linear-gradient(135deg, var(--warning-color), #d68910); }
.stat-card.danger { background: linear-gradient(135deg, var(--danger-color), #c0392b); }
.stat-card .stat-value {
font-size: 2.5rem;
font-weight: bold;
}
.stat-card .stat-label {
font-size: 0.9rem;
opacity: 0.9;
}
.content {
padding: 2rem;
}
.card {
border: none;
box-shadow: 0 0 20px rgba(0,0,0,0.1);
margin-bottom: 1.5rem;
}
.card-header {
background-color: white;
border-bottom: 2px solid #f0f0f0;
font-weight: 600;
}
</style>
</head>
<body>
<div class="container-fluid">
<div class="row">
<!-- Sidebar -->
<div class="col-md-2 sidebar p-0">
<div class="p-3 text-white text-center">
<h4><i class="bi bi-house-door"></i> Домовой Бот</h4>
<small>Админ Панель v1.11</small>
</div>
<nav class="nav flex-column">
<a class="nav-link active" href="/"><i class="bi bi-speedometer2"></i> Дашборд</a>
<a class="nav-link" href="/users"><i class="bi bi-people"></i> Пользователи</a>
<a class="nav-link" href="/verification"><i class="bi bi-shield-check"></i> Верификация</a>
<a class="nav-link" href="/phones"><i class="bi bi-telephone"></i> Телефоны</a>
<a class="nav-link" href="/broadcast"><i class="bi bi-broadcast"></i> Рассылки</a>
<a class="nav-link" href="/polls"><i class="bi bi-bar-chart"></i> Опросы</a>
<a class="nav-link" href="/events"><i class="bi bi-calendar-event"></i> События</a>
<a class="nav-link" href="/schedules"><i class="bi bi-clock"></i> Расписания</a>
<a class="nav-link" href="/export"><i class="bi bi-download"></i> Экспорт</a>
<a class="nav-link" href="/settings"><i class="bi bi-gear"></i> Настройки</a>
</nav>
</div>
<!-- Main Content -->
<div class="col-md-10 content">
<div class="d-flex justify-content-between align-items-center mb-4">
<h2>Дашборд</h2>
<div>
<span class="text-muted">Админ: {{ username }}</span>
<a href="/" class="btn btn-outline-primary btn-sm ms-2">
<i class="bi bi-arrow-clockwise"></i> Обновить
</a>
</div>
</div>
<!-- Stats Cards -->
<div class="row">
<div class="col-md-3">
<a href="/users?filter=all" style="text-decoration: none;">
<div class="stat-card primary">
<div class="stat-value">{{ stats.users }}</div>
<div class="stat-label">Пользователей</div>
</div>
</a>
</div>
<div class="col-md-3">
<a href="/users?filter=verified" style="text-decoration: none;">
<div class="stat-card success">
<div class="stat-value">{{ stats.verified }}</div>
<div class="stat-label">Верифицировано</div>
</div>
</a>
</div>
<div class="col-md-3">
<a href="/users?filter=unverified" style="text-decoration: none;">
<div class="stat-card warning">
<div class="stat-value">{{ stats.unverified }}</div>
<div class="stat-label">Не верифицировано</div>
</div>
</a>
</div>
<div class="col-md-3">
<a href="/users?filter=active_unverified" style="text-decoration: none;">
<div class="stat-card danger">
<div class="stat-value">{{ stats.active_unverified }}</div>
<div class="stat-label">Активных (50+ сообщ.)</div>
</div>
</a>
</div>
</div>
<!-- Additional Stats -->
<div class="row mt-3">
<div class="col-md-6">
<div class="card">
<div class="card-header">
<i class="bi bi-megaphone"></i> Объявления
</div>
<div class="card-body">
<h3 class="text-center">{{ stats.ads }}</h3>
<p class="text-center text-muted">Активных объявлений</p>
</div>
</div>
</div>
<div class="col-md-6">
<div class="card">
<div class="card-header">
<i class="bi bi-calendar-event"></i> События
</div>
<div class="card-body">
<h3 class="text-center">{{ stats.schedules }}</h3>
<p class="text-center text-muted">Предстоящих событий</p>
</div>
</div>
</div>
</div>
<!-- Quick Actions -->
<div class="card mt-4">
<div class="card-header">
<i class="bi bi-lightning"></i> Быстрые действия
</div>
<div class="card-body">
<a href="/users" class="btn btn-primary me-2">
<i class="bi bi-people"></i> Пользователи
</a>
<a href="/export" class="btn btn-success me-2">
<i class="bi bi-download"></i> Экспорт JSON
</a>
<a href="/settings" class="btn btn-secondary">
<i class="bi bi-gear"></i> Настройки
</a>
</div>
</div>
</div>
</div>
</div>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.0/dist/js/bootstrap.bundle.min.js"></script>
</body>
</html>