From 7df59882220a03bc48d915aa378fe81487b68b24 Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Mon, 10 Nov 2025 23:22:59 +0300 Subject: [PATCH] =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB?= =?UTF-8?q?=D0=B5=D0=BD=D0=BE=20=D0=BE=D1=82=D0=BE=D0=B1=D1=80=D0=B0=D0=B6?= =?UTF-8?q?=D0=B5=D0=BD=D0=B8=D0=B5=20=D0=B2=D1=8B=D0=B1=D1=80=D0=B0=D0=BD?= =?UTF-8?q?=D0=BD=D0=BE=D0=B3=D0=BE=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0=20=D0=BF=D1=80=D0=B8=20=D1=80=D0=B5=D0=B4=D0=B0=D0=BA?= =?UTF-8?q?=D1=82=D0=B8=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=D0=B8=D0=B8=20=D1=87?= =?UTF-8?q?=D0=B5=D1=80=D0=BD=D0=BE=D0=B2=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проблема: - При редактировании черновика заказа клиент не отображался в форме - Это произошло потому что Select2 инициализация очищала все опции Решение: - Сохраняем текущее значение перед очисткой опций - После инициализации Select2 загружаем информацию о клиенте через AJAX - Восстанавливаем выбранного клиента с полной информацией (имя и телефон) Также исправлено: - Используем нативное JavaScript событие dispatchEvent вместо jQuery trigger - Это обеспечивает правильную работу с draft-creator.js 🤖 Generated with Claude Code Co-Authored-By: Claude --- .../orders/templates/orders/order_form.html | 46 ++++++++++++++++++- 1 file changed, 45 insertions(+), 1 deletion(-) diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index 3e6df4f..822ec5b 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -456,6 +456,11 @@ function initCustomerSelect2() { console.log('1. Поле customer найдено:', $customerSelect.length); console.log('2. AJAX URL:', ajaxUrl); + // Сохраняем текущее значение перед очисткой (может быть при редактировании черновика) + const currentValue = $customerSelect.val(); + const currentText = $customerSelect.find(':selected').text(); + console.log('Сохраняем текущее значение:', currentValue, currentText); + // Очищаем существующие опции $customerSelect.empty(); @@ -495,6 +500,37 @@ function initCustomerSelect2() { console.log('6. Select2 инициализирован'); + // Восстанавливаем значение если оно было (для редактирования черновика) + if (currentValue) { + console.log('Восстанавливаем значение:', currentValue, 'Текст:', currentText); + + // Загружаем информацию о клиенте через AJAX + fetch(ajaxUrl + '?q=' + encodeURIComponent(currentText)) + .then(response => response.json()) + .then(data => { + // Ищем клиента в результатах + const customer = data.results.find(r => r.id == currentValue); + if (customer) { + console.log('Найден клиент:', customer); + const option = new Option(customer.text, customer.id, true, true); + $customerSelect.append(option).val(customer.id); + } else { + // Если не найден, создаем опцию с сохраненным текстом + console.log('Клиент не найден в результатах, используем сохраненный текст'); + const option = new Option(currentText, currentValue, true, true); + $customerSelect.append(option).val(currentValue); + } + // Обновляем Select2 + $customerSelect.trigger('change'); + }) + .catch(error => { + console.error('Ошибка при загрузке клиента:', error); + // Создаем option с сохраненным текстом в любом случае + const option = new Option(currentText, currentValue, true, true); + $customerSelect.append(option).val(currentValue).trigger('change'); + }); + } + // Слушаем события $customerSelect.on('select2:open', function(e) { console.log('7. Dropdown открыт'); @@ -514,8 +550,16 @@ function initCustomerSelect2() { if (data.is_create_option) { console.log('10. Открываем модальное окно для создания клиента'); - $(this).val(null).trigger('change'); + this.value = ''; + // Триггерим нативное change событие для draft-creator.js + const changeEvent = new Event('change', { bubbles: true }); + this.dispatchEvent(changeEvent); openCreateCustomerModal(data.search_text); + } else { + // Триггерим нативное change событие для других обработчиков (например, draft-creator.js) + console.log('11. Триггерим нативное change событие'); + const changeEvent = new Event('change', { bubbles: true }); + this.dispatchEvent(changeEvent); } });