diff --git a/get_bookings.php b/get_bookings.php new file mode 100644 index 0000000..d168ca4 --- /dev/null +++ b/get_bookings.php @@ -0,0 +1,101 @@ + false, + 'message' => '缺少必要的参数', + 'total' => 0, + 'pending' => 0, + 'completed' => 0, + 'bookings' => [] + ]); + exit; +} + +// 创建数据库连接 +$conn = new mysqli($servername, $username, $password, $dbname); + +// 检查连接 +if ($conn->connect_error) { + echo json_encode([ + 'success' => false, + 'message' => '数据库连接失败', + 'total' => 0, + 'pending' => 0, + 'completed' => 0, + 'bookings' => [] + ]); + exit; +} + +// 准备SQL查询 - 查询用户的预约记录 +// 假设预约表名为bookings,套餐表名为packages +$sql = "SELECT b.*, p.package_name + FROM bookings b + LEFT JOIN packages p ON b.package_id = p.id + WHERE b.phone = ? + ORDER BY b.booking_date DESC, b.id DESC"; + +$stmt = $conn->prepare($sql); +$stmt->bind_param("s", $phone); +$stmt->execute(); +$result = $stmt->get_result(); + +$bookings = []; +$pending = 0; +$completed = 0; + +// 处理查询结果 +while ($row = $result->fetch_assoc()) { + $booking = [ + 'id' => $row['id'], + 'booking_date' => $row['booking_date'], + 'phone' => $row['phone'], + 'car_number' => $row['car_number'] ?? '', + 'car_model' => $row['car_model'] ?? '', + 'time_slot' => $row['time_slot'] ?? '', + 'status' => $row['status'] ?? '未知', + 'package_name' => $row['package_name'] ?? '', + 'notes' => $row['notes'] ?? '' + ]; + + // 统计不同状态的预约数量 + if ($booking['status'] === '待服务') { + $pending++; + } elseif ($booking['status'] === '已完成') { + $completed++; + } + + $bookings[] = $booking; +} + +// 计算总预约数 +$total = count($bookings); + +// 构建响应数据 +$response = [ + 'success' => true, + 'total' => $total, + 'pending' => $pending, + 'completed' => $completed, + 'bookings' => $bookings +]; + +// 返回JSON数据 +echo json_encode($response); + +// 关闭数据库连接 +$stmt->close(); +$conn->close(); diff --git a/process_booking.php b/process_booking.php new file mode 100644 index 0000000..f167d7e --- /dev/null +++ b/process_booking.php @@ -0,0 +1,134 @@ + + alert('$error_message'); + window.history.back(); + "; + exit; + } + + // 创建数据库连接 + $conn = new mysqli($servername, $username, $password, $dbname); + + // 检查连接 + if ($conn->connect_error) { + echo ""; + exit; + } + + // 检查是否已经存在相同的预约(同一天、同一时间段、同一车牌号) + $check_sql = "SELECT * FROM bookings + WHERE booking_date = ? AND time_slot = ? AND car_number = ? AND status != '已取消'"; + $check_stmt = $conn->prepare($check_sql); + $check_stmt->bind_param("sss", $booking_date, $time_slot, $car_number); + $check_stmt->execute(); + $check_result = $check_stmt->get_result(); + + if ($check_result->num_rows > 0) { + echo ""; + $check_stmt->close(); + $conn->close(); + exit; + } + $check_stmt->close(); + + // 插入预约记录 + $status = '待服务'; // 默认为待服务状态 + $create_time = date('Y-m-d H:i:s'); + + $insert_sql = "INSERT INTO bookings + (customer_name, phone, car_model, car_number, booking_date, time_slot, package_id, notes, status, create_time) + VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"; + + $stmt = $conn->prepare($insert_sql); + $stmt->bind_param("ssssssssss", $customer_name, $phone, $car_model, $car_number, $booking_date, $time_slot, $package_id, $notes, $status, $create_time); + + if ($stmt->execute()) { + // 预约成功 + $success_message = '预约添加成功!'; + + // 根据来源决定返回页面 + $redirect_url = $source === 'vip_page' ? 'vip.php' : 'index.php'; + + echo ""; + } else { + // 预约失败 + echo ""; + } + + // 关闭数据库连接 + $stmt->close(); + $conn->close(); +} else { + // 不是POST请求,重定向到首页 + header('Location: index.php'); + exit; +} diff --git a/vip.php b/vip.php index 5962a86..fad3e38 100644 --- a/vip.php +++ b/vip.php @@ -46,6 +46,49 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { throw $e; // 重新抛出其他类型的异常 } + } elseif ($action === 'update_vip') { + $id = (int)$_POST['vip_id']; + $customer_name = trim($_POST['customer_name']); + $phone = trim($_POST['phone']); + $car_model = trim($_POST['car_model']); + $car_number = trim($_POST['car_number']); + $email = trim($_POST['email'] ?? ''); + $birthday = $_POST['birthday'] ?? ''; + $notes = trim($_POST['notes'] ?? ''); + + if (empty($customer_name) || empty($phone)) { + throw new Exception('请填写客户姓名和联系电话'); + } + + // 检查手机号和车牌号组合是否与其他VIP客户冲突 + $stmt = $pdo->prepare("SELECT id FROM vip_customers WHERE phone = ? AND car_number = ? AND id != ?"); + $stmt->execute([$phone, $car_number, $id]); + if ($stmt->fetch()) { + throw new Exception('该手机号和车牌号组合已经被其他VIP客户使用'); + } + + // 更新VIP客户信息 + $stmt = $pdo->prepare("UPDATE vip_customers SET + customer_name = ?, + phone = ?, + car_model = ?, + car_number = ?, + email = ?, + birthday = ?, + notes = ?, + updated_at = NOW() + WHERE id = ?"); + try { + $stmt->execute([$customer_name, $phone, $car_model, $car_number, $email, $birthday, $notes, $id]); + $success_message = "VIP客户信息更新成功!"; + } catch (PDOException $e) { + // 捕获唯一约束错误 + if ($e->errorInfo[1] == 1062) { // MySQL唯一键约束错误码 + throw new Exception('该手机号和车牌号组合已经被其他VIP客户使用'); + } + throw $e; // 重新抛出其他类型的异常 + } + } elseif ($action === 'delete_vip') { $id = (int)$_POST['vip_id']; $stmt = $pdo->prepare("DELETE FROM vip_customers WHERE id = ?"); @@ -58,9 +101,30 @@ if ($_SERVER['REQUEST_METHOD'] === 'POST') { } } -// 获取所有VIP客户 +// 获取搜索参数 +$search_phone = isset($_GET['search_phone']) ? trim($_GET['search_phone']) : ''; +$search_car_number = isset($_GET['search_car_number']) ? trim($_GET['search_car_number']) : ''; + +// 获取所有VIP客户(支持搜索) try { - $stmt = $pdo->query("SELECT * FROM vip_customers ORDER BY created_at DESC"); + // 构建查询语句 + $query = "SELECT * FROM vip_customers WHERE 1=1"; + $params = []; + + if (!empty($search_phone)) { + $query .= " AND phone LIKE :phone"; + $params[':phone'] = '%' . $search_phone . '%'; + } + + if (!empty($search_car_number)) { + $query .= " AND car_number LIKE :car_number"; + $params[':car_number'] = '%' . $search_car_number . '%'; + } + + $query .= " ORDER BY created_at DESC"; + + $stmt = $pdo->prepare($query); + $stmt->execute($params); $vip_customers = $stmt->fetchAll(); } catch (Exception $e) { $error_message = '获取VIP客户列表失败:' . $e->getMessage(); @@ -108,6 +172,27 @@ try {