模块说明:购物车是家长管理已加购商品、按财务主体分组勾选并进入结算的核心页面。
入口:底部Tab「购物车」/ 课程详情加购成功 | 页面组成:购物车主页 → 学员切换 → 编辑删除
| 字段 | 来源 | 规则 |
|---|---|---|
| 分账主体分组 | cart.getCart() 接口 | 按 financeId 分组,key=financeId, value={list[], checked} |
| 价格对象 priceObj | /v2/order/queryPre | {totalPrice, originPrice, payEcouponDiscount, payClassDiscount, goodsNum} |
| 拓科推荐 | cart.getExpandSubjects() | 服务降级 recommend_expand_subject,无数据时不显示。取数规则(2026-07-28 测试评审确认):当前城市,显示学期对应后两期的班级;排除该学生已有报读记录的;条件 = 当前城市 + 同学校(报读记录)+ 学科(报读记录的其他学科)+ 学生当前年级 + 有剩余学位 |
| 关联推荐 | cart.getRelatedClass() | 沿用现有逻辑,与主体无关(2026-07-26 确认 一期),服务降级时不显示。取数规则(2026-07-28 测试评审确认):当前城市,显示学期对应后两期的班级;排除该学生有报读记录的(不推荐);条件 = 当前城市 + 班级的校区 + 班级以外的其他学科 + 学生当前年级 + 有剩余学位 |
| 失效购物单 | cart.getCart() invalidList | 班级失效后自动归入底部灰色区域 |
| 预选课倒计时 | good.netRegDate + secondsToNetRegStart | 距开抢 HH:MM:SS,未到点禁用勾选 |
| 状态 | 触发条件 | 表现 |
|---|---|---|
| 正常态 | 已登录 + 有学员 + 有数据 | 完整商品列表 + 底部结算 |
| 编辑模式 | 点右上角"编辑" | 底部"结算"变"删除",所有商品可勾选(含预选课) |
| 预选课态 | good.isNetRegStarted = false | 显示禁用 icon + 倒计时,不可勾选 |
| 原班标签态(已移除) | good.originClass 有值 | 2026-07-28 测试评审决议:原班推荐逻辑未实现,去掉"原班 ›"标签及课程对比弹窗 UI(原设计:底部显示橙色"原班 ›",点击弹课程对比弹窗) |
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 拓科推荐开关 | 是否展示拓科推荐区域 | 开启 |
| 关联推荐开关 | 是否展示关联推荐(沿用现有逻辑,与主体无关) | 开启 |
| 预选课提前开放时间 | 倒计时提前多久展示 | 由后台班级配置 |
模块说明:不同财务主体的商品按组隔离展示和勾选,顾问可通过 TMS 为家长配置分段支付。
入口:购物车主页内自动触发 | 页面组成:购物车主体分组卡片
| 字段 | 来源 | 规则 |
|---|---|---|
| financeId 分组 | getCart 接口 | 不同主体不能合并支付,前端按组隔离勾选 |
| financeDisplayName | financeInfos[financeId] | 组头标题展示用 |
| classPaySegments | 商品接口 | 3种来源:产品分段/手动分段-网报/手动分段-TMS |
| segmentStatus | 接口返回 | 0=已结课 / 1=现缴 / 2=待缴 |
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 分段来源标识 | good.segmentSource: product/manual_wb/manual_tms | product |
| 城市+分校分段配置 | TMS 后台配置,如寒暑全讲/春秋4讲 | 按地区配置 |
模块说明:购物车在三种前置条件下的占位态引导,优先级:未登录 > 无学员 > 空购物车。
入口:购物车主页自动判断 | 页面组成:切换学员弹窗 + EmptyDefault 占位组件
| 状态 | 判断条件 | 展示文案 | 按钮动作 |
|---|---|---|---|
| 未登录 | !hasLoggedIn | 暂无服务,请登录后查看 | 立即登录 → toLogin |
| 已登录无学员 | hasLoggedIn && !hasChild | 暂无服务,请添加学员后查看 | 添加学员 → /addStudent |
| 空购物车 | availableGroupedList 和 invalidList 均为空 | 购物单空空如也~ | 去选课 → /selectCourse |
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 空状态图片 | EmptyDefault 组件使用的空态图 | 通用空状态图 |
| 登录引导文案 | 未登录时展示文案 | "暂无服务,请登录后查看" |
模块说明:购物车的编辑删除、失效商品管理和预选课倒计时机制。
入口:购物车主页"编辑"按钮 / 左滑删除 | 无独立设计稿,交互基于购物车主页编辑态
| 场景 | 规则 |
|---|---|
| 编辑模式 | isEditting=true 时,所有商品可勾选(含预选课未到点),底部切为"删除"按钮 |
| 左滑删除 | 调用 /v2/shoppingcart/delete,claIds 逗号分隔 |
| 批量删除 | 编辑模式多选后点"删除" → batchDelete + recompute 保证原子性 |
| 失效判定 | 后端 getCart 返回 invalidList,班级状态为失效 |
| 预选课倒计时 | good.netRegDate + secondsToNetRegStart,前端 judgeFormat 计算 |
batch_delete_cart(P0 新增)| 配置项 | 说明 | 默认值 |
|---|---|---|
| 左滑删除开关 | 是否支持左滑删除 | 开启 |
| 失效区展示上限 | 失效商品最多展示条数 | 无上限(全部展示) |
模块说明:从购物车结算进入的订单确认页,展示商品清单、收货地址、优惠选择和报读协议,提交后进入支付。
入口:购物车"结算"按钮 | 页面组成:确认订单页 → 5个弹窗(缴费说明/协议/优惠详情/优惠券/口令)
| 字段 | 来源 | 规则 |
|---|---|---|
| 结算班级列表 | settlement.getConfirmClassList | 从购物车 selectedCartIds 进入 |
| 课程总价 | queryPre.payOriginPrice | 所有选中商品原价之和 |
| 课程优惠 | queryPre.payClassDiscount | 后端计算的课程折扣 |
| 优惠券抵扣 | queryPre.payEcouponDiscount | 用户选择优惠券后重算 |
| 优惠口令抵扣 | queryPre.payCouponDiscount | 兑换成功后重算 |
| 余额抵扣 | settlement.getAccountBalance | 有余额时自动抵扣 |
| 报读协议 | queryPre.protocols | 特殊优惠服务才返回,必须勾选后方可提交 |
| 预付快照 | URL query preplanSnapId | TMS 同步时有值 → 禁止修改优惠券/口令 |
submit_order(P0 新增)| 配置项 | 说明 | 默认值 |
|---|---|---|
| 缴费说明文案 | 5 段静态文案(计费方式/优惠/余额/最终解释权) | 后端下发 |
| 优惠口令类型字典 | discountType: 2/3 → "X折" / 减免 → "¥X" | — |
| 余额抵扣开关 | 是否启用余额自动抵扣 | 开启 |
模块说明:提交订单后的支付页面,区分同主体(原生微信支付)和异主体(半屏小程序支付)两种路径。
入口:确认订单"提交服务"成功 | 页面组成:收银台(同主体为微信浮窗,异主体为独立页)
| 字段 | 来源 | 规则 |
|---|---|---|
| orderPayId | 提交订单返回 | 支付主键 |
| finance 主体 | 购物车分组 | 决定同/异主体支付路径 |
| 应付金额 | queryPre / insert 返回 | 展示 + wx.requestPayment 入参 |
| 剩余时间 | 订单创建时间 + 超时时长 | 到点自动关单 |
| 预付参数 | 后端"统一下单"接口 | {timeStamp, nonceStr, package, signType, paySign} |
| 场景 | 实现方式 | UI |
|---|---|---|
| 同主体支付 | 原生 wx.requestPayment | 微信原生支付浮窗(无独立页面) |
| 异主体支付 | wx.navigateToMiniProgram 跳跨主体小程序 | 半屏小程序支付,设计稿"收银台-h5"形式 |
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 支付超时时长 | 订单创建后多久自动关单 | 30分钟(待确认 C-08) |
| mpAppId 映射 | 各财务主体对应小程序 AppId | 待确认 C-03 |
模块说明:支付完成后的结果展示页,通过轮询获取支付状态,成功时触发订阅消息和报读须知。
入口:收银台支付完成 / 异主体支付返回 | 页面组成:支付结果页(成功/异常/轮询三种态)
| 字段 | 来源 | 规则 |
|---|---|---|
| orderPayStatus | settlement.getQueryOrderPayStatus | 'success_pay'/'finish_order'/'exception_order' 视为成功 |
| totalOrderFinished | 同上 | true=订单已完成 / false=有待补缴段 |
| toPayNextSegment | !totalOrderFinished | 显示"支付下一段"按钮 |
| advertisement | settlement.getPayAdvertisement | 支付完成页广告,降级 service.serviceQuery('ads') |
| retry | status 接口 | true 时 1s 后再次轮询 |
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 轮询间隔 | retry 间隔时长 | 1000ms |
| 轮询上限 | 最多重试次数 | 10次(兜底展示异常) |
| 广告位 ID | 支付完成页广告配置 | 按城市+年级下发 |
模块说明:支付成功后触发的报读须知展示和微信订阅消息授权,确保家长不遗漏后续通知。
入口:支付成功页自动触发 | 页面组成:报读须知页(/notesBeforeClass) + wx.requestSubscribeMessage 弹窗
| 订阅节点 | sceneCode | 用途 |
|---|---|---|
| 支付完成 → 待补缴态 | fee_pay(已有) | 补缴提醒 |
| 支付完成 → 全完成 | course_start(新增) | 开课提醒 |
| 加购成功 | cart_remind(新增) | 订单未提交提醒 |
| 报读须知页 | class_notice(新增) | 课前/课后通知 |
| 配置项 | 说明 | 默认值 |
|---|---|---|
| 模板 ID 列表 | 各 sceneCode 对应的微信模板 ID | 后端配置下发 |
| 报读须知形式 | 长图/H5/小程序原生(待确认 C-01) | 长图(旧版) |
| 订阅频率限制 | 同一用户同一 sceneCode 弹窗间隔 | 每流程最多1次 |
模块说明:购物车到支付完成的全链路业务流程图,覆盖购物车操作 → 确认订单 → 支付路由 → 结果处理。
涵盖模块一至八的全部核心交互节点
模块说明:顾问在 TMS 后台为家长生成购物车同步链接,家长扫码后自动绑学员并将顾问配置的商品批量加购到购物车。
入口:顾问扫码二维码 | 页面组成:/shareFromTms → /shareOrderFromTms → /shareRepayFromTms
| 路由参数 | 含义 | 来源 |
|---|---|---|
| uuid | TMS 后台同步会话唯一标识 | TMS 生成的二维码 |
| stuMemberId | 目标学员 ID | 同上 |
| shareUserId | 顾问 ID(归因) | 同上 |
| shareUserPhone | 顾问手机号(备用) | 同上 |
| claIds | 逗号分隔班级 ID 列表 | 同上 |
| 错误码 | 含义 | 前端处理 |
|---|---|---|
| 200 | 成功 | 跳转 /cart 查看购物车 |
| 5005/5006/5011 | 诊断分层冲突 | 弹 CourseShowDialog"无法处理的班级,请先参加学习诊断" |
| 5003 | 服务冲突 | 弹"以下 N 个班级未能更新至服务" |
/shareFromTms:TMS 购物车同步(主入口)/shareOrderFromTms:TMS 服务分享/shareRepayFromTms:补缴分享(配合我的-补缴结算)| 配置项 | 说明 | 默认值 |
|---|---|---|
| 分段来源标识 | good.segmentSource: product/manual_wb/manual_tms | product |
| 城市+分校分段配置 | TMS 后台配置(寒暑全讲/春秋4讲等) | 按地区配置 |
| 二维码有效期 | TMS 生成的二维码有效期 | 待确认 |
| 修订项 | 修订内容 | 期数 | 依据来源 | 日期 |
|---|---|---|---|---|
| 分段支付规则 | 新增:TMS支持按分校配置收费段次+针对指定客户的个性化分段;TMS"同步购物车(分段支付)"推送学员/班级/分段信息并打需分段标签;网报端优先按分校分段,再识别个性化分段 | 二期 | 改动汇总 §3.1/§3.2 | 2026-07-26 |
| 关联推荐口径 | 购物车关联推荐确认沿用现有逻辑(与主体无关),修正原"同主体相似课推荐"表述 | 一期 | 改动汇总 §3.7/§7.8 | 2026-07-26 |
| 分段折叠交互移除 | 分段信息默认全部展开,去掉展开/折叠交互(原设计未实现)(§2 交互规则) | 一期 | 2026-07-28 测试评审会 | 2026-07-28 |
| 原班推荐 UI 移除 | 原班推荐逻辑未实现,去掉"原班 ›"标签及课程对比弹窗 UI(§1 状态说明) | 一期 | 2026-07-28 测试评审会 | 2026-07-28 |
| 拓科/关联推荐取数规则 | 补充拓科推荐与关联推荐的完整取数规则(城市/学校/学科/年级/剩余学位维度)(§1 数据规则) | 一期 | 2026-07-28 测试评审会 | 2026-07-28 |