Рефакторинг расчёта суммы заказа: упрощена структура и убраны избыточные логи
This commit is contained in:
@@ -1394,13 +1394,14 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
toggleRecipientFields();
|
||||
|
||||
// === РАСЧЁТ ИТОГОВОЙ СУММЫ ТОВАРОВ ===
|
||||
function calculateOrderItemsTotal() {
|
||||
// Вычисление суммы по всем видимым позициям
|
||||
function calculateTotal() {
|
||||
const visibleForms = Array.from(document.querySelectorAll('.order-item-form'))
|
||||
.filter(form => !form.classList.contains('deleted'));
|
||||
|
||||
let total = 0;
|
||||
|
||||
visibleForms.forEach((form, index) => {
|
||||
visibleForms.forEach((form) => {
|
||||
const quantityField = form.querySelector('[name$="-quantity"]');
|
||||
const priceField = form.querySelector('[name$="-price"]');
|
||||
|
||||
@@ -1415,8 +1416,9 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
return total;
|
||||
}
|
||||
|
||||
function updateOrderItemsTotal() {
|
||||
const total = calculateOrderItemsTotal();
|
||||
// Обновление отображения суммы в DOM
|
||||
function updateTotalDisplay() {
|
||||
const total = calculateTotal();
|
||||
const totalElement = document.getElementById('order-items-total-value');
|
||||
|
||||
if (totalElement) {
|
||||
@@ -1424,8 +1426,10 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
}
|
||||
}
|
||||
|
||||
// Делаем функцию глобальной для вызова из других скриптов
|
||||
window.updateOrderItemsTotal = updateOrderItemsTotal;
|
||||
// Публичная функция для вызова из других скриптов (черновики, AJAX)
|
||||
window.updateOrderItemsTotal = function() {
|
||||
updateTotalDisplay();
|
||||
};
|
||||
|
||||
// Функция для инициализации отслеживания изменения цены
|
||||
function initPriceTracking(form) {
|
||||
@@ -1466,11 +1470,11 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
}
|
||||
|
||||
// Добавляем слушатели для обновления итоговой суммы
|
||||
priceField.addEventListener('input', updateOrderItemsTotal);
|
||||
priceField.addEventListener('input', updateTotalDisplay);
|
||||
|
||||
const quantityField = form.querySelector('[name$="-quantity"]');
|
||||
if (quantityField) {
|
||||
quantityField.addEventListener('input', updateOrderItemsTotal);
|
||||
quantityField.addEventListener('input', updateTotalDisplay);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1512,7 +1516,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
removeForm(newForm);
|
||||
});
|
||||
|
||||
updateOrderItemsTotal();
|
||||
updateTotalDisplay();
|
||||
|
||||
return newForm;
|
||||
}
|
||||
@@ -1530,13 +1534,13 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
deleteCheckbox.checked = true;
|
||||
form.classList.add('deleted');
|
||||
form.style.display = 'none';
|
||||
updateOrderItemsTotal();
|
||||
updateTotalDisplay();
|
||||
if (typeof window.orderAutosave !== 'undefined' && window.orderAutosave.scheduleAutosave) {
|
||||
window.orderAutosave.scheduleAutosave();
|
||||
}
|
||||
} else {
|
||||
form.remove();
|
||||
updateOrderItemsTotal();
|
||||
updateTotalDisplay();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1557,7 +1561,7 @@ document.addEventListener('DOMContentLoaded', function() {
|
||||
}
|
||||
|
||||
// Инициализируем итоговую сумму
|
||||
updateOrderItemsTotal();
|
||||
updateTotalDisplay();
|
||||
|
||||
// Валидация перед отправкой
|
||||
document.getElementById('order-form').addEventListener('submit', function(e) {
|
||||
@@ -2241,22 +2245,8 @@ if (!document.getElementById('notification-styles')) {
|
||||
console.log(`[Order Items] 🎉 Товар успешно загружен: ${optionText}`);
|
||||
|
||||
// Пересчитываем сумму товаров
|
||||
console.log('[Order Items] 📊 Попытка пересчёта суммы...');
|
||||
console.log('[Order Items] updateOrderItemsTotal доступен?', typeof updateOrderItemsTotal);
|
||||
if (typeof updateOrderItemsTotal === 'function') {
|
||||
console.log('[Order Items] ✅ Вызов updateOrderItemsTotal()');
|
||||
updateOrderItemsTotal();
|
||||
} else {
|
||||
console.warn('[Order Items] ⚠️ updateOrderItemsTotal не найдена! Попытка найти позже...');
|
||||
// Попробуем позже
|
||||
setTimeout(() => {
|
||||
if (typeof updateOrderItemsTotal === 'function') {
|
||||
console.log('[Order Items] ✅ Вызов updateOrderItemsTotal() (повторная попытка)');
|
||||
updateOrderItemsTotal();
|
||||
} else {
|
||||
console.error('[Order Items] ❌ updateOrderItemsTotal так и не найдена!');
|
||||
}
|
||||
}, 500);
|
||||
if (typeof window.updateOrderItemsTotal === 'function') {
|
||||
window.updateOrderItemsTotal();
|
||||
}
|
||||
} else {
|
||||
console.warn(`[Order Items] ⚠️ API вернул пустой массив results`);
|
||||
|
||||
Reference in New Issue
Block a user