From ce2cfca3f2bf57a15733323ca1427738f72dc4d2 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Sun, 14 Dec 2025 14:00:51 +0300 Subject: [PATCH] =?UTF-8?q?=D0=94=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D0=B5?= =?UTF-8?q?=D0=BD=D0=B0=20=D0=B2=D0=BE=D0=B7=D0=BC=D0=BE=D0=B6=D0=BD=D0=BE?= =?UTF-8?q?=D1=81=D1=82=D1=8C=20=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=BB=D1=8F?= =?UTF-8?q?=D1=82=D1=8C=20=D0=BD=D0=BE=D0=B2=D1=8B=D0=B5=20=D1=82=D0=BE?= =?UTF-8?q?=D0=B2=D0=B0=D1=80=D1=8B=20=D0=B2=20=D0=B2=D0=B8=D1=82=D1=80?= =?UTF-8?q?=D0=B8=D0=BD=D0=BD=D1=8B=D0=B9=20=D0=BA=D0=BE=D0=BC=D0=BF=D0=BB?= =?UTF-8?q?=D0=B5=D0=BA=D1=82=20=D0=BF=D1=80=D0=B8=20=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=B0=D0=BA=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8?= =?UTF-8?q?=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Интегрирован готовый компонент ProductSearchPicker в модалку редактирования - Добавлен collapse-блок с поиском товаров, который отображается только в режиме редактирования - При выборе товара он автоматически добавляется в tempCart или увеличивается количество если уже есть - Добавлен CSS и JS для компонента product-search-picker - В view передаётся categories QuerySet для работы фильтров компонента - Блок добавления товаров показывается только при редактировании, скрыт при создании нового комплекта --- myproject/pos/static/pos/js/terminal.js | 40 +++++++++++++++++++++-- myproject/pos/templates/pos/terminal.html | 16 +++++++++ myproject/pos/views.py | 1 + 3 files changed, 55 insertions(+), 2 deletions(-) diff --git a/myproject/pos/static/pos/js/terminal.js b/myproject/pos/static/pos/js/terminal.js index 5e58297..c7c01c3 100644 --- a/myproject/pos/static/pos/js/terminal.js +++ b/myproject/pos/static/pos/js/terminal.js @@ -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 = ' Создать и зарезервировать'; - // Скрываем кнопку "Разобрать" и показываем поле "Количество букетов" + // Скрываем кнопку "Разобрать" и блок добавления товаров document.getElementById('disassembleKitBtn').style.display = 'none'; document.getElementById('showcaseKitQuantityBlock').style.display = 'block'; + document.getElementById('addProductBlock').style.display = 'none'; } }); diff --git a/myproject/pos/templates/pos/terminal.html b/myproject/pos/templates/pos/terminal.html index ae3687c..4fffa00 100644 --- a/myproject/pos/templates/pos/terminal.html +++ b/myproject/pos/templates/pos/terminal.html @@ -4,6 +4,7 @@ {% block extra_css %} + {% endblock %} {% block content %} @@ -186,6 +187,20 @@ + + +
@@ -484,5 +499,6 @@ } + {% endblock %} diff --git a/myproject/pos/views.py b/myproject/pos/views.py index 7b070db..fcd9d4e 100644 --- a/myproject/pos/views.py +++ b/myproject/pos/views.py @@ -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