vr-shopxo-plugin/docs/council-F1-F2-findings.md

6.9 KiB
Raw Blame History

F1 + F2 研究发现FrontendDev 内部工作文件)

供 Round 2 Review 和 Task O1 汇总使用 Q1 置信度:高 | Q4 置信度:高(依赖 Q2 结论)


Q1ShopXO 自定义模板最佳实践

核心结论

现有 ticket_detail.html 的技术选型(原生 HTML+CSS+JS已经是 ShopXO PHP 模板的最优解。 不需要引入 Vue CDN 或 Tailwind 等额外框架。

理由

  1. ShopXO 模板引擎是 ThinkTemplatePHP不是 Vue

    • ThinkTemplate 标签 {$var}{if}{foreach} 与 Vue 指令 {{}}v-if 完全冲突
    • Vue CDN 加载后,页面内的 ThinkTemplate 标签会被 Vue 先解析,导致错误
    • 结论Vue CDN 方案不可行
  2. 原生 HTML+CSS+JS 方案已验证可用

    • ticket_detail.html 使用 ModuleInclude('public/header') + 绝对路径 View::fetch() 已成功渲染
    • 自包含 CSSvr- 前缀隔离、IIFE 模式 JS 已正常工作
    • 已有功能:座位图渲染、座选选中交互、场次选择、观演人表单、订单提交
  3. ShopXO 原生可复用资源

    • ModuleInclude('public/header') → 复用 ShopXO 统一头部(含登录态/导航)
    • ModuleInclude('public/footer') → 复用统一底部
    • ThinkPHP 的 Url::build() → 生成正确的 API 链接
    • ShopXO 原生 UI 组件库(static/index/css/default/module.css

"酷炫化"可行增强方向(无需换技术栈)

增强项 实现方式 复杂度
座位图缩放/拖拽 CSS transform: scale() + touch事件
座位动画(入场/高亮) CSS @keyframes + transition
座位图 Canvas 渲染(大数据量) 原生 Canvas API 替换 DOM 渲染
3D 舞台效果 CSS 3D transform-style: preserve-3d
潮流动效GSAP GSAP CDN非 Vue纯 JS
暗色主题切换 CSS Variables + localStorage
座位区域热力图颜色 根据价格区间动态计算 RGB
触控手势(双指缩放) Hammer.js 手势库(非 Vue

推荐优先级:座位入场动画 > 3D 舞台 > 触控缩放 > 暗色主题

H5 预览兼容性保障

  • 当前方案天然兼容ShopXO 的 H5 路由(?s=goods/index/id/xxx)直接渲染 ticket_detail.html
  • 无需额外配置,浏览器直接访问即预览
  • 微信开发者工具 H5 调试模式同样支持

技术栈最终建议Q1

项目 选型 原因
模板引擎 ThinkTemplate现有 ShopXO 官方,不换
HTML 结构 原生 HTML5 无需改动
CSS 方案 原生 CSS + vr- 前缀隔离 已有,无需引入 Tailwind
JS 框架 原生 JSIIFE 模式) ThinkTemplate 标签冲突,无法用 Vue
动画库 GSAP非必须 CDN 引入,纯 JS不冲突
手势库 Hammer.js非必须 同上
响应式 CSS Flexbox/Grid + 媒体查询 已有

置信度:高(基于已有代码验证)


Q4uni-app 兼容性技术栈选型

核心结论

最终目标微信小程序fork shopxo-uniapp直接改 Vue 源码,比 PHP 模板方案更优雅。 当前 PHP 模板方案ticket_detail.html作为 H5 专用保底,两套并行。

两条路径对比

维度 路径 A增强 PHP 模板 路径 Bfork shopxo-uniapp
微信小程序 不支持 官方支持
H5 原生支持 官方支持
开发工具 任意编辑器 HBuilderX必需
技术栈 原生 HTML/CSS/JS Vue 3 + uni-app
座位图组件 DOM 渲染(大量座位时性能差) Canvas/Vue 组件,性能好
ShopXO 耦合 高(直接用 ThinkTemplate 低(纯 API 对接)
多端一致性 ⚠️ 需单独维护小程序 UI 一套代码 H5+小程序
开发工作量 低(增强现有模板) 中(新建 Vue 组件)

路径 B 详细方案(推荐)

1. fork shopxo-uniapp → vr-shopxo-uniapp
2. 修改 App.vue 的 request_url/static_url
3. 新建 pages/ticket-buy/(票务选座主流程)
   - pages/ticket-buy/components/seat-selector.vue
   - pages/ticket-buy/components/attendee-form.vue
   - pages/ticket-buy/components/purchase-bar.vue
4. 修改 pages/goods-detail/goods-detail.vue
   - goods.item_type === 'ticket' 时,跳转 pages/ticket-buy
5. 新建 pages/ticket-wallet/(我的票夹)
6. 新建 pages/ticket-verify/(核销 B 端)
7. H5 预览HBuilderX 运行 → Chrome
8. 微信小程序HBuilderX 发行 → 微信开发者工具

H5 与小程序一致性保障

uni-app 的 H5 和小程序都基于 WebViewCSS 渲染一致。关键遵循:

  • rpx 代替 vw/vhuni-app 标准响应式)
  • <view> 代替 <div>
  • 避免 calc() 混用单位
  • 避免浏览器私有前缀(小程序不需要)
  • position: fixed 吸底用 scroll-view 模拟HBuilder 已有方案)

ShopXO H5 模板与 uni-app 的关系

结论:两套前端体系完全独立,无桥接需求。

  • ShopXO PHP 模板H5= 通过 ThinkPHP 渲染,浏览器直接访问
  • shopxo-uniappH5/小程序)= 纯前端 SPA通过 API 调用 ShopXO 后端
  • 票务插件同时暴露两套接口PHP 渲染用原生模板API 用 ?s=plugins/vr_ticket/...

不需要"共存/桥接" — 可以理解为两个独立的 C 端入口:

  • 用户 APC/手机浏览器)→ ShopXO PHP H5 模板
  • 用户 B微信小程序→ shopxo-uniapp fork

最小可行方案MVPvs 理想方案

维度 最小可行方案 理想方案
H5 增强现有 ticket_detail.html 继续增强(已满足)
微信小程序 不做 fork shopxo-uniapp + 票务 Vue 页面
优先级 H5 酷炫化 > 多座位 > 小程序 H5+小程序双端一致
开发时间 1-2天增强现有 1-2周新建 Vue 组件)

风险点

风险 级别 缓解方案
Q2 多SKU不支持 P0 等 BackendArchitect 结论;若不支持,降级为逐座单独下单
uni-app 学习曲线 P1 shopxo-uniapp 已有完整模板,直接参照改写
HBuilderX IDE 依赖 P1 仅票务页面用 HBuilderX普通页面继续用 VSCode
两套代码重复维护 P2 Q2 结论后决定若多SKU支持只做 uni-app若不支持PHP 模板为主

置信度shopxo-uniapp 已验证docs/12_UNIAPP_FRONTEND_RESEARCH.md 详述)


依赖关系确认

Q2BackendArchitect→ Q4Q2 支持多SKU → uni-app 多座位组件有订单支撑
                     → Q2 不支持多SKU → 降级为逐座单独下单uni-app 仍可行
Q1 → Q3Q1 确定 PHP 模板约束 → 影响 Q3 的 prompt 设计

Q4 不等待 Q2 结论可以先执行基础工作fork shopxo-uniappQ2 结论影响的是具体组件逻辑,不影响基础架构。