Исправлена функция создания клиента при поиске - добавлен прямой обработчик клика
Проблема: Опция "Создать клиента" была не кликабельна. Решение: - Добавлен обработчик 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:
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user