feat: Добавить мобильную адаптацию для POS-терминала

- Добавить фиксированную панель корзины внизу экрана на мобильных
  - Отображение количества товаров и суммы
  - Кнопки "Продать" и "Очистить" всегда доступны
  - Тап на панель открывает корзину как overlay

- Фиксировать поиск и категории сверху на мобильных
  - Поиск всегда виден при скролле
  - Категории в collapsible-блоке (сворачиваются)
  - Категории в 3 колонки на мобильных

- Улучшить поиск по токенам (разбивает фразу на слова)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2026-01-17 23:03:40 +03:00
parent 3095e01659
commit c77fcaf669
4 changed files with 454 additions and 12 deletions

View File

@@ -774,11 +774,14 @@ def get_items_api(request):
if category_id:
products_qs = products_qs.filter(categories__id=category_id)
# Фильтруем по поисковому запросу (name или sku)
# Фильтруем по поисковому запросу (name или sku) - разбиваем на токены
if search_query:
products_qs = products_qs.filter(
Q(name__icontains=search_query) | Q(sku__icontains=search_query)
)
tokens = search_query.split()
for token in tokens:
if token: # Пропускаем пустые токены
products_qs = products_qs.filter(
Q(name__icontains=token) | Q(sku__icontains=token)
)
# Сериализуем товары
products = []
@@ -863,11 +866,14 @@ def get_items_api(request):
if category_id:
kits_qs = kits_qs.filter(categories__id=category_id)
# Фильтруем комплекты по поисковому запросу (name или sku)
# Фильтруем комплекты по поисковому запросу (name или sku) - разбиваем на токены
if search_query:
kits_qs = kits_qs.filter(
Q(name__icontains=search_query) | Q(sku__icontains=search_query)
)
tokens = search_query.split()
for token in tokens:
if token: # Пропускаем пустые токены
kits_qs = kits_qs.filter(
Q(name__icontains=token) | Q(sku__icontains=token)
)
# Сериализуем комплекты
kits = []