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

159 lines
6.9 KiB
Markdown
Raw Normal View 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()` 已成功渲染
- 自包含 CSS`vr-` 前缀隔离、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/vh`uni-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 结论影响的是具体组件逻辑,不影响基础架构。