108 lines
4.1 KiB
Markdown
108 lines
4.1 KiB
Markdown
# 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 结构**:
|
||
```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]`
|
||
- [x] **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)
|
||
|
||
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 | [Claimed: FrontendDev] |
|
||
| Q1.2 | [Claimed: FrontendDev] |
|
||
| Q1.3 | [Claimed: FrontendDev] |
|
||
| Q2 | [Done: BackendArchitect] — 注入点非替换点,Save()标准POST |
|
||
| Final Output | [Pending: FrontendDev] — 等 Q1 完成 |
|