From bed933e8df6e5fcef964064cea7ba9664effb28f Mon Sep 17 00:00:00 2001 From: Council Date: Mon, 20 Apr 2026 23:10:43 +0800 Subject: [PATCH] council(draft): BackendArchitect - plan for frontend template research Q1-Q4 Co-Authored-By: Claude Sonnet 4.6 --- plan.md | 105 ++++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 68 insertions(+), 37 deletions(-) diff --git a/plan.md b/plan.md index 177d5ac..8d04f11 100644 --- a/plan.md +++ b/plan.md @@ -1,57 +1,88 @@ -# Plan — 场馆删除后规格重复(幽灵 spec)根因调研 +# Plan — ShopXO 酷炫前端模板实现方案调研 > 版本:v1.0 | 日期:2026-04-20 | Agent:council/BackendArchitect -> 任务:调研「场馆删除后编辑商品出现规格重复错误」问题 +> 任务:调研 Q1-Q4 四个方向,给出可执行结论,输出 council-research-output.md --- -## BackendArchitect(Task B1-B6) +## 调研任务分配 -- [x] [Done: council/BackendArchitect] **Task B1**: AdminGoodsSaveHandle.php 全链路追踪 — vr_goods_config 读取/解析/snapshot 重建 -- [x] [Done: council/BackendArchitect] **Task B2**: spec_base_id_map 如何被转换成规格项(已验证:存储在模板表,与幽灵 spec 无关) -- [x] [Done: council/BackendArchitect] **Task B3**: SeatSkuService GetGoodsViewData 模板不存在时的 fallback(单模板处理,多模板有缺陷) -- [x] [Done: council/BackendArchitect] **Task B4**: 幽灵 spec 产生环节 + 清理时机(保存时未清理,写回 DB) -- [x] [Done: council/BackendArchitect] **Task B5**: 商品保存规格去重逻辑(GoodsService.php:1859) -- [x] [Done: council/BackendArchitect] **Task B6**: 根因分析报告(含行号)→ `reviews/council-ghost-spec-BackendArchitect.md` +| 问题 | 负责人 | 依赖 | +|------|--------|------| +| Q1: ShopXO 自定义模板最佳实践 | council/FrontendDev | 无 | +| Q2: 单订单多 SKU 支持 | council/BackendArchitect | 无(P2 是 Q4 前提) | +| Q3: 第三方无代码构建提示词策略 | council/ProductManager | Q1 完成后 | +| Q4: uni-app 兼容性技术栈选型 | council/FrontendDev | Q1 + Q2 完成后 | --- -## 根因结论 +## BackendArchitect 调研任务(B1-B3) -| 优先级 | 根因 | 文件:行号 | -|--------|------|-----------| -| **P1** | 无效 config 块未从数组移除,`continue` 后脏数据写回 DB | AdminGoodsSaveHandle.php:88-89 + 148-150 | -| **P2** | GetGoodsViewData 单模板模式,多模板时覆盖有效块 | SeatSkuService.php:368 + 386-388 | -| **P3** | BatchGenerate 对无效 template_id 返回 code=-2,阻断保存 | AdminGoodsSaveHandle.php:164-170 | -| **P4** | 前端过滤后 configs 为空时用户无声失去配置 | AdminGoodsSave.php:196-229 | -| **P5** | loadSoldSeats 未实现(TODO 注释) | ticket_detail.html:375-383 | +- [ ] [Claimed: council/BackendArchitect] **Task B1**: Q2 核心调研 — ShopXO 标准订单模型是否支持单订单多 SKU + - 分析 `sxo_order_detail` 表结构(goods_id + spec_ids 组合) + - 分析 `OrderService.php` / `Order.php` 中的下单入口参数 + - 分析 vr_ticket 插件是否自定义了订单创建逻辑 + - 验证多 SKU 下单的触发条件(购物车 vs 直接购买) +- [ ] [Claimed: council/BackendArchitect] **Task B2**: Q2 最小改动方案设计 + - 如果不支持:在现有 vr_ticket 插件中如何扩展 OrderService + - 如果支持:直接使用还是需要配置开关 +- [ ] [Claimed: council/BackendArchitect] **Task B3**: 整合输出 → `docs/council-research-output.md` 中的 Q2 章节 --- -## 关键文件 +## 调研结论模板(每人填写) -| 文件 | 关注点 | -|------|--------| -| `shopxo/app/plugins/vr_ticket/hook/AdminGoodsSaveHandle.php` | P1 根因:continue 不删除脏 config | -| `shopxo/app/plugins/vr_ticket/service/SeatSkuService.php` | GetGoodsViewData:P2 根因,多模板处理缺陷 | -| `shopxo/app/plugins/vr_ticket/hook/AdminGoodsSave.php` | 前端过滤逻辑:P4 体验问题 | -| `shopxo/app/plugins/vr_ticket/admin/Admin.php` | VenueDelete:硬删除逻辑(第 888 行) | -| `shopxo/app/plugins/vr_ticket/view/goods/ticket_detail.html` | loadSoldSeats 未实现(P5) | -| `shopxo/app/service/GoodsService.php` | 规格列值去重检测(第 1859 行) | +``` +## QX 结论 + +### 核心答案 +(一句话结论) + +### 证据来源 +- 文件/行号/官方文档 + +### 最小可行方案 +(什么可以先跑起来) + +### 理想方案 +(完整实现路径) + +### 最大风险点 +(识别 1-2 个) + +### 优先级与依赖 +(Q2 是 Q4 的前提 → Q1 结论影响 Q3...) +``` --- -## 修复方案 +## 阶段划分 -### P1 Fix(立即实施) -1. AdminGoodsSaveHandle.php:88 — `continue` 改为 `unset($configs[$i])` -2. AdminGoodsSaveHandle.php:145 后 — 添加 `$configs = array_values($configs);` -3. AdminGoodsSaveHandle.php:148 — 写回前加 `if (!empty($configs))` -4. AdminGoodsSaveHandle.php:158-173 — BatchGenerate 前增加模板存在性显式校验 +| 阶段 | 内容 | 责任人 | +|------|------|--------| +| Round 1(当前) | 各自调研,形成初步结论 | All | +| Round 2 | 合并到 `docs/council-research-output.md`,交叉 Review | All | +| Round 3 | 收敛共识,FirstPrinciples 拍板未决项 | FirstPrinciples | -### P2 Fix(高优先级) -1. SeatSkuService.php GetGoodsViewData — 遍历所有有效配置块,不只处理 `$vrGoodsConfig[0]` -2. 修改 DB 写回逻辑为写回 `validConfigs` 而非 `[$config]` +--- -### P3 Fix(中优先级) -1. AdminGoodsSave.php — configs 为空时提示用户重新选择场馆 +## 已知关键文件(BackendArchitect 参考) + +| 文件 | 用途 | +|------|------| +| `shopxo/app/plugins/vr_ticket/` | vr_ticket 插件全部代码 | +| `shopxo/app/service/GoodsService.php` | 商品规格解析 | +| `shopxo/app/service/OrderService.php` | 订单创建入口(关键) | +| `shopxo/app/model/Order.php` | 订单模型 | +| `shopxo/app/model/Goods.php` | 商品模型 | +| `shopxo/app/plugins/vr_ticket/view/goods/ticket_detail.html` | 当前前端模板 | +| `docs/02_FRONTEND_CUSTOMIZATION.md` | 已有前端调研存档 | +| `docs/12_UNIAPP_FRONTEND_RESEARCH.md` | uni-app 调研存档 | +| `docs/14_TEMPLATE_RENDER_INVESTIGATION.md` | 模板渲染调查 | + +--- + +## 输出目标 + +文件:`docs/council-research-output.md` +内容:Q1-Q4 各自结论 + 优先级矩阵 + 最小可行 vs 理想方案对比 + 风险点