Исправлена функция создания клиента при поиске - добавлен прямой обработчик клика

Проблема: Опция "Создать клиента" была не кликабельна.

Решение:
- Добавлен обработчик select2:opening для подключения обработчика клика
- Обработчик ждет пока dropdown откроется и добавляет слушатель на клик
- При клике на элемент с .customer-create-option извлекает поисковый текст
- Открывает модаль создания клиента с текстом поиска
- Закрывает dropdown после клика

Улучшения:
- CSS добавлен cursor: pointer и hover эффекты
- Более явная визуализация кликабельности опции

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

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2025-11-11 00:15:57 +03:00
parent 5d5de1fe31
commit 1dd47dfae9

View File

@@ -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);
}