feat: release v1.8.0 — connections dashboard, VK OAuth, sync config, catalog browser

- Connections dashboard with add/remove flow and background health checks
- VK OAuth connection with profile info and health monitoring
- Sync configuration page with master toggle and filter summary
- Catalog browser with store/group/product tables, filter management, CSV export
- Alembic migrations for all new tables
- run/read_config.py for shell sync script DB integration
- CHANGELOG.md updated for v1.8.0

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
mguschin
2026-03-06 16:08:19 +03:00
parent cfc7229daf
commit 9aeef73b10
20 changed files with 2010 additions and 85 deletions

View File

@@ -2,8 +2,14 @@
{% block title %}Подключения — EvoSync{% endblock %}
{% block content %}
<h1 class="h4 mb-4">Подключения</h1>
<div class="d-flex align-items-center justify-content-between mb-4">
<h1 class="h4 mb-0">Подключения</h1>
<a href="/connections/add" class="btn btn-primary btn-sm">
<i class="bi bi-plus-lg me-1"></i>Добавить
</a>
</div>
{% if connections %}
<div class="row g-3">
{% for conn in connections %}
<div class="col-sm-6 col-lg-4">
@@ -18,9 +24,7 @@
{% endif %}
</div>
<div class="ms-auto">
{% if not conn.connected %}
<i class="bi bi-circle text-secondary fs-5" title="Не подключено"></i>
{% elif conn.is_online %}
{% if conn.is_online %}
<i class="bi bi-circle-fill text-success fs-5" title="Онлайн"></i>
{% else %}
<i class="bi bi-circle-fill text-danger fs-5" title="Офлайн"></i>
@@ -28,18 +32,17 @@
</div>
</div>
<div class="d-grid gap-2">
{% if conn.connected %}
<a href="{{ conn.connect_url }}" class="btn btn-outline-primary btn-sm">Переподключить</a>
<form method="post" action="{{ conn.disconnect_url }}">
<button type="submit" class="btn btn-outline-danger btn-sm w-100">Отключить</button>
</form>
{% else %}
<a href="{{ conn.connect_url }}" class="btn btn-primary btn-sm">Подключить</a>
{% endif %}
<div class="d-flex gap-2">
<a href="{{ conn.configure_url }}" class="btn btn-outline-primary btn-sm flex-fill">Настроить</a>
<form method="post" action="/connections/delete?type={{ conn.type }}">
<button type="submit"
class="btn btn-outline-danger btn-sm"
onclick="return confirm('Вы уверены, что хотите отключить {{ conn.name }}?')">
Отключить
</button>
</form>
</div>
</div>
{% if conn.connected %}
<div class="card-footer text-muted small">
{% if conn.last_checked_at %}
Проверено: {{ conn.last_checked_at.strftime("%d.%m.%Y %H:%M") }}
@@ -47,9 +50,18 @@
Статус ещё не проверялся
{% endif %}
</div>
{% endif %}
</div>
</div>
{% endfor %}
</div>
{% else %}
<div class="text-center py-5 text-muted">
<i class="bi bi-plug fs-1 mb-3 d-block"></i>
<p class="mb-3">Нет подключённых сервисов</p>
<a href="/connections/add" class="btn btn-primary">
<i class="bi bi-plus-lg me-1"></i>Добавить подключение
</a>
</div>
{% endif %}
{% endblock %}