From f5f09c89dad791f3d9c3a8fea75c426af067323f Mon Sep 17 00:00:00 2001 From: vijay Date: Mon, 2 Sep 2024 14:47:14 +0800 Subject: [PATCH] =?UTF-8?q?=E9=A2=84=E7=BA=A6=E5=8A=9F=E8=83=BD=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- application/controllers/Customers.php | 59 ++++ application/models/Appointments_model.php | 3 +- .../views/layouts/home_search_layout.php | 311 +++++++++++------- ...c0a322b208e83d22d3aef33ecb184bc71d31,1.ser | Bin 0 -> 95583 bytes 4 files changed, 260 insertions(+), 113 deletions(-) create mode 100644 vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/HTML/4.17.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser diff --git a/application/controllers/Customers.php b/application/controllers/Customers.php index 9809957a..498d0e72 100755 --- a/application/controllers/Customers.php +++ b/application/controllers/Customers.php @@ -202,6 +202,65 @@ class Customers extends EA_Controller } } + /** + * Filter customers by the provided keyword. + */ + public function search_by_phone(): void + { + + $phoneNumber = request('phone_number', ''); + if (empty($phoneNumber)) { + // 返回错误信息 + echo json_encode(['success' => false, 'message' => 'Invalid phone number']); + return; + } + + // 查询数据库中的预约信息 + $appointments = $this->appointments_model->get_appointments_by_phone($phoneNumber); + foreach ($appointments as &$appointment) { + $this->appointments_model->load($appointment, ['service', 'provider']); + } + + if (!empty($appointments)) { + // 返回预约信息 + echo json_encode(['success' => true, 'appointments' => $appointments]); + } else { + // 如果没有找到预约信息 + echo json_encode(['success' => false, 'message' => 'No appointments found']); + } + } + + public function cancel(): void + { + try { + $appointmentId = request('appointmentId'); + + // 查找指定的预约记录 + $appointment = $this->appointments_model->find($appointmentId); + + if ($appointment) { + // 更新状态为 '取消' + $appointment['status'] = '取消'; + + // 保存更新后的预约记录 + $this->appointments_model->save($appointment); + + json_response([ + 'success' => true, + 'id' => $appointmentId, + ]); + } else { + // 处理预约记录不存在的情况 + json_response([ + 'success' => false, + 'message' => '預約記錄不存在。', + ], 404); + } + } catch (Throwable $e) { + json_exception($e); + } + } + /** * Store a new customer. */ diff --git a/application/models/Appointments_model.php b/application/models/Appointments_model.php index ce769cef..5c4d9052 100755 --- a/application/models/Appointments_model.php +++ b/application/models/Appointments_model.php @@ -649,7 +649,7 @@ class Appointments_model extends EA_Model ->like('providers.phone_number', $phone_number) ->or_like('customers.phone_number', $phone_number) ->group_end() - ->where('appointments.start_datetime >=', date('Y-m-d H:i:s')) // 过滤掉当天00点之前的预约 + // ->where('appointments.start_datetime >=', date('Y-m-d H:i:s')) // 过滤掉当天00点之前的预约 ->limit($limit) ->offset($offset) ->order_by($order_by) @@ -662,4 +662,5 @@ class Appointments_model extends EA_Model return $appointments; } + } diff --git a/application/views/layouts/home_search_layout.php b/application/views/layouts/home_search_layout.php index 3569ddbf..1e75b471 100755 --- a/application/views/layouts/home_search_layout.php +++ b/application/views/layouts/home_search_layout.php @@ -1,5 +1,6 @@ + @@ -7,9 +8,9 @@ - + - + @@ -38,9 +39,11 @@ flex-direction: column; min-height: 44.2vh; } + .search-container-title { color: #666666; } + .search-container { display: flex; flex-direction: column; @@ -49,6 +52,7 @@ max-width: 400px; margin-bottom: 20px; } + .search-container input { width: 100%; padding: 10px; @@ -56,6 +60,7 @@ border-radius: 5px; border: 1px solid #ccc; } + .search-container button { padding: 10px 20px; background-color: #429a82; @@ -65,12 +70,15 @@ cursor: pointer; width: 100%; } + .appointments-container { display: none; width: 100%; max-width: 600px; margin-top: 20px; + padding: 0 12px; } + .no-appointments { display: none; color: red; @@ -81,140 +89,219 @@ -
-
-
- vars('company_name'), - 'company_logo' => vars('company_logo'), - ]); ?> -
-

