From a56a6706b04e66994160ee3e1c7fd51b22ada132 Mon Sep 17 00:00:00 2001 From: xiaomai Date: Sat, 9 May 2026 13:15:45 +0800 Subject: [PATCH] feat(bookings): add payment and document upload to confirmation page Allow users to select payment method and upload receipts before confirming. Add public API endpoints for payment updates and document management. --- app/composables/useLocale.ts | 36 ++ app/pages/confirmation/[token].vue | 314 +++++++++++++++++- server/api/public/bookings/[token].get.ts | 2 +- .../public/bookings/[token]/cancel.post.ts | 4 +- .../public/bookings/[token]/confirm.post.ts | 5 +- .../public/bookings/[token]/payment.patch.ts | 51 +++ .../[token]/transaction-document.delete.ts | 33 ++ .../[token]/transaction-document.get.ts | 29 ++ .../[token]/transaction-document.post.ts | 83 +++++ server/utils/booking-repository.ts | 193 ++++++++++- server/utils/bookings.ts | 14 + 11 files changed, 746 insertions(+), 18 deletions(-) create mode 100644 server/api/public/bookings/[token]/payment.patch.ts create mode 100644 server/api/public/bookings/[token]/transaction-document.delete.ts create mode 100644 server/api/public/bookings/[token]/transaction-document.get.ts create mode 100644 server/api/public/bookings/[token]/transaction-document.post.ts diff --git a/app/composables/useLocale.ts b/app/composables/useLocale.ts index d4442ad..a7da718 100644 --- a/app/composables/useLocale.ts +++ b/app/composables/useLocale.ts @@ -73,6 +73,24 @@ const messages = { 'confirm.picPhone': 'PIC Phone', 'confirm.ticketCategory': 'Ticket Category', 'confirm.seatsCovered': 'Seats Covered', + 'confirm.payment': 'Payment', + 'confirm.paymentPendingDescription': 'Choose the payment method before confirming.', + 'confirm.paymentConfirmedDescription': 'Payment method selected for this booking.', + 'confirm.paymentCash': 'Cash', + 'confirm.paymentBank': 'Bank', + 'confirm.transactionDocument': 'Transaction Document', + 'confirm.documentHelp': 'PDF, JPG, PNG, WEBP, HEIC, or HEIF - max 10MB.', + 'confirm.upload': 'Upload', + 'confirm.download': 'Download', + 'confirm.delete': 'Delete', + 'confirm.deleteDocumentPrompt': 'Delete transaction document?', + 'confirm.documentUploaded': 'Document uploaded', + 'confirm.documentUploadedDescription': 'The transaction document has been saved.', + 'confirm.documentDeleted': 'Document deleted', + 'confirm.documentDeletedDescription': 'The transaction document has been removed.', + 'confirm.uploadFailed': 'Upload failed', + 'confirm.deleteFailed': 'Delete failed', + 'confirm.documentSizeInvalid': 'Transaction document must be 10MB or smaller.', 'confirm.submittedLabel': 'Submitted', 'confirm.confirmedAt': 'Confirmed At', 'confirm.backToForm': 'Back To Booking Form', @@ -223,6 +241,24 @@ const messages = { 'confirm.picPhone': '负责人电话', 'confirm.ticketCategory': '票券类别', 'confirm.seatsCovered': '座位数量', + 'confirm.payment': '付款方式', + 'confirm.paymentPendingDescription': '请在确认前选择付款方式。', + 'confirm.paymentConfirmedDescription': '此预订已选择的付款方式。', + 'confirm.paymentCash': 'Cash', + 'confirm.paymentBank': 'Bank', + 'confirm.transactionDocument': 'Transaction Document', + 'confirm.documentHelp': 'PDF、JPG、PNG、WEBP、HEIC 或 HEIF,最大 10MB。', + 'confirm.upload': '上传', + 'confirm.download': '下载', + 'confirm.delete': '删除', + 'confirm.deleteDocumentPrompt': '确定删除 transaction document?', + 'confirm.documentUploaded': '文件已上传', + 'confirm.documentUploadedDescription': 'Transaction document 已保存。', + 'confirm.documentDeleted': '文件已删除', + 'confirm.documentDeletedDescription': 'Transaction document 已移除。', + 'confirm.uploadFailed': '上传失败', + 'confirm.deleteFailed': '删除失败', + 'confirm.documentSizeInvalid': 'Transaction document 必须是 10MB 或以下。', 'confirm.submittedLabel': '提交时间', 'confirm.confirmedAt': '确认时间', 'confirm.backToForm': '返回预订表格', diff --git a/app/pages/confirmation/[token].vue b/app/pages/confirmation/[token].vue index f0616bf..3f0bd83 100644 --- a/app/pages/confirmation/[token].vue +++ b/app/pages/confirmation/[token].vue @@ -1,5 +1,11 @@