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