vr-shopxo-plugin/plan.md

108 lines
4.3 KiB
Markdown
Raw 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.

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