feat(products): улучшить интерфейс массовой синхронизации с Recommerce

- Добавить секцию маркетинговых флагов в модалку синхронизации
- Добавить кнопки "Выбрать все" для групп полей
- Улучшить UX отображения списка товаров

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-13 13:21:08 +03:00
parent 3cffa9b05d
commit 36090382c1
5 changed files with 269 additions and 95 deletions

View File

@@ -1,6 +1,6 @@
<!-- Модальное окно для синхронизации с Recommerce -->
<div class="modal fade" id="recommerceSyncModal" tabindex="-1" aria-labelledby="recommerceSyncModalLabel" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-dialog modal-lg">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="recommerceSyncModalLabel">
@@ -9,52 +9,99 @@
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Закрыть"></button>
</div>
<div class="modal-body">
<div class="alert alert-info mb-3">
<div class="alert alert-info mb-4">
<i class="bi bi-info-circle"></i> <strong>Выбрано товаров:</strong> <span id="recommerceSyncCount">0</span>
</div>
<div class="mb-3">
<label class="form-label fw-bold">Что обновлять?</label>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="price" id="syncPrice" checked>
<label class="form-check-label" for="syncPrice">
Цены
</label>
<!-- Основные данные -->
<div class="card mb-3">
<div class="card-header py-2 d-flex justify-content-between align-items-center">
<strong><i class="bi bi-box-seam"></i> Основные данные</strong>
<button type="button" class="btn btn-sm btn-link p-0" id="toggleBasicFields">Выбрать все</button>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="count" id="syncStock" checked>
<label class="form-check-label" for="syncStock">
Остатки
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="content" id="syncContent">
<label class="form-check-label" for="syncContent">
Название и описание
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="images" id="syncImages">
<label class="form-check-label" for="syncImages">
Изображения
</label>
<div class="card-body">
<div class="row g-2">
<div class="col-6">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="price" id="syncPrice" checked>
<label class="form-check-label" for="syncPrice">
<i class="bi bi-tag"></i> Цены
</label>
</div>
</div>
<div class="col-6">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="count" id="syncStock">
<label class="form-check-label" for="syncStock">
<i class="bi bi-stack"></i> Остатки
</label>
</div>
</div>
<div class="col-6">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="content" id="syncContent">
<label class="form-check-label" for="syncContent">
<i class="bi bi-card-text"></i> Название и описание
</label>
</div>
</div>
<div class="col-6">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="images" id="syncImages">
<label class="form-check-label" for="syncImages">
<i class="bi bi-images"></i> Изображения
</label>
</div>
</div>
</div>
</div>
</div>
<hr>
<!-- Маркетинговые флаги -->
<div class="card mb-3">
<div class="card-header py-2 d-flex justify-content-between align-items-center">
<strong><i class="bi bi-megaphone"></i> Маркетинговые флаги</strong>
<button type="button" class="btn btn-sm btn-link p-0" id="toggleMarketingFields">Выбрать все</button>
</div>
<div class="card-body">
<div class="row g-2">
<div class="col-6 col-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="is_new" id="syncIsNew">
<label class="form-check-label" for="syncIsNew">
<span class="badge bg-warning text-dark me-1"><i class="bi bi-stars"></i></span> Новинки
</label>
</div>
</div>
<div class="col-6 col-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="is_popular" id="syncIsPopular">
<label class="form-check-label" for="syncIsPopular">
<span class="badge bg-danger me-1"><i class="bi bi-fire"></i></span> Популярные
</label>
</div>
</div>
<div class="col-6 col-md-4">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="is_special" id="syncIsSpecial">
<label class="form-check-label" for="syncIsSpecial">
<span class="badge bg-success me-1"><i class="bi bi-percent"></i></span> Спецпредложения
</label>
<div class="form-text text-muted small">Также авто при скидке</div>
</div>
</div>
</div>
</div>
</div>
<div class="mb-3">
<div class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="syncCreateNew">
<label class="form-check-label" for="syncCreateNew">
Создавать товары, если не найдены
</label>
<div class="form-text text-muted">
Если товар отсутствует в Recommerce, он будет создан (требуется полное заполнение).
<!-- Дополнительно -->
<div class="card">
<div class="card-body py-2">
<div class="form-check form-switch mb-0">
<input class="form-check-input" type="checkbox" id="syncCreateNew">
<label class="form-check-label" for="syncCreateNew">
<strong>Создавать товары, если не найдены в Recommerce</strong>
</label>
</div>
</div>
</div>
@@ -62,9 +109,9 @@
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Отмена</button>
<button type="button" class="btn btn-primary" id="startRecommerceSyncBtn">
<i class="bi bi-play-fill"></i> Запустить
<i class="bi bi-play-fill"></i> Запустить синхронизацию
</button>
</div>
</div>
</div>
</div>
</div>