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

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