feat: implement backend core with repricing logic, case management, and multi-service architecture

This commit is contained in:
2026-05-13 00:28:13 +03:00
parent 38f3199c33
commit d9aae5b85e
15 changed files with 596 additions and 90 deletions

View File

@@ -51,6 +51,8 @@
<button class="tab-btn" data-target="content-section"><i data-lucide="image" class="icon-sm"></i> Контент</button>
<button class="tab-btn" data-target="finance-section"><i data-lucide="wallet" class="icon-sm"></i> Финансы</button>
<button class="tab-btn" data-target="generator-section"><i data-lucide="wand-2" class="icon-sm"></i> Генератор</button>
<button class="tab-btn" data-target="analytics-section"><i data-lucide="search-code" class="icon-sm"></i> Deep Insight</button>
<button class="tab-btn" data-target="repricer-section"><i data-lucide="tags" class="icon-sm"></i> Репрайзер</button>
</div>
<main class="container">
@@ -85,6 +87,8 @@
<th>Магазин</th>
<th>Площадка</th>
<th>Статус API</th>
<th>Остатки (шт)</th>
<th>Дней до OOS</th>
<th>Продажи (сегодня)</th>
</tr>
</thead>
@@ -355,6 +359,94 @@
</div>
</section>
<!-- Deep Insight Section -->
<section id="analytics-section" class="section hidden">
<h2>AI Анализ конкурентов (Deep Insight)</h2>
<div class="platforms-grid">
<div class="platform-card">
<h3>Сравнение товаров</h3>
<p style="color: var(--color-text-dim); font-size: 0.9rem; margin-bottom: 1rem;">
Вставьте описание вашего товара и описание конкурента, чтобы ИИ нашел способ его победить.
</p>
<div style="display: flex; flex-direction: column; gap: 1rem;">
<label>Мое описание<textarea id="my-desc-input" rows="4" placeholder="Ваше описание..."></textarea></label>
<label>Описание конкурента<textarea id="comp-desc-input" rows="4" placeholder="Описание конкурента..."></textarea></label>
<button class="btn-primary" id="ai-analyze-comp-btn">
<i data-lucide="zap" class="icon-sm"></i> Запустить Deep Insight
</button>
</div>
</div>
<div id="insight-result" class="platform-card hidden" style="grid-column: 2 / -1;">
<div style="background: rgba(var(--color-primary-rgb), 0.1); border-left: 4px solid var(--color-primary); padding: 1rem; margin-bottom: 1.5rem;">
<h4 style="color: var(--color-primary);">Мощный слоган (Win Phrase):</h4>
<p id="insight-win-phrase" style="font-style: italic; font-size: 1.1rem; margin-top: 0.5rem;"></p>
</div>
<div class="platforms-grid" style="grid-template-columns: 1fr 1fr; gap: 1.5rem;">
<div>
<h4>Слабые места конкурента</h4>
<ul id="insight-weakness" style="margin-top: 0.5rem; color: var(--color-error); font-size: 0.9rem;"></ul>
</div>
<div>
<h4>Твои преимущества</h4>
<ul id="insight-advantages" style="margin-top: 0.5rem; color: var(--color-success); font-size: 0.9rem;"></ul>
</div>
</div>
<h4 style="margin-top: 1.5rem;">Стратегия захвата рынка</h4>
<p id="insight-strategy" style="margin-top: 0.5rem; line-height: 1.6; color: var(--color-text-dim);"></p>
</div>
</div>
</section>
<!-- Repricer Section -->
<section id="repricer-section" class="section hidden">
<div style="display: flex; justify-content: space-between; align-items: center; margin-bottom: 2rem;">
<h2>Авто-репрайзер (Динамические цены)</h2>
<button class="btn-primary" id="run-repricer-btn">
<i data-lucide="refresh-cw" class="icon-sm"></i> Обновить цены сейчас
</button>
</div>
<div class="platforms-grid">
<div class="platform-card" style="grid-column: 1 / 1;">
<h3>Новое правило</h3>
<form id="repricer-form" class="platform-form" style="margin-top: 1rem; display: flex; flex-direction: column; gap: 0.8rem;">
<label>Товар<input type="text" name="product_name" placeholder="Название товара" required></label>
<label>SKU / Артикул<input type="text" name="sku" placeholder="Артикул" required></label>
<div style="display: flex; gap: 1rem;">
<label style="flex: 1;">Мин. цена (₽)<input type="number" name="min_price" required></label>
<label style="flex: 1;">Макс. цена (₽)<input type="number" name="max_price" required></label>
</div>
<label>Стратегия
<select name="strategy">
<option value="follow_competitor">На 1₽ дешевле конкурента</option>
<option value="match_lowest">Равняться на минимальную</option>
</select>
</label>
<button type="submit" class="btn-primary">Добавить правило</button>
</form>
</div>
<div class="platform-card" style="grid-column: 2 / -1;">
<h3>Активные правила</h3>
<table id="repricer-table" class="table" style="margin-top: 1rem;">
<thead>
<tr>
<th>Товар</th>
<th>Мин / Макс</th>
<th>Тек. цена</th>
<th>Последнее обновление</th>
<th>Статус</th>
</tr>
</thead>
<tbody></tbody>
</table>
</div>
</div>
</section>
<!-- Integrations List -->
<section id="integrations-section" class="section hidden">
<h2>Доступные маркетплейсы</h2>