From 90906944ddd43d9ffa262b582285262a81b6d1e7 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Tue, 27 Jan 2026 15:20:07 +0300 Subject: [PATCH] =?UTF-8?q?feat(pos):=20=D0=B3=D0=BB=D0=BE=D0=B1=D0=B0?= =?UTF-8?q?=D0=BB=D1=8C=D0=BD=D1=8B=D0=B9=20=D0=BF=D0=BE=D0=B8=D1=81=D0=BA?= =?UTF-8?q?=20=D1=82=D0=BE=D0=B2=D0=B0=D1=80=D0=BE=D0=B2=20=D0=BD=D0=B5?= =?UTF-8?q?=D0=B7=D0=B0=D0=B2=D0=B8=D1=81=D0=B8=D0=BC=D0=BE=20=D0=BE=D1=82?= =?UTF-8?q?=20=D0=BA=D0=B0=D1=82=D0=B5=D0=B3=D0=BE=D1=80=D0=B8=D0=B8=20?= =?UTF-8?q?=D0=B8=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=D0=B0=20=D0=B2=D0=B8?= =?UTF-8?q?=D1=82=D1=80=D0=B8=D0=BD=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - При поиске (3+ символа) ищет по всем товарам и комплектам, игнорируя выбранную категорию - Даже в режиме "Витрина" поиск переключается на глобальный по всем товарам - Добавлена визуальная индикация: кнопка "Все товары" подсвечивается при активном поиске - При очистке поиска возвращается к товарам выбранной категории или витрине Изменения: - terminal.js: loadItems(), renderProducts(), updateSearchIndicator(), обработчики поиска - views.py: get_items_api() - игнорирование category_id при search_query --- myproject/pos/static/pos/js/terminal.js | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/myproject/pos/static/pos/js/terminal.js b/myproject/pos/static/pos/js/terminal.js index da8fe9d..a64466c 100644 --- a/myproject/pos/static/pos/js/terminal.js +++ b/myproject/pos/static/pos/js/terminal.js @@ -848,13 +848,18 @@ function renderProducts() { let filtered; - // Если выбран режим витрины - показываем витринные комплекты - if (isShowcaseView) { + // Если активен поиск (3+ символов) - показываем результаты поиска по всем товарам + // независимо от режима (витрина или обычный) + if (currentSearchQuery && currentSearchQuery.length >= 3 && !isShowcaseView) { + // Обычный режим - ITEMS уже отфильтрованы на сервере (поиск по всем товарам) + filtered = ITEMS; + } else if (isShowcaseView) { + // Режим витрины - показываем витринные комплекты filtered = showcaseKits; - // Для витрины — клиентская фильтрация по поиску + // Для витрины — клиентская фильтрация по поиску (только если менее 3 символов) const searchTerm = document.getElementById('searchInput').value.toLowerCase().trim(); - if (searchTerm) { + if (searchTerm && searchTerm.length < 3) { const tokens = searchTerm.split(/\s+/).filter(t => t.length > 0); filtered = filtered.filter(item => { const name = (item.name || '').toLowerCase(); @@ -864,7 +869,7 @@ function renderProducts() { }); } } else { - // Обычный режим - ITEMS уже отфильтрованы на сервере (категория + поиск) + // Обычный режим без поиска - ITEMS отфильтрованы по категории filtered = ITEMS; } @@ -3864,10 +3869,12 @@ searchInput.addEventListener('input', (e) => { return; } - // Для витрины — мгновенная клиентская фильтрация (витрина не участвует в глобальном поиске) + // Для витрины при 3+ символах - переключаемся на глобальный поиск по всем товарам if (isShowcaseView) { - renderProducts(); - return; + // Выходим из режима витрины для глобального поиска + isShowcaseView = false; + // Обновляем UI категорий (снимаем выделение с витрины) + renderCategories(); } // Для обычных товаров/комплектов — серверный поиск с debounce 300мс