查询预约信息

-
- - +
+
+
+ vars('company_name'), + 'company_logo' => vars('company_logo'), + ]); ?> +
+

查询预约信息

+
+ + +
+
+

预约结果

+
    +
    +
    + 未找到预约信息。 +
    -
    -

    预约结果

    -
      -
      -
      - 未找到预约信息。 -
      -
      vars('display_login_button')]); ?>
      -
      +
      - - vars('cookie_notice_content')]); ?> - + + vars('cookie_notice_content')]); ?> + - - vars('terms_and_conditions_content'), - ]); ?> - + + vars('terms_and_conditions_content'), + ]); ?> + - - vars('privacy_policy_content')]); ?> - + + vars('privacy_policy_content')]); ?> + - - - - - - - - - - + + + + + + + + + + - - - - - - - - - - - + + + + + + + + + + - - - + appointmentsList.innerHTML = ''; + appointments.forEach(function(appointment) { + var listItem = document.createElement('li'); - - + // 创建服务名称和提供者姓名的 div + var serviceDiv = document.createElement('div'); + serviceDiv.textContent = `${appointment.service.name} - ${appointment.provider.last_name}${appointment.provider.first_name}`; - vars('google_analytics_code')]); ?> - vars('matomo_analytics_url'), - 'matomo_analytics_site_id' => vars('matomo_analytics_site_id'), -]); ?> + // 创建预约时间的 div + var timeDiv = document.createElement('div'); + timeDiv.textContent = `開始時間:${appointment.start}`; - + // 创建结束时间的 div + var endDiv = document.createElement('div'); + endDiv.textContent = `結束時間:${appointment.end}`; + + // 创建状态的 div + var statusDiv = document.createElement('div'); + statusDiv.textContent = `狀態:${appointment.status}`; + + // 将每个 div 添加到 li 中 + listItem.appendChild(serviceDiv); + listItem.appendChild(timeDiv); + listItem.appendChild(endDiv); + listItem.appendChild(statusDiv); + + // 如果状态是“已预约”,添加取消预约按钮 + if (appointment.status === '已預約') { + var cancelButton = document.createElement('button'); + cancelButton.textContent = '取消預約'; + cancelButton.className = 'btn btn-danger'; // 添加一些样式类名 + cancelButton.addEventListener('click', function() { + // 确认对话框 + var confirmCancel = confirm('您確定要取消這個預約嗎?'); + + if (confirmCancel) { + // 添加取消预约的逻辑 + // 例如,发起一个请求到服务器取消预约 + console.log(`取消預約:${appointment.id}`); + // 这里可以添加实际的请求代码 + const url = App.Utils.Url.siteUrl('customers/cancel'); + + const data = { + csrf_token: vars('csrf_token'), + appointmentId: appointment.id, + }; + + $.post(url, data).done((data) => { + // console.log('data',response); + if (data.success) { + //重新加载 + doSearch(); + alert('取消預約成功。'); + } else { + alert('取消預約失敗。'); + } + }); + } + }); + listItem.appendChild(cancelButton); + } + + // 将 li 添加到 ul 或 ol 列表中 + appointmentsList.appendChild(listItem); + }); + + appointmentsContainer.style.display = 'block'; + document.getElementById('noAppointmentsMessage').style.display = 'none'; + } + + function showNoAppointmentsMessage() { + document.getElementById('appointmentsContainer').style.display = 'none'; + document.getElementById('noAppointmentsMessage').style.display = 'block'; + } + + + + + + vars('google_analytics_code')]); ?> + vars('matomo_analytics_url'), + 'matomo_analytics_site_id' => vars('matomo_analytics_site_id'), + ]); ?> + + + \ No newline at end of file diff --git a/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/HTML/4.17.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser b/vendor/ezyang/htmlpurifier/library/HTMLPurifier/DefinitionCache/Serializer/HTML/4.17.0,f474c0a322b208e83d22d3aef33ecb184bc71d31,1.ser new file mode 100644 index 0000000000000000000000000000000000000000..e2c429252e5bc827f655255ad493e0fa1c91cb6e GIT binary patch literal 95583 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

      LXpb8D6U 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 literal 0 HcmV?d00001