feat(bookings): implement ticket receipts and seat sharing system

Add receipt tokens and booking_seats table to track individual tickets
Create receipt and seat view pages with QR code generation
This commit is contained in:
2026-04-12 22:48:26 +08:00
parent 7f582b530c
commit 6194c96ead
15 changed files with 1663 additions and 61 deletions

View File

@@ -35,6 +35,7 @@ const booking = ref(initialBooking)
const statusColor = computed(() => booking.value.status === 'confirmed' ? 'success' : 'warning')
const ticketLabel = computed(() => getTicketCatalogItem(booking.value.ticketType)?.label || booking.value.ticketType.toUpperCase())
const totalFormatted = computed(() => formatBookingCurrency(booking.value.totalPrice))
const receiptPath = computed(() => `/receipt/${booking.value.receiptToken}`)
const detailRows = computed(() => {
const rows = [
{
@@ -194,6 +195,16 @@ async function confirmBooking() {
class="justify-center"
/>
<UButton
v-if="booking.status === 'confirmed'"
:to="receiptPath"
label="Open Ticket Receipt"
color="neutral"
variant="outline"
icon="i-lucide-receipt"
class="justify-center"
/>
<UButton
label="Confirm This Booking"
icon="i-lucide-check-check"