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 = '已刷新';