Загрузка данных
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));
}
if (typeof saveAndRefresh === 'function') {
saveAndRefresh();
} else {
localStorage.setItem('moto_cart', JSON.stringify(cart));
updateCart();
}
}
}
function saveAndRefresh() {
localStorage.setItem('moto_cart', JSON.stringify(cart));
updateCart();
}
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;
}
function openCheckout() {
if (typeof toggleCart === 'function') {
toggleCart();
}
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">
<i class="fa-solid fa-file-invoice-dollar text-amber-500 text-xl"></i>
<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">
<i class="fa-solid fa-xmark"></i>
</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 tracking-wider">Ваше имя *</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 tracking-wider">Номер телефона *</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>
<label class="block text-xs text-slate-400 uppercase font-bold mb-1.5 tracking-wider">Адрес доставки *</label>
<input type="text" required placeholder="г. Мариинск, ул. Ленина, д. 45" 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 tracking-wider">Способ оплаты *</label>
<select required 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 cursor-pointer">
<option value="" disabled selected>Выберите способ оплаты...</option>
<option value="card">Банковской картой онлайн</option>
<option value="sbp">Система быстрых платежей (СБП)</option>
<option value="credit">Оформление в мотокредит</option>
<option value="cash">При получении в шоуруме</option>
</select>
</div>
<div class="pt-2">
<label class="flex items-start gap-3 cursor-pointer group select-none">
<input type="checkbox" required class="mt-1 accent-amber-500 h-4 w-4 rounded border-slate-800 bg-slate-950 text-amber-500 cursor-pointer">
<span class="text-xs text-slate-400 group-hover:text-slate-300 transition leading-relaxed">
Я даю согласие на обработку моих персональных данных в соответствии с Федеральным законом № 152-ФЗ и соглашаюсь с условиями публичной оферты.
</span>
</label>
</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 tracking-wider text-sm transition cursor-pointer shadow-lg shadow-amber-500/10">
Подтвердить предзаказ
</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();
}