// 全局变量 let currentProduct = null; let currentOrder = null; // DOM 元素 const productPrice = document.getElementById('product-price'); const quantityInput = document.getElementById('quantity'); const totalPriceElement = document.getElementById('total-price'); const orderForm = document.getElementById('orderForm'); const orderModal = document.getElementById('orderModal'); const paymentStatus = document.getElementById('paymentStatus'); // 初始化 document.addEventListener('DOMContentLoaded', function() { loadProductData(); setupEventListeners(); }); // 加载产品数据 async function loadProductData() { try { const response = await fetch('/api/products'); const products = await response.json(); // 使用第一个产品作为展示产品 const productId = Object.keys(products)[0]; currentProduct = { id: productId, ...products[productId] }; // 更新界面 document.getElementById('product-name').textContent = currentProduct.name; document.getElementById('product-description').textContent = currentProduct.description; document.getElementById('product-price').textContent = currentProduct.price.toFixed(2); updateTotalPrice(); } catch (error) { console.error('加载产品数据失败:', error); alert('加载产品信息失败,请刷新页面重试'); } } // 设置事件监听器 function setupEventListeners() { // 数量控制 document.getElementById('decrease-qty').addEventListener('click', () => { const current = parseInt(quantityInput.value) || 1; if (current > 1) { quantityInput.value = current - 1; updateTotalPrice(); } }); document.getElementById('increase-qty').addEventListener('click', () => { const current = parseInt(quantityInput.value) || 1; if (current < 999) { quantityInput.value = current + 1; updateTotalPrice(); } }); // 数量输入变化 quantityInput.addEventListener('input', updateTotalPrice); quantityInput.addEventListener('change', validateQuantity); // 表单提交 orderForm.addEventListener('submit', handleOrderSubmit); // 模态框控制 document.getElementById('closeModal').addEventListener('click', closeOrderModal); document.getElementById('pay-now-btn').addEventListener('click', handlePayNow); // 支付状态检查 document.getElementById('check-status-btn').addEventListener('click', checkPaymentStatus); // 点击模态框外部关闭 orderModal.addEventListener('click', (e) => { if (e.target === orderModal) { closeOrderModal(); } }); } // 更新总价 function updateTotalPrice() { if (!currentProduct) return; const quantity = parseInt(quantityInput.value) || 1; const total = (currentProduct.price * quantity).toFixed(2); totalPriceElement.textContent = `$${total}`; } // 验证数量 function validateQuantity() { const value = parseInt(quantityInput.value); if (isNaN(value) || value < 1) { quantityInput.value = 1; } else if (value > 999) { quantityInput.value = 999; } updateTotalPrice(); } // 处理订单提交 async function handleOrderSubmit(e) { e.preventDefault(); if (!currentProduct) { alert('产品信息加载中,请稍后重试'); return; } // 获取表单数据 const formData = new FormData(orderForm); const orderData = { product_id: currentProduct.id, quantity: parseInt(formData.get('quantity')), customer_name: formData.get('customer_name').trim(), customer_email: formData.get('customer_email').trim(), customer_phone: formData.get('customer_phone').trim(), shipping_address: formData.get('shipping_address').trim() }; // 验证必填字段 if (!orderData.customer_name || !orderData.shipping_address) { alert('请填写姓名和收货地址'); return; } // 禁用提交按钮 const submitBtn = document.getElementById('submit-order'); const btnText = submitBtn.querySelector('.btn-text'); const btnLoading = submitBtn.querySelector('.btn-loading'); submitBtn.disabled = true; btnText.style.display = 'none'; btnLoading.style.display = 'inline'; try { // 创建订单 const response = await fetch('/api/orders', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify(orderData) }); const result = await response.json(); if (result.success) { currentOrder = { ...orderData, order_id: result.order_id, total_amount: result.total_amount }; showOrderModal(); } else { throw new Error(result.error || '订单创建失败'); } } catch (error) { console.error('创建订单失败:', error); alert('创建订单失败: ' + error.message); } finally { // 恢复提交按钮 submitBtn.disabled = false; btnText.style.display = 'inline'; btnLoading.style.display = 'none'; } } // 显示订单确认模态框 function showOrderModal() { if (!currentOrder) return; // 填充订单信息 document.getElementById('modal-order-id').textContent = currentOrder.order_id; document.getElementById('modal-product-name').textContent = currentProduct.name; document.getElementById('modal-quantity').textContent = currentOrder.quantity; document.getElementById('modal-total-price').textContent = `$${currentOrder.total_amount.toFixed(2)} USDT`; document.getElementById('modal-address').textContent = currentOrder.shipping_address; orderModal.style.display = 'flex'; } // 关闭订单模态框 function closeOrderModal() { orderModal.style.display = 'none'; } // 处理支付 async function handlePayNow() { if (!currentOrder) return; try { // 创建支付 const response = await fetch('/api/payment/create', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ order_id: currentOrder.order_id }) }); const result = await response.json(); if (result.success) { // 检查是否为手动支付模式 if (result.manual_mode) { // 关闭模态框,跳转到手动支付页面 closeOrderModal(); window.location.href = result.payment_url; } else { // 关闭模态框,直接跳转到UPay支付页面 closeOrderModal(); // 显示跳转提示 const jumpTip = document.createElement('div'); jumpTip.innerHTML = `
请在新页面完成USDT支付