diff --git a/shopxo/app/plugins/vr_ticket/service/WalletService.php b/shopxo/app/plugins/vr_ticket/service/WalletService.php index df764b8..e86b60a 100644 --- a/shopxo/app/plugins/vr_ticket/service/WalletService.php +++ b/shopxo/app/plugins/vr_ticket/service/WalletService.php @@ -95,8 +95,7 @@ class WalletService extends BaseService 'phone' => self::maskPhone($ticket['phone'] ?? ''), 'verify_status' => $ticket['verify_status'], 'issued_at' => $ticket['issued_at'], - 'short_code' => $shortCode, - 'seat_number' => self::parseSeatNumber($ticket['seat_info'] ?? ''), + 'short_code' => $shortCode, ]; } diff --git a/shopxo/app/plugins/vr_ticket/view/goods/ticket_card.html b/shopxo/app/plugins/vr_ticket/view/goods/ticket_card.html index dc4af9a..e972a28 100644 --- a/shopxo/app/plugins/vr_ticket/view/goods/ticket_card.html +++ b/shopxo/app/plugins/vr_ticket/view/goods/ticket_card.html @@ -244,7 +244,7 @@ @@ -366,11 +366,11 @@ var VrTicketWallet = (function() { '
' + '
📅' + escapeHtml(ticket.session_time) + '
' + '
📍' + escapeHtml(ticket.venue_name) + '
' + - '
💺' + escapeHtml(ticket.seat_info) + '
' + + '
💺' + escapeHtml(ticket.seat_number) + '
' + '
👤' + escapeHtml(ticket.real_name) + ' ' + escapeHtml(ticket.phone) + '
' + '
' + '' + ''; @@ -434,7 +434,7 @@ var VrTicketWallet = (function() { '
' + '' + '
' + - '
短码(人工核销)
' + + '
核销码
' + '
' + escapeHtml(ticket.short_code) + '
' + '' + '
' + @@ -459,6 +459,7 @@ var VrTicketWallet = (function() { '
' + escapeHtml(ticket.real_name) + ' ' + escapeHtml(ticket.phone) + '
' + '' + ''; + renderBarcode(ticket.short_code); } /** @@ -484,7 +485,7 @@ var VrTicketWallet = (function() { '
' + '' + '
' + - '
短码(人工核销)
' + + '
核销码
' + '
' + escapeHtml(ticket.short_code) + '
' + '' + '
' + @@ -510,7 +511,7 @@ var VrTicketWallet = (function() { // 渲染 QR 码 if (ticket.qr_payload) { renderQrCode(ticket.qr_payload, ticket.qr_expires_in); - try { var bc = document.getElementById('vrBarcodeCanvas'); if (bc && ticket.short_code) { JsBarcode(bc, ticket.short_code, {format:'CODE128', width:2, height:60, displayValue:true, fontSize:14, margin:5}); } } catch(e){} + renderBarcode(ticket.short_code); } else { document.getElementById('vrQrcodeBox').innerHTML = '
QR加载中...
'; } @@ -558,7 +559,7 @@ var VrTicketWallet = (function() { })); renderQrCode(ticket.qr_payload, expiresIn); - try { var bc = document.getElementById('vrBarcodeCanvas'); if (bc && ticket.short_code) { JsBarcode(bc, ticket.short_code, {format:'CODE128', width:2, height:60, displayValue:true, fontSize:14, margin:5}); } } catch(e){} + // barcode 由 showTicketBasic/showTicketDetail 单独调用 } }, error: function() { @@ -597,6 +598,27 @@ var VrTicketWallet = (function() { } } + /** + * 渲染条形码(CODE128) + * @param {string} shortCode - 核销码 + */ + function renderBarcode(shortCode) { + try { + var canvas = document.getElementById('vrBarcodeCanvas'); + if (!canvas || !shortCode) return; + JsBarcode(canvas, shortCode, { + format: 'CODE128', + width: 2, + height: 60, + displayValue: true, + fontSize: 14, + margin: 5 + }); + } catch (e) { + console.warn('Barcode render failed:', e); + } + } + /** * 刷新 QR */ @@ -626,7 +648,7 @@ var VrTicketWallet = (function() { // 重新渲染 QR renderQrCode(ticket.qr_payload, ticket.qr_expires_in); - try { var bc = document.getElementById('vrBarcodeCanvas'); if (bc && ticket.short_code) { JsBarcode(bc, ticket.short_code, {format:'CODE128', width:2, height:60, displayValue:true, fontSize:14, margin:5}); } } catch(e){} + renderBarcode(ticket.short_code); if (btn) { btn.textContent = '已刷新'; diff --git a/shopxo/public/plugins/vr_ticket/static/js/ticket_card.js b/shopxo/public/plugins/vr_ticket/static/js/ticket_card.js index ccf66cd..d58b479 100644 --- a/shopxo/public/plugins/vr_ticket/static/js/ticket_card.js +++ b/shopxo/public/plugins/vr_ticket/static/js/ticket_card.js @@ -98,11 +98,11 @@ var VrTicketWallet = (function() { '
' + '
📅' + escapeHtml(ticket.session_time) + '
' + '
📍' + escapeHtml(ticket.venue_name) + '
' + - '
💺' + escapeHtml(ticket.seat_info) + '
' + + '
💺' + escapeHtml(ticket.seat_number) + '
' + '
👤' + escapeHtml(ticket.real_name) + ' ' + escapeHtml(ticket.phone) + '
' + '
' + '' + ''; @@ -170,8 +170,9 @@ var VrTicketWallet = (function() { '
' + '' + '
' + - '
短码(人工核销)
' + + '
核销码
' + '
' + escapeHtml(ticket.short_code) + '
' + + '' + '
' + '
' + '
状态
' + @@ -187,13 +188,14 @@ var VrTicketWallet = (function() { '
' + '
' + '
座位
' + - '
' + escapeHtml(ticket.seat_info) + '
' + + '
' + escapeHtml(ticket.seat_number) + '
' + '
' + '
' + '
观演人
' + '
' + escapeHtml(ticket.real_name) + ' ' + escapeHtml(ticket.phone) + '
' + '
' + (ticket.verify_status === 0 ? '' : ''); + renderBarcode(ticket.short_code); } /** @@ -219,8 +221,9 @@ var VrTicketWallet = (function() { '
' + '' + '
' + - '
短码(人工核销)
' + + '
核销码
' + '
' + escapeHtml(ticket.short_code) + '
' + + '' + '
' + verifiedBadge + '
' + @@ -233,7 +236,7 @@ var VrTicketWallet = (function() { '
' + '
' + '
座位
' + - '
' + escapeHtml(ticket.seat_info) + '
' + + '
' + escapeHtml(ticket.seat_number) + '
' + '
' + '
' + '
观演人
' + @@ -243,6 +246,7 @@ var VrTicketWallet = (function() { if (ticket.qr_payload) { renderQrCode(ticket.qr_payload, ticket.qr_expires_in); + renderBarcode(ticket.short_code); } else { document.getElementById('vrQrcodeBox').innerHTML = '
QR加载中...
'; } @@ -323,6 +327,27 @@ var VrTicketWallet = (function() { } } + /** + * 渲染条形码(CODE128) + * @param {string} shortCode - 核销码 + */ + function renderBarcode(shortCode) { + try { + var canvas = document.getElementById('vrBarcodeCanvas'); + if (!canvas || !shortCode) return; + JsBarcode(canvas, shortCode, { + format: 'CODE128', + width: 2, + height: 60, + displayValue: true, + fontSize: 14, + margin: 5 + }); + } catch (e) { + console.warn('Barcode render failed:', e); + } + } + /** * 刷新 QR */ @@ -350,6 +375,7 @@ var VrTicketWallet = (function() { })); renderQrCode(ticket.qr_payload, ticket.qr_expires_in); + renderBarcode(ticket.short_code); if (btn) { btn.textContent = '已刷新';