feat(ui): display purchaser details on receipt and seat pages

Show customer name and phone number in a new panel
Add English and Chinese translations for the purchaser label
This commit is contained in:
2026-05-09 12:32:41 +08:00
parent 4f25f2b2f8
commit 3710216346
3 changed files with 35 additions and 0 deletions

View File

@@ -121,6 +121,7 @@ const messages = {
'receipt.recipient': 'Recipient', 'receipt.recipient': 'Recipient',
'receipt.recipientPhoneLabel': 'Recipient Phone', 'receipt.recipientPhoneLabel': 'Recipient Phone',
'receipt.guest': 'Guest', 'receipt.guest': 'Guest',
'receipt.purchaser': 'Purchaser',
'receipt.seatsReady': 'Seats ready', 'receipt.seatsReady': 'Seats ready',
'receipt.seatsReadyDescription': '{count} {seatLabel} ready to send.', 'receipt.seatsReadyDescription': '{count} {seatLabel} ready to send.',
'receipt.copied': 'Copied to clipboard.', 'receipt.copied': 'Copied to clipboard.',
@@ -270,6 +271,7 @@ const messages = {
'receipt.recipient': '接收人', 'receipt.recipient': '接收人',
'receipt.recipientPhoneLabel': '接收人电话', 'receipt.recipientPhoneLabel': '接收人电话',
'receipt.guest': '宾客', 'receipt.guest': '宾客',
'receipt.purchaser': '购票人',
'receipt.seatsReady': '座位已准备好', 'receipt.seatsReady': '座位已准备好',
'receipt.seatsReadyDescription': '{count} 个{seatLabel}已准备发送。', 'receipt.seatsReadyDescription': '{count} 个{seatLabel}已准备发送。',
'receipt.copied': '已复制到剪贴板。', 'receipt.copied': '已复制到剪贴板。',

View File

@@ -407,6 +407,22 @@ async function openBatchShare() {
:ui="{ body: 'p-4 sm:p-8' }" :ui="{ body: 'p-4 sm:p-8' }"
> >
<div class="mx-auto flex max-w-sm flex-col items-center gap-5 text-center"> <div class="mx-auto flex max-w-sm flex-col items-center gap-5 text-center">
<div class="surface-panel w-full rounded-lg px-4 py-3 text-left shadow-sm">
<p class="text-[11px] font-medium uppercase tracking-wide text-muted">
{{ t('receipt.purchaser') }}
</p>
<div class="mt-2 space-y-2">
<div class="flex min-w-0 items-center gap-2 text-sm font-semibold text-highlighted">
<UIcon name="i-lucide-user-round" class="size-4 shrink-0 text-muted" />
<span class="min-w-0 break-words">{{ receipt.booking.customerName }}</span>
</div>
<div class="flex min-w-0 items-center gap-2 text-sm text-default">
<UIcon name="i-lucide-phone" class="size-4 shrink-0 text-muted" />
<span class="min-w-0 break-words">{{ receipt.booking.customerPhone }}</span>
</div>
</div>
</div>
<div class="surface-panel w-full rounded-lg p-3 shadow-sm sm:p-5"> <div class="surface-panel w-full rounded-lg p-3 shadow-sm sm:p-5">
<QrCodeSvg :value="receipt.receiptUrl" :size="220" /> <QrCodeSvg :value="receipt.receiptUrl" :size="220" />
</div> </div>

View File

@@ -10,6 +10,7 @@ import { formatDateTime } from '../../utils/formatters'
const route = useRoute() const route = useRoute()
const apiClient = useApiClient() const apiClient = useApiClient()
const { t } = useLocale()
const token = String(route.params.token || '') const token = String(route.params.token || '')
@@ -54,6 +55,22 @@ useSeoMeta({
<div class="grid gap-4 lg:grid-cols-[18rem_minmax(0,1fr)] lg:gap-6"> <div class="grid gap-4 lg:grid-cols-[18rem_minmax(0,1fr)] lg:gap-6">
<UCard class="surface-card overflow-hidden rounded-lg" :ui="{ body: 'space-y-4 p-4 sm:p-5' }"> <UCard class="surface-card overflow-hidden rounded-lg" :ui="{ body: 'space-y-4 p-4 sm:p-5' }">
<div class="surface-panel rounded-lg px-4 py-3 text-left text-sm">
<p class="text-[11px] font-medium uppercase tracking-wide text-muted">
{{ t('receipt.purchaser') }}
</p>
<div class="mt-2 space-y-2">
<div class="flex min-w-0 items-center gap-2 font-semibold text-highlighted">
<UIcon name="i-lucide-user-round" class="size-4 shrink-0 text-muted" />
<span class="min-w-0 break-words">{{ receipt.booking.customerName }}</span>
</div>
<div class="flex min-w-0 items-center gap-2 text-default">
<UIcon name="i-lucide-phone" class="size-4 shrink-0 text-muted" />
<span class="min-w-0 break-words">{{ receipt.booking.customerPhone }}</span>
</div>
</div>
</div>
<div class="space-y-1 text-center"> <div class="space-y-1 text-center">
<p class="text-sm font-semibold text-highlighted"> <p class="text-sm font-semibold text-highlighted">
QR Code QR Code