Загрузка данных
// 1. Инициализация корзины
let cart = JSON.parse(localStorage.getItem('moto_cart')) || [];
document.addEventListener("DOMContentLoaded", () => {
updateCart();
});
// 2. Добавление товара в корзину
function addToCart(id, name, price) {
const cartItem = cart.find(item => Number(item.id) === Number(id));
if (cartItem) {
cartItem.quantity++;
} else {
cart.push({ id: Number(id), name, price: Number(price), quantity: 1 });
}
saveAndRefresh();
}
// 3. Изменение количества (+ и -)
function changeQuantity(id, delta) {
const item = cart.find(i => Number(i.id) === Number(id));
if (item) {
item.quantity += delta;
if (item.quantity <= 0) {
cart = cart.filter(i => Number(i.id) !== Number(id));
}
saveAndRefresh();
}
}
// 4. Сохранение и обновление
function saveAndRefresh() {
localStorage.setItem('moto_cart', JSON.stringify(cart));
updateCart();
}
// 5. Перерисовка корзины в интерфейсе
function updateCart() {
const itemsContainer = document.getElementById('cart-items');
const countBadge = document.getElementById('cart-count');
const totalContainer = document.getElementById('cart-total');
const checkoutBtn = document.getElementById('checkout-btn');
if (!itemsContainer) return;
itemsContainer.innerHTML = '';
let total = 0;
let count = 0;
cart.forEach(item => {
total += item.price * item.quantity;
count += item.quantity;
const row = document.createElement('div');
row.className = 'flex items-center justify-between bg-slate-900 p-4 rounded-xl border border-slate-800/40 mb-2';
row.innerHTML = `
<div class="flex-1 min-w-0 pr-2">
<h4 class="text-white font-bold text-sm truncate">${item.name}</h4>
<p class="text-amber-500 text-xs mt-1">${(item.price * item.quantity).toLocaleString()} ₽</p>
</div>
<div class="flex items-center gap-2">
<button type="button" onclick="changeQuantity(${item.id}, -1)" class="px-2 py-0.5 bg-slate-950 text-slate-400 rounded hover:text-white transition font-bold cursor-pointer">-</button>
<span class="text-sm font-bold text-white min-w-[16px] text-center">${item.quantity}</span>
<button type="button" onclick="changeQuantity(${item.id}, 1)" class="px-2 py-0.5 bg-slate-950 text-slate-400 rounded hover:text-white transition font-bold cursor-pointer">+</button>
</div>
`;
itemsContainer.appendChild(row);
});
if (countBadge) countBadge.innerText = count;
if (totalContainer) totalContainer.innerText = total.toLocaleString() + ' ₽';
if (checkoutBtn) checkoutBtn.disabled = cart.length === 0;
}
// 6. Управление модальным окном заказа
function openCheckout() {
let modal = document.getElementById('checkout-modal');
if (!modal) {
modal = document.createElement('div');
modal.id = 'checkout-modal';
document.body.appendChild(modal);
}
modal.className = "fixed inset-0 z-50 flex items-center justify-center bg-slate-950/80 backdrop-blur-sm p-4 text-slate-100 font-sans";
let finalCount = 0;
let finalPrice = 0;
cart.forEach(item => {
finalCount += item.quantity;
finalPrice += item.price * item.quantity;
});
modal.innerHTML = `
<div class="bg-slate-900 border border-slate-800 rounded-3xl w-full max-w-lg overflow-hidden shadow-2xl">
<div class="bg-slate-950 px-6 py-4 border-b border-slate-800 flex items-center justify-between">
<div class="flex items-center gap-2">
<h2 class="text-xl font-black text-white uppercase tracking-tight">Оформление предзаказа</h2>
</div>
<button type="button" onclick="closeCheckoutModal()" class="text-slate-400 hover:text-white transition cursor-pointer text-xl p-1">✕</button>
</div>
<form id="checkout-form" onsubmit="submitOrder(event)" class="p-6 space-y-4">
<div class="bg-slate-950 p-4 rounded-xl border border-slate-800/50 text-sm">
<div class="flex justify-between mb-1">
<span class="text-slate-400">Выбрано товаров:</span>
<span class="text-white font-bold">${finalCount} шт.</span>
</div>
<div class="flex justify-between items-center border-t border-slate-800/60 pt-2 mt-2">
<span class="text-slate-400 font-bold">Итого к оплате:</span>
<span class="text-amber-500 font-black text-lg">${finalPrice.toLocaleString()} ₽</span>
</div>
</div>
<div>
<label class="block text-xs text-slate-400 uppercase font-bold mb-1.5">Ваше имя *</label>
<input type="text" required placeholder="Иван Иванов" class="w-full bg-slate-950 border border-slate-800 rounded-xl px-4 py-3 text-sm text-white focus:outline-none focus:border-amber-500 transition">
</div>
<div>
<label class="block text-xs text-slate-400 uppercase font-bold mb-1.5">Номер телефона *</label>
<input type="tel" required placeholder="+7 (999) 000-00-00" class="w-full bg-slate-950 border border-slate-800 rounded-xl px-4 py-3 text-sm text-white focus:outline-none focus:border-amber-500 transition">
</div>
<div class="pt-4">
<button type="submit" class="w-full bg-amber-500 hover:bg-amber-600 text-slate-950 py-3.5 rounded-xl font-black uppercase text-sm transition cursor-pointer">
Подтвердить предзаказ
</button>
</div>
</form>
</div>
`;
modal.classList.remove('hidden');
}
function closeCheckoutModal() {
const modal = document.getElementById('checkout-modal');
if (modal) modal.classList.add('hidden');
}
function submitOrder(event) {
if (event) event.preventDefault();
alert('Успешно! Ваш предзаказ принят.');
cart = [];
saveAndRefresh();
closeCheckoutModal();
}