diff --git a/src/modules/events/index.ts b/src/modules/events/index.ts index e592b7e..0a4d4a3 100644 --- a/src/modules/events/index.ts +++ b/src/modules/events/index.ts @@ -51,6 +51,18 @@ export const eventsModule = createModulePlugin({ requiresAuth: false, }, }, + { + // Public ticket page — target of the emailed ticket link. Listed + // before /events/:id for readability; the router can't confuse the + // two anyway (different segment counts). + path: '/events/ticket/:ticketId', + name: 'event-ticket', + component: () => import('./views/TicketPage.vue'), + meta: { + title: 'Ticket', + requiresAuth: false, + }, + }, { path: '/events/:id', name: 'event-detail', diff --git a/src/modules/events/views/TicketPage.vue b/src/modules/events/views/TicketPage.vue new file mode 100644 index 0000000..cb6e9e3 --- /dev/null +++ b/src/modules/events/views/TicketPage.vue @@ -0,0 +1,155 @@ + + + + + + + + {{ t('events.ticket.backToEvent') }} + + + + + + {{ t('events.ticket.loading') }} + + + + + {{ t('events.ticket.notFound') }} + + + + + + + + {{ t('events.ticket.title') }} + + + {{ eventName ?? t('events.ticket.event') }} + + + + + {{ status.label }} + + + + + + + + + + + + + {{ t('events.ticket.holder') }} + {{ ticket.name }} + + + ID + {{ ticketId }} + + + + + {{ ticket.paid ? t('events.ticket.showAtDoor') : t('events.ticket.pending') }} + + + +
{{ t('events.ticket.notFound') }}
+ {{ eventName ?? t('events.ticket.event') }} +
+ {{ ticket.paid ? t('events.ticket.showAtDoor') : t('events.ticket.pending') }} +