vr-shopxo-plugin/plan.md

4.3 KiB
Raw Blame History

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 结构

{
  "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

任务清单

  • Q1.1: 调研 ShopXO 后台是否有现成 JSON 编辑器组件ShopXO DIY 组件) [Done: FrontendDev] — 商业闭源,无公开源码,仅预构建 SPA无 JSON 编辑能力
  • Q1.2: 评估 Vue3 表单可视化编辑器复杂度(代码量/工时) [Done: FrontendDev] — 嵌套深度3层非4层表单编辑器~500行/1-1.5人天
  • Q1.3: JSON 编辑器 vs 拆表方案开发和维护成本对比 [Done: FrontendDev] — JSON单表成本低50%+,拆表仅座位万级+时值得
  • Q2: 商品发布页替换方案可行性BackendArchitect 并行调研) [Done: BackendArchitect]
    • 结论钩子仅注入非替换Save()支持标准POST推荐钩子注入+JSON编辑器
  • 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.mdQ2 部分)。

核心结论

  1. plugins_view_admin_goods_saveSaveInfo() 中位于模板渲染之前被调用,结果注入 $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