From 4c04b094e224fbedb560be412c6ca022845bee04 Mon Sep 17 00:00:00 2001 From: Council Date: Sat, 25 Apr 2026 00:12:28 +0800 Subject: [PATCH] =?UTF-8?q?fix(Task1):=20seat=E5=B1=95=E7=A4=BA=E6=88=AA?= =?UTF-8?q?=E6=96=AD=20+=20=E7=9F=AD=E7=A0=81=E6=94=B9=E5=90=8D=E6=A0=B8?= =?UTF-8?q?=E9=94=80=E7=A0=81=20+=20barcode=E6=B8=B2=E6=9F=93=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - WalletService: 移除 getUserTickets() 中重复的 seat_number 字段 - ticket_card.html (PHP模板): - renderTickets(): seat_info → seat_number - 短码标签: 短码 → 核销码 - showTicketBasic/Detail: seat_info → seat_number, 标签改名, canvas条码 - 新增 renderBarcode() 独立函数 - 清理 showTicketDetail/loadQrPayload/refreshQr 中的 inline try-catch JsBarcode - ticket_card.js (静态JS): 同上修复, 同步跟上 PHP 模板的改动 - renderBarcode() 在 refreshQr 中调用 --- .../vr_ticket/service/WalletService.php | 3 +- .../vr_ticket/view/goods/ticket_card.html | 38 +++++++++++++++---- .../vr_ticket/static/js/ticket_card.js | 38 ++++++++++++++++--- 3 files changed, 63 insertions(+), 16 deletions(-) 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 = '已刷新';