2025-07-04 19:07:35 +08:00

115 lines
3.4 KiB
JavaScript

// 订单结算页面脚本
let selectedAddressId = 0;
let subtotal = 0;
// 初始化页面
document.addEventListener('DOMContentLoaded', function() {
// 从页面获取初始数据
const defaultAddress = document.querySelector('input[name="address_id"]:checked');
if (defaultAddress) {
selectedAddressId = parseInt(defaultAddress.value);
}
// 获取商品总价
const subtotalElement = document.getElementById('subtotal');
if (subtotalElement) {
subtotal = parseFloat(subtotalElement.textContent.replace('¥', ''));
}
});
// 选择地址
function selectAddress(addressId) {
selectedAddressId = addressId;
// 更新UI
document.querySelectorAll('.address-card').forEach(card => {
card.classList.remove('selected');
});
document.querySelector(`[data-address-id="${addressId}"]`).classList.add('selected');
// 更新单选按钮
document.querySelector(`input[value="${addressId}"]`).checked = true;
}
// 更新运费
function updateShippingFee() {
const shippingMethod = document.querySelector('input[name="shipping_method"]:checked').value;
let fee = 0;
switch(shippingMethod) {
case 'express':
fee = 10;
break;
case 'same_day':
fee = 20;
break;
default:
fee = 0;
}
document.getElementById('shippingFee').textContent = `¥${fee.toFixed(2)}`;
document.getElementById('totalAmount').textContent = `¥${(subtotal + fee).toFixed(2)}`;
}
// 提交订单
function submitOrder() {
if (!selectedAddressId) {
showAlert('请选择收货地址', 'warning');
return;
}
const shippingMethod = document.querySelector('input[name="shipping_method"]:checked').value;
const paymentMethod = document.querySelector('input[name="payment_method"]:checked').value;
const remark = document.getElementById('orderRemark').value;
// 获取选中的购物车商品ID
const urlParams = new URLSearchParams(window.location.search);
const selectedItems = urlParams.getAll('items');
if (selectedItems.length === 0) {
showAlert('没有选中的商品', 'error');
return;
}
const orderData = {
selected_items: selectedItems,
address_id: selectedAddressId,
shipping_method: shippingMethod,
payment_method: paymentMethod,
remark: remark
};
// 显示加载状态
const submitBtn = document.querySelector('.btn-danger');
const originalText = submitBtn.innerHTML;
submitBtn.innerHTML = '<i class="bi bi-hourglass-split"></i> 提交中...';
submitBtn.disabled = true;
fetch('/order/create', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify(orderData)
})
.then(response => response.json())
.then(data => {
if (data.success) {
showAlert('订单创建成功!正在跳转到支付页面...', 'success');
setTimeout(() => {
window.location.href = `/order/pay/${data.payment_sn}`;
}, 1500);
} else {
showAlert(data.message, 'error');
submitBtn.innerHTML = originalText;
submitBtn.disabled = false;
}
})
.catch(error => {
showAlert('提交订单失败,请重试', 'error');
submitBtn.innerHTML = originalText;
submitBtn.disabled = false;
});
}