5.2 KiB
5.2 KiB
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[] 结构,多房间支持。
改动点:
seatMap→rooms[](数组,每个房间一个座位图)renderSeatMap()→renderRoom(roomIndex)(按房间渲染)specBaseIdMap格式变为{room_id}_{row}_{colNum}→spec_base_idloadSoldSeats()实现:查vr_tickets.seat_info格式为room_id/rowLabel/colNum
Step 3:AdminGoodsSaveHandle 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 |