Добавлен механизм отложенного заполнения полей с ожиданием рендеринга формсета
This commit is contained in:
@@ -2259,53 +2259,94 @@ if (!document.getElementById('notification-styles')) {
|
|||||||
<!-- Заполнение скрытых полей для товаров из черновика POS -->
|
<!-- Заполнение скрытых полей для товаров из черновика POS -->
|
||||||
{% if draft_items_json %}
|
{% if draft_items_json %}
|
||||||
<script>
|
<script>
|
||||||
const draftItemsJson = '{{ draft_items_json|safe }}';
|
(function() {
|
||||||
const draftItems = JSON.parse(draftItemsJson);
|
'use strict';
|
||||||
|
|
||||||
|
const draftItemsJson = '{{ draft_items_json|safe }}';
|
||||||
|
const draftItems = JSON.parse(draftItemsJson);
|
||||||
|
|
||||||
|
if (draftItems.length === 0) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (draftItems.length > 0) {
|
|
||||||
console.log('[Draft Items] 📦 Найдены товары из черновика:', draftItems.length);
|
console.log('[Draft Items] 📦 Найдены товары из черновика:', draftItems.length);
|
||||||
console.log('[Draft Items] 📋 Данные товаров:', draftItems);
|
console.log('[Draft Items] 📋 Данные товаров:', draftItems);
|
||||||
|
|
||||||
// Заполняем скрытые поля для каждой формы
|
// Функция для заполнения полей
|
||||||
draftItems.forEach((item, index) => {
|
function fillDraftFields() {
|
||||||
console.log(`[Draft Items] ⚙️ Обработка товара ${index}:`, item);
|
console.log('[Draft Items] 🔄 Попытка заполнить поля...');
|
||||||
|
|
||||||
// Находим форму по индексу
|
// Проверяем, есть ли формы в DOM
|
||||||
const productField = document.querySelector(`[name="items-${index}-product"]`);
|
const firstProductField = document.querySelector('[name="items-0-product"]');
|
||||||
const kitField = document.querySelector(`[name="items-${index}-product_kit"]`);
|
if (!firstProductField) {
|
||||||
const quantityField = document.querySelector(`[name="items-${index}-quantity"]`);
|
console.log('[Draft Items] ⏳ Формы ещё не отрендерены, ожидание...');
|
||||||
const priceField = document.querySelector(`[name="items-${index}-price"]`);
|
setTimeout(fillDraftFields, 50); // Повтор через 50мс
|
||||||
|
|
||||||
if (!productField || !kitField) {
|
|
||||||
console.warn(`[Draft Items] ⚠️ Форма ${index} не найдена`);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Устанавливаем значения
|
console.log('[Draft Items] ✅ Формы найдены в DOM, заполнение...');
|
||||||
if (item.type === 'product') {
|
|
||||||
productField.value = item.id;
|
|
||||||
kitField.value = '';
|
|
||||||
console.log(`[Draft Items] ✅ Установлен product ID: ${item.id}`);
|
|
||||||
} else if (item.type === 'kit' || item.type === 'showcase_kit') {
|
|
||||||
kitField.value = item.id;
|
|
||||||
productField.value = '';
|
|
||||||
console.log(`[Draft Items] ✅ Установлен kit ID: ${item.id}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Устанавливаем количество и цену
|
// Заполняем скрытые поля для каждой формы
|
||||||
if (quantityField) {
|
draftItems.forEach((item, index) => {
|
||||||
quantityField.value = item.quantity;
|
console.log(`[Draft Items] ⚙️ Обработка товара ${index}:`, item);
|
||||||
console.log(`[Draft Items] 🔢 Установлено количество: ${item.quantity}`);
|
|
||||||
}
|
|
||||||
if (priceField) {
|
|
||||||
priceField.value = item.price;
|
|
||||||
priceField.dataset.originalPrice = item.price;
|
|
||||||
console.log(`[Draft Items] 💰 Установлена цена: ${item.price}`);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('[Draft Items] ✅ Все скрытые поля заполнены');
|
// Находим форму по индексу
|
||||||
}
|
const productField = document.querySelector(`[name="items-${index}-product"]`);
|
||||||
|
const kitField = document.querySelector(`[name="items-${index}-product_kit"]`);
|
||||||
|
const quantityField = document.querySelector(`[name="items-${index}-quantity"]`);
|
||||||
|
const priceField = document.querySelector(`[name="items-${index}-price"]`);
|
||||||
|
|
||||||
|
if (!productField || !kitField) {
|
||||||
|
console.warn(`[Draft Items] ⚠️ Форма ${index} не найдена`);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log(`[Draft Items] 🔍 Поля формы ${index}:`);
|
||||||
|
console.log(` - productField:`, productField);
|
||||||
|
console.log(` - kitField:`, kitField);
|
||||||
|
|
||||||
|
// Устанавливаем значения
|
||||||
|
if (item.type === 'product') {
|
||||||
|
productField.value = item.id;
|
||||||
|
kitField.value = '';
|
||||||
|
console.log(`[Draft Items] ✅ Установлен product ID: ${item.id}`);
|
||||||
|
} else if (item.type === 'kit' || item.type === 'showcase_kit') {
|
||||||
|
kitField.value = item.id;
|
||||||
|
productField.value = '';
|
||||||
|
console.log(`[Draft Items] ✅ Установлен kit ID: ${item.id}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Устанавливаем количество и цену
|
||||||
|
if (quantityField) {
|
||||||
|
quantityField.value = item.quantity;
|
||||||
|
console.log(`[Draft Items] 🔢 Установлено количество: ${item.quantity}`);
|
||||||
|
}
|
||||||
|
if (priceField) {
|
||||||
|
priceField.value = item.price;
|
||||||
|
priceField.dataset.originalPrice = item.price;
|
||||||
|
console.log(`[Draft Items] 💰 Установлена цена: ${item.price}`);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('[Draft Items] ✅ Все скрытые поля заполнены');
|
||||||
|
|
||||||
|
// Триггерим переинициализацию Select2 чтобы он загрузил данные
|
||||||
|
console.log('[Draft Items] 🔄 Триггер переинициализации Select2...');
|
||||||
|
|
||||||
|
// Даём время на то, чтобы initExistingOrderItems увидел заполненные поля
|
||||||
|
setTimeout(() => {
|
||||||
|
console.log('[Draft Items] ✅ Готово к инициализации Select2');
|
||||||
|
}, 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Запускаем заполнение сразу при загрузке DOM
|
||||||
|
if (document.readyState === 'loading') {
|
||||||
|
document.addEventListener('DOMContentLoaded', fillDraftFields);
|
||||||
|
} else {
|
||||||
|
// DOM уже загружен
|
||||||
|
fillDraftFields();
|
||||||
|
}
|
||||||
|
})();
|
||||||
</script>
|
</script>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user