# 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. **提取 `