3 changed files with 1445 additions and 0 deletions
@ -0,0 +1,482 @@ |
|||||
|
# 学员端开发计划 - 前端任务 |
||||
|
|
||||
|
## 📱 **技术栈和环境** |
||||
|
- **框架**:UniApp + Vue2 |
||||
|
- **平台**:微信小程序 |
||||
|
- **UI组件**:uni-ui + 自定义组件 |
||||
|
- **状态管理**:Vuex |
||||
|
- **网络请求**:uni.request封装 |
||||
|
|
||||
|
## ⚠️ **重要:分包配置要求** |
||||
|
**背景**:当前UniApp打包微信小程序容量已接近2M上限 |
||||
|
**解决方案**:采用分包架构 |
||||
|
- **主包**:只包含登录页和学员端落地页(控制在1.5M以内) |
||||
|
- **分包**:所有功能页面都放在student-pages分包中 |
||||
|
- **目标**:确保小程序能正常发布和使用 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 📋 **前端开发任务清单** |
||||
|
|
||||
|
### 🔧 **基础架构任务** |
||||
|
|
||||
|
#### 1. **项目配置和环境搭建** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:1天 |
||||
|
**任务内容**: |
||||
|
- [ ] 配置微信小程序开发环境 |
||||
|
- [ ] 设置API基础URL和请求拦截器 |
||||
|
- [ ] 配置token存储和自动携带 |
||||
|
- [ ] 设置页面路由和tabBar配置 |
||||
|
- [ ] 配置腾讯云COS上传参数 |
||||
|
- [ ] **重要:配置分包结构,控制主包大小** |
||||
|
|
||||
|
**分包配置要求**: |
||||
|
```json |
||||
|
// pages.json 分包配置 |
||||
|
{ |
||||
|
"pages": [ |
||||
|
"pages/login/login", // 登录页 - 主包 |
||||
|
"pages/home/home" // 学员端落地页 - 主包 |
||||
|
], |
||||
|
"subPackages": [ |
||||
|
{ |
||||
|
"root": "student-pages", |
||||
|
"name": "student", |
||||
|
"pages": [ |
||||
|
"profile/profile", // 个人信息页 |
||||
|
"physical-test/list", // 体测数据页 |
||||
|
"physical-test/detail", // 体测详情页 |
||||
|
"course-schedule/list", // 课程安排页 |
||||
|
"course-booking/list", // 课程预约页 |
||||
|
"order/list", // 订单管理页 |
||||
|
"contract/list", // 合同管理页 |
||||
|
"knowledge/list", // 知识库页 |
||||
|
"message/list" // 消息管理页 |
||||
|
] |
||||
|
} |
||||
|
] |
||||
|
} |
||||
|
``` |
||||
|
|
||||
|
**主包内容(控制在1.5M以内)**: |
||||
|
- 登录页面 |
||||
|
- 学员端落地页(个人信息概览+功能入口) |
||||
|
- 公共组件(必需的) |
||||
|
- 基础工具类 |
||||
|
|
||||
|
**分包内容**: |
||||
|
- 所有功能页面 |
||||
|
- 页面专用组件 |
||||
|
- 页面相关资源 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 小程序可正常启动和预览 |
||||
|
- ✅ API请求能正确携带token |
||||
|
- ✅ 路由跳转正常 |
||||
|
- ✅ 开发环境配置完整 |
||||
|
- ✅ **主包大小控制在1.5M以内** |
||||
|
- ✅ **分包加载正常** |
||||
|
|
||||
|
#### 2. **公共组件开发** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 学员选择组件(支持多孩子切换) |
||||
|
- [ ] 头像上传组件(支持裁剪和压缩) |
||||
|
- [ ] PDF预览组件(uni.openDocument封装) |
||||
|
- [ ] 图片分享组件(PDF转图片分享) |
||||
|
- [ ] 消息渲染组件(5种消息类型) |
||||
|
- [ ] 趋势图组件(身高体重折线图) |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 所有组件功能完整可复用 |
||||
|
- ✅ 组件接口设计合理 |
||||
|
- ✅ 支持数据双向绑定 |
||||
|
- ✅ 异常情况处理完善 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
### 📄 **页面开发任务** |
||||
|
|
||||
|
#### 3. **登录页面** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:1天 |
||||
|
**任务内容**: |
||||
|
- [ ] 手机号+密码登录表单 |
||||
|
- [ ] 微信一键登录按钮 |
||||
|
- [ ] 登录状态验证和跳转 |
||||
|
- [ ] 首次登录密码设置提示 |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `POST /api/login/unified` - 统一登录接口 |
||||
|
- `POST /api/login/wechat` - 微信登录接口 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 手机号格式验证正确 |
||||
|
- ✅ 密码长度验证正确 |
||||
|
- ✅ 微信登录流程完整 |
||||
|
- ✅ 登录成功后正确跳转 |
||||
|
- ✅ 错误提示信息准确 |
||||
|
|
||||
|
#### 4. **学员端落地页(主包)** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:1天 |
||||
|
**任务内容**: |
||||
|
- [ ] 用户欢迎信息展示(姓名+星期+入会时间) |
||||
|
- [ ] 学员选择卡片(多孩子切换) |
||||
|
- [ ] 功能模块入口导航 |
||||
|
- [ ] 快捷信息概览 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[用户信息区域] |
||||
|
- {name} 你好,今天是星期{x} |
||||
|
- 入会时间:{create_year_month} |
||||
|
- 年龄:{age} |
||||
|
|
||||
|
[学员选择卡片] |
||||
|
- 学员下拉选择/切换按钮 |
||||
|
- 当前选中学员信息 |
||||
|
|
||||
|
[功能入口区域] |
||||
|
- 个人信息管理 → 跳转分包页面 |
||||
|
- 体测数据 → 跳转分包页面 |
||||
|
- 课程安排 → 跳转分包页面 |
||||
|
- 课程预约 → 跳转分包页面 |
||||
|
- 订单管理 → 跳转分包页面 |
||||
|
- 合同管理 → 跳转分包页面 |
||||
|
- 知识库 → 跳转分包页面 |
||||
|
- 消息管理 → 跳转分包页面 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/student/list` - 获取学员列表 |
||||
|
- `GET /api/student/summary/{id}` - 获取学员概览信息 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 用户信息正确计算和显示 |
||||
|
- ✅ 学员切换功能正常 |
||||
|
- ✅ 功能入口跳转正常 |
||||
|
- ✅ 页面加载速度快 |
||||
|
- ✅ **页面大小控制合理** |
||||
|
|
||||
|
#### 5. **个人信息管理页面(分包)** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:1.5天 |
||||
|
**任务内容**: |
||||
|
- [ ] 学员详细信息展示 |
||||
|
- [ ] 学员基本信息编辑表单 |
||||
|
- [ ] 头像上传功能 |
||||
|
- [ ] 信息保存和验证 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[学员详细信息] |
||||
|
- 头像显示/上传 |
||||
|
- 基本信息表单 |
||||
|
- 家庭信息表单 |
||||
|
- 保存按钮 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/student/info/{id}` - 获取学员详情 |
||||
|
- `PUT /api/student/update/{id}` - 更新学员信息 |
||||
|
- `POST /api/upload/avatar` - 头像上传 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 学员信息正确显示 |
||||
|
- ✅ 头像上传压缩到2M以下 |
||||
|
- ✅ 表单验证完整 |
||||
|
- ✅ 保存成功提示 |
||||
|
- ✅ **分包页面加载正常** |
||||
|
|
||||
|
#### 6. **体测数据页面(分包)** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 体测记录列表展示 |
||||
|
- [ ] 身高体重数据显示 |
||||
|
- [ ] 体测报告PDF预览 |
||||
|
- [ ] 身高体重趋势图 |
||||
|
- [ ] PDF转图片分享功能 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[体测记录列表] |
||||
|
- 测试日期 |
||||
|
- 身高/体重数据 |
||||
|
- 体测报告图标 |
||||
|
|
||||
|
[体测详情] |
||||
|
- 身高体重数值 |
||||
|
- 趋势折线图 |
||||
|
- PDF预览/分享按钮 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/physical-test/list/{student_id}` - 获取体测记录 |
||||
|
- `GET /api/physical-test/detail/{id}` - 获取体测详情 |
||||
|
- `POST /api/physical-test/share/{id}` - PDF转图片分享 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 体测数据正确显示 |
||||
|
- ✅ 趋势图渲染正常 |
||||
|
- ✅ PDF预览功能正常 |
||||
|
- ✅ 分享功能正常 |
||||
|
- ✅ 无数据状态处理 |
||||
|
|
||||
|
#### 6. **课程安排页面** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:1.5天 |
||||
|
**任务内容**: |
||||
|
- [ ] 课程安排列表展示 |
||||
|
- [ ] 课程状态标识 |
||||
|
- [ ] 课程详情查看 |
||||
|
- [ ] 日期筛选功能 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[筛选区域] |
||||
|
- 日期选择器 |
||||
|
- 状态筛选 |
||||
|
|
||||
|
[课程列表] |
||||
|
- 课程名称/时间 |
||||
|
- 教练/地点信息 |
||||
|
- 课程状态标识 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/course-schedule/list/{student_id}` - 获取课程安排 |
||||
|
- `GET /api/course-schedule/detail/{id}` - 获取课程详情 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 课程列表正确显示 |
||||
|
- ✅ 状态标识准确 |
||||
|
- ✅ 筛选功能正常 |
||||
|
- ✅ 详情页面完整 |
||||
|
|
||||
|
#### 7. **课程预约页面** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 可预约课程列表 |
||||
|
- [ ] 预约确认弹窗 |
||||
|
- [ ] 预约冲突检测 |
||||
|
- [ ] 我的预约列表 |
||||
|
- [ ] 取消预约功能 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[可预约课程] |
||||
|
- 课程信息卡片 |
||||
|
- 预约按钮 |
||||
|
- 剩余名额显示 |
||||
|
|
||||
|
[我的预约] |
||||
|
- 预约记录列表 |
||||
|
- 取消预约按钮 |
||||
|
- 取消原因填写 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/course-booking/available/{student_id}` - 获取可预约课程 |
||||
|
- `POST /api/course-booking/create` - 创建预约 |
||||
|
- `GET /api/course-booking/my-list/{student_id}` - 我的预约列表 |
||||
|
- `PUT /api/course-booking/cancel/{id}` - 取消预约 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 可预约课程正确显示 |
||||
|
- ✅ 预约冲突检测正常 |
||||
|
- ✅ 预约确认流程完整 |
||||
|
- ✅ 取消预约功能正常 |
||||
|
- ✅ 6小时限制检查正确 |
||||
|
|
||||
|
#### 8. **订单管理页面** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 订单列表展示 |
||||
|
- [ ] 订单状态标识 |
||||
|
- [ ] 支付功能集成 |
||||
|
- [ ] 订单筛选功能 |
||||
|
- [ ] 订单详情查看 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[筛选区域] |
||||
|
- 课程类型筛选 |
||||
|
- 时间范围筛选 |
||||
|
|
||||
|
[订单列表] |
||||
|
- 订单基本信息 |
||||
|
- 支付状态 |
||||
|
- 支付按钮 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/order/list/{student_id}` - 获取订单列表 |
||||
|
- `GET /api/order/detail/{id}` - 获取订单详情 |
||||
|
- `POST /api/payment/create` - 创建支付 |
||||
|
- `GET /api/payment/status/{order_id}` - 查询支付状态 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 订单列表正确显示 |
||||
|
- ✅ 支付流程完整 |
||||
|
- ✅ 支付状态更新及时 |
||||
|
- ✅ 筛选功能正常 |
||||
|
- ✅ 异常处理完善 |
||||
|
|
||||
|
#### 9. **合同管理页面** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 合同列表展示 |
||||
|
- [ ] 合同状态标识 |
||||
|
- [ ] 合同详情查看 |
||||
|
- [ ] 合同签署流程 |
||||
|
- [ ] 合同下载功能 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[合同列表] |
||||
|
- 合同名称 |
||||
|
- 签署状态 |
||||
|
- 签署时间 |
||||
|
|
||||
|
[合同签署] |
||||
|
- 合同内容展示 |
||||
|
- 表单信息填写 |
||||
|
- 签名上传 |
||||
|
- 提交确认 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/contract/list/{student_id}` - 获取合同列表 |
||||
|
- `GET /api/contract/detail/{id}` - 获取合同详情 |
||||
|
- `POST /api/contract/sign` - 提交合同签署 |
||||
|
- `GET /api/contract/download/{id}` - 下载合同 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 合同列表正确显示 |
||||
|
- ✅ 签署流程完整 |
||||
|
- ✅ 表单验证正确 |
||||
|
- ✅ 签名上传正常 |
||||
|
- ✅ 下载功能正常 |
||||
|
|
||||
|
#### 10. **知识库页面** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:1.5天 |
||||
|
**任务内容**: |
||||
|
- [ ] 知识内容列表 |
||||
|
- [ ] 分类筛选功能 |
||||
|
- [ ] 富文本内容渲染 |
||||
|
- [ ] 权限控制显示 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[分类筛选] |
||||
|
- 课程类型筛选 |
||||
|
- 内容类型筛选 |
||||
|
|
||||
|
[内容列表] |
||||
|
- 标题/封面 |
||||
|
- 内容摘要 |
||||
|
- 查看详情 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/knowledge/list/{student_id}` - 获取知识内容 |
||||
|
- `GET /api/knowledge/detail/{id}` - 获取内容详情 |
||||
|
- `GET /api/knowledge/categories` - 获取分类列表 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 内容列表正确显示 |
||||
|
- ✅ 权限控制正确 |
||||
|
- ✅ 富文本渲染正常 |
||||
|
- ✅ 分类筛选功能正常 |
||||
|
|
||||
|
#### 11. **消息管理页面** |
||||
|
**负责人**:前端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 消息列表展示 |
||||
|
- [ ] 5种消息类型渲染 |
||||
|
- [ ] 已读/未读状态 |
||||
|
- [ ] 消息详情查看 |
||||
|
- [ ] 消息交互功能 |
||||
|
|
||||
|
**页面结构**: |
||||
|
``` |
||||
|
[消息列表] |
||||
|
- 消息标题/时间 |
||||
|
- 未读标识 |
||||
|
- 消息类型图标 |
||||
|
|
||||
|
[消息详情] |
||||
|
- 根据类型渲染内容 |
||||
|
- 相关操作按钮 |
||||
|
- 已读状态更新 |
||||
|
``` |
||||
|
|
||||
|
**API接口依赖**: |
||||
|
- `GET /api/message/list/{student_id}` - 获取消息列表 |
||||
|
- `GET /api/message/detail/{id}` - 获取消息详情 |
||||
|
- `PUT /api/message/read/{id}` - 标记已读 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 消息列表正确显示 |
||||
|
- ✅ 5种类型渲染正确 |
||||
|
- ✅ 已读状态更新正常 |
||||
|
- ✅ 交互功能完整 |
||||
|
- ✅ 推送消息处理正常 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 📊 **前端开发进度计划** |
||||
|
|
||||
|
### 第1周(5天) |
||||
|
- 天1:基础架构搭建 |
||||
|
- 天2-3:公共组件开发 |
||||
|
- 天4:登录页面 |
||||
|
- 天5:个人信息页面(第1天) |
||||
|
|
||||
|
### 第2周(5天) |
||||
|
- 天1:个人信息页面(第2天) |
||||
|
- 天2-3:体测数据页面 |
||||
|
- 天4:课程安排页面 |
||||
|
- 天5:课程预约页面(第1天) |
||||
|
|
||||
|
### 第3周(5天) |
||||
|
- 天1:课程预约页面(第2天) |
||||
|
- 天2-3:订单管理页面 |
||||
|
- 天4-5:合同管理页面 |
||||
|
|
||||
|
### 第4周(3天) |
||||
|
- 天1:知识库页面 |
||||
|
- 天2-3:消息管理页面 |
||||
|
|
||||
|
**总工期:18天** |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🔍 **质量控制和验收标准** |
||||
|
|
||||
|
### 代码质量要求 |
||||
|
- [ ] 代码规范符合ESLint配置 |
||||
|
- [ ] 组件复用性良好 |
||||
|
- [ ] 异常处理完善 |
||||
|
- [ ] 性能优化到位 |
||||
|
|
||||
|
### 功能验收要求 |
||||
|
- [ ] 所有页面功能完整可用 |
||||
|
- [ ] 数据交互正确无误 |
||||
|
- [ ] 用户体验流畅 |
||||
|
- [ ] 兼容性测试通过 |
||||
|
|
||||
|
### 测试要求 |
||||
|
- [ ] 单元测试覆盖率>80% |
||||
|
- [ ] 集成测试通过 |
||||
|
- [ ] 用户验收测试通过 |
||||
|
- [ ] 性能测试达标 |
||||
@ -0,0 +1,410 @@ |
|||||
|
# 学员端开发计划 - 后端任务 |
||||
|
|
||||
|
## 🔧 **技术栈和环境** |
||||
|
- **框架**:PHP ThinkPHP 6.0 |
||||
|
- **数据库**:MySQL 8.0 |
||||
|
- **缓存**:Redis |
||||
|
- **文件存储**:腾讯云COS |
||||
|
- **支付**:微信支付 |
||||
|
- **文档处理**:phpoffice/phpword + dompdf/dompdf |
||||
|
|
||||
|
## 📋 **数据库准备工作** |
||||
|
|
||||
|
### 1. **数据表字段修改** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:0.5天 |
||||
|
**任务内容**: |
||||
|
```sql |
||||
|
-- 1. 消息表添加已读状态字段 |
||||
|
ALTER TABLE `school_chat_messages` ADD COLUMN `is_read` tinyint(1) DEFAULT 0 COMMENT '是否已读 0-未读 1-已读'; |
||||
|
ALTER TABLE `school_chat_messages` ADD COLUMN `read_time` timestamp NULL DEFAULT NULL COMMENT '已读时间'; |
||||
|
|
||||
|
-- 2. 课程安排表添加取消原因字段 |
||||
|
ALTER TABLE `school_person_course_schedule` ADD COLUMN `cancel_reason` varchar(255) DEFAULT NULL COMMENT '取消预约原因'; |
||||
|
|
||||
|
-- 3. 订单表修改支付类型枚举 |
||||
|
ALTER TABLE `school_order_table` MODIFY COLUMN `payment_type` |
||||
|
enum('cash','scan_code','subscription','wxpay_online') NOT NULL |
||||
|
COMMENT '付款类型: cash-现金支付, scan_code-扫码支付, subscription-订阅支付, wxpay_online-微信在线代付'; |
||||
|
|
||||
|
-- 4. 检查合同签署表字段(如果不存在则添加) |
||||
|
-- ALTER TABLE `school_contract_sign` ADD COLUMN `form_data` text COMMENT '签署时填写的表单数据JSON'; |
||||
|
-- ALTER TABLE `school_contract_sign` ADD COLUMN `signature_image` varchar(500) COMMENT '签名图片路径'; |
||||
|
-- ALTER TABLE `school_contract_sign` ADD COLUMN `signed_document` varchar(500) COMMENT '已签署文档路径'; |
||||
|
``` |
||||
|
|
||||
|
### 2. **数据字典配置** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:0.5天 |
||||
|
**任务内容**: |
||||
|
```sql |
||||
|
-- 插入7个数据字典配置 |
||||
|
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES |
||||
|
('订单类型', 'order_type', '[{"name":"新订单","value":"1"},{"name":"续费订单","value":"2"},{"name":"内部员工订单","value":"3"},{"name":"转校","value":"4"},{"name":"客户内转课订单","value":"5"}]'), |
||||
|
('订单状态', 'order_status', '[{"name":"待支付","value":"pending"},{"name":"已支付","value":"paid"},{"name":"待签约","value":"signed"},{"name":"已完成","value":"completed"},{"name":"转学","value":"transfer"}]'), |
||||
|
('支付类型', 'payment_type', '[{"name":"现金支付","value":"cash"},{"name":"扫码支付","value":"scan_code"},{"name":"订阅支付","value":"subscription"},{"name":"微信在线代付","value":"wxpay_online"}]'), |
||||
|
('知识库分类', 'knowledge_table_type', '[{"name":"课程教学大纲","value":"1"},{"name":"跳绳教案库","value":"2"},{"name":"增高教案库","value":"3"},{"name":"篮球教案库","value":"4"},{"name":"强化教案库","value":"5"},{"name":"空中忍者教案库","value":"6"},{"name":"少儿安防教案库","value":"7"},{"name":"体能教案库","value":"8"},{"name":"热身动作库","value":"9"},{"name":"体能动作库","value":"10"},{"name":"趣味游戏库","value":"11"},{"name":"放松动作库","value":"12"},{"name":"训练内容","value":"13"},{"name":"训练视频","value":"14"},{"name":"课后作业","value":"15"},{"name":"优秀一堂课","value":"16"}]'), |
||||
|
('消息发送类型', 'message_from_type', '[{"name":"员工","value":"personnel"},{"name":"学生(客户)","value":"customer"},{"name":"系统消息","value":"system"}]'), |
||||
|
('消息内容类型', 'message_type', '[{"name":"文本消息","value":"text"},{"name":"图片消息","value":"img"},{"name":"订单消息","value":"order"},{"name":"学员课程变动消息","value":"student_courses"},{"name":"课程安排消息","value":"person_course_schedule"}]'), |
||||
|
('课程状态', 'course_schedule_status', '[{"name":"待开始","value":"pending"},{"name":"即将开始","value":"upcoming"},{"name":"进行中","value":"ongoing"},{"name":"已结束","value":"completed"}]'); |
||||
|
``` |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 所有SQL语句执行成功 |
||||
|
- ✅ 数据字典配置正确 |
||||
|
- ✅ 字段类型和约束正确 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🔌 **API接口开发任务** |
||||
|
|
||||
|
### 3. **用户认证模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:1天 |
||||
|
**任务内容**: |
||||
|
- [ ] 统一登录接口(手机号+密码) |
||||
|
- [ ] 微信登录接口(openid绑定) |
||||
|
- [ ] token生成和验证 |
||||
|
- [ ] 登录状态检查中间件 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
POST /api/login/unified // 统一登录 |
||||
|
POST /api/login/wechat // 微信登录 |
||||
|
POST /api/logout // 退出登录 |
||||
|
GET /api/auth/check // 检查登录状态 |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 手机号+密码验证 |
||||
|
- 微信openid绑定到school_customer_resources |
||||
|
- JWT token生成和验证 |
||||
|
- 登录失败次数限制 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 登录验证逻辑正确 |
||||
|
- ✅ token生成和验证正常 |
||||
|
- ✅ 微信登录流程完整 |
||||
|
- ✅ 异常处理完善 |
||||
|
|
||||
|
### 4. **学员信息管理模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:1.5天 |
||||
|
**任务内容**: |
||||
|
- [ ] 获取学员列表(支持多孩子) |
||||
|
- [ ] 获取学员详情信息 |
||||
|
- [ ] 更新学员基本信息 |
||||
|
- [ ] 头像上传处理 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
GET /api/student/list // 获取当前用户的学员列表 |
||||
|
GET /api/student/summary/{id} // 获取学员概览信息(落地页用) |
||||
|
GET /api/student/info/{id} // 获取学员详细信息 |
||||
|
PUT /api/student/update/{id} // 更新学员信息 |
||||
|
POST /api/upload/avatar // 头像上传 |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 通过member_id关联查询学员列表 |
||||
|
- 学员信息权限验证(只能查看自己的孩子) |
||||
|
- 头像上传到腾讯云COS |
||||
|
- 信息修改日志记录 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 学员列表查询正确 |
||||
|
- ✅ 权限控制严格 |
||||
|
- ✅ 头像上传功能正常 |
||||
|
- ✅ 数据验证完整 |
||||
|
|
||||
|
### 5. **体测数据模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:1.5天 |
||||
|
**任务内容**: |
||||
|
- [ ] 获取体测记录列表 |
||||
|
- [ ] 获取体测详情数据 |
||||
|
- [ ] PDF转图片分享功能 |
||||
|
- [ ] 体测趋势数据计算 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
GET /api/physical-test/list/{student_id} // 获取体测记录列表 |
||||
|
GET /api/physical-test/detail/{id} // 获取体测详情 |
||||
|
POST /api/physical-test/share/{id} // PDF转图片分享 |
||||
|
GET /api/physical-test/trend/{student_id} // 获取趋势数据 |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 按学员ID查询体测记录 |
||||
|
- 只返回身高、体重、PDF报告 |
||||
|
- 使用imagick将PDF转换为图片 |
||||
|
- 计算身高体重趋势数据 |
||||
|
|
||||
|
**第三方库需求**: |
||||
|
```bash |
||||
|
composer require spatie/pdf-to-image |
||||
|
# 或使用imagick扩展 |
||||
|
``` |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 体测数据查询正确 |
||||
|
- ✅ PDF转图片功能正常 |
||||
|
- ✅ 趋势计算准确 |
||||
|
- ✅ 权限控制严格 |
||||
|
|
||||
|
### 6. **课程安排模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:1天 |
||||
|
**任务内容**: |
||||
|
- [ ] 获取学员课程安排 |
||||
|
- [ ] 课程详情查询 |
||||
|
- [ ] 课程状态筛选 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
GET /api/course-schedule/list/{student_id} // 获取课程安排列表 |
||||
|
GET /api/course-schedule/detail/{id} // 获取课程详情 |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 查询school_person_course_schedule表 |
||||
|
- 关联课程、教练、场地信息 |
||||
|
- 支持按日期、状态筛选 |
||||
|
- 课程状态枚举处理 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 课程列表查询正确 |
||||
|
- ✅ 关联数据完整 |
||||
|
- ✅ 筛选功能正常 |
||||
|
- ✅ 状态显示准确 |
||||
|
|
||||
|
### 7. **课程预约模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 获取可预约课程列表 |
||||
|
- [ ] 创建课程预约 |
||||
|
- [ ] 获取我的预约列表 |
||||
|
- [ ] 取消课程预约 |
||||
|
- [ ] 预约冲突检测 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
GET /api/course-booking/available/{student_id} // 获取可预约课程 |
||||
|
POST /api/course-booking/create // 创建预约 |
||||
|
GET /api/course-booking/my-list/{student_id} // 我的预约列表 |
||||
|
PUT /api/course-booking/cancel/{id} // 取消预约 |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 预约数据存储在school_person_course_schedule表,course_type=3 |
||||
|
- 预约冲突检测(同一时间段不能重复预约) |
||||
|
- 取消预约设置deleted_at字段 |
||||
|
- 6小时取消限制检查 |
||||
|
- 预约成功发送消息通知 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 预约创建逻辑正确 |
||||
|
- ✅ 冲突检测准确 |
||||
|
- ✅ 取消预约功能正常 |
||||
|
- ✅ 时间限制检查正确 |
||||
|
- ✅ 消息通知发送成功 |
||||
|
|
||||
|
### 8. **订单管理模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 获取订单列表 |
||||
|
- [ ] 获取订单详情 |
||||
|
- [ ] 创建支付订单 |
||||
|
- [ ] 支付状态查询 |
||||
|
- [ ] 订单筛选功能 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
GET /api/order/list/{student_id} // 获取订单列表 |
||||
|
GET /api/order/detail/{id} // 获取订单详情 |
||||
|
POST /api/payment/create // 创建支付 |
||||
|
GET /api/payment/status/{order_id} // 查询支付状态 |
||||
|
POST /api/payment/callback // 支付回调处理 |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 查询school_order_table表 |
||||
|
- 支持按课程类型、时间筛选 |
||||
|
- 集成微信支付API |
||||
|
- 支付状态实时更新 |
||||
|
- 支付成功后订单状态变更 |
||||
|
|
||||
|
**第三方集成**: |
||||
|
```php |
||||
|
// 微信支付SDK |
||||
|
composer require wechatpay/wechatpay-guzzle-middleware |
||||
|
``` |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 订单列表查询正确 |
||||
|
- ✅ 支付流程完整 |
||||
|
- ✅ 支付回调处理正确 |
||||
|
- ✅ 状态更新及时 |
||||
|
- ✅ 筛选功能正常 |
||||
|
|
||||
|
### 9. **合同管理模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:2.5天 |
||||
|
**任务内容**: |
||||
|
- [ ] 获取合同列表 |
||||
|
- [ ] 获取合同详情 |
||||
|
- [ ] 合同签署处理 |
||||
|
- [ ] 合同文档下载 |
||||
|
- [ ] Word转PDF功能 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
GET /api/contract/list/{student_id} // 获取合同列表 |
||||
|
GET /api/contract/detail/{id} // 获取合同详情 |
||||
|
POST /api/contract/sign // 提交合同签署 |
||||
|
GET /api/contract/download/{id} // 下载合同 |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 查询school_contract和school_contract_sign表 |
||||
|
- 合同签署表单数据存储 |
||||
|
- 签名图片上传处理 |
||||
|
- Word文档转PDF功能 |
||||
|
- 已签署合同下载 |
||||
|
|
||||
|
**第三方库需求**: |
||||
|
```bash |
||||
|
composer require phpoffice/phpword |
||||
|
composer require dompdf/dompdf |
||||
|
# 或者 |
||||
|
composer require tecnickcom/tcpdf |
||||
|
``` |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 合同列表查询正确 |
||||
|
- ✅ 签署流程完整 |
||||
|
- ✅ 文档转换功能正常 |
||||
|
- ✅ 下载功能正常 |
||||
|
- ✅ 数据存储正确 |
||||
|
|
||||
|
### 10. **知识库模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:1.5天 |
||||
|
**任务内容**: |
||||
|
- [ ] 获取知识内容列表 |
||||
|
- [ ] 获取内容详情 |
||||
|
- [ ] 权限控制处理 |
||||
|
- [ ] 分类筛选功能 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
GET /api/knowledge/list/{student_id} // 获取知识内容列表 |
||||
|
GET /api/knowledge/detail/{id} // 获取内容详情 |
||||
|
GET /api/knowledge/categories // 获取分类列表 |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 查询school_lesson_course_teaching表 |
||||
|
- 通过student_ids字段控制权限(逗号分割) |
||||
|
- 富文本内容处理 |
||||
|
- 按table_type分类筛选 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 内容列表查询正确 |
||||
|
- ✅ 权限控制严格 |
||||
|
- ✅ 富文本渲染正常 |
||||
|
- ✅ 分类筛选功能正常 |
||||
|
|
||||
|
### 11. **消息管理模块** |
||||
|
**负责人**:后端开发者 |
||||
|
**工期**:2天 |
||||
|
**任务内容**: |
||||
|
- [ ] 获取消息列表 |
||||
|
- [ ] 获取消息详情 |
||||
|
- [ ] 标记消息已读 |
||||
|
- [ ] 5种消息类型处理 |
||||
|
- [ ] 消息推送功能 |
||||
|
|
||||
|
**API接口清单**: |
||||
|
```php |
||||
|
GET /api/message/list/{student_id} // 获取消息列表 |
||||
|
GET /api/message/detail/{id} // 获取消息详情 |
||||
|
PUT /api/message/read/{id} // 标记已读 |
||||
|
POST /api/message/send // 发送消息(系统用) |
||||
|
``` |
||||
|
|
||||
|
**核心业务逻辑**: |
||||
|
- 查询school_chat_messages表 |
||||
|
- 5种消息类型的不同处理逻辑 |
||||
|
- 已读状态更新 |
||||
|
- 消息推送到微信小程序 |
||||
|
- 消息内容JSON格式处理 |
||||
|
|
||||
|
**验收标准**: |
||||
|
- ✅ 消息列表查询正确 |
||||
|
- ✅ 5种类型处理正确 |
||||
|
- ✅ 已读状态更新正常 |
||||
|
- ✅ 推送功能正常 |
||||
|
- ✅ JSON数据格式正确 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 📊 **后端开发进度计划** |
||||
|
|
||||
|
### 第1周(5天) |
||||
|
- 天1:数据库准备工作(0.5天)+ 用户认证模块(0.5天) |
||||
|
- 天2:用户认证模块完成 + 学员信息管理模块(0.5天) |
||||
|
- 天3:学员信息管理模块完成 + 体测数据模块(0.5天) |
||||
|
- 天4:体测数据模块完成 + 课程安排模块 |
||||
|
- 天5:课程预约模块(第1天) |
||||
|
|
||||
|
### 第2周(5天) |
||||
|
- 天1:课程预约模块完成 |
||||
|
- 天2-3:订单管理模块 |
||||
|
- 天4-5:合同管理模块(第1-2天) |
||||
|
|
||||
|
### 第3周(3.5天) |
||||
|
- 天1:合同管理模块完成(第3天) |
||||
|
- 天2:知识库模块 |
||||
|
- 天3-4:消息管理模块 |
||||
|
|
||||
|
**总工期:13.5天** |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🔍 **质量控制和验收标准** |
||||
|
|
||||
|
### 代码质量要求 |
||||
|
- [ ] 代码规范符合PSR-12标准 |
||||
|
- [ ] 数据库操作使用ORM |
||||
|
- [ ] 异常处理完善 |
||||
|
- [ ] 日志记录完整 |
||||
|
- [ ] 安全防护到位 |
||||
|
|
||||
|
### API接口要求 |
||||
|
- [ ] 统一的响应格式 |
||||
|
- [ ] 完整的参数验证 |
||||
|
- [ ] 权限控制严格 |
||||
|
- [ ] 错误码规范 |
||||
|
- [ ] 接口文档完整 |
||||
|
|
||||
|
### 性能要求 |
||||
|
- [ ] 数据库查询优化 |
||||
|
- [ ] 缓存策略合理 |
||||
|
- [ ] 文件处理高效 |
||||
|
- [ ] 并发处理能力 |
||||
|
|
||||
|
### 安全要求 |
||||
|
- [ ] SQL注入防护 |
||||
|
- [ ] XSS攻击防护 |
||||
|
- [ ] 权限验证严格 |
||||
|
- [ ] 敏感数据加密 |
||||
|
- [ ] 接口访问限制 |
||||
|
|
||||
|
### 测试要求 |
||||
|
- [ ] 单元测试覆盖率>80% |
||||
|
- [ ] 接口测试通过 |
||||
|
- [ ] 压力测试达标 |
||||
|
- [ ] 安全测试通过 |
||||
@ -0,0 +1,553 @@ |
|||||
|
# 学员端开发需求整合确认文档 |
||||
|
|
||||
|
## 📋 **基于需求文档和数据库分析的整合确认** |
||||
|
|
||||
|
我已经分析了《学员端开发需求文档.md》,并通过Docker命令直接查询了数据库表结构,获取了完整的字段定义和枚举值。现在整理出完整的技术规范和需要您确认的业务逻辑问题。 |
||||
|
|
||||
|
### 🔧 **数据库操作方法** |
||||
|
```bash |
||||
|
# 数据库连接信息 |
||||
|
数据库:niucloud |
||||
|
用户名:niucloud |
||||
|
密码:niucloud123 |
||||
|
|
||||
|
# Docker命令查询示例 |
||||
|
docker exec niucloud_mysql mysql -u niucloud -pniucloud123 -D niucloud -e "SHOW CREATE TABLE 表名;" |
||||
|
docker exec niucloud_mysql mysql -u niucloud -pniucloud123 -D niucloud -e "SELECT * FROM 表名 LIMIT 10;" |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🔍 **已明确的需求信息** |
||||
|
|
||||
|
### 1. **用户认证和登录** ✅ 已明确 |
||||
|
- **登录方式**:手机号+密码,支持微信一键登录 |
||||
|
- **数据关联**:`school_customer_resources` 主表,通过 `member_id` 关联 `member` 表 |
||||
|
- **微信绑定**:需要获取小程序和公众号openid,绑定到对应字段 |
||||
|
- **首次登录**:可提示设置密码但不强制 |
||||
|
|
||||
|
### 2. **个人信息管理** ✅ 已明确 |
||||
|
- **用户信息**:只展示姓名和欢迎语,不可修改 |
||||
|
- **学员信息**:可修改学员的基本信息 |
||||
|
- **头像上传**:支持,存储在 `headimg` 字段,腾讯云COS,2M以下 |
||||
|
|
||||
|
### 3. **体测数据功能** ✅ 已明确 |
||||
|
- **数据来源**:`school_physical_test` 表 |
||||
|
- **展示内容**:身高、体重、体测报告PDF |
||||
|
- **趋势图**:折线图展示身高体重趋势 |
||||
|
|
||||
|
### 4. **课程预约功能** ✅ 已明确 |
||||
|
- **预约规则**:只能预约等待位课程,取消需提前6小时 |
||||
|
- **数据表**:`school_person_course_schedule` 插入等待位记录 |
||||
|
- **冲突处理**:同一时间段只能预约一节课 |
||||
|
|
||||
|
### 5. **支付功能** ✅ 已明确 |
||||
|
- **支付方式**:微信支付、微信扫码支付 |
||||
|
- **订单表**:`school_order_table` |
||||
|
|
||||
|
### 6. **知识库功能** ✅ 已明确 |
||||
|
- **数据表**:`school_lesson_course_teaching` |
||||
|
- **内容渲染**:富文本方式 |
||||
|
- **权限控制**:根据 `student_id` 字段(逗号分割) |
||||
|
|
||||
|
### 7. **消息管理功能** ✅ 已明确 |
||||
|
- **数据表**:`school_chat_messages` |
||||
|
- **消息推送**:公众号模板消息推送 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## ✅ **数据库表字段枚举值已确认** |
||||
|
|
||||
|
### 1. **订单类型枚举** (`school_order_table.order_type`) |
||||
|
**已确认的枚举值**: |
||||
|
``` |
||||
|
order_type 字段注释:'订单类型1新订单2续费订单3内部员工订单4 转校 5 客户内转课订单' |
||||
|
- 1:新订单 |
||||
|
- 2:续费订单 |
||||
|
- 3:内部员工订单 |
||||
|
- 4:转校 |
||||
|
- 5:客户内转课订单 |
||||
|
``` |
||||
|
|
||||
|
### 2. **知识库分类枚举** (`school_lesson_course_teaching.table_type`) |
||||
|
**已确认的枚举值**: |
||||
|
``` |
||||
|
table_type 字段注释:'类型 1课程教学大纲 2跳绳教案库 3增高教案库 4篮球教案库 5强化教案库 6空中忍者教案库 7少儿安防教案库 8体能教案库 9热身动作库 10体能动作库 11趣味游戏库 12放松动作库 13训练内容 14训练视频 15课后作业 16优秀一堂课 17空中忍者 18篮球动作 19跳绳动作 20跑酷动作 21安防动作 22标准化动作 233-6岁体测 247+体测 253-6岁体测讲解—解读 267+岁体测讲解—解读 27互动游戏 28套圈游戏 29鼓励方式' |
||||
|
|
||||
|
主要分类: |
||||
|
- 1:课程教学大纲 |
||||
|
- 2:跳绳教案库 |
||||
|
- 3:增高教案库 |
||||
|
- 4:篮球教案库 |
||||
|
- 5:强化教案库 |
||||
|
- 6:空中忍者教案库 |
||||
|
- 7:少儿安防教案库 |
||||
|
- 8:体能教案库 |
||||
|
- 9:热身动作库 |
||||
|
- 10:体能动作库 |
||||
|
- 11:趣味游戏库 |
||||
|
- 12:放松动作库 |
||||
|
- 13:训练内容 |
||||
|
- 14:训练视频 |
||||
|
- 15:课后作业 |
||||
|
- 16:优秀一堂课 |
||||
|
- 17-22:各种动作库 |
||||
|
- 23-26:体测相关 |
||||
|
- 27-29:游戏和鼓励方式 |
||||
|
``` |
||||
|
|
||||
|
### 3. **消息类型枚举** (`school_chat_messages`) |
||||
|
**已确认的枚举值**: |
||||
|
|
||||
|
**`from_type` 字段**: |
||||
|
```sql |
||||
|
enum('personnel','customer','system') |
||||
|
注释:'发送者类型|personnel=员工,customer=学生(客户)system(系统消息)' |
||||
|
- personnel:员工 |
||||
|
- customer:学生(客户) |
||||
|
- system:系统消息 |
||||
|
``` |
||||
|
|
||||
|
**`message_type` 字段**: |
||||
|
```sql |
||||
|
enum('text','img','order','student_courses','person_course_schedule') |
||||
|
注释:'消息类型|text=文本,img=图片消息,订单'消息order'学员课程变动消息student_courses'课程安排消息person_course_schedule' |
||||
|
- text:文本消息 |
||||
|
- img:图片消息 |
||||
|
- order:订单消息 |
||||
|
- student_courses:学员课程变动消息 |
||||
|
- person_course_schedule:课程安排消息 |
||||
|
``` |
||||
|
|
||||
|
### 4. **课程状态枚举** (`school_course_schedule.status`) |
||||
|
**已确认的枚举值**: |
||||
|
```sql |
||||
|
enum('pending','upcoming','ongoing','completed') |
||||
|
注释:'课程状态: pending-待开始, upcoming-即将开始, ongoing-进行中, completed-已结束' |
||||
|
- pending:待开始 |
||||
|
- upcoming:即将开始 |
||||
|
- ongoing:进行中 |
||||
|
- completed:已结束 |
||||
|
``` |
||||
|
|
||||
|
### 5. **订单状态枚举** (`school_order_table.order_status`) |
||||
|
**已确认的枚举值**: |
||||
|
```sql |
||||
|
enum('pending','paid','signed','completed','transfer') |
||||
|
注释:'订单状态: pending-待支付, paid-已支付,signed待签约,completed已完成,transfer转学' |
||||
|
- pending:待支付 |
||||
|
- paid:已支付 |
||||
|
- signed:待签约 |
||||
|
- completed:已完成 |
||||
|
- transfer:转学 |
||||
|
``` |
||||
|
|
||||
|
### 6. **支付类型枚举** (`school_order_table.payment_type`) |
||||
|
**已确认的枚举值**: |
||||
|
```sql |
||||
|
enum('cash','scan_code','subscription') |
||||
|
注释:'付款类型: cash-现金支付, scan_code-扫码支付, subscription-订阅支付wxpay_online微信在线代付' |
||||
|
- cash:现金支付 |
||||
|
- scan_code:扫码支付 |
||||
|
- subscription:订阅支付 |
||||
|
- wxpay_online:微信在线代付(注释中提到但enum中未包含) |
||||
|
``` |
||||
|
|
||||
|
## ✅ **数据表结构已确认** |
||||
|
|
||||
|
### 1. **体测数据表字段** (`school_physical_test`) |
||||
|
**完整字段结构**: |
||||
|
```sql |
||||
|
CREATE TABLE `school_physical_test` ( |
||||
|
`id` int NOT NULL AUTO_INCREMENT COMMENT '体测编号', |
||||
|
`resource_id` int NOT NULL COMMENT '资源ID', |
||||
|
`student_id` int DEFAULT NULL COMMENT '学员ID', |
||||
|
`age` int NOT NULL DEFAULT '0' COMMENT '学员年龄', |
||||
|
`height` decimal(5,2) NOT NULL COMMENT '身高', |
||||
|
`weight` decimal(5,2) NOT NULL COMMENT '体重', |
||||
|
`coach_id` int DEFAULT NULL COMMENT '教练ID', |
||||
|
`seated_forward_bend` decimal(5,2) DEFAULT NULL COMMENT '坐位体前屈', |
||||
|
`sit_ups` decimal(5,2) DEFAULT NULL COMMENT '仰卧卷腹', |
||||
|
`push_ups` decimal(5,2) DEFAULT NULL COMMENT '九十度仰卧撑', |
||||
|
`flamingo_balance` decimal(5,2) DEFAULT NULL COMMENT '火烈鸟平衡测试', |
||||
|
`thirty_sec_jump` decimal(5,2) DEFAULT NULL COMMENT '三十秒双脚连续跳', |
||||
|
`standing_long_jump` decimal(5,2) DEFAULT NULL COMMENT '立定跳远', |
||||
|
`agility_run` decimal(5,2) DEFAULT NULL COMMENT '4乘10m灵敏折返跑', |
||||
|
`balance_beam` decimal(5,2) DEFAULT NULL COMMENT '走平衡木', |
||||
|
`tennis_throw` decimal(5,2) DEFAULT NULL COMMENT '网球掷远', |
||||
|
`ten_meter_shuttle_run` decimal(5,2) DEFAULT NULL COMMENT '十米往返跑', |
||||
|
`physical_test_report` text COMMENT '体测报告附件(多文件)', |
||||
|
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
||||
|
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', |
||||
|
PRIMARY KEY (`id`) |
||||
|
); |
||||
|
``` |
||||
|
|
||||
|
**体测指标分类**: |
||||
|
- **基础指标**:身高、体重、年龄 |
||||
|
- **柔韧性测试**:坐位体前屈 |
||||
|
- **力量测试**:仰卧卷腹、九十度仰卧撑 |
||||
|
- **平衡性测试**:火烈鸟平衡测试、走平衡木 |
||||
|
- **爆发力测试**:三十秒双脚连续跳、立定跳远、网球掷远 |
||||
|
- **敏捷性测试**:4乘10m灵敏折返跑、十米往返跑 |
||||
|
- **体测报告**:PDF附件(多文件,逗号分割) |
||||
|
|
||||
|
### 2. **订单表字段** (`school_order_table`) |
||||
|
**完整字段结构**: |
||||
|
```sql |
||||
|
CREATE TABLE `school_order_table` ( |
||||
|
`id` int NOT NULL AUTO_INCREMENT COMMENT '订单编号', |
||||
|
`payment_id` varchar(255) DEFAULT NULL COMMENT '支付编号', |
||||
|
`order_type` varchar(255) DEFAULT NULL COMMENT '订单类型1新订单2续费订单3内部员工订单4 转校 5 客户内转课订单', |
||||
|
`order_status` enum('pending','paid','signed','completed','transfer') DEFAULT 'pending' COMMENT '订单状态', |
||||
|
`payment_type` enum('cash','scan_code','subscription') NOT NULL COMMENT '付款类型', |
||||
|
`order_amount` decimal(10,2) NOT NULL COMMENT '订单金额', |
||||
|
`discount_amount` decimal(10,2) DEFAULT NULL COMMENT '优惠金额', |
||||
|
`course_id` int NOT NULL COMMENT '课程ID', |
||||
|
`class_id` int DEFAULT NULL COMMENT '班级ID', |
||||
|
`staff_id` int NOT NULL COMMENT '人员ID|员工表school_personnel.id', |
||||
|
`resource_id` int NOT NULL COMMENT '资源ID|客户资源表school_customer_resources.id', |
||||
|
`student_id` int NOT NULL COMMENT '学员 id', |
||||
|
`campus_id` int NOT NULL COMMENT '校区ID', |
||||
|
`course_plan_id` int DEFAULT NULL COMMENT '课程计划 id', |
||||
|
`gift_id` int DEFAULT NULL COMMENT '赠品 id', |
||||
|
`after_sales_status` varchar(50) DEFAULT NULL COMMENT '售后状态', |
||||
|
`after_sales_reason` text COMMENT '售后原因', |
||||
|
`after_sales_time` timestamp NULL DEFAULT NULL COMMENT '售后时间', |
||||
|
`payment_time` timestamp NULL DEFAULT NULL COMMENT '支付时间', |
||||
|
`subscription_payment_time` timestamp NULL DEFAULT NULL COMMENT '订阅支付生成时间', |
||||
|
`accounting_time` timestamp NULL DEFAULT NULL COMMENT '核算时间', |
||||
|
`remark` varchar(512) DEFAULT NULL COMMENT '订单备注', |
||||
|
`created_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', |
||||
|
`updated_at` timestamp NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', |
||||
|
PRIMARY KEY (`id`) |
||||
|
); |
||||
|
``` |
||||
|
|
||||
|
### 3. **业务逻辑确认** |
||||
|
|
||||
|
#### 3.1 学员选择逻辑 |
||||
|
**问题**:一个家长可能有多个孩子,学员端如何处理? |
||||
|
**需要确认**: |
||||
|
- 登录后是否需要选择孩子? |
||||
|
- 如何在不同孩子之间切换? |
||||
|
- 数据展示是否需要按孩子分别显示? |
||||
|
|
||||
|
#### 3.2 收藏功能 |
||||
|
**问题**:是否需要收藏功能? |
||||
|
**如果需要,请确认**: |
||||
|
- 可以收藏哪些内容?(知识库文章、课程等) |
||||
|
- 是否需要创建 `school_student_favorites` 表? |
||||
|
|
||||
|
#### 3.3 合同状态管理 |
||||
|
**问题**:合同状态的具体定义 |
||||
|
**需要确认**: |
||||
|
``` |
||||
|
school_contract_sign.status 字段的枚举值: |
||||
|
- 待签署:pending? |
||||
|
- 已签署:signed? |
||||
|
- 已生效:active? |
||||
|
- 已到期:expired? |
||||
|
``` |
||||
|
|
||||
|
### 4. **页面功能细节确认** |
||||
|
|
||||
|
#### 4.1 个人信息页面 |
||||
|
**基于您的说明,确认页面结构**: |
||||
|
``` |
||||
|
[用户信息区域] |
||||
|
- 显示:{name} 你好,今天是星期{x} |
||||
|
- 入会时间:{create_year_month} |
||||
|
- 年龄:{age} (根据最新学员生日计算) |
||||
|
|
||||
|
[学员信息区域] - 可编辑 |
||||
|
- 学员选择下拉框 (如果有多个孩子) |
||||
|
- 学员基本信息编辑 |
||||
|
- 头像上传功能 |
||||
|
|
||||
|
[体测数据区域] - 只读 |
||||
|
- 身高、体重显示 |
||||
|
- 体测报告PDF预览/下载 |
||||
|
``` |
||||
|
|
||||
|
#### 4.2 消息页面渲染 |
||||
|
**基于 `message_type` 字段,确认渲染方式**: |
||||
|
- 不同 `message_type` 对应的页面渲染方式? |
||||
|
- 消息列表和详情页的展示差异? |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 📝 **需要创建的数据字典** |
||||
|
|
||||
|
基于数据库表结构分析,需要在 `school_sys_dict` 表中存储以下枚举数据: |
||||
|
|
||||
|
### 1. 订单类型字典 |
||||
|
```sql |
||||
|
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES |
||||
|
('订单类型', 'order_type', '[ |
||||
|
{"name":"新订单","value":"1"}, |
||||
|
{"name":"续费订单","value":"2"}, |
||||
|
{"name":"内部员工订单","value":"3"}, |
||||
|
{"name":"转校","value":"4"}, |
||||
|
{"name":"客户内转课订单","value":"5"} |
||||
|
]'); |
||||
|
``` |
||||
|
|
||||
|
### 2. 订单状态字典 |
||||
|
```sql |
||||
|
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES |
||||
|
('订单状态', 'order_status', '[ |
||||
|
{"name":"待支付","value":"pending"}, |
||||
|
{"name":"已支付","value":"paid"}, |
||||
|
{"name":"待签约","value":"signed"}, |
||||
|
{"name":"已完成","value":"completed"}, |
||||
|
{"name":"转学","value":"transfer"} |
||||
|
]'); |
||||
|
``` |
||||
|
|
||||
|
### 3. 支付类型字典 |
||||
|
```sql |
||||
|
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES |
||||
|
('支付类型', 'payment_type', '[ |
||||
|
{"name":"现金支付","value":"cash"}, |
||||
|
{"name":"扫码支付","value":"scan_code"}, |
||||
|
{"name":"订阅支付","value":"subscription"}, |
||||
|
{"name":"微信在线代付","value":"wxpay_online"} |
||||
|
]'); |
||||
|
``` |
||||
|
|
||||
|
### 4. 知识库分类字典 |
||||
|
```sql |
||||
|
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES |
||||
|
('知识库分类', 'knowledge_table_type', '[ |
||||
|
{"name":"课程教学大纲","value":"1"}, |
||||
|
{"name":"跳绳教案库","value":"2"}, |
||||
|
{"name":"增高教案库","value":"3"}, |
||||
|
{"name":"篮球教案库","value":"4"}, |
||||
|
{"name":"强化教案库","value":"5"}, |
||||
|
{"name":"空中忍者教案库","value":"6"}, |
||||
|
{"name":"少儿安防教案库","value":"7"}, |
||||
|
{"name":"体能教案库","value":"8"}, |
||||
|
{"name":"热身动作库","value":"9"}, |
||||
|
{"name":"体能动作库","value":"10"}, |
||||
|
{"name":"趣味游戏库","value":"11"}, |
||||
|
{"name":"放松动作库","value":"12"}, |
||||
|
{"name":"训练内容","value":"13"}, |
||||
|
{"name":"训练视频","value":"14"}, |
||||
|
{"name":"课后作业","value":"15"}, |
||||
|
{"name":"优秀一堂课","value":"16"} |
||||
|
]'); |
||||
|
``` |
||||
|
|
||||
|
### 5. 消息发送类型字典 |
||||
|
```sql |
||||
|
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES |
||||
|
('消息发送类型', 'message_from_type', '[ |
||||
|
{"name":"员工","value":"personnel"}, |
||||
|
{"name":"学生(客户)","value":"customer"}, |
||||
|
{"name":"系统消息","value":"system"} |
||||
|
]'); |
||||
|
``` |
||||
|
|
||||
|
### 6. 消息内容类型字典 |
||||
|
```sql |
||||
|
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES |
||||
|
('消息内容类型', 'message_type', '[ |
||||
|
{"name":"文本消息","value":"text"}, |
||||
|
{"name":"图片消息","value":"img"}, |
||||
|
{"name":"订单消息","value":"order"}, |
||||
|
{"name":"学员课程变动消息","value":"student_courses"}, |
||||
|
{"name":"课程安排消息","value":"person_course_schedule"} |
||||
|
]'); |
||||
|
``` |
||||
|
|
||||
|
### 7. 课程状态字典 |
||||
|
```sql |
||||
|
INSERT INTO `school_sys_dict` (`name`, `key`, `dictionary`) VALUES |
||||
|
('课程状态', 'course_schedule_status', '[ |
||||
|
{"name":"待开始","value":"pending"}, |
||||
|
{"name":"即将开始","value":"upcoming"}, |
||||
|
{"name":"进行中","value":"ongoing"}, |
||||
|
{"name":"已结束","value":"completed"} |
||||
|
]'); |
||||
|
``` |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## ✅ **业务逻辑已确认** |
||||
|
|
||||
|
### 1. **多孩子处理逻辑** |
||||
|
- **登录流程**:登录后获取孩子列表,默认选择最新添加的孩子 |
||||
|
- **切换方式**:在孩子信息卡片处设置切换按钮 |
||||
|
- **数据展示**:所有数据根据选中的孩子ID查询 |
||||
|
- **页面结构**:孩子选择卡片下方显示各功能模块入口 |
||||
|
|
||||
|
### 2. **收藏功能** |
||||
|
- **不需要收藏功能**:知识内容由工作人员分享给学员,学员只能查看 |
||||
|
|
||||
|
### 3. **体测数据展示** |
||||
|
- **展示指标**:只显示身高和体重 |
||||
|
- **趋势图**:展示身高和体重的变化趋势 |
||||
|
- **体测报告**: |
||||
|
- 显示"体测附件"或"体测记录"图标 |
||||
|
- 点击可在应用内预览PDF |
||||
|
- 支持将PDF转换为图片分享 |
||||
|
|
||||
|
### 4. **消息页面渲染规则** |
||||
|
- **text消息**:纯文本显示 |
||||
|
- **img消息**:缩略图+点击放大 |
||||
|
- **order消息**:显示订单号、金额、状态、购买课程信息,支付成功后显示"查看合同"或"签署合同"按钮 |
||||
|
- **student_courses消息**:课程变动通知(停课、签到核销等),样式与文本消息有差别,无交互 |
||||
|
- **person_course_schedule消息**:预约课程生效通知,显示时间地点,点击查看课程详情 |
||||
|
- **已读/未读状态**:需要添加数据库字段支持 |
||||
|
|
||||
|
### 5. **支付功能** |
||||
|
- **支付流程**:简化为一键支付,直接唤起支付 |
||||
|
- **支付成功**:更新订单列表状态 |
||||
|
- **支付失败**:提示失败,不修改数据库 |
||||
|
- **订单管理**:只显示订单记录,支持按课程、时间筛选 |
||||
|
|
||||
|
### 6. **课程预约** |
||||
|
- **预约确认**:无需人工确认,可发消息通知教练和教务 |
||||
|
- **冲突处理**:相同时间段已有预约时提示不能重复预约 |
||||
|
- **取消原因**:可填写但非必填,需检查数据库字段 |
||||
|
|
||||
|
### 7. **合同管理** |
||||
|
- **显示信息**:合同名称、签署状态、签署时间 |
||||
|
- **签署流程**:查看合同 → 填写信息 → 上传签名 → 提交 |
||||
|
- **文档下载**:已签署合同可下载,需将Word转换为PDF或图片 |
||||
|
|
||||
|
### 8. **知识库权限** |
||||
|
- **内容显示**:只显示当前选中孩子可访问的内容 |
||||
|
- **学习记录**:不需要,仅支持浏览 |
||||
|
|
||||
|
## 🔧 **需要的技术实现和数据库修改** |
||||
|
|
||||
|
### 1. **需要重新设计的数据表** |
||||
|
|
||||
|
#### 1.1 **课程预约功能** - 修改现有表 |
||||
|
**方案**:使用现有的 `school_person_course_schedule` 表,通过 `course_type=3` 标识等待位预约 |
||||
|
**需要添加的字段**: |
||||
|
```sql |
||||
|
-- 检查并添加取消原因字段 |
||||
|
ALTER TABLE `school_person_course_schedule` ADD COLUMN `cancel_reason` varchar(255) DEFAULT NULL COMMENT '取消预约原因'; |
||||
|
|
||||
|
-- 确保有软删除字段(如果没有的话) |
||||
|
-- ALTER TABLE `school_person_course_schedule` ADD COLUMN `deleted_at` int DEFAULT 0 COMMENT '删除时间,0为未删除'; |
||||
|
``` |
||||
|
|
||||
|
**预约数据管理逻辑**: |
||||
|
- **新预约**:插入记录,设置 `course_type=3`(等待位) |
||||
|
- **预约生效**:员工将 `course_type` 改为正式课程类型 |
||||
|
- **取消预约**:设置 `deleted_at` 为当前时间戳,可选填写 `cancel_reason` |
||||
|
- **预约查询**:查询 `course_type=3` 且 `deleted_at=0` 的记录 |
||||
|
|
||||
|
#### 1.2 **消息已读状态** - 需要修改现有表 |
||||
|
**问题**:`school_chat_messages` 表缺少已读状态字段 |
||||
|
**解决方案**:添加字段 |
||||
|
```sql |
||||
|
ALTER TABLE `school_chat_messages` ADD COLUMN `is_read` tinyint(1) DEFAULT 0 COMMENT '是否已读 0-未读 1-已读'; |
||||
|
ALTER TABLE `school_chat_messages` ADD COLUMN `read_time` timestamp NULL DEFAULT NULL COMMENT '已读时间'; |
||||
|
``` |
||||
|
|
||||
|
#### 1.3 **合同签署数据** - 需要修改现有表 |
||||
|
**问题**:合同签署可能需要存储填写的表单数据 |
||||
|
**解决方案**:检查并补充字段 |
||||
|
```sql |
||||
|
-- 检查 school_contract_sign 表是否有以下字段,如果没有需要添加: |
||||
|
ALTER TABLE `school_contract_sign` ADD COLUMN `form_data` text COMMENT '签署时填写的表单数据JSON'; |
||||
|
ALTER TABLE `school_contract_sign` ADD COLUMN `signature_image` varchar(500) COMMENT '签名图片路径'; |
||||
|
ALTER TABLE `school_contract_sign` ADD COLUMN `signed_document` varchar(500) COMMENT '已签署文档路径'; |
||||
|
``` |
||||
|
|
||||
|
#### 1.4 **支付类型枚举** - 需要修改现有表 |
||||
|
**问题**:`school_order_table.payment_type` 枚举中缺少 `wxpay_online` |
||||
|
**解决方案**:修改枚举值 |
||||
|
```sql |
||||
|
ALTER TABLE `school_order_table` MODIFY COLUMN `payment_type` |
||||
|
enum('cash','scan_code','subscription','wxpay_online') NOT NULL |
||||
|
COMMENT '付款类型: cash-现金支付, scan_code-扫码支付, subscription-订阅支付, wxpay_online-微信在线代付'; |
||||
|
``` |
||||
|
|
||||
|
### 2. **不需要新建表的功能** |
||||
|
|
||||
|
#### 2.1 **收藏功能** - 不需要 |
||||
|
**原因**:您明确表示不需要收藏功能 |
||||
|
|
||||
|
#### 2.2 **体测数据** - 现有表足够 |
||||
|
**原因**:`school_physical_test` 表已包含所需的身高、体重和PDF报告字段 |
||||
|
|
||||
|
#### 2.3 **知识库** - 现有表足够 |
||||
|
**原因**:`school_lesson_course_teaching` 表已有 `student_ids` 字段控制权限 |
||||
|
|
||||
|
#### 2.4 **订单管理** - 现有表足够 |
||||
|
**原因**:`school_order_table` 表字段完整,只需要修改支付类型枚举 |
||||
|
|
||||
|
#### 2.5 **个人信息** - 现有表足够 |
||||
|
**原因**:`school_student` 和 `school_customer_resources` 表已满足需求 |
||||
|
|
||||
|
### 2. **Word文档转换库需求** |
||||
|
**合同下载需要Word转PDF/图片功能,需要检查后端是否有以下库:** |
||||
|
- **PHP Word转PDF**:`phpoffice/phpword` + `dompdf/dompdf` 或 `tecnickcom/tcpdf` |
||||
|
- **Word转图片**:需要 `imagick` 扩展 或 `LibreOffice` 命令行工具 |
||||
|
- **推荐方案**:使用 `phpoffice/phpword` + `dompdf/dompdf` 实现Word转PDF |
||||
|
|
||||
|
### 3. **PDF转图片分享功能** |
||||
|
**体测报告分享需要PDF转图片:** |
||||
|
- 使用 `imagick` 扩展:`$imagick = new Imagick('file.pdf[0]');` |
||||
|
- 或使用 `spatie/pdf-to-image` 包 |
||||
|
|
||||
|
### 4. **小程序PDF预览** |
||||
|
**UniApp内PDF预览实现:** |
||||
|
- 使用 `uni.downloadFile()` 下载PDF |
||||
|
- 使用 `uni.openDocument()` 打开PDF预览 |
||||
|
- 或集成第三方PDF预览组件 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 📊 **最终数据表修改总结** |
||||
|
|
||||
|
### ✅ **需要修改的表(共3个)** |
||||
|
|
||||
|
#### 1. **school_person_course_schedule** - 课程预约 |
||||
|
```sql |
||||
|
-- 添加取消原因字段 |
||||
|
ALTER TABLE `school_person_course_schedule` ADD COLUMN `cancel_reason` varchar(255) DEFAULT NULL COMMENT '取消预约原因'; |
||||
|
``` |
||||
|
**预约逻辑**: |
||||
|
- 新预约:`course_type=3`(等待位) |
||||
|
- 取消预约:设置 `deleted_at` 值 + 可选 `cancel_reason` |
||||
|
|
||||
|
#### 2. **school_chat_messages** - 消息已读状态 |
||||
|
```sql |
||||
|
ALTER TABLE `school_chat_messages` ADD COLUMN `is_read` tinyint(1) DEFAULT 0 COMMENT '是否已读 0-未读 1-已读'; |
||||
|
ALTER TABLE `school_chat_messages` ADD COLUMN `read_time` timestamp NULL DEFAULT NULL COMMENT '已读时间'; |
||||
|
``` |
||||
|
|
||||
|
#### 3. **school_order_table** - 支付类型补充 |
||||
|
```sql |
||||
|
ALTER TABLE `school_order_table` MODIFY COLUMN `payment_type` |
||||
|
enum('cash','scan_code','subscription','wxpay_online') NOT NULL |
||||
|
COMMENT '付款类型: cash-现金支付, scan_code-扫码支付, subscription-订阅支付, wxpay_online-微信在线代付'; |
||||
|
``` |
||||
|
|
||||
|
### ✅ **需要检查的表(1个)** |
||||
|
- **school_contract_sign** - 检查是否有 `form_data`、`signature_image`、`signed_document` 字段 |
||||
|
|
||||
|
### ✅ **不需要新建的表** |
||||
|
- 所有功能都可以使用现有表结构实现 |
||||
|
- 无需创建新的数据表 |
||||
|
|
||||
|
--- |
||||
|
|
||||
|
## 🎯 **开发任务规划** |
||||
|
|
||||
|
**所有需求已明确,数据表设计已确定,现在可以开始制定详细的开发计划:** |
||||
|
|
||||
|
1. **数据库设计完善**:执行上述3个表的字段修改 + 7个数据字典插入 |
||||
|
2. **后端API开发**:9个功能模块的接口实现 |
||||
|
3. **前端页面开发**:UniApp小程序页面实现 |
||||
|
4. **第三方集成**:支付、PDF处理、图片转换 |
||||
|
5. **测试验收**:功能测试和用户体验验证 |
||||
|
|
||||
|
**准备开始执行开发计划!** |
||||
Loading…
Reference in new issue