فهرست منبع

docs: 需求变更清单(28条CR)+SRS V3.0+详细设计V2.0+实施计划V1.1 (对齐代码现状)

liaoxg 1 هفته پیش
والد
کامیت
191b5cc694
4فایلهای تغییر یافته به همراه878 افزوده شده و 97 حذف شده
  1. 159 3
      docs/实施计划.md
  2. 86 34
      docs/小程序需求规格说明书.md
  3. 236 60
      docs/小程序项目详细设计说明书.md
  4. 397 0
      docs/需求变更清单.md

+ 159 - 3
docs/实施计划.md

@@ -1,7 +1,7 @@
 # 爱伴·AI之旅 小程序 分期实施计划
 # 爱伴·AI之旅 小程序 分期实施计划
 
 
-> **依据**:《小程序需求规格说明书 V2.0》《小程序项目详细设计说明书 V1.0》
-> **日期**:2026-09-04 | **执行方式**:按阶段顺序执行,每阶段完成 → 后端 `mvn clean compile` 验证 → 阶段评审 → git 提交并推送
+> **依据**:《小程序需求规格说明书 V3.0》《小程序项目详细设计说明书 V2.0》
+> **日期**:2026-09-04(V1.0)→ 2026-09-08(V1.1,追加 Phase9-15b)| **执行方式**:按阶段顺序执行,每阶段完成 → 后端 `mvn clean compile` 验证 → 阶段评审 → git 提交并推送
 
 
 ---
 ---
 
 
@@ -172,6 +172,153 @@
 
 
 ---
 ---
 
 
+## 阶段 9:课程现场投屏 — 大屏页
+
+**目标**:train-web 新增投屏大屏页 `/screen`,面向教室大屏展示课堂实时数据(积分榜/签到/完课进度/小组进展矩阵/投票结果/课程资料)。
+
+**文件**:
+- 创建:`train-web/src/views/Screen.vue`、`train-web/src/api/screen.js`
+- 修改:`train-web/src/router/index.js`
+
+**任务**:
+- [ ] Screen.vue:轮询拉取班级实时数据 → 分模块展示(积分榜 / 签到 / 完课进度 / 小组进展矩阵 / 投票结果 / 课程资料)。
+- [ ] 路由 `/screen` 注册。
+- [ ] `npm run build` 通过。
+- [ ] git 提交:`Phase9: 课程现场投屏大屏页`
+
+---
+
+## 阶段 10:投屏配置化 + 环节计时 + 投票录入
+
+**目标**:投屏按 `train_screen_config` 开关显示;课程计时与环节进度;小组进展矩阵;投票结果录入与展示。
+
+**文件**:
+- 创建:`controller/admin/AdminScreenController.java`(`config/get|save|step|start|reset|vote/record`)、`entity/TrainScreenConfig.java`、`mapper/TrainScreenConfigMapper.java`
+- 修改:`train-backend/src/main/resources/schema.sql`、`train-web/src/views/Screen.vue`
+
+**任务**:
+- [ ] 新增 `train_screen_config` 表 DDL(8 个模块开关 + agenda 环节 JSON + current_step + banner)。
+- [ ] AdminScreenController:config/get、config/save、step(切换环节)、start、reset、vote/record。
+- [ ] Screen.vue 按配置渲染模块;计时器展示当前环节剩余时间。
+- [ ] `mvn clean compile` + `npm run build` 通过。
+- [ ] git 提交:`Phase10: 投屏按课程配置显示, 课程计时与环节进度, 小组进展矩阵, 投票结果录入与展示, 课程资料展示`
+
+---
+
+## 阶段 11:班级码进班联动报名确认
+
+**目标**:学员进班后联动 `train_enrollment` 确认状态(FR-ENROLL-03:班级码进班 → enrollment 置 confirmed)。
+
+**文件**:
+- 修改:`controller/ClassController.java`、`service/EnrollmentService.java`(或直连 Mapper)
+
+**任务**:
+- [ ] 进班接口:按 `class_id + invite_code` 关联 enrollment → 状态 pending/paid → confirmed。
+- [ ] `mvn clean compile` 通过。
+- [ ] git 提交:`Phase11: 班级码进班后联动enrollment确认(FR-ENROLL-03)`
+
+---
+
+## 阶段 12:分享海报字段扩充
+
+**目标**:`train_invite` 增加 share_path / share_text;小程序展示分享文案与二维码占位。
+
+**文件**:
+- 修改:`train-backend/src/main/resources/schema.sql`、`entity/TrainInvite.java`、`controller/InviteController.java`
+- 修改:`train-frontend/pages/share/index.vue`
+
+**任务**:
+- [ ] schema.sql 补列 share_path / share_text(幂等 ALTER)。
+- [ ] InviteController.myposter 返回分享文案+跳转路径。
+- [ ] share/index 展示分享文案 + 二维码占位图。
+- [ ] `mvn clean compile` 通过。
+- [ ] git 提交:`Phase12: 分享海报增加sharePath与shareText字段,小程序展示分享文案与二维码占位`
+
+---
+
+## 阶段 13:课后 T+ 定时任务补充 + 课前提醒
+
+**目标**:`FollowUpTask` 补 T+21/T+30;新增 `PreClassReminderTask` 课前 T-7/T-3/T-1 提醒记录。
+
+**文件**:
+- 修改:`service/FollowUpTask.java`、`service/PreClassReminderTask.java`(新建)
+
+**任务**:
+- [ ] FollowUpTask:补充 T+21 复盘会 / T+30 留存统计记录生成。
+- [ ] PreClassReminderTask:T-7/T-3/T-1 按班次开课时间写提醒记录。
+- [ ] `mvn clean compile` 通过。
+- [ ] git 提交:`Phase13: FollowUpTask补T+21/T+30,新增PreClassReminderTask(T-7/T-3/T-1)`
+
+---
+
+## 阶段 14:团报(多学员一单+开票)& 案例授权
+
+**目标**:`train_group_order` / `train_group_order_member` / `train_case` 三表 + 团报流程(发起/支付/开票)+ 案例采集→授权→回流。
+
+**文件**:
+- 创建:`entity/TrainGroupOrder.java`、`entity/TrainGroupOrderMember.java`、`entity/TrainCase.java` 及 Mapper;`controller/GroupOrderController.java`、`controller/CaseController.java`、`controller/admin/AdminGroupOrderController.java`、`controller/admin/AdminCaseController.java`
+- 创建:`train-frontend/pages/group-order/{index,create,detail}.vue`、`train-frontend/pages/case/index.vue`
+- 创建:`train-web/src/views/GroupOrders.vue`、`train-web/src/views/Cases.vue` + 路由
+- 修改:`train-backend/src/main/resources/schema.sql`、`pages.json`、`train-web/src/router/index.js`
+
+**任务**:
+- [ ] 三表 DDL:group_order(开票字段 invoice_*)、group_order_member(名单,支付成功逐人生成 enrollment)、case(脱敏案例+授权状态机)。
+- [ ] 学员端:发起团报 create / mine / detail / pay;案例 mine / decide。
+- [ ] 后台:group-order list/members、case list/publish。
+- [ ] 支付回调:group_order paid → 逐人生成 enrollment → confirmed 进班。
+- [ ] `mvn clean compile` 通过。
+- [ ] git 提交:`Phase14: 团报发票与案例授权`
+
+---
+
+## 阶段 15a:小程序可见功能补齐
+
+**目标**:补齐待支付取消、继续支付、小组设置为发言人等可见交互。
+
+**文件**:
+- 修改:`train-frontend/pages/pay/index.vue`、`train-frontend/pages/group/index.vue`、`utils/api.js`
+
+**任务**:
+- [ ] pay 页:待支付订单支持取消 / 继续支付。
+- [ ] group 页:支持设置为发言人交互。
+- [ ] git 提交:`Phase15a: 补齐小程序可见功能(待支付取消/继续支付/小组设置为发言人)`
+
+---
+
+## 阶段 15b:课程双态(课程中心化底座)
+
+**目标**:课程双态(未进班可浏览/已进班可上课)+ 课程 tab + 列表进班 + 管理员审核 + 课程主页。
+
+**文件**:
+- 创建:`controller/admin/AdminCourseController.java`、`entity/TrainCourse.java`(双态字段)、`train-frontend/pages/course/index.vue`、`train-frontend/pages/course/detail.vue`
+- 修改:`pages.json`(tabBar 课程)、`train-web/src/router/index.js`(/courses)
+
+**任务**:
+- [ ] 课程状态 draft/active;课程主页聚合报名/进班/课程内容。
+- [ ] tabBar 由「路演投票」切换为「课程」。
+- [ ] 管理员审核进班(enrollment reviewing→confirmed→train_user.class_id 回填)。
+- [ ] `mvn clean compile` 通过。
+- [ ] git 提交:`Phase15b: 课程双态 课程tab/列表进班/管理员审核/课程主页`
+
+---
+
+## 阶段 16:课程中心化重构 + 报名挂课程 + 登录态统一(Phase15b 后续)
+
+**目标**:V3.0 需求(课程中心化、报名=报课程、首页浮层登录+全局守卫)落地到代码。
+
+**文件**:
+- 修改:train-frontend(tabBar/首页/报名表单/课程主页/守卫)、train-backend(EnrollmentController courseId 主导、AdminCourseController)、train-web(/courses)
+
+**任务**:
+- [ ] 课程内功能与日常功能入口分离(9de2386)。
+- [ ] tabBar 课程直进课程主页(9666a38)→ 课程为列表+首页按前中后阶段展示(6c45a3c)。
+- [ ] 报名挂课程:enrollment 冗余 courseId、后端接口回填课程信息(4605b2c);报名中心按课程分组展示班次(575de83);报名只报课程、班次审核分配,新增课程管理/班级维度分组/按签到重分/助教调班(9f06216)。
+- [ ] 登录态统一:未登录可浏览课程但操作需登录(c85d2ba);group/mine 未入组静默(4fc2fd3);守卫 storage 兜底(c9fa4cc)。
+- [ ] `mvn clean compile` 通过。
+- [ ] git 提交(按上述 commit 粒度逐个提交)。
+
+---
+
 ## 阶段评审记录表
 ## 阶段评审记录表
 
 
 | 阶段 | 评审日期 | 验证方式 | 结果 | commit |
 | 阶段 | 评审日期 | 验证方式 | 结果 | commit |
@@ -184,7 +331,16 @@
 | 6 | 2026-09-05 | mvn compile | ✅ | 0065895 |
 | 6 | 2026-09-05 | mvn compile | ✅ | 0065895 |
 | 7 | 2026-09-05 | mvn compile | ✅ | 2fdc435 |
 | 7 | 2026-09-05 | mvn compile | ✅ | 2fdc435 |
 | 8 | 2026-09-05 | npm run build | ✅ | 6a08ebd |
 | 8 | 2026-09-05 | npm run build | ✅ | 6a08ebd |
+| 9 | 2026-09-05 | mvn compile + build | ✅ | 47301fb |
+| 10 | 2026-09-05 | mvn compile + build | ✅ | 9ba5889 |
+| 11 | 2026-09-05 | mvn compile | ✅ | 56a64fd |
+| 12 | 2026-09-06 | mvn compile | ✅ | 372b4ec |
+| 13 | 2026-09-06 | mvn compile | ✅ | d811135 |
+| 14 | 2026-09-06 | mvn compile | ✅ | afb30a1 |
+| 15a | 2026-09-06 | 前端构建评审 | ✅ | f1bdbe2 |
+| 15b | 2026-09-06 | mvn compile + 前端评审 | ✅ | 248714d |
+| 16 | 2026-09-07~08 | mvn compile + 前端评审 | ✅ | 9de2386 9666a38 6c45a3c 4605b2c 575de83 9f06216 c85d2ba 4fc2fd3 c9fa4cc |
 
 
 ---
 ---
 
 
-*爱伴 · AI之旅 小程序实施计划 V1.0 · 2026-09-04*
+*爱伴 · AI之旅 小程序实施计划 V1.1 · 2026-09-08*

+ 86 - 34
docs/小程序需求规格说明书.md

@@ -1,6 +1,6 @@
 # 爱伴 · AI之旅 训练营小程序 需求规格说明书(SRS)
 # 爱伴 · AI之旅 训练营小程序 需求规格说明书(SRS)
 
 
