Рефакторинг расчёта суммы заказа: упрощена структура и убраны избыточные логи

This commit is contained in:
2025-12-09 00:29:49 +03:00
parent e32254e62d
commit 34fa5d12eb

View File

@@ -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`);