Исправлено отображение единиц продажи при открытии отложенного заказа
- Добавлена функция loadAndDisplaySalesUnitsFromHidden для загрузки UI единиц продажи из черновика - При загрузке товара из черновика теперь автоматически отображается и устанавливается сохранённая единица продажи - Теперь при открытии отложенного заказа с 0.3 кг корректно отображается килограмм, а не базовая единица
This commit is contained in:
@@ -1951,6 +1951,17 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
console.log(`[Order Items] 💰 Оригинальная цена сохранена: ${item.actual_price}`);
|
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}`);
|
console.log(`[Order Items] 🎉 Товар успешно загружен: ${optionText}`);
|
||||||
|
|
||||||
// Пересчитываем сумму товаров
|
// Пересчитываем сумму товаров
|
||||||
@@ -1975,6 +1986,87 @@ document.addEventListener('DOMContentLoaded', function() {
|
|||||||
|
|
||||||
console.log('[Order Items] Инициализация всех существующих элементов завершена');
|
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 для отслеживания новых форм
|
// Используем MutationObserver для отслеживания новых форм
|
||||||
if (typeof MutationObserver !== 'undefined') {
|
if (typeof MutationObserver !== 'undefined') {
|
||||||
|
|||||||
Reference in New Issue
Block a user