Исправлено отображение единиц продажи при открытии отложенного заказа

- Добавлена функция loadAndDisplaySalesUnitsFromHidden для загрузки UI единиц продажи из черновика

- При загрузке товара из черновика теперь автоматически отображается и устанавливается сохранённая единица продажи

- Теперь при открытии отложенного заказа с 0.3 кг корректно отображается килограмм, а не базовая единица
This commit is contained in:
2026-01-02 18:41:16 +03:00
parent 2995710a3e
commit 676cfad401

View File

@@ -1951,6 +1951,17 @@ document.addEventListener('DOMContentLoaded', function() {
console.log(`[Order Items] 💰 Оригинальная цена сохранена: ${item.actual_price}`);
}
// Если это товар с единицами продажи, загружаем их UI
if (type === 'product' && typeof window.loadAndDisplaySalesUnitsFromHidden === 'function') {
const form = selectElement.closest('.order-item-form');
const salesUnitId = salesUnitField ? salesUnitField.value : null;
if (salesUnitId) {
console.log(`[Order Items] 📏 Загрузка единиц продажи, сохранённая единица: ${salesUnitId}`);
window.loadAndDisplaySalesUnitsFromHidden(id, form, item, salesUnitId);
}
}
console.log(`[Order Items] 🎉 Товар успешно загружен: ${optionText}`);
// Пересчитываем сумму товаров
@@ -1975,6 +1986,87 @@ document.addEventListener('DOMContentLoaded', function() {
console.log('[Order Items] Инициализация всех существующих элементов завершена');
/**
* Загружает и отображает единицы продажи для товара из черновика
* @param {string} productId - ID товара
* @param {HTMLElement} form - Элемент формы
* @param {Object} productData - Данные товара
* @param {string} savedSalesUnitId - Сохранённый ID единицы продажи
*/
window.loadAndDisplaySalesUnitsFromHidden = async function(productId, form, productData, savedSalesUnitId) {
console.log('[Sales Units] Загрузка единиц продажи для товара из черновика:', productId);
// Проверяем наличие модуля
if (typeof window.SalesUnitsModule === 'undefined') {
console.warn('[Sales Units] SalesUnitsModule не загружен');
return;
}
var salesUnitContainer = form.querySelector('.sales-unit-container');
if (!salesUnitContainer) {
console.warn('[Sales Units] Контейнер .sales-unit-container не найден');
return;
}
// Показываем индикатор загрузки
salesUnitContainer.innerHTML = '<div class="spinner-border spinner-border-sm" role="status"><span class="visually-hidden">Загрузка...</span></div>';
salesUnitContainer.style.display = 'block';
try {
// Загружаем единицы через API
const result = await window.SalesUnitsModule.fetchSalesUnits(productId);
if (!result.success || !result.sales_units || result.sales_units.length === 0) {
salesUnitContainer.style.display = 'none';
return;
}
const salesUnits = result.sales_units;
console.log('[Sales Units] Загружено единиц:', salesUnits.length);
// Создаем select с единицами
var selectHtml = window.SalesUnitsModule.createSalesUnitSelect(salesUnits);
salesUnitContainer.innerHTML = `
<label class="form-label">Единица продажи</label>
${selectHtml}
<div class="available-qty-display mt-1"></div>
`;
salesUnitContainer.style.display = 'block';
// Находим созданный select и скрытое поле
var salesUnitSelect = salesUnitContainer.querySelector('.sales-unit-selector');
var hiddenSalesUnitField = form.querySelector('[name$="-sales_unit"]');
if (salesUnitSelect && hiddenSalesUnitField) {
// Синхронизируем visible select с hidden field
salesUnitSelect.addEventListener('change', function() {
hiddenSalesUnitField.value = salesUnitSelect.value;
});
// Инициализируем обработчики
window.SalesUnitsModule.initializeSalesUnitHandlers(form);
// Устанавливаем сохранённую единицу
if (savedSalesUnitId) {
salesUnitSelect.value = savedSalesUnitId;
hiddenSalesUnitField.value = savedSalesUnitId;
salesUnitSelect.dispatchEvent(new Event('change'));
console.log('[Sales Units] Установлена сохранённая единица:', savedSalesUnitId);
} else {
// Устанавливаем дефолтную единицу
const defaultUnit = salesUnits.find(u => u.is_default);
if (defaultUnit) {
salesUnitSelect.value = defaultUnit.id;
hiddenSalesUnitField.value = defaultUnit.id;
salesUnitSelect.dispatchEvent(new Event('change'));
}
}
}
} catch (error) {
console.error('[Sales Units] Ошибка загрузки:', error);
salesUnitContainer.innerHTML = '<small class="text-danger">Ошибка загрузки единиц продажи</small>';
}
};
// Переинициализация для форм, которые могут быть добавлены позже
// Используем MutationObserver для отслеживания новых форм
if (typeof MutationObserver !== 'undefined') {