From 1dd47dfae9b4ea5552cd427e3e62406b41b1159d Mon Sep 17 00:00:00 2001 From: Andrey Smakotin Date: Tue, 11 Nov 2025 00:15:57 +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=B0=20=D1=84=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F?= =?UTF-8?q?=20=D1=81=D0=BE=D0=B7=D0=B4=D0=B0=D0=BD=D0=B8=D1=8F=20=D0=BA?= =?UTF-8?q?=D0=BB=D0=B8=D0=B5=D0=BD=D1=82=D0=B0=20=D0=BF=D1=80=D0=B8=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B8=D1=81=D0=BA=D0=B5=20-=20=D0=B4=D0=BE=D0=B1?= =?UTF-8?q?=D0=B0=D0=B2=D0=BB=D0=B5=D0=BD=20=D0=BF=D1=80=D1=8F=D0=BC=D0=BE?= =?UTF-8?q?=D0=B9=20=D0=BE=D0=B1=D1=80=D0=B0=D0=B1=D0=BE=D1=82=D1=87=D0=B8?= =?UTF-8?q?=D0=BA=20=D0=BA=D0=BB=D0=B8=D0=BA=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Проблема: Опция "Создать клиента" была не кликабельна. Решение: - Добавлен обработчик select2:opening для подключения обработчика клика - Обработчик ждет пока dropdown откроется и добавляет слушатель на клик - При клике на элемент с .customer-create-option извлекает поисковый текст - Открывает модаль создания клиента с текстом поиска - Закрывает dropdown после клика Улучшения: - CSS добавлен cursor: pointer и hover эффекты - Более явная визуализация кликабельности опции 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- .../orders/templates/orders/order_form.html | 73 +++++++++++++++++-- 1 file changed, 67 insertions(+), 6 deletions(-) diff --git a/myproject/orders/templates/orders/order_form.html b/myproject/orders/templates/orders/order_form.html index c0ba776..2070ede 100644 --- a/myproject/orders/templates/orders/order_form.html +++ b/myproject/orders/templates/orders/order_form.html @@ -24,11 +24,22 @@ .customer-create-option { color: #28a745; font-weight: 500; - padding: 5px 0; + padding: 8px 12px; + cursor: pointer; + display: flex; + align-items: center; + border-radius: 4px; + transition: all 0.2s ease; + } + + .customer-create-option:hover { + background-color: #f0f8f5; + color: #1e7e34; } .customer-create-option i { - margin-right: 5px; + margin-right: 8px; + font-size: 1.1em; } /* Select2 dropdown styling */ @@ -538,12 +549,62 @@ function initCustomerSelect2() { console.log('8. Поиск с term:', e.params.term); }); - $customerSelect.on('select2:select', function(e) { + // Обработчик для перехвата ПЕРЕД выбором (используется для фальшивых опций) + $customerSelect.on('select2:selecting', function(e) { const data = e.params.data; - console.log('9. Выбран элемент:', data); + console.log('9a. Попытка выбрать элемент (перед выбором):', data); if (data.is_create_option) { - console.log('10. Открываем модальное окно для создания клиента'); + console.log('9b. Это опция создания клиента - предотвращаем выбор и открываем модаль'); + // Предотвращаем выбор этой опции + e.preventDefault(); + // Очищаем значение + $customerSelect.val(null).trigger('change.select2'); + // Открываем модаль + openCreateCustomerModal(data.search_text); + return false; + } + }); + + // Обработчик прямого клика на результаты (для "create option") + $customerSelect.on('select2:opening', function(e) { + // Добавляем обработчик на клик по результатам в следующем event tick + setTimeout(function() { + const resultsContainer = document.querySelector('.select2-results'); + if (resultsContainer) { + resultsContainer.addEventListener('click', function handleCreateOptionClick(event) { + const target = event.target.closest('.select2-results__option'); + if (!target) return; + + // Проверяем содержит ли элемент класс customer-create-option + const createOptionDiv = target.querySelector('.customer-create-option'); + if (createOptionDiv) { + console.log('9c. Клик на create option напрямую'); + // Получаем текст опции + const fullText = target.textContent.trim(); + // Извлекаем поисковый текст (удаляем "Создать клиента: ") + const searchText = fullText.replace(/^\s*[\s\S]+?:\s*"([^"]*)"\s*$/, '$1') || fullText; + + console.log('9d. Открываем модаль с текстом:', searchText); + openCreateCustomerModal(searchText); + + // Закрываем dropdown + $customerSelect.select2('close'); + + // Удаляем обработчик + resultsContainer.removeEventListener('click', handleCreateOptionClick); + } + }); + } + }, 0); + }); + + $customerSelect.on('select2:select', function(e) { + const data = e.params.data; + console.log('10. Выбран элемент:', data); + + if (data.is_create_option) { + console.log('11. Открываем модальное окно для создания клиента'); this.value = ''; // Триггерим нативное change событие для draft-creator.js const changeEvent = new Event('change', { bubbles: true }); @@ -551,7 +612,7 @@ function initCustomerSelect2() { openCreateCustomerModal(data.search_text); } else { // Триггерим нативное change событие для других обработчиков (например, draft-creator.js) - console.log('11. Триггерим нативное change событие'); + console.log('12. Триггерим нативное change событие'); const changeEvent = new Event('change', { bubbles: true }); this.dispatchEvent(changeEvent); }