Council
|
4c04b094e2
|
fix(Task1): seat展示截断 + 短码改名核销码 + barcode渲染函数化
- 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 中调用
|
2026-04-25 00:12:28 +08:00 |
Council
|
29f4c61110
|
feat(Task1): seat_number display + CODE128 barcode rendering
- WalletService: add seat_number field (parseSeatNumber helper)
- ticket_card.html: seat_info → seat_number in all 3 locations
(card template + viewTicket modal + showTicketDetail modal)
- ticket_card.html: add barcode canvas in both modals
- ticket_card.html: JsBarcode() calls after renderQrCode (3 locations)
- ticket_wallet.html: load JsBarcode.all.min.js before ticket_card.js
|
2026-04-24 23:58:09 +08:00 |
Council
|
d85eb8e19d
|
fix(Task2): 修复 onOrderPaid seat_info 为空的 ThinkPHP Query 懒加载 bug
根本原因:\think\facade\Db::name('order_detail')->select() 返回懒加载的 Query 对象,
每次 foreach 迭代都重新执行 SELECT,返回全新的 Collection。
第一 foreach 解析 spec 并写入 _parsed_* 到 Collection A,
第二 foreach 迭代的是 Collection B(全新干净数据),
导致 _parsed_seat_info 永远为空,票数据丢失。
修复:加 ->toArray() 强制物化一次,两个 foreach 操作同一份数组。
同时补票:order 10 (票26,27)、order 12 (票28)、order 13 (票25)。
|
2026-04-24 22:09:08 +08:00 |
Council
|
ac676d00be
|
refactor: 移除 qr_issued_at 字段
QR payload 改为实时生成,不存储发放时间。
前端 localStorage 自行管理缓存。
|
2026-04-23 14:37:10 +08:00 |
Council
|
8b15283376
|
feat(phase4.3): 完成 C端票夹
新增文件:
- api/Ticket.php: C端票夹API控制器(list/detail/refreshQr)
- service/WalletService.php: 票夹核心服务
- view/goods/ticket_card.html: 票卡片共享组件
- view/goods/ticket_wallet.html: 票夹列表页
修改文件:
- Hook.php: 注册订单详情页注入钩子(plugins_service_order_detail_page_info)
- install.sql: 添加 qr_issued_at 字段
数据库变更:
- ALTER TABLE vr_tickets ADD qr_issued_at INT UNSIGNED
|
2026-04-23 13:44:48 +08:00 |