feat(pos): глобальный поиск товаров независимо от категории и режима витрины
- При поиске (3+ символа) ищет по всем товарам и комплектам, игнорируя выбранную категорию - Даже в режиме "Витрина" поиск переключается на глобальный по всем товарам - Добавлена визуальная индикация: кнопка "Все товары" подсвечивается при активном поиске - При очистке поиска возвращается к товарам выбранной категории или витрине Изменения: - terminal.js: loadItems(), renderProducts(), updateSearchIndicator(), обработчики поиска - views.py: get_items_api() - игнорирование category_id при search_query
This commit is contained in:
@@ -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мс
|
||||
|
||||
Reference in New Issue
Block a user