feat: Улучшенная форма создания комплектов товаров

Реализованы следующие улучшения для формы создания/редактирования комплектов:

1. **Улучшенный API поиска товаров:**
   - Добавлен поиск по полю search_keywords для более точных результатов
   - Добавлены дополнительные поля: display_name, display_price

2. **Предпросмотр загружаемых фото:**
   - Миниатюры выбранных файлов перед загрузкой
   - Счетчик выбранных файлов
   - Возможность удаления отдельных фото до отправки формы

3. **Динамическое добавление товаров:**
   - Кнопка "Добавить товар в комплект" для создания новых строк
   - Автопоиск товаров при вводе текста (задержка 300мс)
   - Автоматическое добавление при клике на результат
   - Визуальные уведомления об успешном добавлении
   - Прокрутка к новой форме после добавления

4. **Валидация на дубликаты:**
   - Предупреждение при попытке добавить существующий товар
   - Подсветка дубликата на 2 секунды
   - Предложение изменить количество в существующей строке

5. **Автоматический расчет цены:**
   - Информационный блок с суммой товаров и их количеством
   - Пересчет при добавлении/удалении товаров
   - Пересчет при изменении количества
   - Асинхронная загрузка цен для существующих товаров

6. **Исправления:**
   - Снятие disabled с полей select перед отправкой формы
   - Правильное создание новых форм при добавлении товаров через поиск
   - Использование display_name для корректного отображения

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-10-23 15:52:29 +03:00
parent 9a232c6813
commit dd2b1f21f7
3 changed files with 545 additions and 71 deletions

View File

@@ -46,7 +46,8 @@ def search_products_and_variants(request):
products = Product.objects.filter(
models.Q(name__icontains=query) |
models.Q(sku__icontains=query) |
models.Q(description__icontains=query),
models.Q(description__icontains=query) |
models.Q(search_keywords__icontains=query),
is_active=True
).values('id', 'name', 'sku', 'sale_price')[:10]
@@ -56,7 +57,9 @@ def search_products_and_variants(request):
'name': f"{product['name']} ({product['sku']})",
'sku': product['sku'],
'type': 'product',
'price': str(product['sale_price'])
'price': str(product['sale_price']),
'display_name': product['name'],
'display_price': f"{product['sale_price']:.2f}"
})
# Поиск групп вариантов