Добавлен механизм отложенного заполнения полей с ожиданием рендеринга формсета

This commit is contained in:
2025-12-09 00:00:20 +03:00
parent 27b988dda7
commit 12204bd34a

View File

@@ -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 %}