115 lines
3.4 KiB
JavaScript
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;
|
|
});
|
|
}
|