Добавлена возможность добавлять новые товары в витринный комплект при редактировании
- Интегрирован готовый компонент ProductSearchPicker в модалку редактирования - Добавлен collapse-блок с поиском товаров, который отображается только в режиме редактирования - При выборе товара он автоматически добавляется в tempCart или увеличивается количество если уже есть - Добавлен CSS и JS для компонента product-search-picker - В view передаётся categories QuerySet для работы фильтров компонента - Блок добавления товаров показывается только при редактировании, скрыт при создании нового комплекта
This commit is contained in:
@@ -1354,9 +1354,44 @@ async function openEditKitModal(kitId) {
|
||||
document.getElementById('createTempKitModalLabel').textContent = 'Редактирование витринного букета';
|
||||
document.getElementById('confirmCreateTempKit').textContent = 'Сохранить изменения';
|
||||
|
||||
// Показываем кнопку "Разобрать" и скрываем поле "Количество букетов" в режиме редактирования
|
||||
// Показываем кнопку "Разобрать" и блок добавления товаров
|
||||
document.getElementById('disassembleKitBtn').style.display = 'block';
|
||||
document.getElementById('showcaseKitQuantityBlock').style.display = 'none';
|
||||
document.getElementById('addProductBlock').style.display = 'block';
|
||||
|
||||
// Инициализируем компонент поиска товаров
|
||||
setTimeout(() => {
|
||||
if (window.ProductSearchPicker) {
|
||||
const picker = ProductSearchPicker.init('#temp-kit-product-picker', {
|
||||
onAddSelected: function(product, instance) {
|
||||
if (product) {
|
||||
// Добавляем товар в tempCart
|
||||
const cartKey = `product-${product.id}`;
|
||||
if (tempCart.has(cartKey)) {
|
||||
// Увеличиваем количество
|
||||
const existing = tempCart.get(cartKey);
|
||||
existing.qty += 1;
|
||||
} else {
|
||||
// Добавляем новый товар
|
||||
tempCart.set(cartKey, {
|
||||
id: product.id,
|
||||
name: product.text || product.name,
|
||||
price: Number(product.price || 0),
|
||||
qty: 1,
|
||||
type: 'product'
|
||||
});
|
||||
}
|
||||
|
||||
// Обновляем отображение
|
||||
renderTempKitItems();
|
||||
|
||||
// Очищаем выбор в пикере
|
||||
instance.clearSelection();
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}, 100);
|
||||
|
||||
// Открываем модальное окно
|
||||
const modal = new bootstrap.Modal(document.getElementById('createTempKitModal'));
|
||||
@@ -1886,9 +1921,10 @@ document.getElementById('createTempKitModal').addEventListener('hidden.bs.modal'
|
||||
document.getElementById('createTempKitModalLabel').textContent = 'Создать витринный букет из корзины';
|
||||
document.getElementById('confirmCreateTempKit').innerHTML = '<i class="bi bi-check-circle"></i> Создать и зарезервировать';
|
||||
|
||||
// Скрываем кнопку "Разобрать" и показываем поле "Количество букетов"
|
||||
// Скрываем кнопку "Разобрать" и блок добавления товаров
|
||||
document.getElementById('disassembleKitBtn').style.display = 'none';
|
||||
document.getElementById('showcaseKitQuantityBlock').style.display = 'block';
|
||||
document.getElementById('addProductBlock').style.display = 'none';
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@
|
||||
|
||||
{% block extra_css %}
|
||||
<link rel="stylesheet" href="{% static 'pos/css/terminal.css' %}">
|
||||
<link rel="stylesheet" href="{% static 'products/css/product-search-picker.css' %}">
|
||||
{% endblock %}
|
||||
|
||||
{% block content %}
|
||||
@@ -186,6 +187,20 @@
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Добавление товаров в комплект (режим редактирования) -->
|
||||
<div class="mb-3" id="addProductBlock" style="display: none;">
|
||||
<button class="btn btn-sm btn-outline-primary w-100" type="button" data-bs-toggle="collapse" data-bs-target="#productSearchCollapse" aria-expanded="false">
|
||||
<i class="bi bi-plus-circle"></i> Добавить товар в комплект
|
||||
</button>
|
||||
|
||||
<div class="collapse mt-2" id="productSearchCollapse">
|
||||
<div class="card card-body p-2">
|
||||
{% load static %}
|
||||
{% include 'products/components/product_search_picker.html' with container_id='temp-kit-product-picker' title='Поиск товара...' show_filters=False show_view_toggle=False add_button_text='Добавить' content_height='200px' %}
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Блок ценообразования -->
|
||||
<div class="card">
|
||||
<div class="card-header bg-light">
|
||||
@@ -484,5 +499,6 @@
|
||||
}
|
||||
</script>
|
||||
|
||||
<script src="{% static 'products/js/product-search-picker.js' %}"></script>
|
||||
<script src="{% static 'pos/js/terminal.js' %}"></script>
|
||||
{% endblock %}
|
||||
|
||||
@@ -270,6 +270,7 @@ def pos_terminal(request):
|
||||
'categories_json': json.dumps(categories),
|
||||
'items_json': json.dumps([]), # Пустой массив - загрузка по API при клике на категорию
|
||||
'showcase_kits_json': json.dumps([]), # Пустой массив - загрузка по API
|
||||
'categories': categories_qs, # QuerySet для компонента product_search_picker
|
||||
'current_warehouse': {
|
||||
'id': current_warehouse.id,
|
||||
'name': current_warehouse.name
|
||||
|
||||
Reference in New Issue
Block a user