document.addEventListener('DOMContentLoaded', () => {
initApp();
});
function initApp() {
setDefaultDate();
loadTours();
setupForm();
}
function setDefaultDate() {
const dateInput = document.getElementById('travel-date');
if (dateInput) {
const today = new Date().toISOString().split('T')[0];
dateInput.min = today;
dateInput.value = today;
}
}
async function loadTours() {
try {
const response = await fetch('/api/tours');
const result = await response.json();
const tours = Array.isArray(result) ? result : (result.data || []);
const select = document.getElementById('tour-schedule');
if (tours.length === 0) {
addDefaultTours();
return;
}
tours.forEach(tour => {
const option = document.createElement('option');
option.value = tour.id;
option.textContent = tour.name;
option.dataset.price = tour.price;
select.appendChild(option);
});
} catch (err) {
console.error('加载线路失败:', err);
addDefaultTours();
}
}
function addDefaultTours() {
const select = document.getElementById('tour-schedule');
const defaultTours = [
{ id: 't1', name: '慕田峪长城专线巴士-8点出发班', price: 80 },
{ id: 't2', name: '慕田峪长城专线巴士-10点出发班', price: 80 },
{ id: 't3', name: '八达岭长城专线巴士-8点出发班', price: 90 },
{ id: 't4', name: '黄花城长城专线巴士-8点出发班', price: 100 }
];
defaultTours.forEach(tour => {
const option = document.createElement('option');
option.value = tour.id;
option.textContent = tour.name;
option.dataset.price = tour.price;
select.appendChild(option);
});
}
function setupForm() {
const form = document.getElementById('booking-form');
form.addEventListener('submit', handleSubmit);
}
async function handleSubmit(e) {
e.preventDefault();
const formData = {
tourId: document.getElementById('tour-schedule').value,
ticketType: document.getElementById('ticket-type').value,
travelDate: document.getElementById('travel-date').value,
adults: parseInt(document.getElementById('adults-count').value),
children: parseInt(document.getElementById('children-count').value) || 0,
infants: parseInt(document.getElementById('infants-count').value) || 0,
name: document.getElementById('user-name').value.trim(),
phone: document.getElementById('user-phone').value.trim(),
email: document.getElementById('user-email').value.trim(),
createTime: new Date().toISOString()
};
if (!validateForm(formData)) return;
const submitBtn = document.querySelector('.submit-btn');
submitBtn.disabled = true;
submitBtn.textContent = '预约中...';
try {
const response = await fetch('/api/orders', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(formData)
});
const result = await response.json();
if (result.success) {
showSuccessModal(result.order);
form.reset();
setDefaultDate();
} else {
alert('预约失败: ' + (result.message || '未知错误'));
}
} catch (err) {
console.error('提交订单失败:', err);
alert('网络错误,请稍后重试');
} finally {
submitBtn.disabled = false;
submitBtn.textContent = '立刻预约';
}
}
function validateForm(data) {
if (!data.tourId) {
alert('请选择线路班次');
return false;
}
if (!data.ticketType) {
alert('请选择票价类型');
return false;
}
if (!data.travelDate) {
alert('请选择出行日期');
return false;
}
if (!data.adults || data.adults < 1) {
alert('请选择成人人数');
return false;
}
if (!data.name) {
alert('请输入您的姓名');
return false;
}
if (!/^1[3-9][0-9]{9}$/.test(data.phone)) {
alert('请输入有效的11位手机号码');
return false;
}
if (data.email && !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(data.email)) {
alert('邮箱格式不正确');
return false;
}
return true;
}
function showSuccessModal(order) {
const modal = document.getElementById('success-modal');
const message = document.getElementById('success-message');
message.innerHTML = `预约订单号: ${order.id}
我们将尽快与您联系确认`;
modal.style.display = 'flex';
}
function closeModal() {
document.getElementById('success-modal').style.display = 'none';
}