vr-shopxo-plugin/docs/council-research-output.md

10 KiB
Raw Permalink Blame History

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 JSPHP 模板) 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 提交逻辑:

// 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

最大技术风险点

风险 级别 描述 缓解方案
R1Q2 多SKU不支持 P0 多座位选择无法落地 Plan B多次下单或 Plan C自定义下单 API
R2uni-app 与 ShopXO H5 模板冲突 P1 两套前端体系如何共存 已澄清:完全独立,无冲突
R3:无代码服务代码质量 P2 生成的 HTML/CSS 可能不符合规范 Q3 输出后处理 checklist
R4H5 预览与微信小程序兼容 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 完成各自任务后更新。