Commit Graph

7 Commits (f4d16aa1e04c3f2128e00e1b0c59ad4ffd846c9e)

Author SHA1 Message Date
Council c5eb2e9996 feat: VR ticket plugin full update - Tree API, City selector, seatmap service, wallet plugin
Core changes:
- Add Tree API design docs + implementation plan (14/15/16_*.md)
- Add CityService + City API (city selector component)
- Enhance SeatMapService + SeatSkuService (seatmap.test.json)
- Add Hook.php event injection, AdminGoodsSave hooks
- Update ticket_detail.html, venue/save.html views
- Add CORS middleware, Weixin payment fix

Wallet plugin (new submodule):
- Full wallet plugin: admin (Cash/Recharge/Transfer/Config)
- API layer: User/Walletlog/Recharge/Cash/Transfer endpoints
- Hook integration

Docs:
- VR_TICKET_TREE_API.md, VR_TICKET_WALLET_VERIFY_API.md
- Council evaluation report, test files

Tools:
- strip_batch.py, strip_page.py (cleanup utilities)

(153 files, +27784/-686 lines)
2026-06-03 13:34:38 +08:00
Council 683dee75dc fix(B): Admin.php 短码识别 + BaseService QR签名加强(含code字段)
- Admin.php: input过滤器 null→'' + TicketVerify自动识别短码(<20字符无连字符)
- BaseService: signQrPayload/verifyQrPayload 签名内容增加 ticket_code 字段
- TicketService: refreshQrPayload 签名验证增加 code 字段校验
- Admin 视图: 5个文件 UI 统一(form-validation/submit-ajax/统计栏初始值)
- venue/list.html: 移除多余工具栏按钮
- .gitignore: 增加 .agent/.claude/.gitnexus/graphify-out/
- DEVELPOMENT_LOG.md: 追加 2026-04-25~27 B端核销冲刺记录
2026-05-11 00:21:25 +08:00
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