fix(Task1): barcode canvas显式宽高 + 改善renderBarcode诊断日志

- canvas 加 width=300 height=80 属性(部分浏览器需显式尺寸才能渲染)
- renderBarcode 加诊断:JsBarcode未加载/canvas找不到/shortCode为空/渲染异常
- ticket_card.html (PHP模板) + ticket_card.js (静态JS) 同步修复
feat/b-verification-clean
Council 2026-04-25 00:35:00 +08:00
parent 4c04b094e2
commit 95db208162
2 changed files with 12 additions and 8 deletions

View File

@ -436,7 +436,7 @@ var VrTicketWallet = (function() {
'<div class="vr-ticket-short-code-display">' + '<div class="vr-ticket-short-code-display">' +
'<div class="vr-ticket-short-code-label">核销码</div>' + '<div class="vr-ticket-short-code-label">核销码</div>' +
'<div class="vr-ticket-short-code-value">' + escapeHtml(ticket.short_code) + '</div>' + '<div class="vr-ticket-short-code-value">' + escapeHtml(ticket.short_code) + '</div>' +
'<canvas id="vrBarcodeCanvas" style="margin-top:8px;max-width:100%;display:block;"></canvas>' + '<canvas id="vrBarcodeCanvas" width="300" height="80" style="margin-top:8px;max-width:100%;display:block;"></canvas>' +
'</div>' + '</div>' +
'<div class="vr-ticket-detail-row">' + '<div class="vr-ticket-detail-row">' +
'<div class="vr-ticket-detail-label">状态</div>' + '<div class="vr-ticket-detail-label">状态</div>' +
@ -487,7 +487,7 @@ var VrTicketWallet = (function() {
'<div class="vr-ticket-short-code-display">' + '<div class="vr-ticket-short-code-display">' +
'<div class="vr-ticket-short-code-label">核销码</div>' + '<div class="vr-ticket-short-code-label">核销码</div>' +
'<div class="vr-ticket-short-code-value">' + escapeHtml(ticket.short_code) + '</div>' + '<div class="vr-ticket-short-code-value">' + escapeHtml(ticket.short_code) + '</div>' +
'<canvas id="vrBarcodeCanvas" style="margin-top:8px;max-width:100%;display:block;"></canvas>' + '<canvas id="vrBarcodeCanvas" width="300" height="80" style="margin-top:8px;max-width:100%;display:block;"></canvas>' +
'</div>' + '</div>' +
verifiedBadge + verifiedBadge +
'<div class="vr-ticket-detail-row">' + '<div class="vr-ticket-detail-row">' +
@ -605,7 +605,9 @@ var VrTicketWallet = (function() {
function renderBarcode(shortCode) { function renderBarcode(shortCode) {
try { try {
var canvas = document.getElementById('vrBarcodeCanvas'); var canvas = document.getElementById('vrBarcodeCanvas');
if (!canvas || !shortCode) return; if (!canvas) { console.warn('[Barcode] canvas not found'); return; }
if (!shortCode) { console.warn('[Barcode] shortCode empty'); return; }
if (typeof JsBarcode === 'undefined') { console.warn('[Barcode] JsBarcode not loaded'); return; }
JsBarcode(canvas, shortCode, { JsBarcode(canvas, shortCode, {
format: 'CODE128', format: 'CODE128',
width: 2, width: 2,
@ -615,7 +617,7 @@ var VrTicketWallet = (function() {
margin: 5 margin: 5
}); });
} catch (e) { } catch (e) {
console.warn('Barcode render failed:', e); console.error('[Barcode] render error:', e.message, '| shortCode:', shortCode);
} }
} }

View File

@ -172,7 +172,7 @@ var VrTicketWallet = (function() {
'<div class="vr-ticket-short-code-display">' + '<div class="vr-ticket-short-code-display">' +
'<div class="vr-ticket-short-code-label">核销码</div>' + '<div class="vr-ticket-short-code-label">核销码</div>' +
'<div class="vr-ticket-short-code-value">' + escapeHtml(ticket.short_code) + '</div>' + '<div class="vr-ticket-short-code-value">' + escapeHtml(ticket.short_code) + '</div>' +
'<canvas id="vrBarcodeCanvas" style="margin-top:8px;max-width:100%;display:block;"></canvas>' + '<canvas id="vrBarcodeCanvas" width="300" height="80" style="margin-top:8px;max-width:100%;display:block;"></canvas>' +
'</div>' + '</div>' +
'<div class="vr-ticket-detail-row">' + '<div class="vr-ticket-detail-row">' +
'<div class="vr-ticket-detail-label">状态</div>' + '<div class="vr-ticket-detail-label">状态</div>' +
@ -223,7 +223,7 @@ var VrTicketWallet = (function() {
'<div class="vr-ticket-short-code-display">' + '<div class="vr-ticket-short-code-display">' +
'<div class="vr-ticket-short-code-label">核销码</div>' + '<div class="vr-ticket-short-code-label">核销码</div>' +
'<div class="vr-ticket-short-code-value">' + escapeHtml(ticket.short_code) + '</div>' + '<div class="vr-ticket-short-code-value">' + escapeHtml(ticket.short_code) + '</div>' +
'<canvas id="vrBarcodeCanvas" style="margin-top:8px;max-width:100%;display:block;"></canvas>' + '<canvas id="vrBarcodeCanvas" width="300" height="80" style="margin-top:8px;max-width:100%;display:block;"></canvas>' +
'</div>' + '</div>' +
verifiedBadge + verifiedBadge +
'<div class="vr-ticket-detail-row">' + '<div class="vr-ticket-detail-row">' +
@ -334,7 +334,9 @@ var VrTicketWallet = (function() {
function renderBarcode(shortCode) { function renderBarcode(shortCode) {
try { try {
var canvas = document.getElementById('vrBarcodeCanvas'); var canvas = document.getElementById('vrBarcodeCanvas');
if (!canvas || !shortCode) return; if (!canvas) { console.warn('[Barcode] canvas not found'); return; }
if (!shortCode) { console.warn('[Barcode] shortCode empty'); return; }
if (typeof JsBarcode === 'undefined') { console.warn('[Barcode] JsBarcode not loaded'); return; }
JsBarcode(canvas, shortCode, { JsBarcode(canvas, shortCode, {
format: 'CODE128', format: 'CODE128',
width: 2, width: 2,
@ -344,7 +346,7 @@ var VrTicketWallet = (function() {
margin: 5 margin: 5
}); });
} catch (e) { } catch (e) {
console.warn('Barcode render failed:', e); console.error('[Barcode] render error:', e.message, '| shortCode:', shortCode);
} }
} }