详见 01-全局通用规则.md §1.2 小程序矩阵。
| 终端 | 名称 | 默认城市 | 城市切换 | 说明 |
|---|---|---|---|---|
| 小程序 1 | 卓越悦学 | 广州 | 可切换(按配置) | 主力小程序,覆盖广州及其他城市 |
| 小程序 2 | 卓越优学 | 深圳 | 不可切换(锁定深圳) | 深圳专属,因资金监管要求独立 |
源文件:diagrams/login-bindstudent-sequence.puml
模块说明:登录模块负责用户身份认证全流程。用户触发需登录操作后进入登录页,通过微信一键授权获取手机号,完成通行证匹配与绑定。
入口:游客态触发加购/下单/进入购物车等操作时拦截跳转 | 页面组成:登录页 → 手机号授权弹窗 → 协议页(用户协议/隐私协议/儿童隐私协议)
登录页无需接口数据,纯静态页。
| 状态 | 表现 |
|---|---|
| 未登录(默认) | 展示登录页全部元素 |
| 已登录 | 不应进入此页面(路由守卫跳转回来源页) |
| 操作 | 响应 |
|---|---|
| 点击「微信快捷登录」 | 判断是否已勾选协议:未勾选 → Toast"请先阅读并同意协议";已勾选 → 调用微信 getPhoneNumber,进入 1.2 |
| 手机号授权成功 | 见 1.2 |
| 登录成功后 | 判断是否已绑定学员:是 → 返回来源页;否 → 跳转 2.A(添加学员页) |
| 点击协议文字 | 跳转 1.3(协议页),根据点击的协议名称传参展示对应内容(用户协议 / 隐私协议 / 儿童隐私协议) |
| 物理返回 | 返回上一页(游客态继续浏览) |
| 场景 | 处理 |
|---|---|
| 登录接口报错 | Toast"登录失败,请重试",保持当前页 |
| 网络异常 | 展示全局网络异常页(见 01 §6.1) |
— 无后台配置项。
wx.getPhoneNumber 触发。| 字段 | 来源 | 说明 |
|---|---|---|
| 手机号列表 | 微信账号绑定 | 微信侧维护,非我方控制 |
| 选中手机号 | 用户点选 | 用户选择的手机号作为登录凭证 |
| 操作 | 响应 |
|---|---|
| 点击某个手机号 | 授权成功 → 前端获取加密手机号数据 → 调用通行证登录接口 |
| 点击「不允许」 | 授权拒绝 → Toast"需要手机号才能登录",停留登录页 |
| 多手机号场景 | 用户选哪个号就用哪个号去匹配通行证 |
| 状态 | 表现 |
|---|---|
| 单手机号 | 仅展示一个手机号选项 |
| 多手机号 | 展示多个手机号供用户选择 |
| 场景 | 处理 |
|---|---|
| getPhoneNumber 接口失败 | Toast"获取手机号失败,请重试" |
| 用户多次拒绝授权 | 微信可能不再弹出,需引导用户到小程序设置中重新授权 |
— 无后台配置项(微信原生能力)。
| 字段 | 来源 | 说明 |
|---|---|---|
| 协议类型 | 页面传参 | 枚举:user_agreement / privacy / children_privacy |
| 协议内容 | 前端写死 | 三份协议正文硬编码在前端,无后台管理能力 |
不区分登录态,始终可访问。
| 操作 | 响应 |
|---|---|
| 滚动 | 正常滚动浏览 |
| 返回 | 返回登录页 |
| 场景 | 处理 |
|---|---|
| 富文本加载失败 | 展示“内容加载失败”提示 + 重试按钮 |
— 无后台配置项(协议内容当前为前端写死)。
模块说明:用户在小程序之间跳转、或小程序内打开 H5 页面时的登录补全逻辑。全程用户无感知,无额外 UI 交互。
账号打通机制:外部通行证系统统一手机号(不依赖 unionId) | 场景组成:跨小程序跳转 + H5 登录
无独立 UI 页面
后台静默处理,用户无感知
| 项目 | 说明 |
|---|---|
| 触发条件 | 用户从 A 小程序跳转到 B 小程序,B 当前无登录态 |
| 处理逻辑 | 自动静默登录(通过外部通行证统一手机号打通账号体系),登录后自动选中与 A 小程序一致的学员 |
| 用户感知 | 无感知,无登录页、无弹窗、无 Toast |
| 核心约束 | 登录账号 + 选中学员必须与来源小程序一致 |
| 项目 | 说明 |
|---|---|
| 触发条件 | 用户从 A 小程序跳转到 B 小程序,B 已登录但账号与 A 不一致 |
| 处理逻辑 | 用来源小程序(A)的登录态覆盖目标小程序(B),B 自动切换为 A 的当前账号 |
| 用户感知 | B 小程序自动切换账号,页面数据刷新为来源账号对应数据 |
| 核心约束 | 跳转时目标小程序账号必须与来源小程序保持一致(适用于网报→拼团场景) |
| 项目 | 说明 |
|---|---|
| 触发条件 | 小程序内通过 WebView 打开 H5 页面 |
| 处理逻辑 | 自动静默登录 H5,登录账号与选中学员必须与小程序当前一致 |
| 用户感知 | 无感知,H5 直接展示已登录态内容 |
| 核心约束 | 账号一致性为强制要求,不允许 H5 与小程序登录不同账号 |
| 实现方式 | 小程序通过 URL 参数或 JS Bridge 将 token + 学员信息传递给 H5 |
| 适用 H5 入口 | 入学诊断、调课、转班、转介绍(均通过此机制实现与小程序登录态同步) |
| 跳转类型 | Token 传递方式 | 说明 |
|---|---|---|
| 小程序 ↔ 小程序 | 通过 URL 参数携带加密 Token | 来源端将登录态加密后写入跳转 URL 的 query;目标端解析后自动登录,无需用户再次授权 |
| 小程序 → H5 | 通过 cookie 同域共享 Session | H5 与小程序后端处于同一主域,借助 cookie 复用已建立的会话;如不同域则降级为 URL query 携带加密 Token |
模块说明:登录成功后若未绑定学员,引导家长添加学员信息。支持两种方式:填表创建新学员,或通过手机号+姓名+验证码绑定已有学员。
入口:① 新用户登录后无学员自动跳入 ② 我的学员页点击「添加学员」 | 页面组成:添加新学员(Tab 1) + 添加已有学员(Tab 2) + 子页面(选择城市/年级)
| 能力 | 优先级 | 说明 |
|---|---|---|
| 小程序绑定学生(短信验证码) | P0 | 小程序端完成学生绑定流程,通过短信验证码方式进行身份验证(流程与异常兜底详见 2.B)二期 |
| 学员信息编辑 | P0 | 支持学员头像、生日、性别、年级等信息编辑 |
| 学校列表 | P0 | 在读学校、目标学校选择,需实现字母索引快速定位 |
| 绑定新学员 | P0 | 支持在小程序端绑定新的学员账号(见 2.A / 2.B) |
| 学员列表 | P0 | 展示已绑定的学员列表,支持切换 |
| 字段 | 来源 | 说明 |
|---|---|---|
| 年级选项 | 后台配置(年级枚举) | 固定选项列表,按学段分组 |
| 城市选项 | 后台配置(城市枚举) | 已开通城市列表 |
| 操作 | 响应 |
|---|---|
| 点击「确认」 | 表单校验 → 创建学员 → 成功后:新用户入口跳转首页 / 我的学员入口返回我的学员页并刷新 |
| 切换到「添加已有学员」Tab | 切换至 2.B 表单 |
| 物理返回 | 新用户入口:[待确认] 是否允许跳过;我的学员入口:返回我的学员页 |
| 场景 | 处理 |
|---|---|
| 创建学员接口失败 | Toast"提交失败,请重试" |
| 城市/年级选项加载失败 | Toast 提示 + 重试 |
| 表单校验不通过 | 对应字段标红提示 |
| 配置项 | 说明 |
|---|---|
| 城市枚举列表 | 后台维护已开通城市 |
| 年级枚举列表 | 后台维护年级选项,含学段分组 |
调用方:2.A 表单中点击"年级"字段
| 操作 | 响应 |
|---|---|
| 点击年级选项 | 选中并返回上一页,填入所选年级 |
| 状态 | 表现 |
|---|---|
| 有当前年级 | 对应选项高亮 |
| 无选中 | 无高亮(新建学员场景) |
调用方:2.A 表单中点击"城市"字段
| 操作 | 响应 |
|---|---|
| 点击城市选项 | 选中并返回上一页,填入所选城市 |
| 状态 | 表现 |
|---|---|
| 有当前城市 | 对应选项高亮 |
| 无选中 | 无高亮(新建学员场景) |
| 字段 | 来源 | 说明 |
|---|---|---|
| 手机号 | 用户输入 | 11位,学员在业务系统中已绑定的手机号 |
| 姓名 | 用户输入 | 学员真实姓名,与手机号联合匹配 |
| 验证码 | 短信下发 | 6位数字,发送至学员手机号 |
| 验证码有效期 | 后端配置 | 默认 5 分钟 |
| 获取验证码冷却 | 前端控制 | 60秒倒计时 |
| 操作 | 响应 |
|---|---|
| 点击「获取验证码」 | 校验手机号格式 → 发送验证码 → 按钮 60s 倒计时 |
| 点击「提交」 | 校验全部字段 → 绑定已有学员接口 → 成功后:新用户入口跳转首页 / 我的学员入口返回我的学员页 |
| 切换到「添加新学员」Tab | 切换至 2.A 表单 |
| 物理返回 | 同 2.A |
| 状态 | 表现 |
|---|---|
| 正常 | 空表单,填写后提交 |
| 已达上限(最多 5 个) | 不应进入此页(入口已置灰) |
| 获取验证码倒计时 | 「获取验证码」置灰显示剩余秒数 |
| 场景 | 处理 |
|---|---|
| 手机号+姓名未匹配到学员 | Toast"未找到对应学员,请确认信息" |
| 验证码错误/过期 | Toast"验证码错误或已过期" |
| 发送验证码失败 | Toast"发送失败,请稍后重试" |
| 验证码获取次数过多 | 弹出安全验证组件(网易易盾),通过验证后方可继续获取验证码。注:仅生产环境触发此限制 |
| 绑定接口失败 | Toast"绑定失败,请重试" |
| 学员已达上限 | Toast"学员数量已达上限" |
| 该学员已被当前家长绑定 | Toast"该学员已绑定" |
| 修订项 | 修订内容 | 期数 | 依据来源 | 日期 |
|---|---|---|---|---|
| 无学员状态规则 | 新增:登录后无学员时沿用 H5 逻辑,展示引导添加学员的提示与入口(绑定学员模块说明) | 一期 | 改动汇总 2.6 | 2026-07-26 |
| 学员管理 P0 能力清单 | 新增清单:学员信息编辑(头像/生日/性别/年级)、学校列表字母索引、绑定新学员、学员列表切换 | 一期 | 改动汇总 2.2~2.5 | 2026-07-26 |
| 小程序绑定学生 | 标注:短信验证码绑定流程(2.B)即「网报支持小程序绑定学生」,归属二期;异常兜底 Toast 文案与改动汇总对齐;二期同步实现绑定学生后跳转对应小程序 | 二期 | 改动汇总 2.1 / 9.1 / 6.3 | 2026-07-26 |
| 学员上限口径补充 | 上限统计包含 TMS 绑定的学员;历史已绑定超过 5 个学员的存量数据不做处理,维持现状(绑定学员模块说明) | 一期 | 2026-07-28 测试评审会 | 2026-07-28 |