vr-shopxo-plugin/docs/PHASE2_PLAN.md

5.2 KiB
Raw Blame History

Phase 2 — 计划与当前状态

版本v2.0 | 日期2026-04-20 | 状态:执行中 关联提交c894e7018模板渲染已通、1b0ac3276精简 footer 关联文档:docs/VR_GOODS_CONFIG_SPEC.md(新 JSON 格式规格)


⚠️ 重大更新v2.0

vr_goods_config JSON 格式已重新设计。

旧格式依赖 vr_seat_templates 表实时查询,新格式在商品发布时将 rooms 快照存入商品表,前端不再跨表查询。

详见 docs/VR_GOODS_CONFIG_SPEC.md


一、Phase 2 当前状态

已完成

任务 提交 说明
模板渲染 c894e7018 ThinkTemplate → PHP ModuleInclude渲染正常
票务专用 footer 1b0ac3276 精简 footer移除 ShopXO 默认导航
Goods.php 改法 7bd896764 item_type=ticket → ticket_detail.html
onOrderPaid() 修复 7bd896764 sxo_order_detail + JSON spec 解析

⚠️ 进行中

任务 说明 依赖
GetGoodsViewData() 重写 适配新 vr_goods_config JSON 格式 VR_GOODS_CONFIG_SPEC.md 已确认
前端 JS 更新 适配 rooms[] 结构渲染 GetGoodsViewData() 输出格式确定后
loadSoldSeats() 实现 查询 vr_tickets标记已售座位 vr_tickets 表有数据后

未开始

任务 说明
AdminGoodsSaveHandle SKU 生成 根据 selected_rooms 生成 goods_spec_base 条目
后台 4 控制器联调 SeatTemplate/Ticket/Verifier/Verification
核销 API POST /api/vr_ticket/verify

二、vr_goods_config 新格式(已确认)

[
  {
    "template_id": 4,
    "selected_rooms": ["room_id_xxx"],
    "selected_sections": { "room_id_xxx": ["A", "B"] },
    "rooms": [
      {
        "id": "room_id_xxx",
        "name": "1号放映室VV",
        "map": ["AAAAB__BBB_BAAAA", "AAAAB__BBB_BAAAA"],
        "sections": [
          { "char": "A", "name": "VIP区",  "price": 100, "color": "#f06292" },
          { "char": "B", "name": "看台区", "price": 50,  "color": "#4fc3f7" }
        ],
        "seats": {
          "A": { "char": "A", "name": "VIP区",  "price": 100, "color": "#f06292" },
          "B": { "char": "B", "name": "看台区", "price": 50,  "color": "#4fc3f7" }
        }
      }
    ],
    "sessions": [
      { "start": "15:00", "end": "16:59" },
      { "start": "18:00", "end": "21:59" }
    ]
  }
]

核心变化

  • rooms[] 包含完整座位图+sections+seats不再查 vr_seat_templates
  • selected_sections 控制每个房间内渲染哪些分区
  • spec_base_id_map 格式:{room_id}_{row}_{colNum}spec_base_id

完整规格见 docs/VR_GOODS_CONFIG_SPEC.md


三、下一步工作

Step 1立即重写 GetGoodsViewData()

目标:适配新 JSON 格式,从 goods.vr_goods_config 直接读取 rooms[],注入前端模板。

新输出格式

[
  'vr_seat_template' => [
    'rooms' => [...],              // 直接透传 vr_goods_config[0].rooms
    'sessions' => [...],          // 直接透传 vr_goods_config[0].sessions
    'selected_sections' => {...}, // 直接透传 vr_goods_config[0].selected_sections
  ],
  'goods_spec_data' => [...],    // 场次+价格(用于前端卡片)
  'goods_config' => {...}        // 原始 vr_goods_config[0]
]

降级兼容:若 vr_goods_config 中无 rooms 字段,按旧逻辑查 vr_seat_templates 表。

Step 2立即更新 ticket_detail.html JS

目标:适配 rooms[] 结构,多房间支持。

改动点

  1. seatMaprooms[](数组,每个房间一个座位图)
  2. renderSeatMap()renderRoom(roomIndex)(按房间渲染)
  3. specBaseIdMap 格式变为 {room_id}_{row}_{colNum}spec_base_id
  4. loadSoldSeats() 实现:查 vr_tickets.seat_info 格式为 room_id/rowLabel/colNum

Step 3AdminGoodsSaveHandle SKU 生成

目标:用户选择房间后,在商品保存时自动生成 goods_spec_base SKU 条目。

逻辑:展开 rooms[].map生成每个座位的 SKU存入 spec_base_id_map


四、模板渲染当前状态

项目 状态
模板渲染 正常PHP ModuleInclude 方案)
票务 footer 已精简
场次显示 待适配新 JSON 格式
座位图渲染 待适配 rooms[] 结构
已售座位标记 待实现 loadSoldSeats()

五、数据库表结构(当前)

表名 用途 状态
vrt_vr_seat_templates 场馆模板rooms 母版)
vrt_vr_tickets 电子票
vrt_vr_verifiers 核销员
vrt_vr_verifications 核销记录
goods.vr_goods_config 商品配置快照(新 JSON 格式) ⚠️ 待适配
goods_spec_base SKU 库存ShopXO 原生平表) ⚠️ 待自动生成

六、已知风险

风险 影响 缓解
vr_goods_config 仍是旧格式 场次/座位图不显示 AdminGoodsSaveHandle 生成新格式后可解决
旧版 GetGoodsViewData 未适配新格式 前端无数据 Step 1 完成后解决
spec_base_id_map 格式变化 已选座位提交逻辑需同步更新 Step 2 中同步更新 JS