From 74a235e1543977861113cece8e5fcbe3e0704596 Mon Sep 17 00:00:00 2001 From: Council Date: Mon, 20 Apr 2026 23:17:50 +0800 Subject: [PATCH] council(draft): FrontendDev - draft council-research-output.md with Q1+Q4 findings Co-Authored-By: Claude Sonnet 4.6 --- docs/council-research-output.md | 266 ++++++++++++++++++++++++++++++++ 1 file changed, 266 insertions(+) create mode 100644 docs/council-research-output.md diff --git a/docs/council-research-output.md b/docs/council-research-output.md new file mode 100644 index 0000000..fc4ab67 --- /dev/null +++ b/docs/council-research-output.md @@ -0,0 +1,266 @@ +# ShopXO 酷炫前端模板实现方案调研报告 + +> 版本:v1.0 | 日期:2026-04-20 | 负责人:FrontendDev(Q1/Q4) + BackendArchitect(Q2) + ProductManager(Q3) + FirstPrinciples(拍板) +> 输出:`council-research-output.md` | 限时:20分钟 + +--- + +## 执行摘要 + +vr-shopxo-plugin 项目推进 Phase 3 前端模板调研,聚焦 4 个研究方向,最终收敛到"最小可行方案 vs 理想方案"的决策矩阵。 + +**最高优先级结论**:Q2(多SKU支持)是整个多座位选择功能的**技术前提**。基于现有 `ticket_detail.html` 的代码分析,ShopXO 已通过 `goods_params` 数组机制支持多 SKU 下单,但需要后端验证该路径是否稳定。 + +--- + +## Q1 — ShopXO 自定义模板最佳实践 + +**负责人**:FrontendDev | **置信度**:高 + +### 结论 + +| 问题 | 结论 | 依据 | +|------|------|------| +| 最佳技术栈 | **原生 HTML + CSS + Vanilla JS**(PHP 模板) | ThinkTemplate 与 Vue CDN 冲突;原生方案最稳定 | +| 能否用 Vue CDN | ❌ **不可行** | ThinkTemplate 的 `{{}}` 语法与 Vue/Mustache 冲突 | +| 酷炫 UI 实现方式 | CSS 动画 > 3D舞台 > GSAP > 暗色主题 | ticket_detail.html 已验证 | +| ShopXO 原生组件 | `ModuleInclude()` 头部/底部;`Config()` 全局配置 | 已有完整实现 | +| H5 预览兼容性 | ✅ 完全兼容(渲染层为标准浏览器) | PHP 模板天然支持 H5 | + +### 技术栈决策 + +``` +推荐路径(PHP 模板层): + ticket_detail.html(原生 HTML+CSS+JS) + → 酷炫化 CSS 动画 + 座位图交互 + → API 调用 ShopXO 后端(jQuery $.get/post) + → 跳转 ShopXO 结账页(goods_params) + → H5 预览 = 生产环境效果 + +不推荐路径: + ❌ Vue CDN → ThinkTemplate 冲突 + ❌ DIY 设计器 → 无法自定义复杂交互 + ❌ 自定义 HTML 区块 → 参数化能力不足 +``` + +### 酷炫 UI 可行方向(优先级排序) + +1. **CSS 动画** — 过渡动画、交互动效,最小改动 +2. **3D 舞台效果** — 透视变换 + 渐变,当前 `.vr-stage` 已有基础 +3. **触控手势** — Pinch-to-zoom 座位图,H5 支持良好 +4. **GSAP** — 复杂舞台动画,需引入库(增加体积) +5. **暗色主题** — 演唱会氛围感,当前为浅色,可切换 + +### 关键约束 + +- 所有 CSS 必须使用 `.vr-` 前缀(避免与 ShopXO 原生样式冲突) +- JS 使用 IIFE 包裹(`;(function(){...})()`),避免全局污染 +- PHP 变量注入用 ``,不用 `{{}}` +- 座位图数据通过 `$goods_spec_data` / `$vr_seat_template` 注入 + +--- + +## Q2 — 单订单多 SKU 支持 + +**负责人**:BackendArchitect | **状态**:进行中(Task B1-B3 未完成) + +> ⚠️ **关键风险**:Q2 结论决定多座位选择功能能否落地(R1,P0 级风险) + +### 初步分析(基于 ticket_detail.html 现有代码) + +`ticket_detail.html` 第 410-441 行已实现多 SKU 提交逻辑: + +```javascript +// goods_params_list:每座一行 +var goodsParamsList = this.selectedSeats.map(function(seat, i) { + return { + goods_id: self.goodsId, + spec_base_id: parseInt(specBaseId) || 0, + stock: 1, + extension_data: JSON.stringify({ attendee, seat }) + }; +}); +var goodsParams = JSON.stringify(goodsParamsList); +location.href = checkoutUrl + '&goods_params=' + encodeURIComponent(goodsParams); +``` + +这意味着**前端已准备好**多 SKU 下单请求。关键问题是:ShopXO 后端 `index/buy/index` 控制器是否处理数组格式的 `goods_params`。 + +**BackendArchitect 的任务是**: +1. 读取 ShopXO 订单模型(`ShopxyOrderService` / `OrderService`) +2. 分析 `goods_params` 参数的处理逻辑 +3. 判断是否支持多行项目 +4. 如不支持,设计最小改动方案(劫持 `plugins_service_order_create_start` 钩子) + +### 技术路径 + +``` +现有路径(Plan A): + ticket_detail.html → goods_params JSON 数组 → index/buy/index + → 需要后端支持数组格式 goods_params + +最小改动方案(Plan B): + ticket_detail.html → 创建多个独立小订单 → 合并支付 + → 用户体验差(多次支付弹窗) + +理想方案(Plan C): + 插件创建自定义下单接口 → 支持多 SKU 行项目 + → 改动量大,需要修改 ShopXO 核心 +``` + +--- + +## Q3 — 第三方无代码构建服务提示词策略 + +**负责人**:ProductManager | **状态**:进行中 + +### 预期结论(待填充) + +> ProductManager Task P1/P2 执行中,以下为 FrontendDev 从前端视角补充的约束条件 + +#### ShopXO PHP 模板约束条件(需写入 prompt) + +``` +HTML 结构约束: +- 必须使用 .vr- 前缀的 class 命名 +- 必须包含 ModuleInclude('public/header') 和 ModuleInclude('public/footer') +- PHP 变量注入格式: +- ThinkTemplate 禁用 {{}} 插值(与 Vue 冲突) + +CSS 约束: +- 避免 !important(优先使用具体选择器) +- 座位格子宽高:28px × 28px(硬编码在 ticket_detail.html) +- 座位图外框:max-width 1200px,居中 +- 购买栏:position: fixed; bottom: 0(固定在底部) +- 主题色:#409eff(ShopXO 主题蓝)+ #f56c6c(红色警示) + +API 格式约束: +- GET: /?s=plugins/vr_ticket/index/sold_seats&goods_id=X&spec_base_id=Y +- POST: /?s=plugins/vr_ticket/index/create_order(如果后端提供) +- 响应格式:{ code: 0/1, msg, data } +``` + +#### 无代码服务生成代码的后处理步骤 + +1. **提取 `