4.1 KiB
4.1 KiB
vr-shopxo-plugin 编辑器方案调研 — plan.md
版本:v1.1(Round 2 更新)| 日期:2026-04-15 | Agent:council/FrontendDev + BackendArchitect 背景:ShopXO 票务插件后台编辑器设计方案调研(Q1 JSON 编辑器复杂度评估 + ShopXO DIY 组件参考)
任务背景
vr-shopxo-plugin 是 ShopXO 票务插件,需要调研后台编辑器设计方案。
已知 seat_map JSON 结构:
{
"map": ["AAAAAA", "BBBBBB", "CCCCCC"],
"seats": { "A": { "price": 899, "color": "#e74c3c", "label": "VIP区" }, ... },
"row_labels": ["A", "B", "C"],
"sections": [{ "name": "VIP区", "color": "..." }, ...]
}
venue 字段完全不存在(硬编码 "国家体育馆")。
引入"场馆"后的嵌套层级:
venue(name/address/image)
└── seat_map(map/seats/row_labels/sections/zones)
核心问题
| # | 问题 | 负责 |
|---|---|---|
| Q1 | JSON 编辑器复杂度评估:ShopXO 是否有现成组件?4 层嵌套 Vue3 编辑器实现成本?JSON vs 拆表方案成本对比? | FrontendDev |
| Q2 | 商品发布页替换方案(替换页面)可行性:plugins_view_admin_goods_save 能否完全替换表单? |
BackendArchitect |
任务清单
- Q1.1: 调研 ShopXO 后台是否有现成 JSON 编辑器组件(ShopXO DIY 组件)
[Claimed: FrontendDev] - Q1.2: 评估 4 层嵌套 Vue3 + JSON Schema form 编辑器复杂度(代码量/工时)
[Claimed: FrontendDev] - Q1.3: JSON 编辑器 vs 拆表方案开发和维护成本对比
[Claimed: FrontendDev] - Q2: 商品发布页替换方案可行性(BackendArchitect 并行调研)
[Done: BackendArchitect]✅- 结论:钩子仅注入非替换;Save()支持标准POST;推荐钩子注入+JSON编辑器
- Final: 输出
council-output/EDITOR_RESEARCH.md并给出明确推荐[Pending: FrontendDev]— 等 Q1 完成
阶段划分
| 阶段 | 内容 | 负责 |
|---|---|---|
| Round 1(规划) | 各自创建 plan.md | 所有成员 |
| Round 2(执行) | 深入调研 + 代码级确认 | FrontendDev + BackendArchitect |
| Round 3(综合) | 输出 EDITOR_RESEARCH.md + 最终推荐 | FrontendDev |
依赖关系
- Q2(BackendArchitect)先完成,后端替换可行性影响前端方案选择
- Q1.1 调研 ShopXO DIY 组件是 Q1.2 的前置
调研路径
Q1 调研路径(FrontendDev)
- 检查
shopxo/目录中是否存在 DIY JSON 编辑器组件static/diy/js/entry/index-*.js— Vue3 SPA 组件custom组件类型参考
- 如果无现成组件,评估 Vue3 + JSON Schema form 实现方案
- 对比 JSON 单表 vs 拆多表方案的开发和维护成本
Q2 调研路径(BackendArchitect)
- 检查
app/admin/controller/Goods.php中 SaveInfo() 和 Save() 方法 - 确认
plugins_view_admin_goods_save钩子调用位置和可替换性 - 验证替换后数据能否正常保存
BackendArchitect Round 2 深入分析(Q2)
详细分析见 council-output/EDITOR_RESEARCH.md(Q2 部分)。
核心结论:
plugins_view_admin_goods_save在SaveInfo()中位于模板渲染之前被调用,结果注入$assign['plugins_view_admin_goods_save_data']- 钩子仅是注入点,不是替换点——注入位置在 base tab 的
<div class="am-form-group">内,form/tabs/核心字段无法被替换 - 完全替换需覆盖核心
saveinfo.html,失去 ShopXO 升级兼容性 Goods::Save()数据源是标准$_POST($this->data_request),任何自定义表单都能提交plugins_service_goods_save_handle钩子以引用接收$data,插件可修改或阻止保存流程
推荐:钩子注入(注入 ticket 专属表单 + JSON Schema 编辑器)+ 两条数据保存路径(填最小字段走标准流,或自行处理返回)
| 任务 | 状态 |
|---|---|
| Q1.1 | [Claimed: FrontendDev] |
| Q1.2 | [Claimed: FrontendDev] |
| Q1.3 | [Claimed: FrontendDev] |
| Q2 | [Done: BackendArchitect] — 注入点非替换点,Save()标准POST |
| Final Output | [Pending: FrontendDev] — 等 Q1 完成 |