Улучшения UX формы заказа и создания клиента

- Изменен порядок секций формы: товары перемещены выше доставки
- Добавлена защита от двойного создания клиента
- Улучшена валидация при создании клиента с детализацией ошибок
- Добавлен индикатор загрузки при сохранении клиента
- Исправлена логика обработки специальной опции создания клиента

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-11 21:16:48 +03:00
parent 9394abfa3f
commit 4a1f8266de
2 changed files with 181 additions and 181 deletions

View File

@@ -338,7 +338,7 @@ def api_search_customers(request):
# Если ничего не найдено, предлагаем создать нового клиента
if not results:
results.append({
'id': None,
'id': '__create_new__', # Специальный ID для опции создания
'text': f'Создать клиента: "{query}"',
'is_create_option': True,
'search_text': query,
@@ -390,6 +390,7 @@ def api_create_customer(request):
'name': name,
'phone': phone if phone else None,
'email': email if email else None,
'loyalty_tier': 'no_discount', # Значение по умолчанию для новых клиентов
}
# Используем форму для валидации и создания
@@ -409,18 +410,26 @@ def api_create_customer(request):
'email': customer.email if customer.email else '',
}, status=201)
else:
# Собираем ошибки валидации
# Собираем ошибки валидации с указанием полей
errors = []
for field, field_errors in form.errors.items():
for error in field_errors:
errors.append(error)
field_labels = {
'name': 'Имя клиента',
'phone': 'Телефон',
'email': 'Email',
}
# Возвращаем первую ошибку
error_message = errors[0] if errors else 'Ошибка валидации данных'
for field, field_errors in form.errors.items():
field_label = field_labels.get(field, field)
for error in field_errors:
errors.append(f'{field_label}: {error}')
# Возвращаем все ошибки
error_message = '<br>'.join(errors) if errors else 'Ошибка валидации данных'
return JsonResponse({
'success': False,
'error': error_message
'error': error_message,
'errors': form.errors # Добавляем детальную информацию об ошибках
}, status=400)
except json.JSONDecodeError: