From 5697c3187f564242d9e71dee554ab84e7820a78b Mon Sep 17 00:00:00 2001 From: zeyan <258785420@qq.com> Date: Wed, 30 Jul 2025 15:39:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=B4=E6=97=B6=E6=8F=90=E4=BA=A4?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- 学员端开发计划-前端任务.md | 482 ++++++++++++++++++ 学员端开发计划-后端任务.md | 410 +++++++++++++++ 学员端开发需求整合确认文档.md | 553 +++++++++++++++++++++ 3 files changed, 1445 insertions(+) create mode 100644 学员端开发计划-前端任务.md create mode 100644 学员端开发计划-后端任务.md create mode 100644 学员端开发需求整合确认文档.md diff --git a/学员端开发计划-前端任务.md b/学员端开发计划-前端任务.md new file mode 100644 index 00000000..379bbacf --- /dev/null +++ b/学员端开发计划-前端任务.md @@ -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% +- [ ] 集成测试通过 +- [ ] 用户验收测试通过 +- [ ] 性能测试达标 diff --git a/学员端开发计划-后端任务.md b/学员端开发计划-后端任务.md new file mode 100644 index 00000000..7afbab43 --- /dev/null +++ b/学员端开发计划-后端任务.md @@ -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% +- [ ] 接口测试通过 +- [ ] 压力测试达标 +- [ ] 安全测试通过 diff --git a/学员端开发需求整合确认文档.md b/学员端开发需求整合确认文档.md new file mode 100644 index 00000000..bd4a34df --- /dev/null +++ b/学员端开发需求整合确认文档.md @@ -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. **测试验收**:功能测试和用户体验验证 + +**准备开始执行开发计划!**