council(draft): FrontendDev - draft council-research-output.md with Q1+Q4 findings

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
council/FrontendDev
Council 2026-04-20 23:17:50 +08:00
parent 3a174f3990
commit 74a235e154
1 changed files with 266 additions and 0 deletions

View File

@ -0,0 +1,266 @@
# ShopXO 酷炫前端模板实现方案调研报告
> 版本v1.0 | 日期2026-04-20 | 负责人FrontendDevQ1/Q4 + BackendArchitectQ2 + ProductManagerQ3 + 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 变量注入用 `<?php echo ... ?>`,不用 `{{}}`
- 座位图数据通过 `$goods_spec_data` / `$vr_seat_template` 注入
---
## Q2 — 单订单多 SKU 支持
**负责人**BackendArchitect | **状态**进行中Task B1-B3 未完成)
> ⚠️ **关键风险**Q2 结论决定多座位选择功能能否落地R1P0 级风险)
### 初步分析(基于 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 变量注入格式:<?php echo $var ?>
- ThinkTemplate 禁用 {{}} 插值(与 Vue 冲突)
CSS 约束:
- 避免 !important优先使用具体选择器
- 座位格子宽高28px × 28px硬编码在 ticket_detail.html
- 座位图外框max-width 1200px居中
- 购买栏position: fixed; bottom: 0固定在底部
- 主题色:#409effShopXO 主题蓝)+ #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. **提取 `<style>` 内容** → 替换 `.vr-` 前缀 → 合并到 ticket_detail.html
2. **提取 `<div id="vrTicketApp">` 内容** → 替换 PHP 变量注入
3. **提取 `<script>` 内容** → 包装为 IIFE → 合并到 ticket_detail.html
4. **验收检查**
- 无 `{{}}` 或 Mustache 语法
- 无 `import Vue from 'vue'` 等 ESM 语法
- 座位格子尺寸为 28px
- 购买栏为 fixed 底部
---
## Q4 — uni-app 兼容性技术栈选型
**负责人**FrontendDev | **置信度**:高
### 结论
| 问题 | 结论 |
|------|------|
| shopxo-uniapp 是唯一可行路径 | ✅ 是;完全独立于 PHP 模板,通过 API 对接 |
| 两套前端体系是否冲突 | ❌ 否PHP H5Web端与 uni-app小程序端完全独立 |
| H5 预览 = 小程序效果 | ✅ 是uni-app 在 H5 和小程序都基于 WebView |
| "一套代码,双端运行" | ✅ 可以做到shopxo-uniapp 直接改 Vue 源码即可 |
### 技术路径
```
最小可行方案(当前可执行):
1. 增强 ticket_detail.html原生 HTML+CSS+JS
→ 酷炫 CSS 动画 + 座位图交互改进
→ H5 票务下单体验提升
2. 暂不开发 uni-app 小程序端(成本高)
理想方案Phase 4
1. fork shopxo-uniapp → vr-shopxo-uniapp
2. 修改 pages/goods-detail → 票务专用商品详情(选座)
3. 新建 pages/ticket-buy → 选座+购票主流程
4. 新建 pages/ticket-wallet → 我的票夹
5. 新建 pages/ticket-verify → B 端核销页
6. HBuilderX 编译 → 微信小程序 + H5
```
### uni-app 技术栈(已验证)
| 项目 | 选型 | 理由 |
|------|------|------|
| 框架 | shopxo-uniappfork | 完整对接 ShopXO API节省 80% 开发量 |
| CSS 方案 | 纯 CSS / SCSS | 与官方一致 |
| 响应式 | **rpx**(不用 vw/vh | H5/小程序一致的响应式单位 |
| 标签 | **view**(不用 div | uni-app 跨平台标签 |
| 打包工具 | HBuilderX | uni-app 官方 IDE |
| 开发模式 | 直接改 Vue 源码 | 不走 DIY 设计器,完全控制 |
### Q4 与 Q2 的依赖关系
- Q4 的"多座位选择"功能依赖 Q2 的多 SKU 后端支持
- **但 uni-app 小程序端的开发可以立即开始**(无需等待 Q2
- Q4 的路由/页面结构/API 层封装都可以提前执行
---
## 综合决策矩阵
### 最小可行方案 vs 理想方案
| 维度 | 最小可行方案(当前可执行) | 理想方案Phase 4 |
|------|--------------------------|-------------------|
| **技术栈** | 原生 HTML+CSS+JSPHP 模板) | shopxo-uniappfork + Vue 3 |
| **多座位支持** | 依赖 Q2 结论Plan A/B/C | 自研下单 API支持多 SKU |
| **微信小程序** | ❌ 暂不支持 | ✅ 一键编译 |
| **H5 效果** | ✅ 当前 ticket_detail.html | ✅ shopxo-uniapp H5 |
| **开发周期** | 1-2 周(仅 PHP 模板优化) | 6-8 周uni-app 全套) |
| **团队要求** | 前端 + PHP | 前端uni-app+ PHP |
| **用户体验** | 中等H5 流畅,小程序缺失) | 高(双端一致体验) |
### 优先级和依赖关系
```
优先级 1P0Q2 多SKU后端支持
↓ 直接决定多座位功能能否落地
优先级 2P1Q1 Q4 酷炫模板执行
↓ 可立即开始,不依赖 Q2
优先级 3P2Q3 无代码服务策略
↓ Q1 技术栈确定后才开始编写 prompt
```
### 最大技术风险点
| 风险 | 级别 | 描述 | 缓解方案 |
|------|------|------|---------|
| **R1**Q2 多SKU不支持 | P0 | 多座位选择无法落地 | Plan B多次下单或 Plan C自定义下单 API |
| **R2**uni-app 与 ShopXO H5 模板冲突 | P1 | 两套前端体系如何共存 | 已澄清:完全独立,无冲突 |
| **R3**:无代码服务代码质量 | P2 | 生成的 HTML/CSS 可能不符合规范 | Q3 输出后处理 checklist |
| **R4**H5 预览与微信小程序兼容 | P2 | 部分 CSS/JS API 在双端表现不一致 | uni-app 用 rpx + view 标签,避免特定 API |
---
## 各 Agent 贡献
| Agent | 负责方向 | 状态 | 关键输出 |
|-------|---------|------|---------|
| FrontendDev | Q1模板最佳实践+ Q4uni-app 选型) | ✅ 完成 | 本文档 Q1 + Q4 章节 |
| BackendArchitect | Q2多SKU支持 | 🔄 进行中 | 待填入 Q2 章节 |
| ProductManager | Q3无代码提示词 | 🔄 进行中 | 待填入 Q3 章节 |
| FirstPrinciples | 拍板 + 最终评审 | ⬜ 待开始 | — |
---
## 下一步行动
**立即可执行(不依赖 Q2**
1. **酷炫化 ticket_detail.html** — CSS 动画增强 + 暗色主题切换
2. **Fork shopxo-uniapp** — 为 Phase 4 微信小程序做准备
3. **完善座位图交互** — 已选座位动画 + 触控缩放
**等待 BackendArchitect Q2 结论后执行**
4. **多座位下单流程验证** — 测试 goods_params 数组格式是否被后端接受
5. **Plan B/C 实现** — 如果 Plan A 失败,实施多次下单或自定义下单 API
---
*本文件由 FrontendDev 基于 Round 2 Q1/Q4 调研结果起草Q2/Q3 章节待 BackendArchitect 和 ProductManager 完成各自任务后更新。*