-> **版本**:V2.0 | **日期**:2026-09-04 | **状态**:修订稿 | **替代**:V1.0(2026-09-03
+> **版本**:V3.0 | **日期**:2026-09-08 | **状态**:修订稿 | **替代**:V2.0(2026-09-04
 >
 >
 > 用 AI 管好家里的三本账 · 让 AI 成为您的贴心伙伴
 > 用 AI 管好家里的三本账 · 让 AI 成为您的贴心伙伴
 > 课程体系:L0/L1/L2/L3/L4 · 首期课程 L0 = 「家立方 · AI管家半日营」
 > 课程体系:L0/L1/L2/L3/L4 · 首期课程 L0 = 「家立方 · AI管家半日营」
@@ -40,6 +40,11 @@
 | 课前准备 | 仅装机打卡 | 新增:课前资料包、数据自检、课前 3 件事(见 §7) |
 | 课前准备 | 仅装机打卡 | 新增:课前资料包、数据自检、课前 3 件事(见 §7) |
 | 课后跟踪 | 仅 7 天计划 | 新增:T+1/T+3/T+7/T+21/T+30 跟进、测评调研、卡券发放(见 §8) |
 | 课后跟踪 | 仅 7 天计划 | 新增:T+1/T+3/T+7/T+21/T+30 跟进、测评调研、卡券发放(见 §8) |
 | 报名 / 付费 / 裂变 | 无 | 新增模块(见 §9) |
 | 报名 / 付费 / 裂变 | 无 | 新增模块(见 §9) |
+| 登录 | 独立登录页 + 页面内 `$store` 判登录 | 首页浮层登录 + `utils/guard.js` 全局守卫,未登录可浏览课程、操作需登录(见 §6.1 FR-CM-01) |
+| TabBar | 首页/任务/路演投票/我的 | 首页/任务/课程/我的(vote 移出 tabBar,course 进入,见 §5) |
+| 课程导航 | 课程仅列表浏览 | 课程中心化:课程主页聚合报名/进班/课程内容(见 §5) |
+| 报名模型 | 报名时选择班次(class_id) | 报名只报课程(enrollment 冗余 course_id),班次由后台审核分配(见 §9 FR-ENROLL-02) |
+| 新增模块 | 无 | 课程现场投屏(§6.7)、团报(§9 FR-PAY-03)、案例授权(§9 FR-FISS-04)、课程管理后台(train-web /courses) |
 
 
 ### 1.3 引用源文档(WorkBuddy 2026-09-03)
 ### 1.3 引用源文档(WorkBuddy 2026-09-03)
 
 
@@ -47,9 +52,13 @@
 |---|---|
 |---|---|
 | 01_校友圈AI培训与教练陪伴_整体方案.html | 产品体系、商业模式、L0-L4 金字塔、定价 |
 | 01_校友圈AI培训与教练陪伴_整体方案.html | 产品体系、商业模式、L0-L4 金字塔、定价 |
 | 02_课纲_AI管家启航营_半天版_V4_三本账分工.html | 课堂管理主需求:6 模块、积分赛制、两轮投票、三本账分工、五步教学卡 |
 | 02_课纲_AI管家启航营_半天版_V4_三本账分工.html | 课堂管理主需求:6 模块、积分赛制、两轮投票、三本账分工、五步教学卡 |
-| 06_引流与产品闭环设计.html | 报名、付费、裂变分享、转介激励、完课证书 |
+| 06_引流与产品闭环设计.html | 报名、付费、裂变分享、转介激励、完课证书、学员案例 IP |
 | 11_小程序需求规格说明书.html | 旧版 SRS(本文档重写对象) |
 | 11_小程序需求规格说明书.html | 旧版 SRS(本文档重写对象) |
 | 13_文件索引与版本说明.html | 文档索引、品牌名词约定 |
 | 13_文件索引与版本说明.html | 文档索引、品牌名词约定 |
+| 10_方案查漏补缺.html | 课纲口径修正、查漏补缺清单 |
+| 18_品牌与命名规范.html | 品牌分层命名、英文名定稿 CareMate · AI Journey |
+| 21_文档缺口清单与状态.html | 外部依赖、品牌阻塞项、挂起决策 |
+| 22_L0-L3_课程价值与课纲汇总.html | 课程体系价值、合规红线(四线)、学员页禁露销售信息 |
 
 
 ---
 ---
 
 
@@ -116,7 +125,7 @@
 | 讲师 Lecturer | 主讲老师(train_admin.role=lecturer) | 建班、管理后台、路演评分、积分手动加分、颁奖 |
 | 讲师 Lecturer | 主讲老师(train_admin.role=lecturer) | 建班、管理后台、路演评分、积分手动加分、颁奖 |
 | 助教 Assistant | 课堂协助(train_admin.role=assistant) | 核验成果、管理负责的组(manage_group_ids) |
 | 助教 Assistant | 课堂协助(train_admin.role=assistant) | 核验成果、管理负责的组(manage_group_ids) |
 | 运营 Admin | 后台运营(train_admin.role=admin) | 全部后台权限、课程/班次/卡券/统计管理 |
 | 运营 Admin | 后台运营(train_admin.role=admin) | 全部后台权限、课程/班次/卡券/统计管理 |
-| (游客) | 未登录 / 未报名用户 | 浏览课程介绍、发起报名、微信授权登录 |
+| (游客) | 未登录 / 未报名用户 | 浏览课程介绍、发起报名;操作(进班/分组/上传/投票等)需先登录(首页浮层登录) |
 
 
 > **权限边界**:小程序端权限由后端 JWT + 角色控制;后台(train-web)独立账号体系(train_admin)。助教只能操作其负责的小组。
 > **权限边界**:小程序端权限由后端 JWT + 角色控制;后台(train-web)独立账号体系(train_admin)。助教只能操作其负责的小组。
 
 
@@ -128,10 +137,12 @@
 
 
 | 分期 | 聚焦 | 核心功能 | 对应页面 / 表(现状) |
 | 分期 | 聚焦 | 核心功能 | 对应页面 / 表(现状) |
 |---|---|---|---|
 |---|---|---|---|
-| **[一期]** 课堂管理 | 线下课堂实时管理 | 进班、分组、分工、成果上传与核验、教学卡、路演、两轮投票、积分榜、奖项、后台 | 页面:index/class/group/assignment/upload/teaching/roadmap/vote/scoreboard/verify<br>表:train_class/group/group_member/assignment/submission/teaching_card/roadmap/vote/score |
-| **[二期]** 课前准备 | 降低课堂上手门槛 | 课前资料包、装机打卡、数据自检、课前 3 件事、通知提醒 | 页面:checkin/prep(新)<br>表:train_checkin/train_prep_check |
-| **[三期]** 课后跟踪 | 提升完课率与留存 | 7 天行动计划、T+ 系列跟进、测评兴趣调研、卡券/权益发放、证书 | 页面:plan/survey/mine(卡券)<br>表:train_plan/train_survey/train_coupon |
-| **[扩展]** 报名·付费·裂变 | 商业闭环 | 报名表单、支付、团报、专属海报、邀请码、转介激励、转介绍统计 | 页面:enroll/pay/share(新)<br>表:train_order/train_enrollment/train_invite(新增) |
+| **[一期]** 课堂管理 | 线下课堂实时管理 | 进班、分组、分工、成果上传与核验、教学卡、路演、两轮投票、积分榜、奖项、投屏、后台 | 页面:index/course/class/group/assignment/upload/teaching/roadmap/vote/scoreboard/verify<br>表:train_course/class/group/group_member/assignment/submission/teaching_card/roadmap/vote/score/screen_config |
+| **[二期]** 课前准备 | 降低课堂上手门槛 | 课前资料包、装机打卡、数据自检、课前 3 件事、提醒通知(T-7/T-3/T-1) | 页面:checkin/material<br>表:train_checkin/train_prep_check/train_course_material |
+| **[三期]** 课后跟踪 | 提升完课率与留存 | 7 天行动计划、T+ 系列跟进(T+1/3/7/21/30)、测评兴趣调研、卡券/权益发放、证书 | 页面:plan/survey/mine(卡券)<br>表:train_plan/train_survey/train_coupon |
+| **[扩展]** 报名·付费·裂变 | 商业闭环 | 报名表单(挂课程)、支付、团报、专属海报、邀请码、转介激励、转介绍统计、案例授权 | 页面:enroll/pay/share/group-order/case<br>表:train_order/train_enrollment/train_invite/train_group_order/train_group_order_member/train_case |
+
+> **TabBar(V3.0)**:首页/任务/课程/我的 —— focus 由「路演投票」调整为「课程」(vote 移出 tabBar 降为子页面,course 进入 tabBar);课程中心化:课程主页聚合报名/进班/课程内容,首页按课程前/中/后阶段展示操作入口。
 
 
 > **分期建议**:一期(课堂管理)为最低可用闭环,建议最先交付;二期(课前)与三期(课后)可同步并行;报名 / 付费 / 裂变涉及支付与第三方能力,建议在三期后或与三期并行启动。
 > **分期建议**:一期(课堂管理)为最低可用闭环,建议最先交付;二期(课前)与三期(课后)可同步并行;报名 / 付费 / 裂变涉及支付与第三方能力,建议在三期后或与三期并行启动。
 
 
@@ -143,9 +154,11 @@
 
 
 ### 6.1 登录与进班
 ### 6.1 登录与进班
 
 
-**FR-CM-01 微信授权登录** `[一期]`
+**FR-CM-01 首页浮层登录 + 全局守卫** `[一期]`
+
+独立登录页已下线,登录入口改为**首页下端上浮登录弹层**(`showLoginSheet`)。学员通过微信授权登录,绑定 `openid`。登录后自动获取微信手机号与昵称,填充个人资料(train_user.phone / name)。后端签发 JWT(密钥与 cfc 体系互通)。
 
 
-学员通过微信授权登录,绑定 `openid`。登录后自动获取微信手机号与昵称,填充个人资料(train_user.phone / name)。后端签发 JWT(密钥与 cfc 体系互通)。
+全局守卫(`utils/guard.js`):**未登录可浏览课程介绍/课程主页,但报名、进班、分组、上传、投票等操作需先登录**;`requireLogin()` 判定基于 store 登录态 + storage token 兜底(修复 mp-weixin 下 `getApp().$store` 不可达导致的已登录误判)。
 
 
 **FR-CM-02 校友身份校验** `[一期]`
 **FR-CM-02 校友身份校验** `[一期]`
 
 
@@ -153,7 +166,7 @@
 
 
 **FR-CM-03 班级码进班** `[一期]`
 **FR-CM-03 班级码进班** `[一期]`
 
 
-学员通过 6 位班级码(train_class.code)加入班次,系统自动记录 class_id。已在班则提示。班次状态 draft/active/finished 控制可加入性。页面:class。
+学员通过 6 位班级码(train_class.code)加入班次,系统自动记录 class_id,**并联动 enrollment 报名单状态确认**(FR-ENROLL-03)。已在班则提示。班次状态 draft/active/finished 控制可加入性。页面:class。
 
 
 ### 6.2 分组与组队
 ### 6.2 分组与组队
 
 
@@ -212,7 +225,31 @@
 
 
 train-web 管理后台提供:课程/班次管理、学员管理、身份审核、成果审核、路演评分、积分手动加分、统计报表(AdminStatsController)。后台角色 admin/lecturer/assistant。
 train-web 管理后台提供:课程/班次管理、学员管理、身份审核、成果审核、路演评分、积分手动加分、统计报表(AdminStatsController)。后台角色 admin/lecturer/assistant。
 
 
-> **一期现状对齐**:上述一期功能在小程序端已有对应页面(index/login/verify/class/group/assignment/upload/teaching/roadmap/vote/scoreboard/mine)与后端控制器(Auth/Class/Group/Assignment/Submission/TeachingCard/Roadmap/Vote/Score + admin/*)。本版 SRS 固化为一期范围。
+> **一期现状对齐**:上述一期功能在小程序端已有对应页面(index/verify/class/group/assignment/upload/teaching/roadmap/vote/scoreboard/mine)与后端控制器(Auth/Class/Group/Assignment/Submission/TeachingCard/Roadmap/Vote/Score + admin/*)。本版 SRS 固化为一期范围。
+
+### 6.7 课程现场投屏(大屏)
+
+> `[一期]` 投屏为 train-web 管理端大屏页(`/screen`),供线下课堂现场展示。原始文档未明确此模块,属新增能力(Phase9/Phase10 落地)。
+
+**FR-CM-15 投屏按课程配置显示** `[一期]`
+
+投屏内容按课程(train_screen_config)配置,不同课程展示不同投屏页面。页面:train-web `/screen`。
+
+**FR-CM-16 课程计时与环节进度** `[一期]`
+
+投屏展示课程计时与六模块环节进度(对应课纲 V4 的破冰/装机/找茬/三本账/路演备战/终极路演),供课堂节奏控制。
+
+**FR-CM-17 小组进展矩阵** `[一期]`
+
+投屏展示各组进展(分组/分工/上传/投票完成度),形成小组进展矩阵。
+
+**FR-CM-18 投票结果录入与展示** `[一期]`
+
+两轮投票结果实时录入投屏并大屏展示。
+
+**FR-CM-19 课程资料展示** `[一期]`
+
+投屏可展示课程资料(课件/环节说明)。
 
 
 ---
 ---
 
 
@@ -284,7 +321,7 @@ train-web 管理后台提供:课程/班次管理、学员管理、身份审核
 
 
 ## 9. 报名 · 付费 · 裂变分享
 ## 9. 报名 · 付费 · 裂变分享
 
 
-> `[扩展]` 本模块为新增需求,落地商业闭环。引用源文档 `06_引流与产品闭环设计.html` 与 `01_整体方案.html`。新增后端表 train_order / train_enrollment / train_invite,及前端页面 enroll / pay / share。
+> `[扩展]` 本模块落地商业闭环。引用源文档 `06_引流与产品闭环设计.html` 与 `01_整体方案.html`。新增后端表 train_order / train_enrollment / train_invite / train_group_order / train_group_order_member / train_case,及前端页面 enroll / pay / share / group-order / case。
 
 
 ### 9.1 报名
 ### 9.1 报名
 
 
@@ -292,19 +329,19 @@ train-web 管理后台提供:课程/班次管理、学员管理、身份审核
 
 
 游客可浏览课程介绍并发起报名,填写:姓名、手机号、(选填)是否带电脑、已备数据类别、最想解决的 3 个问题。报名后生成报名单(train_enrollment),状态 pending/confirmed。
 游客可浏览课程介绍并发起报名,填写:姓名、手机号、(选填)是否带电脑、已备数据类别、最想解决的 3 个问题。报名后生成报名单(train_enrollment),状态 pending/confirmed。
 
 
-**FR-ENROLL-02 班次选择与容量** `[扩展]`
+**FR-ENROLL-02 报名挂课程(班次后台分配)** `[扩展]`
 
 
-报名时选择班次(train_class),展示时间/地点/剩余名额;满员(capacity)停止报名。校友价/公开价由身份校验结果决定。
+**报名只报课程(enrollment 冗余 course_id)**,不直接选班次;报名中心(enroll/list)按课程分组展示班次供参考,展示课程时间/价格/剩余名额;满员(capacity)停止报名。**班次由后台审核分配(AdminClassController)**,分配后回填 class_id 完成进班。校友价/公开价由身份校验结果决定。
 
 
 **FR-ENROLL-03 邀请链接 / 班级码进班** `[扩展]`
 **FR-ENROLL-03 邀请链接 / 班级码进班** `[扩展]`
 
 
-已报名学员可通过邀请链接或班级码进入班次与小组,衔接一期课堂管理。
+已报名学员可通过邀请链接或班级码进入班次与小组,班级码进班后联动 enrollment 确认,衔接一期课堂管理(FR-CM-03)
 
 
 ### 9.2 付费
 ### 9.2 付费
 
 
 **FR-PAY-01 在线支付** `[扩展]`
 **FR-PAY-01 在线支付** `[扩展]`
 
 
-接入微信支付,学员对报名单完成支付,生成订单(train_order)。订单状态 unpaid/paid/refunded/failed。金额以「分」为单位整数存储(与 cfc 金额规范一致)。
+接入微信支付,学员对报名单完成支付,生成订单(train_order)。订单状态 unpaid/paid/refunded/failed。金额以「分」为单位整数存储(与 cfc 金额规范一致)。开发环境 test-mode 模拟支付。
 
 
 **FR-PAY-02 定价分层** `[扩展]`
 **FR-PAY-02 定价分层** `[扩展]`
 
 
@@ -316,15 +353,19 @@ train-web 管理后台提供:课程/班次管理、学员管理、身份审核
 
 
 价格由后台配置,支付按实付金额结算。
 价格由后台配置,支付按实付金额结算。
 
 
-**FR-PAY-03 团报与发票** `[扩展]`
+**FR-PAY-03 团报与发票(完整模块)** `[扩展]`
 
 
-支持团报下单(多学员一单)与企业开票信息采集。
+团报从原始文档一句话需求扩展为完整模块:
+- 发起团报(train_group_order):发起人填写课程、成员名单、发票信息(企业开票抬头/税号)。
+- 成员名单(train_group_order_member):逐人生成报名单,支持逐个缴费。
+- 页面:pages/group-order/index|create|detail;后台 /group-orders(AdminGroupOrderController)。
+- 接口:GroupOrderController(学员端) + AdminGroupOrderController(后台)。
 
 
 ### 9.3 裂变分享
 ### 9.3 裂变分享
 
 
 **FR-FISS-01 专属海报与邀请码** `[扩展]`
 **FR-FISS-01 专属海报与邀请码** `[扩展]`
 
 
-每位学员生成专属分享海报 + 邀请码(train_user.invite_code 复用),带参进入报名页,记录转介关系(train_invite:inviter_id / invitee_id)。页面:share(新增)
+每位学员生成专属分享海报 + 邀请码(train_user.invite_code 复用),带参进入报名页,记录转介关系(train_invite:inviter_id / invitee_id)。海报包含分享文案(share_text)与二维码占位(share_path)。页面:share。
 
 
 **FR-FISS-02 转介激励** `[扩展]`
 **FR-FISS-02 转介激励** `[扩展]`
 
 
@@ -336,19 +377,22 @@ train-web 管理后台提供:课程/班次管理、学员管理、身份审核
 
 
 后台展示每位学员的转介绍人数、成功报名数、发放权益记录,形成转介绍漏斗。
 后台展示每位学员的转介绍人数、成功报名数、发放权益记录,形成转介绍漏斗。
 
 
-**FR-FISS-04 学员案例采集与授权** `[扩展]`
+**FR-FISS-04 学员案例采集与授权(完整模块)** `[扩展]`
 
 
-对优秀学员成果进行「采集 → 脱敏 → 授权 → 回流」。案例用于招生与裂变内容,需学员明确授权(同意隐私条款)。
+案例授权从原始文档「采集→加工→回流」原则描述扩展为完整模块:
+- 学员端 pages/case/index 提交案例授权(涉及成果、授权范围、脱敏确认)。
+- train_case 表存储授权记录;后台 /cases(AdminCaseController)审核管理。
+- 案例用于招生与裂变内容,需学员明确授权(同意隐私条款)。
 
 
-> **支付合规提示**:付费功能涉及微信支付商户号、签名、回调验签、退款与财务对账。属于独立开发单元,建议单独立项并重点关注安全性(金额用整型分、回调幂等、防止重复支付)。
+> **支付合规提示**:付费功能涉及微信支付商户号、签名、回调验签、退款与财务对账。属于独立开发单元,建议单独立项并重点关注安全性(金额用整型分、回调幂等、防止重复支付)。开发环境 test-mode 模拟支付不涉及真实资金。
 
 
 ---
 ---
 
 
 ## 10. 数据模型
 ## 10. 数据模型
 
 
-下表汇总现存表(schema.sql 已实现)与新增表(本版新增需求)。金额一律整型分;时间 ISO 8601;编码 utf8mb4。
+下表汇总 schema.sql 已实现的 **26 张表**。金额一律整型分;时间 ISO 8601;编码 utf8mb4。
 
 
-### 10.1 现存表(一期已具备
+### 10.1 总表(26 张,schema.sql 已实现
 
 
 | 表 | 用途 | 分期 |
 | 表 | 用途 | 分期 |
 |---|---|---|
 |---|---|---|
@@ -362,19 +406,26 @@ train-web 管理后台提供:课程/班次管理、学员管理、身份审核
 | train_roadmap | 路演材料 | 一期 |
 | train_roadmap | 路演材料 | 一期 |
 | train_vote | 两轮投票 | 一期 |
 | train_vote | 两轮投票 | 一期 |
 | train_score | 积分流水 | 一期 |
 | train_score | 积分流水 | 一期 |
+| train_screen_config | 投屏配置(按课程) | 一期 |
 | train_checkin | 装机打卡 | 二期 |
 | train_checkin | 装机打卡 | 二期 |
 | train_prep_check | 数据自检 | 二期 |
 | train_prep_check | 数据自检 | 二期 |
+| train_course_material | 课前资料包 | 二期 |
 | train_plan | 7 天计划 | 三期 |
 | train_plan | 7 天计划 | 三期 |
 | train_survey | 测评调研 | 三期 |
 | train_survey | 测评调研 | 三期 |
 | train_coupon | 卡券 | 三期 |
 | train_coupon | 卡券 | 三期 |
 | train_admin / train_audit_log | 后台账号 / 审计 | 一期 |
 | train_admin / train_audit_log | 后台账号 / 审计 | 一期 |
+| train_enrollment | 报名单(冗余 course_id) | 扩展 |
+| train_order | 支付订单 | 扩展 |
+| train_invite | 转介绍关系 | 扩展 |
+| train_group_order / train_group_order_member | 团报 / 团报成员 | 扩展 |
+| train_case | 案例授权 | 扩展 |
 
 
-### 10.2 新增表(报名/付费/裂变)
+### 10.2 报名关键变更(V3.0
 
 
 | 表 | 关键字段 | 用途 |
 | 表 | 关键字段 | 用途 |
 |---|---|---|
 |---|---|---|
 | train_order | order_no, uid, class_id, amount(INT 分), status, pay_channel, pay_time, refund | 支付订单 |
 | train_order | order_no, uid, class_id, amount(INT 分), status, pay_channel, pay_time, refund | 支付订单 |
-| train_enrollment | uid, class_id, form_data(JSON), status, source(invite/scene) | 报名单 |
+| train_enrollment | uid, **course_id(冗余,主导字段)**, class_id(后台分配回填), form_data(JSON), status, source(invite/scene) | 报名单 |
 | train_invite | inviter_id, invitee_id, code, order_id, reward_status | 转介绍关系 |
 | train_invite | inviter_id, invitee_id, code, order_id, reward_status | 转介绍关系 |
 
 
 ---
 ---
@@ -396,6 +447,7 @@ train-web 管理后台提供:课程/班次管理、学员管理、身份审核
 | 性能 | 课堂并发 ≤ 数百人,投票/积分实时刷新可接受秒级延迟;后台报表异步生成。 |
 | 性能 | 课堂并发 ≤ 数百人,投票/积分实时刷新可接受秒级延迟;后台报表异步生成。 |
 | 安全 | 金额整型分;支付回调幂等、验签;防止重复支付与越权访问(按角色校验)。 |
 | 安全 | 金额整型分;支付回调幂等、验签;防止重复支付与越权访问(按角色校验)。 |
 | 隐私合规 | 学员真实数据(持仓/血压/成绩)必须脱敏(desensitized);案例采集需明确授权;同意隐私政策。 |
 | 隐私合规 | 学员真实数据(持仓/血压/成绩)必须脱敏(desensitized);案例采集需明确授权;同意隐私政策。 |
+| **合规红线** | **学员页面/课件禁露销售·引流·钩子·L1 凭券信息**(仅讲师备注可见,源自 22 课纲汇总);四线红线:财富(事业)不荐个股/不预测/不给买卖建议/不承诺收益、健康只识别评估不诊断、成长只评估不承诺升学结果、创客分佣返现过法务前「只送券不返现」。 |
 | 兼容 | uni-app Vue2(小程序端);不支持可选链/CSS Grid;时间展示用 utils/format.js 的 parseDate。 |
 | 兼容 | uni-app Vue2(小程序端);不支持可选链/CSS Grid;时间展示用 utils/format.js 的 parseDate。 |
 | 可用性 | 断网/弱网下课堂操作可重试;已提交数据不丢失。 |
 | 可用性 | 断网/弱网下课堂操作可重试;已提交数据不丢失。 |
 
 
@@ -407,19 +459,19 @@ train-web 管理后台提供:课程/班次管理、学员管理、身份审核
 
 
 | 阶段 | 通过准则 |
 | 阶段 | 通过准则 |
 |---|---|
 |---|---|
-| 一期 · 课堂管理 | 一次完整 L0 半天营课堂(30人/5组)全程可用小程序完成:进班、分组、分工、上传、核验、路演、两轮投票、积分榜、颁奖;后台可导出。 |
-| 二期 · 课前准备 | 报名学员收到课前资料与提醒;装机打卡与数据自检状态可被课堂读取提速。 |
-| 三期 · 课后跟踪 | 7 天计划、T+ 跟进、测评调研、卡券发放全流程跑通。 |
-| 扩展 · 报名付费裂变 | 报名→支付→进班闭环;邀请海报/邀请码→转介绍→权益发放→后台转介绍漏斗。 |
+| 一期 · 课堂管理 | 一次完整 L0 半天营课堂(30人/5组)全程可用小程序完成:进班、分组、分工、上传、核验、路演、两轮投票、积分榜、颁奖;投屏大屏(/screen)可展示课程计时/环节进度/小组进展矩阵/投票结果;后台可导出。 |
+| 二期 · 课前准备 | 报名学员收到课前资料与提醒(T-7/T-3/T-1);装机打卡与数据自检状态可被课堂读取提速。 |
+| 三期 · 课后跟踪 | 7 天计划、T+ 跟进(T+1/3/7/21/30)、测评调研、卡券发放全流程跑通。 |
+| 扩展 · 报名付费裂变 | 报名挂课程→后台分配班次→支付→进班闭环;团报发起→逐人报名单→缴费;邀请海报/邀请码→转介绍→权益发放→后台转介绍漏斗;案例授权→审核→回流。 |
 
 
 ### 13.2 排期建议
 ### 13.2 排期建议
 
 
-1. **一期(课堂管理)**:现有代码已基本具备,建议优先验收、上线支撑首期线下课。
+1. **一期(课堂管理)**:现有代码已基本具备(含投屏大屏),建议优先验收、上线支撑首期线下课。
 2. **二期(课前)+ 三期(课后)**:可并行开发,共用订阅消息与资料体系。
 2. **二期(课前)+ 三期(课后)**:可并行开发,共用订阅消息与资料体系。
-3. **扩展(报名/付费/裂变)**:涉及微信支付与商业结算,单独立项,紧随一期之后或与三期并行启动。
+3. **扩展(报名/付费/裂变)**:涉及微信支付与商业结算,单独立项,紧随一期之后或与三期并行启动。开发环境 test-mode 模拟支付可先行联调。
 
 
-> **结论**:本 SRS 将原 V1.0 单场景文档重构为「**一期课堂管理 → 二期课前准备 → 三期课后跟踪 + 报名/付费/裂变**」的分期体系,与现有代码库已实现的 18 张表、15 个前端页面对齐,并为商业闭环预留新增表与页面。可按 §13.2 排期分阶段交付与验收。
+> **结论**:本 SRS V3.0 在 V2.0 分期体系(一期课堂管理 → 二期课前准备 → 三期课后跟踪 + 报名/付费/裂变)基础上,固化登录浮层+全局守卫、TabBar 与课程中心化、报名挂课程班次后台分配等架构变更,并新增投屏/团报/案例/课程管理四个模块。与现有代码库已实现的 **26 张表、27 个前端页面、20 个后台路由(含 /screen /courses /group-orders /cases)** 对齐。可按 §13.2 排期分阶段交付与验收。
 
 
 ---
 ---
 
 
-*爱伴 · AI之旅 训练营小程序 · 需求规格说明书 V2.0 · 2026-09-04*
+*爱伴 · AI之旅 训练营小程序 · 需求规格说明书 V3.0 · 2026-09-08*

+ 236 - 60
docs/小程序项目详细设计说明书.md

@@ -1,8 +1,8 @@
 # 爱伴 · AI之旅 训练营小程序 项目详细设计说明书
 # 爱伴 · AI之旅 训练营小程序 项目详细设计说明书
 
 
-> **版本**:V1.0 | **日期**:2026-09-04 | **关联文档**:《小程序需求规格说明书 V2.0》
+> **版本**:V2.0 | **日期**:2026-09-08 | **关联文档**:《小程序需求规格说明书 V3.0》
 >
 >
-> 依据 SRS V2.0 分期(一期课堂管理 / 二期课前准备 / 三期课后跟踪 / 新增报名·付费·裂变),结合 train-backend、train-frontend、train-web 三端现状编写。
+> 依据 SRS V3.0 分期(一期课堂管理 / 二期课前准备 / 三期课后跟踪 / 报名·付费·裂变),结合 train-backend、train-frontend、train-web 三端现状编写。V2.0 同步代码库截至 2026-09-08 的实际演进(Phase1-15b + 登录态统一/课程中心化/报名挂课程)。
 
 
 ---
 ---
 
 
@@ -26,20 +26,20 @@
 
 
 ### 1.1 设计目标
 ### 1.1 设计目标
 
 
-在既有三端代码基础上,按 SRS V2.0 分期落地:
+在既有三端代码基础上,按 SRS V3.0 分期落地:
 
 
-- **一期 · 课堂管理**:固化现有课堂功能,形成最低可用闭环。
+- **一期 · 课堂管理**:固化现有课堂功能(含投屏大屏),形成最低可用闭环。
 - **二期 · 课前准备**:补齐课前资料包、提醒通知。
 - **二期 · 课前准备**:补齐课前资料包、提醒通知。
 - **三期 · 课后跟踪**:补齐 T+ 跟进、证书、权益发放。
 - **三期 · 课后跟踪**:补齐 T+ 跟进、证书、权益发放。
-- **新增 · 报名 / 付费 / 裂变**:落地商业闭环,新增订单、报名、转介三张表及对应接口、页面、后台。
+- **报名 / 付费 / 裂变**:落地商业闭环,订单、报名(挂课程)、转介、团报、案例六张表及对应接口、页面、后台。
 
 
 ### 1.2 技术栈现状
 ### 1.2 技术栈现状
 
 
 | 端 | 技术栈 | 现状 |
 | 端 | 技术栈 | 现状 |
 |---|---|---|
 |---|---|---|
-| train-backend | Spring Boot 2.7.18 / Java 8 / MyBatis-Plus 3.5.3.1 | 端口 9083,48 个 @PostMapping,20 Mapper,18 实体,2 Service,4 Config |
-| train-frontend | uni-app Vue2(HBuilderX 打包) | 15 页面,4 tabBar,31 个接口调用封装 |
-| train-web | Vue2 + Element UI + vue-cli 5 | 12 路由,含 ECharts 统计 |
+| train-backend | Spring Boot 2.7.18 / Java 8 / MyBatis-Plus 3.5.3.1 | 端口 9083,25 个 Controller(含 10 个 admin/*),26 张表实体 + Mapper,Service(ScoreService/WechatService/PayService/CertService/FollowUpTask/SubscribeMessageService 等) |
+| train-frontend | uni-app Vue2(HBuilderX 打包) | 27 页面,4 tabBar(首页/任务/课程/我的),各业务接口封装于 utils/api.js |
+| train-web | Vue2 + Element UI + vue-cli 5 | 20 路由(含 /screen /courses /group-orders /cases),含 ECharts 统计 |
 
 
 ### 1.3 设计范围映射
 ### 1.3 设计范围映射
 
 
@@ -66,14 +66,14 @@
          ▼                     ▼
          ▼                     ▼
 ┌───────────────────────────────────────────────────┐
 ┌───────────────────────────────────────────────────┐
 │              train-backend (端口 9083)              │
 │              train-backend (端口 9083)              │
-│  Controller(48) → Service(2) → Mapper(20)
+│  Controller(25) → Service → Mapper    
 │  JwtInterceptor / WebConfig / DatabaseInitializer  │
 │  JwtInterceptor / WebConfig / DatabaseInitializer  │
 └───────────────────────┬───────────────────────────┘
 └───────────────────────┬───────────────────────────┘
                         │ 单数据源(cfc 同库 zxyj)
                         │ 单数据源(cfc 同库 zxyj)
 ┌───────────────────────────────────────────────────┐
 ┌───────────────────────────────────────────────────┐
 │        MySQL 192.168.16.251:3306 / zxyj           │
 │        MySQL 192.168.16.251:3306 / zxyj           │
-│  train_* 运营表 20 张 + cfc 表(users/activities)   │
+│  train_* 运营表 26 张 + cfc 表(users/activities)   │
 └───────────────────────────────────────────────────┘
 └───────────────────────────────────────────────────┘
 ```
 ```
 
 
@@ -104,9 +104,9 @@
 - 建表幂等:`CREATE TABLE IF NOT EXISTS`;存量补列用 try-catch 忽略"已存在"。
 - 建表幂等:`CREATE TABLE IF NOT EXISTS`;存量补列用 try-catch 忽略"已存在"。
 - 同步更新 `schema.sql` 的完整 CREATE TABLE 定义。
 - 同步更新 `schema.sql` 的完整 CREATE TABLE 定义。
 
 
-### 3.2 现存表(20 张
+### 3.2 现存表(26 张,schema.sql 已实现
 
 
-> 下表均已由 `schema.sql` / `DatabaseInitializer` 建立,本文档对齐到实际 Entity。
+> 下表均已由 `schema.sql` / `DatabaseInitializer` 建立,本文档对齐到实际 Entity。V2.0 较 V1.0 新增:enrollment / order / invite / course_material / screen_config / group_order / group_order_member / case 共 8 张。
 
 
 | 表 | 实体 | 用途 | SRS 分期 |
 | 表 | 实体 | 用途 | SRS 分期 |
 |---|---|---|---|
 |---|---|---|---|
@@ -121,25 +121,36 @@
 | train_roadmap | TrainRoadmap | 路演材料 | 一期 |
 | train_roadmap | TrainRoadmap | 路演材料 | 一期 |
 | train_vote | TrainVote | 两轮投票 | 一期 |
 | train_vote | TrainVote | 两轮投票 | 一期 |
 | train_score | TrainScore | 积分流水 | 一期 |
 | train_score | TrainScore | 积分流水 | 一期 |
+| train_screen_config | TrainScreenConfig | 投屏配置(按班次) | 一期 |
 | train_checkin | TrainCheckin | 装机打卡 | 二期 |
 | train_checkin | TrainCheckin | 装机打卡 | 二期 |
 | train_prep_check | TrainPrepCheck | 数据自检 | 二期 |
 | train_prep_check | TrainPrepCheck | 数据自检 | 二期 |
+| train_course_material | TrainCourseMaterial | 课前资料包 | 二期 |
 | train_plan | TrainPlan | 7 天计划 | 三期 |
 | train_plan | TrainPlan | 7 天计划 | 三期 |
 | train_survey | TrainSurvey | 测评调研 | 三期 |
 | train_survey | TrainSurvey | 测评调研 | 三期 |
 | train_coupon | TrainCoupon | 卡券 | 三期 |
 | train_coupon | TrainCoupon | 卡券 | 三期 |
 | train_admin | TrainAdmin | 后台账号 | 一期 |
 | train_admin | TrainAdmin | 后台账号 | 一期 |
 | train_audit_log | TrainAuditLog | 审计日志 | 一期 |
 | train_audit_log | TrainAuditLog | 审计日志 | 一期 |
-| users(cfc) | CfcUser | 统一会员 | 一期 |
-| activities(cfc) | CfcActivity | cfc 活动 | 一期 |
+| train_enrollment | TrainEnrollment | 报名单(挂课程) | 扩展 |
+| train_order | TrainOrder | 支付订单 | 扩展 |
+| train_invite | TrainInvite | 转介绍关系 | 扩展 |
+| train_group_order | TrainGroupOrder | 团报单 | 扩展 |
+| train_group_order_member | TrainGroupOrderMember | 团报成员 | 扩展 |
+| train_case | TrainCase | 学员案例授权 | 扩展 |
+| users(cfc 同库) | CfcUser | 统一会员(非 schema.sql 建表) | 一期 |
+| activities(cfc 同库) | CfcActivity | cfc 活动(非 schema.sql 建表) | 一期 |
 
 
-### 3.3 新增表(报名 / 付费 / 裂变)
+### 3.3 新增表 DDL(V2.0 已落地
 
 
-#### 3.3.1 `train_enrollment` — 报名单
+> V1.0 预设的 enrollment/order/invite/course_material 已全部建成;V2.0 关键变更:**enrollment 改 course 主导**(报名=报课程,班次由后台分配回填),并补齐投屏/团报/案例 4 张新表 DDL。以下 DDL 与 `schema.sql` 实际定义一致。
+
+#### 3.3.1 `train_enrollment` — 报名单(course 主导)
 
 
 ```sql
 ```sql
 CREATE TABLE IF NOT EXISTS train_enrollment (
 CREATE TABLE IF NOT EXISTS train_enrollment (
   id BIGINT AUTO_INCREMENT PRIMARY KEY,
   id BIGINT AUTO_INCREMENT PRIMARY KEY,
   uid BIGINT COMMENT '学员ID(登录后)',
   uid BIGINT COMMENT '学员ID(登录后)',
-  class_id BIGINT COMMENT '所选班次ID',
+  course_id BIGINT COMMENT '报名所属课程ID(train_course.id,报名=报课程)',
+  class_id BIGINT COMMENT '所选班次ID(该课程的某一期,后台分配回填)',
   name VARCHAR(50) COMMENT '姓名',
   name VARCHAR(50) COMMENT '姓名',
   phone VARCHAR(11) COMMENT '手机号',
   phone VARCHAR(11) COMMENT '手机号',
   bring_laptop TINYINT DEFAULT 0 COMMENT '1=带电脑',
   bring_laptop TINYINT DEFAULT 0 COMMENT '1=带电脑',
@@ -147,10 +158,11 @@ CREATE TABLE IF NOT EXISTS train_enrollment (
   top_problems TEXT COMMENT '最想解决的3个问题JSON',
   top_problems TEXT COMMENT '最想解决的3个问题JSON',
   source VARCHAR(20) DEFAULT 'scene' COMMENT '来源:scene/invite',
   source VARCHAR(20) DEFAULT 'scene' COMMENT '来源:scene/invite',
   invite_code VARCHAR(50) COMMENT '邀请码(基于train_user.invite_code)',
   invite_code VARCHAR(50) COMMENT '邀请码(基于train_user.invite_code)',
-  status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/paid/confirmed/cancelled',
+  status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending(待支付)/paid(已支付)/reviewing(进班待审核)/confirmed(已进班)/rejected(进班被拒)/cancelled(已取消)',
   created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
   created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
   updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
   INDEX idx_uid (uid),
   INDEX idx_uid (uid),
+  INDEX idx_course_id (course_id),
   INDEX idx_class_id (class_id),
   INDEX idx_class_id (class_id),
   INDEX idx_status (status)
   INDEX idx_status (status)
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报名单';
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='报名单';
@@ -217,13 +229,103 @@ CREATE TABLE IF NOT EXISTS train_course_material (
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课前资料包';
 ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='课前资料包';
 ```
 ```
 
 
+#### 3.3.5 `train_screen_config` — 班级投屏配置(一期)
+
+```sql
+CREATE TABLE IF NOT EXISTS train_screen_config (
+  id BIGINT AUTO_INCREMENT PRIMARY KEY,
+  class_id BIGINT NOT NULL COMMENT '班次ID',
+  show_scoreboard TINYINT DEFAULT 1 COMMENT '1=显示小组积分榜',
+  show_checkin TINYINT DEFAULT 1 COMMENT '1=显示签到情况',
+  show_progress TINYINT DEFAULT 1 COMMENT '1=显示完课进度',
+  show_group_progress TINYINT DEFAULT 1 COMMENT '1=显示小组进展矩阵(分工/任务/路演)',
+  show_vote TINYINT DEFAULT 1 COMMENT '1=显示投票结果',
+  show_material TINYINT DEFAULT 1 COMMENT '1=显示课程资料',
+  show_banner TINYINT DEFAULT 1 COMMENT '1=显示公告横幅',
+  show_timer TINYINT DEFAULT 1 COMMENT '1=显示课程进行时间',
+  agenda VARCHAR(2000) COMMENT '课程环节JSON: [{"title":"开场","minutes":10},...]',
+  current_step INT DEFAULT 0 COMMENT '当前环节序号(从0开始,助教切换)',
+  banner VARCHAR(200) COMMENT '投屏公告',
+  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  UNIQUE KEY uk_class_id (class_id)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='班级投屏配置';
+```
+
+#### 3.3.6 `train_group_order` — 团报单(扩展)
+
+```sql
+CREATE TABLE IF NOT EXISTS train_group_order (
+  id BIGINT AUTO_INCREMENT PRIMARY KEY,
+  group_no VARCHAR(32) NOT NULL UNIQUE COMMENT '团报单号',
+  class_id BIGINT NOT NULL COMMENT '班次ID',
+  leader_uid BIGINT NOT NULL COMMENT '发起人(train_user.id)',
+  member_count INT DEFAULT 1 COMMENT '报名人数',
+  unit_amount INT COMMENT '单价(分)',
+  total_amount INT NOT NULL COMMENT '总金额(分)',
+  order_id BIGINT COMMENT '关联支付订单(train_order.id)',
+  status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/paid/closed',
+  invoice_title VARCHAR(200) COMMENT '发票抬头(企业名称)',
+  invoice_tax_no VARCHAR(100) COMMENT '税号',
+  invoice_email VARCHAR(100) COMMENT '电子发票接收邮箱',
+  invoice_phone VARCHAR(50) COMMENT '收票人电话',
+  invoice_type VARCHAR(20) COMMENT '普票/专票',
+  pay_time DATETIME COMMENT '支付时间',
+  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  INDEX idx_class_id (class_id),
+  INDEX idx_leader_uid (leader_uid),
+  INDEX idx_status (status)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='团报订单(多学员一单+开票)';
+```
+
+#### 3.3.7 `train_group_order_member` — 团报成员(扩展)
+
+```sql
+CREATE TABLE IF NOT EXISTS train_group_order_member (
+  id BIGINT AUTO_INCREMENT PRIMARY KEY,
+  group_order_id BIGINT NOT NULL COMMENT '团报单ID',
+  name VARCHAR(50) NOT NULL COMMENT '学员姓名',
+  phone VARCHAR(11) COMMENT '手机号',
+  uid BIGINT COMMENT '对应学员ID(已注册则回填)',
+  enrollment_id BIGINT COMMENT '支付成功后生成的报名单ID',
+  status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending/paid',
+  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+  INDEX idx_group_order_id (group_order_id),
+  INDEX idx_uid (uid)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='团报成员';
+```
+
+#### 3.3.8 `train_case` — 学员案例(扩展)
+
+```sql
+CREATE TABLE IF NOT EXISTS train_case (
+  id BIGINT AUTO_INCREMENT PRIMARY KEY,
+  uid BIGINT NOT NULL COMMENT '案例学员ID',
+  class_id BIGINT COMMENT '班次ID',
+  title VARCHAR(100) NOT NULL COMMENT '案例标题',
+  summary TEXT COMMENT '脱敏后的案例内容(不含真实数据)',
+  source_submission_id BIGINT COMMENT '来源成果(train_submission.id)',
+  status VARCHAR(20) DEFAULT 'pending' COMMENT 'pending待授权/authorized已授权/rejected已拒绝/published已发布',
+  consent_at DATETIME COMMENT '学员授权时间',
+  created_at DATETIME DEFAULT CURRENT_TIMESTAMP,
+  updated_at DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
+  INDEX idx_uid (uid),
+  INDEX idx_status (status)
+) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='学员案例(采集/授权/回流)';
+```
+
 ### 3.4 表关系概览
 ### 3.4 表关系概览
 
 
 ```
 ```
 train_course 1─* train_class 1─* train_group 1─* train_group_member
 train_course 1─* train_class 1─* train_group 1─* train_group_member
-                              └─ train_class 1─* train_enrollment
+                              └─ train_class 1─* train_enrollment(班次由后台分配回填)
+train_course 1─* train_enrollment(报名挂课程,enrollment.course_id 主导)
 train_user 1─* train_enrollment 1─1 train_order
 train_user 1─* train_enrollment 1─1 train_order
 train_user 1─* train_invite *─1 train_user (inviter/invitee)
 train_user 1─* train_invite *─1 train_user (inviter/invitee)
+train_user 1─* train_group_order 1─* train_group_order_member(支付成功 → 逐人生成 enrollment)
+train_user 1─* train_case *─1 train_submission (source)
+train_class 1─1 train_screen_config(投屏配置,uk_class_id)
 train_user 1─* train_assignment / train_submission / train_score / train_plan ...
 train_user 1─* train_assignment / train_submission / train_score / train_plan ...
 ```
 ```
 
 
@@ -237,17 +339,28 @@ train_user 1─* train_assignment / train_submission / train_score / train_plan
 |---|---|---|---|
 |---|---|---|---|
 | 认证 | AuthController | wechat-login / wechat-phone-login / alumni-verify | WechatService(code2Session / getPhoneNumber) |
 | 认证 | AuthController | wechat-login / wechat-phone-login / alumni-verify | WechatService(code2Session / getPhoneNumber) |
 | 班次 | ClassController | join / info | —(直连 Mapper) |
 | 班次 | ClassController | join / info | —(直连 Mapper) |
-| 课程 | CourseController | list / current | — |
+| 课程 | CourseController | list / current / enter / progress | — |
 | 分组 | GroupController | join / mine / spokesperson / assign / list | — |
 | 分组 | GroupController | join / mine / spokesperson / assign / list | — |
 | 分工 | AssignmentController | claim / mine / group | — |
 | 分工 | AssignmentController | claim / mine / group | — |
 | 计划/调研/卡券 | PlanController | submit / mine / survey / coupons | — |
 | 计划/调研/卡券 | PlanController | submit / mine / survey / coupons | — |
 | 成果/打卡/教学卡 | SubmissionController | checkin / prep-check / upload / mylist / teaching-card | — |
 | 成果/打卡/教学卡 | SubmissionController | checkin / prep-check / upload / mylist / teaching-card | — |
 | 上传 | UploadController | file | — |
 | 上传 | UploadController | file | — |
 | 路演/投票/积分榜 | VoteController | roadmap / cast / result / voted / scoreboard | ScoreService |
 | 路演/投票/积分榜 | VoteController | roadmap / cast / result / voted / scoreboard | ScoreService |
+| 报名 | EnrollmentController | classes / create / mine | EnrollmentService |
+| 团报 | GroupOrderController | create / mine / detail / pay | GroupOrderService |
+| 案例授权 | CaseController | mine / decide | CaseService |
+| 课前资料 | MaterialController | materials | — |
+| 支付订单 | OrderController | pay-notify / pay-status(微信回调) | PayService |
+| 转介绍 | InviteController | invite-link / bind(分享链接处理) | InviteService |
 | 后台认证 | AdminAuthController | login | — |
 | 后台认证 | AdminAuthController | login | — |
 | 后台班级/用户 | AdminClassController | createClass / classList / classDetail / createGroup / setSpokesperson / userList / setUserStatus | — |
 | 后台班级/用户 | AdminClassController | createClass / classList / classDetail / createGroup / setSpokesperson / userList / setUserStatus | — |
+| 后台课程 | AdminCourseController | list / create / update / classes | — |
 | 后台审核/评分 | AdminReviewController | submission/review / card/score / roadmap/score / score/manual | ScoreService |
 | 后台审核/评分 | AdminReviewController | submission/review / card/score / roadmap/score / score/manual | ScoreService |
 | 后台统计 | AdminStatsController | overview / scoreboard / user-scoreboard | — |
 | 后台统计 | AdminStatsController | overview / scoreboard / user-scoreboard | — |
+| 后台投屏 | AdminScreenController | config/get / config/save / step / start / reset / vote/record | — |
+| 后台团报 | AdminGroupOrderController | list / members | GroupOrderService |
+| 后台案例 | AdminCaseController | create / list / publish | CaseService |
+| 后台资料 | AdminMaterialController | list / save | — |
 
 
 ### 4.2 积分引擎(ScoreService)— 幂等设计
 ### 4.2 积分引擎(ScoreService)— 幂等设计
 
 
@@ -283,12 +396,30 @@ train_user 1─* train_assignment / train_submission / train_score / train_plan
 - 回调幂等:`order_no` 已 paid 则跳过;防重复发放权益。
 - 回调幂等:`order_no` 已 paid 则跳过;防重复发放权益。
 - 订单关闭超时未支付订单(定时任务)。
 - 订单关闭超时未支付订单(定时任务)。
 
 
-### 4.5 报名模块(新增 `EnrollmentController`)
+### 4.5 报名模块(`EnrollmentController`)
 
 
-- 游客/学员填报名表单 → 生成 `train_enrollment`(status=pending)。
+- 游客/学员**选择课程** → 填报名表单 → 生成 `train_enrollment`(course_id + class_id,status=pending)。**V2.0:报名=报课程,班次由后台审核分配回填**(enrollment.class_id 以审核结果为准)。
 - 若带 invite_code → 记录到 `train_invite`(inviter 关系)。
 - 若带 invite_code → 记录到 `train_invite`(inviter 关系)。
-- 班次容量:`count(enrollment where class_id & status in pending/paid)` < `capacity` 才可报名。
-- 报名成功(paid)后自动进班(`train_user.class_id` 回填)。
+- 班次容量:`count(enrollment where class_id & status in pending/paid)` < `capacity` 才可分配进班。
+- 报名支付成功(paid)→ 后台按课程班次审核(reviewing→confirmed)→ `train_user.class_id` 回填。
+- 团报:`train_group_order` + `train_group_order_member` → 支付成功 → 逐人生成 enrollment。
+
+### 4.5b 投屏模块(`AdminScreenController`)
+
+- 每班一份 `train_screen_config`(uk_class_id),开关控制大屏各模块显示。
+- 助教端:config/get、config/save、step(切换环节)、start、reset、vote/record。
+- 学员端 vote 页展示投票结果;大屏页 `pages.screen`(train-web)自动轮询展示。
+
+### 4.5c 团报模块(`GroupOrderController` / `AdminGroupOrderController`)
+
+- 发起人填名单(name/phone)+ 开票信息 → 生成 `train_group_order` 与 `train_group_order_member`。
+- `group-order/pay` 单人支付总金额 → 回调 paid → 逐人生成 enrollment(status=paid)。
+- 后台 list / members 查看与追踪。
+
+### 4.5d 案例模块(`CaseController` / `AdminCaseController`)
+
+- 运营采集案例(脱敏)→ `train_case`(status=pending)。
+- 学员 `case/decide` 授权/拒绝;授权后 status=authorized,运营可 publish 回流。
 
 
 ### 4.6 裂变模块(新增)
 ### 4.6 裂变模块(新增)
 
 
@@ -313,9 +444,9 @@ train_user 1─* train_assignment / train_submission / train_score / train_plan
 - 鉴权:拦截器注入 `@RequestAttribute userId`(学员)或 `adminId`(管理员)。
 - 鉴权:拦截器注入 `@RequestAttribute userId`(学员)或 `adminId`(管理员)。
 - 分页:`page` / `size`(本期少数列表,可后续标准化)。
 - 分页:`page` / `size`(本期少数列表,可后续标准化)。
 
 
-### 5.2 现有接口清单(对齐,31 个学员端
+### 5.2 现有接口清单(对齐 §4.1 各 Controller
 
 
-> 均已实现,本文档作为验收对照。路径见 §4.1 各 Controller。
+> 均已实现,本文档作为验收对照。路径见 §4.1 各 Controller(学员端 + 后台端)
 
 
 ### 5.3 新增接口定义
 ### 5.3 新增接口定义
 
 
@@ -323,8 +454,8 @@ train_user 1─* train_assignment / train_submission / train_score / train_plan
 
 
 | 接口 | 方法 | 参数 | 返回 | 说明 |
 | 接口 | 方法 | 参数 | 返回 | 说明 |
 |---|---|---|---|---|
 |---|---|---|---|---|
-| `POST /api/enroll/classes` | `listClasses` | `@RequestBody(required=false) Map` | `Result<List<Map>>` {id,name,time,place,capacity,num,price,memberPrice,status} | 可报名班次列表(含剩余名额/价格) |
-| `POST /api/enroll/create` | `create` | `@RequestBody Map` {classId,name,phone,bringLaptop,dataReady,topProblems,inviteCode} | `Result<EnrollmentVO>` | 创建报名单 |
+| `POST /api/enroll/classes` | `listClasses` | `@RequestBody(required=false) Map` {courseId?} | `Result<List<Map>>` {id,name,time,place,capacity,num,price,memberPrice,status} | 可报名班次列表(可按课程过滤) |
+| `POST /api/enroll/create` | `create` | `@RequestBody Map` {**courseId 必填**, name, phone, bringLaptop, dataReady, topProblems, inviteCode, classId?} | `Result<EnrollmentVO>` | 创建报名单(报名=报课程,班次可后台分配回填) |
 | `POST /api/enroll/mine` | `mine` | `@RequestAttribute userId` | `Result<List<Map>>` | 我的报名单列表 |
 | `POST /api/enroll/mine` | `mine` | `@RequestAttribute userId` | `Result<List<Map>>` | 我的报名单列表 |
 
 
 #### 支付模块(`OrderController` → `/api/pay`)
 #### 支付模块(`OrderController` → `/api/pay`)
@@ -354,6 +485,22 @@ train_user 1─* train_assignment / train_submission / train_score / train_plan
 | `POST /api/admin/material/list` | `materialList` | `@RequestBody(required=false) Map` {classId?} | `Result<List<Map>>` | 课前资料列表 |
 | `POST /api/admin/material/list` | `materialList` | `@RequestBody(required=false) Map` {classId?} | `Result<List<Map>>` | 课前资料列表 |
 | `POST /api/admin/material/save` | `materialSave` | `@RequestBody Map` + `@RequestAttribute adminId` | `Result<Boolean>` | 保存资料 |
 | `POST /api/admin/material/save` | `materialSave` | `@RequestBody Map` + `@RequestAttribute adminId` | `Result<Boolean>` | 保存资料 |
 
 
+#### 团报模块(`GroupOrderController` → `/api/group-order`)
+
+| 接口 | 方法 | 参数 | 返回 | 说明 |
+|---|---|---|---|---|
+| `POST /api/group-order/create` | `create` | `@RequestBody Map` {classId, name, phone, members:[{name,phone}], invoice...} + `@RequestAttribute userId` | `Result<Map>` {groupNo, amount, ...} | 发起团报(名单+开票信息) |
+| `POST /api/group-order/mine` | `mine` | `@RequestAttribute userId` | `Result<List<Map>>` | 我发起的团报列表 |
+| `POST /api/group-order/detail` | `detail` | `@RequestBody Map` {id} + `@RequestAttribute userId` | `Result<Map>` | 团报详情(成员/开票/状态) |
+| `POST /api/group-order/pay` | `pay` | `@RequestBody Map` {id} + `@RequestAttribute userId` | `Result<Map>` | 拉起支付 |
+
+#### 案例模块(`CaseController` → `/api/case`)
+
+| 接口 | 方法 | 参数 | 返回 | 说明 |
+|---|---|---|---|---|
+| `POST /api/case/mine` | `mine` | `@RequestAttribute userId` | `Result<List<Map>>` | 我的案例列表(待授权/已授权) |
+| `POST /api/case/decide` | `decide` | `@RequestBody Map` {id, agree} + `@RequestAttribute userId` | `Result<Boolean>` | 授权/拒绝案例回流 |
+
 #### 二期/三期补充接口
 #### 二期/三期补充接口
 
 
 | 接口 | 方法 | 说明 |
 | 接口 | 方法 | 说明 |
@@ -366,21 +513,24 @@ train_user 1─* train_assignment / train_submission / train_score / train_plan
 
 
 ## 6. 前端页面详细设计(train-frontend)
 ## 6. 前端页面详细设计(train-frontend)
 
 
-### 6.1 页面架构与导航(现
+### 6.1 页面架构与导航(现状,27 页
 
 
-**TabBar(4)**:首页 index / 任务 checkin / 路演投票 vote / 我的 mine
+**TabBar(4,V2.0)**:首页 index / 任务 checkin / **课程 course** / 我的 mine —— V2.0 起「路演投票 vote」移出 tabBar 降为子页面,「课程」进入 tabBar(课程中心化)。
 
 
-**子页面(11)**:login、verify、class、group、assignment、upload、teaching、roadmap、scoreboard、plan、survey
+**子页面(23)**:course/detail、vote、verify、class、group、assignment、upload、teaching、roadmap、scoreboard、plan、survey、enroll/list、enroll/form、pay/index、pay/result、share/index、share/stats、material/index、group-order/index、group-order/create、group-order/detail、case/index
 
 
 **通用工具**:
 **通用工具**:
-- `utils/api.js`:`request(url, method, data)`(自动 Bearer token,401 跳登录)+ `uploadFile(filePath)` + 各业务接口封装。
+- `utils/api.js`:`request(url, method, data)`(自动 Bearer token + 登录守卫联动)+ `uploadFile(filePath)` + 各业务接口封装。
 - `utils/auth.js`:`getToken/setToken/removeToken`。
 - `utils/auth.js`:`getToken/setToken/removeToken`。
-- 注:`utils/format.js` **当前不存在**——按 SRS 时间规范应新增 `parseDate()` 等函数。
+- `utils/guard.js`:登录守卫(未登录弹窗/跳登录,storage 兜底判空,V2.0 已落地)。
+- `utils/format.js`:`parseDate()` 等时间格式化(仅接受 ISO 字符串,兼容 iOS,V2.0 已落地)。
 
 
-### 6.2 新增页面(报名/付费/裂变)
+### 6.2 新增页面(报名/付费/裂变/团报/案例,已落地
 
 
 | 页面 | 路径 | 功能 | 主要接口 |
 | 页面 | 路径 | 功能 | 主要接口 |
 |---|---|---|---|
 |---|---|---|---|
+| 课程主页 | `pages/course/index` | tabBar 课程页:课程列表/当前课程入口 | `course/list` / `course/current` |
+| 课程详情 | `pages/course/detail` | 课程介绍+报名入口+课程内容入口 | `course/detail` / `course/enter` / `course/progress` |
 | 课程报名列表 | `pages/enroll/list` | 浏览可报名班次、选班 | `enroll/classes` |
 | 课程报名列表 | `pages/enroll/list` | 浏览可报名班次、选班 | `enroll/classes` |
 | 报名表单 | `pages/enroll/form` | 填报名信息(含带参邀请码) | `enroll/create` |
 | 报名表单 | `pages/enroll/form` | 填报名信息(含带参邀请码) | `enroll/create` |
 | 支付页 | `pages/pay/index` | 展示订单、拉起 wx.requestPayment、轮询状态 | `pay/create` / `pay/status` |
 | 支付页 | `pages/pay/index` | 展示订单、拉起 wx.requestPayment、轮询状态 | `pay/create` / `pay/status` |
@@ -388,6 +538,10 @@ train_user 1─* train_assignment / train_submission / train_score / train_plan
 | 我的海报 | `pages/share/index` | 展示专属海报+邀请码、保存图片 | `invite/myposter` |
 | 我的海报 | `pages/share/index` | 展示专属海报+邀请码、保存图片 | `invite/myposter` |
 | 我的邀请 | `pages/share/stats` | 转介绍统计 | `invite/stats` |
 | 我的邀请 | `pages/share/stats` | 转介绍统计 | `invite/stats` |
 | 课前资料包 | `pages/material/index` | 下载课前资料 | `class/materials` |
 | 课前资料包 | `pages/material/index` | 下载课前资料 | `class/materials` |
+| 团报首页 | `pages/group-order/index` | 团报列表/发起入口 | `group-order/mine` |
+| 发起团报 | `pages/group-order/create` | 填名单+开票信息 | `group-order/create` |
+| 团报详情 | `pages/group-order/detail` | 成员列表+支付入口 | `group-order/detail` |
+| 我的案例 | `pages/case/index` | 案例授权/下载 | `case/mine` / `case/decide` |
 
 
 ### 6.3 页面状态管理(Vuex)
 ### 6.3 页面状态管理(Vuex)
 
 
@@ -400,21 +554,29 @@ train_user 1─* train_assignment / train_submission / train_score / train_plan
 function fenToYuan(fen) { return (fen / 100).toFixed(2) }
 function fenToYuan(fen) { return (fen / 100).toFixed(2) }
 // 时间:ISO → yyyy-MM-dd HH:mm:ss(截前 19 位 + T 替换空格)
 // 时间:ISO → yyyy-MM-dd HH:mm:ss(截前 19 位 + T 替换空格)
 ```
 ```
-- 小程序端禁止可选链 `?.`、CSS Grid,用 `utils/format.js` 的 `parseDate()`(需新增)。
+- 小程序端禁止可选链 `?.`、CSS Grid;时间统一 `utils/format.js parseDate()`(V2.0 已存在)。
 
 
 ---
 ---
 
 
 ## 7. 管理后台详细设计(train-web)
 ## 7. 管理后台详细设计(train-web)
 
 
-### 7.1 现有页面(12 路由,现状对齐)
+### 7.1 现有页面(20 路由,现状对齐)
 
 
 | 路由 | 组件 | 功能 |
 | 路由 | 组件 | 功能 |
 |---|---|---|
 |---|---|---|
 | /login | Login | 后台登录 |
 | /login | Login | 后台登录 |
+| /screen | Screen | 投屏大屏(轮询展示积分榜/签到/进展/投票等) |
 | /dashboard | Dashboard | 概览统计卡片 |
 | /dashboard | Dashboard | 概览统计卡片 |
+| /courses | Courses | 课程管理(L0-L4 增改) |
 | /classes | Classes | 班级列表+新建 |
 | /classes | Classes | 班级列表+新建 |
 | /groups | Groups | 分组列表+新建+设置发言人 |
 | /groups | Groups | 分组列表+新建+设置发言人 |
 | /users | Users | 学员管理(筛选/启停) |
 | /users | Users | 学员管理(筛选/启停) |
+| /enrollments | Enrollments | 报名单管理 |
+| /orders | Orders | 订单管理(含退款) |
+| /group-orders | GroupOrders | 团报管理 |
+| /cases | Cases | 案例授权管理 |
+| /invites | Invites | 转介绍漏斗 |
+| /materials | Materials | 课前资料管理 |
 | /review/submissions | Submissions | 成果审核 |
 | /review/submissions | Submissions | 成果审核 |
 | /review/cards | Cards | 教学卡评分 |
 | /review/cards | Cards | 教学卡评分 |
 | /review/roadmaps | Roadmaps | 路演评审 |
 | /review/roadmaps | Roadmaps | 路演评审 |
@@ -422,14 +584,16 @@ function fenToYuan(fen) { return (fen / 100).toFixed(2) }
 | /manual-score | ManualScore | 人工加减分 |
 | /manual-score | ManualScore | 人工加减分 |
 | /stats | Stats | 统计(ECharts) |
 | /stats | Stats | 统计(ECharts) |
 
 
-### 7.2 新增页面
+### 7.2 阶段补充说明
+
+> V1.0 规划的 /enrollments、/orders、/invites、/materials 已在第一阶段落地(见 §7.1);后续新增 /screen、/courses、/group-orders、/cases 亦已实现并纳入 §7.1 现状表。本节点仅保留接口映射参考。
 
 
 | 路由 | 组件 | 功能 | 主要接口 |
 | 路由 | 组件 | 功能 | 主要接口 |
 |---|---|---|---|
 |---|---|---|---|
-| /enrollments | Enrollments | 报名单管理 | `admin/enrollment/list` |
-| /orders | Orders | 订单管理(含退款) | `admin/order/list` / `admin/order/refund` |
-| /invites | Invites | 转介绍漏斗 | `admin/invite/funnel` |
-| /materials | Materials | 课前资料管理 | `admin/material/list` / `admin/material/save` |
+| /screen | Screen | 投屏大屏 | `admin/screen/config/get` / `admin/screen/step` |
+| /courses | Courses | 课程管理 | `admin/course/list` / `admin/course/create` / `admin/course/update` |
+| /group-orders | GroupOrders | 团报管理 | `admin/group-order/list` / `admin/group-order/members` |
+| /cases | Cases | 案例授权管理 | `admin/case/list` / `admin/case/publish` |
 
 
 ### 7.3 权限优化建议
 ### 7.3 权限优化建议
 
 
@@ -441,13 +605,22 @@ function fenToYuan(fen) { return (fen / 100).toFixed(2) }
 
 
 ## 8. 关键业务流程设计
 ## 8. 关键业务流程设计
 
 
-### 8.1 报名 → 付费 → 进班
+### 8.1 报名 → 付费 → 进班(V2.0:报名挂课程 + 班次后台分配)
 
 
 ```
 ```
-浏览班次列表 → 选择班次 → 填报名表单(可带邀请码)
-   → 创建报名单(pending) → 创建订单 → 微信支付
-   → 支付回调(paid) → 自动进班(class_id 回填)
+浏览课程 → 选择课程 → 填报名表单(可带邀请码/可发起团报)
+   → 创建报名单(pending, course_id 主导) → 创建订单 → 微信支付
+   → 支付回调(paid) → 后台审核分配班次(reviewing→confirmed, class_id 回填)
    → 若带邀请码:被邀请人 paid → 邀请人发卡券
    → 若带邀请码:被邀请人 paid → 邀请人发卡券
+   → 团报:group_order(members) → 支付成功 → 逐人生成 enrollment
+```
+
+### 8.1b 团报 → 开票 → 进班(扩展)
+
+```
+发起人填名单 + 开票信息(invoice_*) → 创建 group_order(pending)+members
+   → 单人支付 total_amount → 回调 paid → 逐人生成 enrollment(paid)
+   → 后台按课程分配班次 → confirmed 进班
 ```
 ```
 
 
 ### 8.2 课前准备(二期)
 ### 8.2 课前准备(二期)
@@ -465,6 +638,7 @@ function fenToYuan(fen) { return (fen / 100).toFixed(2) }
 破冰组队(分组/分工) → 装机通关 → 数据找茬 → 三本账分工做互教会
 破冰组队(分组/分工) → 装机通关 → 数据找茬 → 三本账分工做互教会
    → 路演备战(教学卡/路演材料) → 终极路演+两轮投票+颁奖
    → 路演备战(教学卡/路演材料) → 终极路演+两轮投票+颁奖
 全程:成果上传→助教核验→积分流水→实时积分板
 全程:成果上传→助教核验→积分流水→实时积分板
+落地:投屏大屏(/screen) 按 train_screen_config 展示积分榜/签到/进展/投票/资料
 ```
 ```
 
 
 ### 8.4 课后跟踪(三期)
 ### 8.4 课后跟踪(三期)
@@ -519,23 +693,25 @@ function fenToYuan(fen) { return (fen / 100).toFixed(2) }
 
 
 ---
 ---
 
 
-## 11. 开发任务拆分与排期
+## 11. 开发任务拆分与排期(V2.0 状态更新)
 
 
-| 序号 | 任务 | 范围 | 依赖 | 建议 |
+| 序号 | 任务 | 范围 | 状态(V2.0) | 说明 |
 |---|---|---|---|---|
 |---|---|---|---|---|
-| 1 | 一期课堂管理验收上线 | 现有三端 | 无 | 现稍微修正后上线支撑首期线下课 |
-| 2 | `utils/format.js` 新增 | train-frontend | 无 | 一期并行 |
-| 3 | 新增表 DDL + schema.sql | train-backend | 1 | 一期后可先行 |
-| 4 | 报名模块(表+接口+页面+后台) | 三端 | 3 | 二期启动 |
-| 5 | 支付模块(PayService+回调+订单页) | 三端 | 4 | 与报名并行 |
-| 6 | 裂变模块(海报/邀请码/激励/漏斗) | 三端 | 4 | 报名后可接 |
-| 7 | 课前资料包 + 订阅消息通知 | 三端 | 3 | 二期 |
-| 8 | 课后证书 + T+ 定时任务 | 三端 | 3 | 三期 |
-| 9 | 后台权限菜单过滤 | train-web | 1 | 三期 |
-| 10 | 微信支付/登录生产环境联调 | 三端 | 5 | 上线前 |
-
-> **建议**:先交付 #1(一期课堂管理)+ #2(format.js),随后并行推进 #3-#6(报名/付费/裂变),再 #7-#9(二期/三期)。
+| 1 | 一期课堂管理验收上线 | 现有三端 | ✅ 已落地 | 含投屏大屏 |
+| 2 | `utils/format.js` / `guard.js` | train-frontend | ✅ 已落地 | parseDate + 登录守卫 |
+| 3 | 表 DDL + schema.sql(26 张) | train-backend | ✅ 已落地 | 含 enrollment(course 主导)、order、invite、material、screen_config、group_order、group_order_member、case |
+| 4 | 报名模块(表+接口+页面+后台) | 三端 | ✅ 已落地 | 报名挂课程,班次后台分配 |
+| 5 | 支付模块(PayService+回调+订单页) | 三端 | ✅ 已实现 | 生产联调待上线前 |
+| 6 | 裂变模块(海报/邀请码/激励/漏斗) | 三端 | ✅ 已实现 | 券发放具备接口,待真实卡券打通 |
+| 7 | 课前资料包 + 订阅消息通知 | 三端 | 🟡 部分 | 资料包已落地;订阅消息模板待配置 |
+| 8 | 课后证书 + T+ 定时任务 | 三端 | 🟡 部分 | T+21/30 复盘安排已纳入 Phase13;证书/卡券待生产联调 |
+| 9 | 后台权限菜单过滤 | train-web | ⏳ 待办 | 建议三期 |
+| 10 | 微信支付/登录生产环境联调 | 三端 | ⏳ 待办 | 上线前置 |
+| 11 | 团报模块(group-order 三页 + 开票) | 三端 | ✅ 已落地 | Phase14 |
+| 12 | 案例授权(采集/授权/回流) | 三端 | ✅ 已落地 | Phase14 |
+
+> **V2.0 结论**:本设计已对齐代码库现状(26 表 / 27 页面 / 20 后台路由 / 25 个后端 Controller)。剩余工作集中在生产环境联调(支付/登录/订阅消息)与后台权限菜单过滤。
 
 
 ---
 ---
 
 
-*爱伴 · AI之旅 训练营小程序 · 项目详细设计说明书 V1.0 · 2026-09-04*
+*爱伴 · AI之旅 训练营小程序 · 项目详细设计说明书 V2.0 · 2026-09-08*

+ 397 - 0
docs/需求变更清单.md

@@ -0,0 +1,397 @@
+# 爱伴 · AI之旅 训练营小程序 需求变更清单
+
+> **版本**:V1.0 | **日期**:2026-09-08 | **状态**:评审稿
+>
+> **核对依据**:WorkBuddy 原始文档 `C:\Users\liaoxg.DESKTOP-DGLN79N\WorkBuddy\2026-09-03-19-40-57\outputs`(01 整体方案 / 06 引流闭环 / 11 旧 SRS / 13 文件索引 / 18 品牌命名 / 21 文档缺口清单 / 22 L0-L3 课纲汇总 / 10 查漏补缺)
+> **现状基线**:train-backend 端口 9083(Spring Boot 2.7.18 / Java 8 / MyBatis-Plus)、train-frontend(uni-app Vue2)、train-web(Vue2 + Element UI);schema.sql 26 张表、pages.json 27 页、train-web 20 路由
+> **变更类型**:🆕 新增 / ✏️ 修改 / 🗑️ 废弃 / ⚠️ 待确认
+
+---
+
+## 目录
+
+1. [变更总览](#1-变更总览)
+2. [登录与权限](#2-登录与权限)
+3. [TabBar 与导航](#3-tabbar-与导航)
+4. [报名与课程模型](#4-报名与课程模型)
+5. [新增模块(原始文档未涵盖)](#5-新增模块原始文档未涵盖)
+6. [课程内容落地缺口](#6-课程内容落地缺口)
+7. [引流闭环与转化](#7-引流闭环与转化)
+8. [合规与红线](#8-合规与红线)
+9. [外部依赖与文档缺口](#9-外部依赖与文档缺口)
+10. [二次文档基线更新](#10-二次文档基线更新)
+11. [汇总统计](#11-汇总统计)
+
+---
+
+## 1. 变更总览
+
+本次依据 WorkBuddy 原始文档(产品方案与课纲的一手来源)逐条核对小程序需求,共识别 **28 条需求变更**(CR-001 ~ CR-028)。
+
+| 分组 | 编号 | 类型 |
+|---|---|---|
+| 登录与权限 | CR-001 ~ CR-004 | ✏️×2 / ⚠️×2 |
+| TabBar 与导航 | CR-005 ~ CR-006 | ✏️×1 / 🆕×1 |
+| 报名与课程模型 | CR-007 ~ CR-009 | ✏️×3 |
+| 新增模块 | CR-010 ~ CR-013 | 🆕×4 |
+| 课程内容落地缺口 | CR-014 ~ CR-017 | ⚠️×4 |
+| 引流闭环与转化 | CR-018 ~ CR-020 | ✏️×1 / ⚠️×2 |
+| 合规与红线 | CR-021 ~ CR-022 | ⚠️×2 |
+| 外部依赖与文档缺口 | CR-023 ~ CR-027 | ⚠️×5 |
+| 二次文档基线更新 | CR-028 | ✏️×1 |
+
+---
+
+## 2. 登录与权限
+
+### CR-001 ✏️ 登录入口从独立页面改为首页浮层 + 全局守卫
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS §FR-01:微信授权一键登录(openid 绑定),首次补充手机号 |
+| **当前实现** | `pages/login` 已从 pages.json 移除;改为首页下端上浮登录浮层(`showLoginSheet`)+ `utils/guard.js` 全局守卫;未登录可浏览课程但操作需登录 |
+| **变更内容** | 登录入口从独立页改为浮层;新增「未登录可浏览课程但操作需登录」规则 |
+| **影响范围** | train-frontend 全局(操作页接入 guardPage) |
+| **优先级** | P0(已落地,需文档化) |
+| **commit** | `e5c2d32` `c85d2ba` `c9fa4cc` |
+
+### CR-002 ✏️ 守卫登录态判定增加 storage 兜底
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS §FR-01 未明确登录态判定细节 |
+| **当前实现** | `utils/guard.js` `requireLogin()` 先试 `getApp().$store`,失败则兜底直读 `uni.getStorageSync('token')`;修复 mp-weixin 下 `getApp().$store` 不可达导致的已登录误判 |
+| **变更内容** | 登录态判定增加 storage 兜底 |
+| **影响范围** | `utils/guard.js` |
+| **优先级** | P0(已落地) |
+| **commit** | `c9fa4cc` |
+
+### CR-003 ⚠️ 学员页面禁露销售·引流·钩子·L1凭券信息(合规红线)
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 22 课纲汇总 §一 超红线清单:学员页面/课件禁露销售·引流·钩子·L1 凭券信息(仅讲师备注可见) |
+| **当前实现** | `pages/mine/index.vue` 菜单包含「分享中心」(share/index)、「测评调研」(survey/index)等入口 |
+| **变更内容** | **待核查**:确认学员端页面是否违反「禁露销售信息」红线;如违反,将销售引流类入口收口到讲师可见域 |
+| **影响范围** | `pages/mine/index.vue`、`pages/share/*`、`pages/survey/index.vue` |
+| **优先级** | P1(合规核查) |
+
+### CR-004 ⚠️ 校友白名单 / 邀请码(外部依赖)
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS §FR-01:校友身份校验(姓名+手机号+届别/院系/邀请码),运营后台预置白名单/邀请码 |
+| **当前实现** | `AuthController.alumniVerify` 已实现,但白名单/邀请码需运营提供 |
+| **变更内容** | 校友白名单/邀请码为外部依赖,需运营提供数据后方可完成首课报名闭环 |
+| **影响范围** | train-backend AuthController + train-web 后台身份审核 |
+| **优先级** | P1(阻塞首课) |
+
+---
+
+## 3. TabBar 与导航
+
+### CR-005 ✏️ TabBar 结构调整:vote 移出、course 进入
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS §1.3 / 原详细设计 §6.1:TabBar 4 = 首页/任务/路演投票/我的 |
+| **当前实现** | TabBar 4 = 首页/任务/课程/我的(`pages/vote` 移出 tabBar 降为子页面,`pages/course/index` 进入 tabBar) |
+| **变更内容** | TabBar 结构调整 |
+| **影响范围** | `pages.json` tabBar 配置 |
+| **优先级** | P0(已落地) |
+| **commit** | `9666a38` `6c45a3c` |
+
+### CR-006 🆕 课程中心化:课程内功能全部收进课程主页
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS:课程仅为列表浏览 |
+| **当前实现** | 课程 tab 直进课程主页(course/detail),报名/进班/分组/行动等课程内功能全部收进课程主页;首页按课程前/中/后阶段展示操作入口 |
+| **变更内容** | 新增「课程内功能与日常功能入口分离」原则并落地课程主页 |
+| **影响范围** | `pages/course/index`、`pages/course/detail`、首页 |
+| **优先级** | P0(已落地) |
+| **commit** | `9de2386` `248714d` `9666a38` `6c45a3c` |
+
+---
+
+## 4. 报名与课程模型
+
+### CR-007 ✏️ 报名模型变更:报名→课程→后台审核分配班次
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS §FR-ENROLL-02:报名时选择班次 |
+| **当前实现** | 报名只报课程(`train_enrollment` 冗余 `course_id`),班次仅作进班上课实体,后台审核后分配班次;`class_id` 由后台分配回填 |
+| **变更内容** | 报名模型从「报名→选班次」改为「报名→课程→后台分配班次」 |
+| **影响范围** | `train_enrollment` 表结构、EnrollmentController、`pages/enroll/*`、AdminClassController |
+| **优先级** | P0(已落地) |
+| **commit** | `4605b2c` `575de83` `9f06216` |
+
+### CR-008 ✏️ 报名中心按课程分组展示班次
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS §FR-ENROLL-02:报名时直接列表选班次 |
+| **当前实现** | 报名中心(enroll/list)按课程分组展示班次 |
+| **变更内容** | 报名中心 UI 改为「课程 → 班次」两级结构 |
+| **影响范围** | `pages/enroll/list.vue` |
+| **优先级** | P0(已落地) |
+| **commit** | `575de83` |
+
+### CR-009 ✏️ 班级码进班后联动 enrollment 确认
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS §FR-ENROLL-03:已报名学员可通过邀请链接或班级码进入班次与小组 |
+| **当前实现** | 班级码进班后联动 enrollment 状态确认(FR-ENROLL-03 落地) |
+| **变更内容** | 班级码进班与报名单状态打通 |
+| **影响范围** | ClassController、`pages/class/index.vue` |
+| **优先级** | P0(已落地) |
+| **commit** | `56a64fd` |
+
+---
+
+## 5. 新增模块(原始文档未涵盖)
+
+### CR-010 🆕 课程现场投屏模块
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 原始文档未提及 |
+| **当前实现** | `train_screen_config` 表 + AdminScreenController + train-web `/screen` 大屏页;投屏按课程配置显示、课程计时与环节进度、小组进展矩阵、投票结果录入与展示、课程资料展示 |
+| **变更内容** | 新增课程现场投屏模块(大屏端,独立于学员端) |
+| **影响范围** | schema.sql、train-web /screen 路由、AdminScreenController |
+| **优先级** | P0(已落地) |
+| **commit** | `47301fb` `9ba5889` |
+
+### CR-011 🆕 团报完整模块
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 01 整体方案 §8.2:校友会/机构团报 30,000-80,000/场;11 旧SRS §FR-PAY-03 仅一句话「团报与发票」 |
+| **当前实现** | `train_group_order` / `train_group_order_member` 2 表 + GroupOrderController + AdminGroupOrderController + `pages/group-order/*` 3 页 + train-web `/group-orders` |
+| **变更内容** | 团报从一句话需求扩展为完整模块(发起、成员名单、发票信息、支付、逐人生成报名单) |
+| **影响范围** | schema.sql、train-frontend 3 页、train-web 1 路由 |
+| **优先级** | P0(已落地) |
+| **commit** | `afb30a1` |
+
+### CR-012 🆕 案例授权模块
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 06 引流闭环 §学员案例 IP:采集→加工(授权+脱敏)→回流 |
+| **当前实现** | `train_case` 表 + CaseController + AdminCaseController + `pages/case/index` + train-web `/cases` |
+| **变更内容** | 案例授权从原则性描述扩展为完整模块(采集、授权、脱敏、回流) |
+| **影响范围** | schema.sql、train-frontend 1 页、train-web 1 路由 |
+| **优先级** | P0(已落地) |
+| **commit** | `afb30a1` |
+
+### CR-013 🆕 课程管理后台
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 原始文档未明确指出(22 课纲汇总仅提及 L0「建班」) |
+| **当前实现** | AdminCourseController + train-web `/courses`(课程双态:列表/主页,含管理员审核) |
+| **变更内容** | 新增课程管理后台(L0-L4 课程维护与审核) |
+| **影响范围** | train-web /courses 路由、AdminCourseController |
+| **优先级** | P0(已落地) |
+| **commit** | `248714d` |
+
+---
+
+## 6. 课程内容落地缺口
+
+### CR-014 ⚠️ L1 三场景工作坊未在小程序端落地
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 12 L1 课纲 V1.3:A 财富(事业)/B 健康/C 成长规划三个独立一天工作坊,每坊 360′+午餐 60′,5 模块同构 |
+| **当前实现** | 学员端未提供 L1 独立课程页面(当前课程页聚焦 L0 半日营) |
+| **变更内容** | **待评估**:L1 三坊课程内容是否本期实现或延后 |
+| **影响范围** | train-frontend 需新增 L1 课程内容页 |
+| **优先级** | P2(待评估) |
+
+### CR-015 ⚠️ L2 个人系统建造营未在小程序端落地
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 14 L2 课纲 V1.2:2 天 720′,9 模块(蓝图升级/三本账联动/自动化工厂/仪表盘/浠艾福闭环/复盘引擎/诊所式调试/转介绍/领域专家深度诊室) |
+| **当前实现** | 学员端未提供 L2 独立课程页面 |
+| **变更内容** | **待评估**:L2 是否本期实现或延后 |
+| **影响范围** | train-frontend 需新增 L2 课程内容页 |
+| **优先级** | P2(待评估) |
+
+### CR-016 ⚠️ L3 21天陪跑部分覆盖
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 15 L3 SOP V1.2:21 天 SOP(启动/巩固/收口) |
+| **当前实现** | `plan/index`(7 天行动)、`survey/index`(兴趣调研)、`mine`(卡券/证书)部分覆盖;T+ 跟进已补齐 T+21/T+30 |
+| **变更内容** | **待评估**:补 21 天日历视图/教练工作手册要点/毕业判定 |
+| **影响范围** | train-frontend L3 相关页面 |
+| **优先级** | P2(待评估) |
+
+### CR-017 ⚠️ L4 校友讲师团未在小程序端落地
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 16 L4 课纲 V1:5 周集训(M1 内容内化→M5 独立主讲+认证) |
+| **当前实现** | 未实现 L4 页面 |
+| **变更内容** | **待评估**:L4 讲师团为远期规划,本期不实现 |
+| **影响范围** | — |
+| **优先级** | P3(远期) |
+
+---
+
+## 7. 引流闭环与转化
+
+### CR-018 ✏️ 分享海报增加 sharePath / shareText 字段
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 06 引流闭环 §FR-FISS-01:专属海报与邀请码 |
+| **当前实现** | 分享海报增加 `share_path` / `share_text` 字段,小程序展示分享文案与二维码占位 |
+| **变更内容** | 海报数据字段扩展 |
+| **影响范围** | InviteController、`pages/share/index.vue` |
+| **优先级** | P0(已落地) |
+| **commit** | `372b4ec` |
+
+### CR-019 ⚠️ 学员案例 IP 三段流水线完整性确认
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 06 引流闭环 §学员案例 IP:采集→加工(授权+脱敏)→回流 |
+| **当前实现** | 案例授权模块(CR-012)已实现授权环节,采集/脱敏/回流环节需确认完整性 |
+| **变更内容** | **待核查**:确认案例三段流水线完整性(采集节点、脱敏规则、回流渠道) |
+| **影响范围** | CaseController、`pages/case/index.vue` |
+| **优先级** | P1(待确认) |
+
+### CR-020 ⚠️ 测评兴趣调研与转化发放规则确认
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 11 旧SRS §FR-09:测评兴趣调研与转化发放(券自动发放 + 转介) |
+| **当前实现** | `survey/index` 已实现兴趣调研;券自动发放触发来源(vote/finish/research/champion/teaching)需确认完整 |
+| **变更内容** | **待核查**:L1 券/私教券/浠艾福测评兑换卡的触发与发放规则 |
+| **影响范围** | PlanController、`pages/survey/index.vue` |
+| **优先级** | P1(待确认) |
+
+---
+
+## 8. 合规与红线
+
+### CR-021 ⚠️ 四线合规红线核查
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 22 课纲汇总 §一:财富(事业)不荐个股/不预测/不给买卖建议/不承诺收益;健康只识别评估不诊断;成长只评估不承诺升学结果;创客分佣返现过法务前「只送券不返现」 |
+| **当前实现** | 需全平台核查文案与逻辑是否体现四线红线 |
+| **变更内容** | **待核查**:全平台文案/逻辑合规 |
+| **影响范围** | 全平台 |
+| **优先级** | P1(合规核查) |
+
+### CR-022 ⚠️ L0 半天营学员端禁露销售信息(同 CR-003 后台视角)
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 22 课纲汇总 §一:学员页面/课件禁露销售·引流·钩子·L1 凭券信息 |
+| **当前实现** | mine 页「分享中心」「测评调研」入口合规性待确认 |
+| **变更内容** | **待核查**(与 CR-003 联动) |
+| **影响范围** | 学员端页面 |
+| **优先级** | P1(合规核查) |
+
+---
+
+## 9. 外部依赖与文档缺口
+
+### CR-023 ⚠️ L0 招生海报报名二维码
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 21 文档缺口清单 §二:L0 招生海报「扫码报名占位」需真实报名二维码或报名链接 |
+| **当前实现** | 需用户提供真实二维码/链接 |
+| **变更内容** | 外部依赖,需用户提供方可完成招生物料 |
+| **影响范围** | L0 招生海报物料 |
+| **优先级** | P1(阻塞招生) |
+
+### CR-024 ⚠️ 浠艾福菌群/DAN 脱敏样本
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 21 文档缺口清单 §三:浠艾福菌群/DAN 脱敏样本(3-5/类) |
+| **当前实现** | 需运营提供脱敏样本 |
+| **变更内容** | 外部依赖,用于课前数据自检「选了无」场景 |
+| **影响范围** | 课前资料包、`train_prep_check` |
+| **优先级** | P1(阻塞首课) |
+
+### CR-025 ⚠️ 券商持仓真实字段
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 21 文档缺口清单 §三:券商持仓真实导出字段 |
+| **当前实现** | 07 物料清单已补公开字段(华泰涨乐/中信/东方财富/同花顺),合作券商精确表头待运营校准 |
+| **变更内容** | 合作券商精确表头待运营校准 |
+| **影响范围** | 学员工具包 xlsx 模板 |
+| **优先级** | P2(待运营校准) |
+
+### CR-026 ⚠️ 品牌对外使用前阻塞项
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 21 文档缺口清单 §三:第 41 类商标检索、全网重名与域名排查、英文名定稿 |
+| **当前实现** | 英文名已定稿 CareMate · AI Journey;商标检索/重名/域名未完成 |
+| **变更内容** | 品牌对外使用前需完成商标与域名阻塞项 |
+| **影响范围** | 品牌对外传播 |
+| **优先级** | P1(阻塞品牌对外) |
+
+### CR-027 ⚠️ 领域专家资源本期暂缓
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 21 文档缺口清单 §三:领域专家须持对应资质——2026-09-06 拍板:专家资源目前不讨论 |
+| **当前实现** | 本期暂缓 |
+| **变更内容** | 领域专家资源本期暂缓,待 L1/L2 专家课推进前再议 |
+| **影响范围** | L1/L2 专家课 |
+| **优先级** | P3(远期) |
+
+---
+
+## 10. 二次文档基线更新
+
+### CR-028 ✏️ 二次文档(docs/)需更新至与代码同步
+
+| 维度 | 内容 |
+|---|---|
+| **原始依据** | 13 文件索引 V3.4(2026-09-04)为最新原始文档基线 |
+| **当前实现** | docs/ 二次文档(SRS V2.0 / 详细设计 V1.0 / 实施计划 V1.0)停在 Phase1-8;代码已演进至 Phase15b 之后(2026-09-08) |
+| **变更内容** | **本次执行**:SRS V2.0→V3.0(新增登录浮层、TabBar 调整、课程中心化、报名模型变更、投屏/团报/案例/课程管理模块);详细设计 V1.0→V2.0(enrollment 改 course 主导、补齐 4 张新表 DDL、后台路由表更新);实施计划追加 Phase9-15b 评审记录 |
+| **影响范围** | docs/ 三份文档 |
+| **优先级** | P1(文档与代码脱节约 7 个阶段) |
+| **commit** | 本次 `docs` 提交 |
+
+---
+
+## 11. 汇总统计
+
+### 按类型
+
+| 类型 | 数量 | 编号 |
+|---|---|---|
+| 🆕 新增 | 5 | CR-006、CR-010、CR-011、CR-012、CR-013 |
+| ✏️ 修改 | 9 | CR-001、CR-002、CR-005、CR-007、CR-008、CR-009、CR-018、CR-028 |
+| ⚠️ 待确认/外部依赖 | 14 | CR-003、CR-004、CR-014~017、CR-019~027 |
+
+### 按优先级
+
+| 优先级 | 数量 | 说明 |
+|---|---|---|
+| P0(已落地,需文档化) | 11 | CR-001、CR-002、CR-005~012、CR-013、CR-018 |
+| P1(合规/外部依赖/文档) | 10 | CR-003、CR-004、CR-019、CR-020、CR-021、CR-022、CR-023、CR-024、CR-026、CR-028 |
+| P2(待评估/待校准) | 4 | CR-014、CR-015、CR-016、CR-025 |
+| P3(远期) | 3 | CR-017、CR-027 |
+
+> **说明**:P0 项已在代码中落地,本次变更清单对其做文档化固化;P1 项为合规核查、外部依赖与文档同步;P2/P3 为课程体系后续规划。
+
+---
+
+*爱伴 · AI之旅 训练营小程序 · 需求变更清单 V1.0 · 2026-09-08*