vr-shopxo-plugin/docs/PHASE2_PLAN.md

147 lines
4.8 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# Phase 2 — 计划与当前状态
> 版本v1.0 | 日期2026-04-20 | 状态:执行中
> 关联提交7bd896764
---
## 一、Phase 2 完成情况
### ✅ 已完成
| 任务 | 文件 | 说明 |
|------|------|------|
| Goods.php 改法 | `app/index/controller/Goods.php` | item_type=ticket → ticket_detail.html + 数据注入 |
| GetGoodsViewData() | `SeatSkuService.php` | 为前端模板提供座位图+场次数据 |
| onOrderPaid() 修复 | `TicketService.php` | sxo_order_detail + JSON spec 解析 |
| 模板渲染调研 | `docs/14_TEMPLATE_RENDER_INVESTIGATION.md` | 已修正,记录完整调查过程 |
### ⚠️ 待验证(容器内)
| 任务 | 优先级 | 说明 |
|------|--------|------|
| `{include}` 标签实测 | P0 | ticket_detail.html 中 `{include file="public/head"}` 是否能正确解析 |
| ModuleInclude 备选方案 | P1 | 若 `{include}` 失败,切换 `ModuleInclude()` |
| loadSoldSeats() | P1 | 查询已售座位,前端座位图需显示已售状态 |
### ❌ 未开始
| 任务 | 说明 |
|------|------|
| vr_ticket Hook.php 钩子补充 | 缺失 `plugins_service_goods_spec_data` 处理 |
| 后台座位模板管理 | admin/controller/SeatTemplate.php已生成未调试 |
| 后台电子票列表 | admin/controller/Ticket.php已生成未调试 |
| 后台核销员管理 | admin/controller/Verifier.php已生成未调试 |
| 后台核销记录 | admin/controller/Verification.php已生成未调试 |
| 核销 API | B 端扫码核销 REST 接口 |
---
## 二、模板渲染问题现状
### 问题
票务商品详情页 ThinkTemplate 标签未解析(`{$...}` / `{include}` / `{if}` 以原文输出)。
### 根因
Goods.php 原来用 `MyView()` 加载主题模板,票务商品需要加载插件独立模板 `ticket_detail.html`
### 解决路径Goods.php 绝对路径方案)
```
Goods::Index()
→ $goods['item_type'] === 'ticket'
→ SeatSkuService::GetGoodsViewData($goods_id)
→ MyViewAssign([vr_seat_template, goods_spec_data])
→ View::fetch($tplFile) [$tplFile = 绝对路径]
→ ThinkTemplate 渲染 ticket_detail.html含 {include} 标签)
```
### 待实测项(容器内操作)
```bash
# 在 shopxo-php 容器内
docker exec -it shopxo-php bash
cd /var/www/html
curl "http://localhost:10000/?s=goods/index/id/118.html"
# 检查:
# 1. {include file="public/head"} 是否被解析为 HTML 内容
# 2. {$goods.title} 是否显示商品标题
# 3. 座位图是否正常渲染
```
### 失败备选
`{include}` 标签失败,修改 `ticket_detail.html`
```php
<!-- 替换 -->
{include file="public/head" /}
<!-- 改为 -->
<?php echo ModuleInclude('public/head'); ?>
```
---
## 三、Phase 2 接下来的工作
### Step 1模板渲染实测容器内
**操作人:** 大头(容器在本机)
```bash
docker ps | grep shopxo-php # 确认容器运行中
curl -s "http://localhost:10000/?s=goods/index/id/118.html" | head -50
```
**成功标准:** HTML 源码中不再有 ThinkTemplate 标签(`{include}` / `{$` / `{if}`),座位图 div 正常显示。
### Step 2座位图已售状态
SeatSkuService 需要补充 `loadSoldSeats()` 方法,查询 `vr_tickets` 表中该商品+场次已生成的票,返回已售座位 ID 列表,前端据此灰化已售座位。
### Step 3后台管理页面联调
4 个后台控制器SeatTemplate / Ticket / Verifier / Verification均已生成需要
1. 确认路由可访问(后台 URL 格式)
2. 验证 CRUD 操作正常
3. 确认 RLS 策略
### Step 4核销 API
`POST /api/vr_ticket/verify` — B 端小程序扫码调用。
---
## 四、数据库表结构(当前)
| 表名 | 用途 | 状态 |
|------|------|------|
| `vrt_vr_seat_templates` | 座位模板 | ✅ |
| `vrt_vr_tickets` | 电子票 | ✅ |
| `vrt_vr_verifiers` | 核销员 | ✅ |
| `vrt_vr_verifications` | 核销记录 | ✅ |
| `vrt_vr_audit_log` | 审计日志 | ✅ |
| `goods.vr_goods_config` | 商品配置JSON | ✅ |
| `sxo_order_detail` | 订单明细ShopXO | ✅ |
---
## 五、已知风险
| 风险 | 影响 | 缓解 |
|------|------|------|
| `{include}` 标签容器内解析失败 | P0页面无样式 | 切换 ModuleInclude 方案 |
| shopxo-php 容器未启动 | 无法验证 | 每次操作前 `docker ps` 确认 |
| Admin 控制器鉴权链不完整 | 后台无法访问 | 确认继承 Common 并调用 IsLogin/IsPower |
| 座位模板与商品分类绑定逻辑 | 需确认 1:N 还是 1:1 | 实测验证 |
---
## 六、决策点(待大头确认)
1. **模板 include 方案**:先试 `{include}`,失败后换 `ModuleInclude()`,还是直接内联 CSS/JS
2. **loadSoldSeats()**:是否需要实时查库,还是前端纯靠 JS 状态管理?
3. **后台前端框架**Layui 是否继续使用,还是改用其他方案?