Phase 2 完成:spec渲染+多座位选择+submit修复 → 合并入主线 #19

Merged
sileya-ai merged 1 commits from fix/venue-hard-delete-p0 into main 2026-04-22 09:59:42 +00:00

Phase 2 Checkpoint Merge

已完成功能

  • 4维规格选择器(场次/场馆/分区/座位号)
  • 场馆/分区选择器 + filterSeats 联动过滤
  • 多座位选择、观演人表单
  • submit() AJAX POST 到 buy/add,修复"非法访问"错误

变更文件

  • shopxo/app/plugins/vr_ticket/service/SeatSkuService.php
  • shopxo/app/plugins/vr_ticket/view/goods/ticket_detail.html
  • shopxo/app/plugins/vr_ticket/view/goods/public/footer.html
  • shopxo/app/index/controller/Goods.php

⚠️ Phase 3 待完成

  • 订单确认页
  • 支付回调
  • 观演人信息 QR 票生成(存 vrt_tickets 表)

关联 Issue

  • Close #18
  • Keep #17 (Phase 3)
  • Keep #7 (安全-P1 待修)
## Phase 2 Checkpoint Merge ### 已完成功能 - 4维规格选择器(场次/场馆/分区/座位号) - 场馆/分区选择器 + filterSeats 联动过滤 - 多座位选择、观演人表单 - submit() AJAX POST 到 buy/add,修复"非法访问"错误 ### 变更文件 - shopxo/app/plugins/vr_ticket/service/SeatSkuService.php - shopxo/app/plugins/vr_ticket/view/goods/ticket_detail.html - shopxo/app/plugins/vr_ticket/view/goods/public/footer.html - shopxo/app/index/controller/Goods.php ### ⚠️ Phase 3 待完成 - 订单确认页 - 支付回调 - 观演人信息 QR 票生成(存 vrt_tickets 表) ### 关联 Issue - Close #18 ✅ - Keep #17 (Phase 3) - Keep #7 (安全-P1 待修)
sileya-ai added 21 commits 2026-04-21 17:03:41 +00:00
2311f17b90 fix(vr_ticket): 修复幽灵 spec 问题 (Issue #15 + #16)
Issue #15 — AdminGoodsSaveHandle.php:
1. 读取优先级调换:data['vr_goods_config'] 优先,DB 兜底(从源头避免脏数据)
2. 模板不存在时 unset($configs[$i]) 移除无效 config 块(防御层)
3. array_values 重排索引 + 写回前判空(防御层)

Issue #16 — SeatSkuService.php GetGoodsViewData:
1. 多模板模式:遍历所有配置块过滤有效块
2. 模板不存在时清理无效块并写回有效配置(而非覆盖)

参考:reports/GHOST_SPEC_INVESTIGATION_REPORT.md
参考:docs/PLAN_GHOST_SPEC_FIX.md
c581395a9c feat(Phase2): Issue 1 修复购买提交流程
- Goods.php: 注入 seatSpecMap 到票务模板
- ticket_detail.html: submit() 改 POST + 4维spec数组

关键修复:
- submit() 使用隐藏表单 POST 到 Buy 链路(不再用 location.href)
- spec 从 seatSpecMap[seatKey].spec 读取完整4维数组
- extension_data 嵌套在 order_base 内
- 直接 JSON.stringify,不需要 base64
fb300e00fc feat(Phase2): 修复 seatSpecMap 生成 + room ID 硬编码问题
关键修复:
1. BatchGenerate(): 新增 extends.seat_key 字段写入 GoodsSpecBase
2. BatchGenerate(): 新增 type 字段写入 GoodsSpecValue(4维spec类型)
3. ticket_detail.html: renderSeatMap() 不再用 room_001_ 硬编码,改用模板实际 roomId
4. Goods.php: seatSpecMap 注入(已在上次提交)

数据库修复:
- 为 vrt_goods_spec_value 新增 type 字段
- 重新生成商品 118 的规格数据(含 seat_key 和 type)
461dd6b101 fix: 修复 seat map 数据结构 + selected seats UI + encoding + submit button
1. renderSeatMap: 修复 map.seat_map 数据结构访问
2. updateSelectedUI: 渲染 selectedList + 启用 submit button
3. 修复 GoodsSpecValue 中文编码问题
4. 添加 barCount/barPrice 更新
c134351c82 fix: 修复 spec 选择区 + GoodsSpecType encoding
- 清理重复的 GoodsSpecType 记录
- 重新生成正确的 GoodsSpecType 数据(场次信息)
de9134773f feat: 添加场馆和分区选择器 + specTypeList 支持
- SeatSkuService: 返回 specTypeList 包含所有4维规格
- Goods.php: 注入 specTypeList
- ticket_detail.html:
  - 添加 venueSelector 和 sectionSelector HTML 容器
  - 添加 renderAllSelectors() 渲染场次/场馆/分区
  - 添加 selectVenue/selectSection/filterSeats 函数
- CSS: 添加规格选择器样式
a97e5fd0d3 docs: 添加 AntiGravity 会话报告 SESSION_REPORT_20260421_PHASE2_FIX.md
记录 AntiGravity 在 2026-04-21 的完整工作:
- 移除 GoodsSpecValue.type 字段,改为通过值匹配确定维度
- buildSeatSpecMap() 按值匹配重建 seatSpecMap
- GetGoodsViewData() 返回 specTypeList(4维规格类型列表)
- 前端新增场馆/分区选择器 + filterSeats() 联动过滤
- CSS 同步到 public/plugins/ 目录

⚠️ CHECKPOINT - 存在已知问题:
- submit() POST 到 Buy::Index 报'非法访问'(疑似登录/CSRF 拦截)
- 扩展字段(观演人信息)存储方案待确认
- Phase 3 前需修复并合并回 main
6688a10d95 fix: submit 改为 AJAX POST 到 buy/add,base64 编码 goods_data,修复非法访问错误
- ticket_detail.html: form.submit() → jQuery AJAX POST
  - 改为 POST 到 ?s=buy/add(直接走 OrderInsert)
  - goods_data 用 CryptoJS.base64 编码(ShopXO BuyGoods 期望格式)
  - 显式传 buy_type=goods, address_id=0, site_model=2
  - 成功跳转 jump_url,code=-400 走登录页,失败 alert 提示
- footer.html: 追加 base64csvtojson.js + common.js(修正 JS 加载顺序)

⚠️ CHECKPOINT 已解决:submit() 报"非法访问"问题已修复
⚠️ 注意:base64csvtojson.js 由 ShopXO Docker 容器生成,需同步到 public/static/
⚠️ Phase 3 待完成:订单确认页/支付/观演人信息存储
sileya-ai added 1 commit 2026-04-21 17:06:19 +00:00
sileya-ai added 1 commit 2026-04-21 17:36:55 +00:00
sileya-ai added 1 commit 2026-04-22 08:39:51 +00:00
sileya-ai merged commit 57cc10f8c5 into main 2026-04-22 09:59:42 +00:00
Sign in to join this conversation.
No reviewers
No Label
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: sileya-ai/vr-shopxo-plugin#19
There is no content yet.