Replace the entire Python/FastAPI backend with a Node.js/TypeScript stack: - Framework: Hono + @hono/node-server - Templates: Nunjucks (.njk) replacing Jinja2 (.html) - ORM: Drizzle ORM with mysql2 (same MariaDB schema, no migrations needed) - Sessions: hono-sessions with CookieStore - CSS: Pico CSS v2 replacing Bootstrap 5 (Bootstrap Icons CDN kept) - Dev: tsx watch; Prod: tsc + node dist/index.js Original Python app preserved in web-python/ as backup. Updated Dockerfile.web and docker-compose.yml for Node.js deployment. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
105 lines
5.6 KiB
HTML
105 lines
5.6 KiB
HTML
{% extends "base.html" %}
|
||
{% block title %}Подключение Эвотор — ЭВОСИНК{% endblock %}
|
||
|
||
{% block content %}
|
||
<div class="row justify-content-center">
|
||
<div class="col-sm-10 col-md-7 col-lg-6">
|
||
|
||
{% if error %}
|
||
<div class="alert alert-danger mt-4">
|
||
{% if error == "invalid_token" %}
|
||
<i class="bi bi-exclamation-triangle me-2"></i>Токен недействителен. Проверьте правильность и попробуйте снова.
|
||
{% elif error == "empty_token" %}
|
||
<i class="bi bi-exclamation-triangle me-2"></i>Введите токен.
|
||
{% else %}
|
||
<i class="bi bi-exclamation-triangle me-2"></i>Произошла ошибка при подключении: {{ error }}
|
||
{% endif %}
|
||
</div>
|
||
{% endif %}
|
||
|
||
<div class="card shadow-sm mt-4">
|
||
<div class="card-header">
|
||
<h1 class="h5 mb-0">Подключение Эвотор</h1>
|
||
</div>
|
||
|
||
{% if connection %}
|
||
{# ── CONNECTED STATE ── #}
|
||
<ul class="list-group list-group-flush">
|
||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||
<span class="text-muted small">Статус</span>
|
||
<span class="badge bg-success"><i class="bi bi-check-circle me-1"></i>Подключено</span>
|
||
</li>
|
||
{% if connection.store_name %}
|
||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||
<span class="text-muted small">Магазин</span>
|
||
<span>{{ connection.store_name }}</span>
|
||
</li>
|
||
{% endif %}
|
||
{% if connection.store_id %}
|
||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||
<span class="text-muted small">ID магазина</span>
|
||
<span class="font-monospace small text-muted">{{ connection.store_id }}</span>
|
||
</li>
|
||
{% endif %}
|
||
<li class="list-group-item d-flex justify-content-between align-items-center">
|
||
<span class="text-muted small">Подключено</span>
|
||
<span class="small">{{ connection.connected_at.strftime("%d.%m.%Y %H:%M") }}</span>
|
||
</li>
|
||
</ul>
|
||
<div class="card-footer">
|
||
<p class="text-muted small mb-2">Обновить токен (Личный кабинет Эвотор → <strong>Приложения → ЭвоСинк → Настройки</strong>):</p>
|
||
<form method="post" action="/evotor/token">
|
||
<div class="input-group input-group-sm">
|
||
<input type="text" name="token" class="form-control font-monospace" placeholder="Новый токен" required>
|
||
<button type="submit" class="btn btn-outline-secondary">Обновить</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
<div class="card-body d-grid">
|
||
<form method="post" action="/evotor/disconnect">
|
||
<button type="submit" class="btn btn-outline-danger w-100">Отключить аккаунт Эвотор</button>
|
||
</form>
|
||
</div>
|
||
|
||
{% else %}
|
||
{# ── NOT CONNECTED STATE ── #}
|
||
<div class="card-body">
|
||
<p class="text-muted mb-3">
|
||
Для подключения вам нужно установить приложение <strong>ЭвоСинк</strong> в личном кабинете Эвотор
|
||
и скопировать токен доступа из его настроек.
|
||
</p>
|
||
|
||
<ol class="text-muted small mb-4">
|
||
{% if app_url %}
|
||
<li class="mb-1">Откройте <a href="{{ app_url }}" target="_blank" rel="noopener">приложение ЭвоСинк в магазине Эвотор <i class="bi bi-box-arrow-up-right small"></i></a> и установите его.</li>
|
||
{% else %}
|
||
<li class="mb-1">Найдите приложение <strong>ЭвоСинк</strong> в магазине Эвотор и установите его.</li>
|
||
{% endif %}
|
||
<li class="mb-1">Перейдите в раздел <strong>Приложения → ЭвоСинк → Настройки</strong>.</li>
|
||
<li class="mb-1">Скопируйте токен доступа и вставьте его в поле ниже.</li>
|
||
</ol>
|
||
|
||
<form method="post" action="/evotor/token">
|
||
<div class="mb-3">
|
||
<label class="form-label small text-muted">Токен доступа</label>
|
||
<input type="text" name="token" class="form-control font-monospace" placeholder="Вставьте токен Эвотор" required autofocus>
|
||
</div>
|
||
<div class="d-grid">
|
||
<button type="submit" class="btn btn-primary">Подключить</button>
|
||
</div>
|
||
</form>
|
||
</div>
|
||
{% endif %}
|
||
|
||
</div>
|
||
|
||
<div class="mt-3 text-center">
|
||
<a href="/connections" class="text-muted small">
|
||
<i class="bi bi-arrow-left me-1"></i>Вернуться к подключениям
|
||
</a>
|
||
</div>
|
||
|
||
</div>
|
||
</div>
|
||
{% endblock %}
|