feat(admin): раздел «Генерация картинок» — управление провайдером и тест

Новый админ-раздел: Account ID / токен (маскируется) / модель Cloudflare,
лимиты (пауза, дневной лимит) из БД, статистика, кнопка теста генерации.
imggenController: лимиты и модель теперь из конфига, поддержка JSON и
бинарного ответа CF, переиспользуемые generateImage() и stats().
Бэкенд GET/PUT /api/admin/imggen + POST /api/admin/imggen/test (admin-only).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-12 11:37:47 +03:00
parent 4e8c0841db
commit 88651d85ab
6 changed files with 286 additions and 42 deletions
+11
View File
@@ -1073,6 +1073,9 @@
<button class="admin-nav-item" data-tab="assistant" onclick="switchTab(this)" id="btn-tab-assistant" style="display:none">
<i data-lucide="sparkles" style="width:15px;height:15px"></i> Помощник Квантик
</button>
<button class="admin-nav-item" data-tab="imggen" onclick="switchTab(this)" id="btn-tab-imggen" style="display:none">
<i data-lucide="image" style="width:15px;height:15px"></i> Генерация картинок
</button>
<button class="admin-nav-item" data-tab="audit" onclick="switchTab(this)">
<i data-lucide="scroll-text" style="width:15px;height:15px"></i> Аудит-лог
</button>
@@ -1555,6 +1558,13 @@
<div id="assistant-admin"><div style="color:var(--muted);font-size:0.84rem">Загрузка…</div></div>
</div>
<!-- ── Генерация картинок ── -->
<div class="tab-pane" id="tab-imggen">
<div class="section-title">Генерация картинок</div>
<div class="perm-desc" style="margin-bottom:20px">ИИ-генерация изображений (Cloudflare Workers AI · FLUX/SDXL): провайдер, модель, лимиты и тест. Картинки — для иллюстраций и декора, не для точных схем.</div>
<div id="imggen-admin"><div style="color:var(--muted);font-size:0.84rem">Загрузка…</div></div>
</div>
<!-- ── Игры ── -->
<div class="tab-pane" id="tab-games">
<div class="section-title">Управление играми</div>
@@ -2128,6 +2138,7 @@
<script src="/js/admin/sections/sims.js"></script>
<script src="/js/admin/sections/games.js"></script>
<script src="/js/admin/sections/assistant.js"></script>
<script src="/js/admin/sections/imggen.js"></script>
<script src="/js/admin/sections/tpl.js"></script>
<script src="/js/admin/sections/subjects.js"></script>
<script src="/js/admin/sections/permissions.js"></script>