vr-shopxo-plugin/plan.md

227 lines
9.6 KiB
Markdown
Raw Normal View History

# vr-shopxo-plugin Phase 2 后台管理 — 实施计划
> 版本v1.0 | 制定日期2026-04-15 | Agentcouncil/FrontendDev
---
## 目标概述
Phase 2 后台管理页面开发,涵盖:
1. 座位模板管理CRUD
2. 电子票列表 / 详情 / 导出
3. 核销员管理(增删改查)
4. 核销记录查询
5. Admin 控制器鉴权P1 安全问题)
---
## 阶段划分
| Phase | 任务 | 状态 |
|---|---|---|
| **Phase 1** | 研究方向讨论(各 Agent 输出 Research Direction List | [Done] |
| **Phase 2** | 资料收集 + 技术验证(阻塞性问题确认) | [In Progress] |
| **Phase 3** | 后台 API 设计 + 权限模型 | [Pending] |
| **Phase 4** | Admin 控制器实现 | [Pending] |
| **Phase 5** | 后台视图层HTML实现 | [Pending] |
| **Phase 6** | 核验与安全加固 | [Pending] |
---
## Round 2 代码研究结论FrontendDev
> ⚠️ **阻塞性问题已确认解决**ShopXO 插件鉴权通过 `AdminService::LoginInfo()` 实现,`Base.php` 正确调用,无阻塞。
### 关键发现
#### FR-1 确认Layui + 正确 URL 格式
- ShopXO v6.8.0 后台使用 **Layui**(非 Vue
- 现有视图正确使用 `public/head` + `public/footer` 模板片段
- **URL 路由格式**`PluginsAdminUrl('vr_ticket', 'seat_template', 'list')` 生成 `/admin/plugins/index?pluginsname=vr_ticket&pluginscontrol=seat_template&pluginsaction=list`
- ⚠️ **现有代码问题**:所有视图使用 `MyUrl('plugins_vr_ticket/admin/...')` 非标准格式,需统一改为 `PluginsAdminUrl()`
- ⚠️ **根目录 plugin.json 命名错误**:使用 `"name": "vr-ticket"` (连字符),应为 `"vr_ticket"` (下划线),与物理目录名一致
#### FR-2 确认ShopXO Admin 风格规范
- 布局:`layui-fluid` → `layui-card``layui-card-header/body`
- 表格:`layui-table`JS 中 `table.render({url: ..., cols: [[...]]})`
- 表单:`layui-form` + `layui-form-pane`
- 按钮:`layui-btn layui-btn-normal|primary|danger`
- 状态:`layui-badge layui-bg-green|blue|gray`
#### FR-3 待研究:座位图编辑器
- ⚠️ 现有 `seat_template/save.html` 为空,需补充座位图编辑器
- 建议:使用 Canvas 或 SVG 方案,参考开源 Vue/JS 库
#### FR-4 待改进CSV 导出
- `Ticket::export()` 已实现,但无分页限制(大数据量 OOM 风险)
- 建议:使用流式导出 (`fputcsv`) 或后台队列
#### FR-5 待协同:权限控制
- `Base.php` 仅做 `IsLogin()` 检查,未做 `IsPower()` 权限校验
- 与 BackendArchitect + SecurityEngineer 协同确认权限模型
### 缺失的视图文件(需补充)
| 文件 | 状态 |
|------|------|
| `admin/view/verifier/list.html` | ❌ 不存在 |
| `admin/view/verifier/save.html` | ❌ 不存在 |
| `admin/view/ticket/detail.html` | ❌ 不存在 |
| `admin/view/seat_template/save.html` | ✅ 已存在(需补充座位图编辑器) |
| `admin/view/verification/list.html` | ✅ 已存在Layui 日期选择器已集成) |
### 现有控制器完整性
| Controller | list | save | delete | detail | export |
|------------|------|------|--------|--------|--------|
| SeatTemplate | ✅ | ✅ | ✅ | — | — |
| Ticket | ✅ | — | — | ✅ | ✅ |
| Verifier | ✅ | ✅ | ✅ | — | — |
| Verification | ✅ | — | — | — | — |
---
## 任务清单
### 座位模板管理
- [x] 座位模板列表页seat_template/list.html— URL 修正完成
- [x] 座位模板新增/编辑页seat_template/save.html— URL 修正完成
- [ ] 座位图可视化编辑器集成
- [ ] 分类绑定功能(已支持,需需求确认)
### 电子票管理
- [x] 电子票列表页ticket/list.html— URL 修正完成
- [x] 票详情页ticket/detail.html— 新建完成
- [x] 批量导出功能CSV— URL 修正完成
- [x] 票状态筛选(未核销/已核销/已退款)— 已实现
### 核销员管理
- [x] 核销员列表页verifier/list.html— 新建完成
- [x] 核销员新增/编辑页verifier/save.html— 新建完成
- [x] 核销员禁用功能verifier/delete— 已实现(软禁用)
- [ ] 核销员绑定店铺/场次(需需求确认)
### 核销记录
- [x] 核销记录列表页verification/list.html— URL 修正完成
- [ ] 多条件查询(时间/核销员/场次)— 已实现基础功能
- [ ] 核销统计看板(待需求确认)
### Admin 鉴权P1 安全)
- [x] 所有 Admin 控制器继承 Base controllerBackendArchitect 完成)
- [ ] 鉴权中间件验证SecurityEngineer Task S1
- [ ] 敏感操作日志审计SecurityEngineer Task S4
---
## Research Direction ListFrontendDev 输出)
### FR-1: ShopXO Admin UI 框架选型
**背景**ShopXO 后台使用 Layui需确认是否继续使用还是迁移 Vue。
**结论Round 2 确认)**
- ✅ ShopXO v6.8.0 后台使用 **Layui**(非 Vue应继续使用以保持兼容性
- ✅ Layui 2.x + ThinkPHP 6 无冲突
- ✅ 正确 URL 生成方式:`PluginsAdminUrl('vr_ticket', 'controller', 'action')`
- ⚠️ 现有代码使用 `MyUrl('plugins_vr_ticket/admin/...')` 需统一修正
Key Questions:
- [x] ShopXO 官方后台v6.8.0)使用的是什么 UI 版本?→ **Layui**
- [x] Layui 是否支持 Vue 3如果不支持混用 Vue + Layui 是否会导致冲突?→ **不使用 Vue 3保持 Layui**
- [x] 票务插件是否应保持与 ShopXO 原生风格一致,还是可以独立升级?→ **保持一致**
- [ ] 是否有 ShopXO 插件使用 Vue 3 的先例?→ **未发现,建议不迁移**
### FR-2: 现有 ShopXO Admin 页面风格适配
**背景**:保持与 ShopXO 原生后台风格一致可降低学习成本。
**结论Round 2 确认)**
- ✅ 布局规范:`layui-fluid` → `layui-card``layui-card-header/body`
- ✅ 表格:`layui-table` + `table.render()`
- ✅ 表单:`layui-form` + `layui-form-pane`
- ✅ 按钮:`layui-btn` + 颜色类
- ✅ 状态:`layui-badge` + `layui-bg-green/blue/gray`
- ✅ 模板:`{include file="public/head" /}` + `{include file="public/footer" /}`
Key Questions:
- [x] ShopXO 后台使用的是什么设计系统(颜色/字体/间距规范)?→ **已确认上述规范**
- [x] 表格组件(数据列表)用的是 Layui table 还是自建?→ **Layui table**
- [x] 分页、筛选、搜索的通用组件封装在哪里?→ **Layui form + table 内置**
- [x] 弹窗/表单布局的规范是什么?→ **`layui-card` + `layui-form`**
### FR-3: 座位图编辑器集成方案
**背景**:座位模板需要可视化编辑,复杂度高。
Key Questions:
- [ ] 是否有开源的 Vue 座位图编辑器可以集成?→ **待调研**
- [ ] Canvas vs SVG vs CSS Grid哪个方案最适合票务座位图**待调研**
- [ ] 座位图编辑后如何序列化存储到 seat_map JSON**已有 `plugins_vr_seat_templates.seat_map` 字段**
- [ ] 编辑器是否需要支持拖拽、分区着色、座位类型标注?→ **待需求确认**
### FR-4: 数据导出方案CSV/Excel
**背景**:电子票列表需要支持批量导出。
Key Questions:
- [ ] ShopXO 后台是否有现成的导出组件?→ **待调研**
- [ ] 大量数据10000+ 条)导出的处理策略是什么(流式导出 vs 后台队列)?→ **已有 `ExportCsv()`,需改进流式处理**
- [ ] 是否需要支持 Excel 格式(.xlsx还是只需 CSV**待需求确认**
- [x] 导出字段如何与 vr_tickets 表字段对应?→ **`Ticket::export()` 已实现**
### FR-5: 响应式与权限控制
**背景**:后台页面需要同时支持不同屏幕和权限级别。
Key Questions:
- [ ] ShopXO 后台的权限体系是如何设计的RBAC按钮级字段级**待 BackendArchitect 确认**
- [ ] 票务管理员是否需要独立的角色?与 ShopXO 管理员如何隔离?→ **待 BackendArchitect + SecurityEngineer 协同**
- [ ] 后台页面是否需要支持移动端PAD 核销场景)?→ **核销端考虑移动端Admin 后台 PC 优先**
- [ ] 操作日志记录哪些字段(用户/时间/操作/IP/变更前后)?→ **待 SecurityEngineer 确认Task S4**
---
## 依赖关系
- FR-1、FR-2 优先完成,决定技术栈选型
- FR-3 依赖 FR-1 的选型结论
- FR-4 可在 Phase 3 后端 API 确定后并行进行
- FR-5 与 SecurityEngineer 协同,需要等 BackendArchitect 输出权限模型
---
## 进度追踪
| 任务 | 负责人 | 状态 |
|---|---|---|
| 座位模板管理 | [Pending] | - |
| 电子票管理 | [Pending] | - |
| 核销员管理 | [Pending] | - |
| 核销记录 | [Pending] | - |
| Admin 鉴权 | [Pending] | - |
---
## Round 3 执行总结FrontendDev
| 文件 | 操作 | 说明 |
|------|------|------|
| `seat_template/list.html` | 修正 URL | `MyUrl()``PluginsAdminUrl()` |
| `seat_template/save.html` | 修正 URL | 返回按钮 URL 修正 |
| `verification/list.html` | 修正 URL | `MyUrl()``PluginsAdminUrl()` |
| `ticket/list.html` | 修正 URL | `MyUrl()``PluginsAdminUrl()` |
| `ticket/detail.html` | 新建 | 完整票详情页QR码/关联信息/状态) |
| `verifier/list.html` | 新建 | 核销员列表页(搜索/状态筛选/禁用) |
| `verifier/save.html` | 新建 | 核销员新增/编辑表单页 |
| `plan.md` | 更新 | 任务状态更新 |
**剩余待完成FrontendDev**
- FR-3: 座位图可视化编辑器(需需求确认)
- FR-4: CSV 导出大数据量优化BackendArchitect 已用 cursor 优化)
- seat_template/save.html 座位图编辑器集成
**待 SecurityEngineer 协同**
- S1: 鉴权覆盖完整性验证
- S4: 审计日志设计
---
## 共识投票
[CONSENSUS: NO] — 核心视图层基本完成,座位图编辑器和安全任务待后续