Добавлена возможность добавлять новые товары в витринный комплект при редактировании
- Интегрирован готовый компонент 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('createTempKitModalLabel').textContent = 'Редактирование витринного букета';
|
||||||
document.getElementById('confirmCreateTempKit').textContent = 'Сохранить изменения';
|
document.getElementById('confirmCreateTempKit').textContent = 'Сохранить изменения';
|
||||||
|
|
||||||
// Показываем кнопку "Разобрать" и скрываем поле "Количество букетов" в режиме редактирования
|
// Показываем кнопку "Разобрать" и блок добавления товаров
|
||||||
document.getElementById('disassembleKitBtn').style.display = 'block';
|
document.getElementById('disassembleKitBtn').style.display = 'block';
|
||||||
document.getElementById('showcaseKitQuantityBlock').style.display = 'none';
|
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'));
|
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('createTempKitModalLabel').textContent = 'Создать витринный букет из корзины';
|
||||||
document.getElementById('confirmCreateTempKit').innerHTML = '<i class="bi bi-check-circle"></i> Создать и зарезервировать';
|
document.getElementById('confirmCreateTempKit').innerHTML = '<i class="bi bi-check-circle"></i> Создать и зарезервировать';
|
||||||
|
|
||||||
// Скрываем кнопку "Разобрать" и показываем поле "Количество букетов"
|
// Скрываем кнопку "Разобрать" и блок добавления товаров
|
||||||
document.getElementById('disassembleKitBtn').style.display = 'none';
|
document.getElementById('disassembleKitBtn').style.display = 'none';
|
||||||
document.getElementById('showcaseKitQuantityBlock').style.display = 'block';
|
document.getElementById('showcaseKitQuantityBlock').style.display = 'block';
|
||||||
|
document.getElementById('addProductBlock').style.display = 'none';
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -4,6 +4,7 @@
|
|||||||
|
|
||||||
{% block extra_css %}
|
{% block extra_css %}
|
||||||
<link rel="stylesheet" href="{% static 'pos/css/terminal.css' %}">
|
<link rel="stylesheet" href="{% static 'pos/css/terminal.css' %}">
|
||||||
|
<link rel="stylesheet" href="{% static 'products/css/product-search-picker.css' %}">
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
{% block content %}
|
{% block content %}
|
||||||
@@ -186,6 +187,20 @@
|
|||||||
</div>
|
</div>
|
||||||
</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">
|
||||||
<div class="card-header bg-light">
|
<div class="card-header bg-light">
|
||||||
@@ -484,5 +499,6 @@
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
|
<script src="{% static 'products/js/product-search-picker.js' %}"></script>
|
||||||
<script src="{% static 'pos/js/terminal.js' %}"></script>
|
<script src="{% static 'pos/js/terminal.js' %}"></script>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|||||||
@@ -270,6 +270,7 @@ def pos_terminal(request):
|
|||||||
'categories_json': json.dumps(categories),
|
'categories_json': json.dumps(categories),
|
||||||
'items_json': json.dumps([]), # Пустой массив - загрузка по API при клике на категорию
|
'items_json': json.dumps([]), # Пустой массив - загрузка по API при клике на категорию
|
||||||
'showcase_kits_json': json.dumps([]), # Пустой массив - загрузка по API
|
'showcase_kits_json': json.dumps([]), # Пустой массив - загрузка по API
|
||||||
|
'categories': categories_qs, # QuerySet для компонента product_search_picker
|
||||||
'current_warehouse': {
|
'current_warehouse': {
|
||||||
'id': current_warehouse.id,
|
'id': current_warehouse.id,
|
||||||
'name': current_warehouse.name
|
'name': current_warehouse.name
|
||||||
|
|||||||
Reference in New Issue
Block a user