vr-shopxo-plugin Phase 2 Bugfix — plan.md
版本:v1.0 | 日期:2026-04-16 | Agent:council/FrontendDev
背景:Phase 2 后台管理两个致命问题 — 侧栏乱码 + 路由无法渲染
问题总览
| # |
问题 |
症状 |
优先级 |
| P1 |
插件控制器路由无法渲染 |
内容区空白,"template not exists" |
高 |
| P2 |
侧边栏插件名乱码 |
VR票务(应为 VR票务) |
中 |
P1 — 路由无法渲染问题
已知现象
- 访问
adminwatekc.php?s=VrTicket/SeatTemplateList → 侧栏正常,主内容区空白
- ShopXO
Plugins/Index 控制器调用插件时有 strtolower+ucfirst 类名匹配问题
- 当前
SeatTemplate.php 在 admin/controller/ 子目录
已知正确模式(freightfee/answers)
app/plugins/{plugin}/
├── Admin.php ← 直接在插件根目录,继承 think\Controller
├── Hook.php
├── config.json
└── admin/view/... ← 视图在 admin/view/ 子目录
当前 vr_ticket 结构(有问题)
app/plugins/vr_ticket/
├── admin/controller/SeatTemplate.php ← ❌ 在子目录
└── admin/view/seat_template/list.html
任务清单
P2 — 侧栏插件名乱码问题
已知现象
- 侧栏显示:
VR票务(应为 VR票务)
- 这是 UTF-8 字符串被当作 Latin1/ISO-8859-1 解码的结果
- 乱码规律:
票 (E7 A5 8A) → Latin1 解码为 票务
乱码根因假设
| 假设 |
可能性 |
验证方式 |
数据库 vrt_power 表 name 字段 latin1 编码存储 |
高 |
检查 MySQL SHOW CREATE TABLE vrt_power |
| 数据库连接 charset 不匹配 |
中 |
检查 ShopXO 数据库配置 charset |
| plugin.json 编码问题 |
低 |
plugin.json 已是正确 UTF-8 |
任务清单
视图路径问题
修复方案
- BackendArchitect 已将视图复制到
app/admin/view/default/plugins/view/vr_ticket/admin/view/
admin/Admin.php 中使用 return view('seat_template/list', $data)(相对路径)
- ShopXO 会自动从
app/admin/view/default/plugins/view/vr_ticket/admin/view/ 解析
- ✓ 路径问题已通过 BackendArchitect 的 Vrticket.php 方式部分解决
- admin/Admin.php 使用 ThinkPHP 的 view() 助手函数,相对路径正确解析
阶段划分
| 阶段 |
内容 |
负责 |
| Round 1(规划) |
分析根因,制定修复方案 |
FrontendDev |
| Round 2(执行) |
实施 admin/Admin.php + plugin.json 修复 |
FrontendDev |
| Round 3(综合) |
合并到 main,完整验证 |
所有成员 |
依赖关系
- P1-T3 和 P1-T4 需要实际访问 URL 验证(无法在 CLI 环境截图)
- P2-T1 需要连接数据库检查编码
交付物
- 修复后的
shopxo/app/plugins/vr_ticket/admin/Admin.php(路由正确)
- 修复后的
shopxo/app/plugins/vr_ticket/plugin.json(sidebar URL 使用 camelCase)
- 乱码问题修复(需数据库层修复)
状态
| 任务 |
状态 |
备注 |
| P1-T1 |
[Done] |
PluginsService 路由机制已分析 |
| P1-T2 |
[Done] |
admin/Admin.php 模式正确 |
| P1-T3 |
[Done] |
admin/Admin.php 已创建 + plugin.json 已修复 |
| P1-T4 |
[Pending] |
需实际访问 URL 截图验证 |
| P2-T1 |
[Pending] |
数据库编码检查(需 DB 访问) |
| P2-T2 |
[Pending] |
数据库修复(如需要) |