Исправлена функция создания клиента при поиске - добавлен прямой обработчик клика
Проблема: Опция "Создать клиента" была не кликабельна. Решение: - Добавлен обработчик 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 {
|
.customer-create-option {
|
||||||
color: #28a745;
|
color: #28a745;
|
||||||
font-weight: 500;
|
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 {
|
.customer-create-option i {
|
||||||
margin-right: 5px;
|
margin-right: 8px;
|
||||||
|
font-size: 1.1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Select2 dropdown styling */
|
/* Select2 dropdown styling */
|
||||||
@@ -538,12 +549,62 @@ function initCustomerSelect2() {
|
|||||||
console.log('8. Поиск с term:', e.params.term);
|
console.log('8. Поиск с term:', e.params.term);
|
||||||
});
|
});
|
||||||
|
|
||||||
$customerSelect.on('select2:select', function(e) {
|
// Обработчик для перехвата ПЕРЕД выбором (используется для фальшивых опций)
|
||||||
|
$customerSelect.on('select2:selecting', function(e) {
|
||||||
const data = e.params.data;
|
const data = e.params.data;
|
||||||
console.log('9. Выбран элемент:', data);
|
console.log('9a. Попытка выбрать элемент (перед выбором):', data);
|
||||||
|
|
||||||
if (data.is_create_option) {
|
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 = '';
|
this.value = '';
|
||||||
// Триггерим нативное change событие для draft-creator.js
|
// Триггерим нативное change событие для draft-creator.js
|
||||||
const changeEvent = new Event('change', { bubbles: true });
|
const changeEvent = new Event('change', { bubbles: true });
|
||||||
@@ -551,7 +612,7 @@ function initCustomerSelect2() {
|
|||||||
openCreateCustomerModal(data.search_text);
|
openCreateCustomerModal(data.search_text);
|
||||||
} else {
|
} else {
|
||||||
// Триггерим нативное change событие для других обработчиков (например, draft-creator.js)
|
// Триггерим нативное change событие для других обработчиков (например, draft-creator.js)
|
||||||
console.log('11. Триггерим нативное change событие');
|
console.log('12. Триггерим нативное change событие');
|
||||||
const changeEvent = new Event('change', { bubbles: true });
|
const changeEvent = new Event('change', { bubbles: true });
|
||||||
this.dispatchEvent(changeEvent);
|
this.dispatchEvent(changeEvent);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user