new-member-scheduling-cache-2026-10-15.md 2.5 KB

新会员开课充值后排课入口失效修复

原因与复现

排课中心使用 OperationsRouteReuseStrategy 保留页面实例。原组件仅在 ngOnInit 读取 studentId,也没有实现重新挂载回调。进入过排课中心后,从会员详情点击“为该学员排课”,路由变化但原页面不会再次初始化,未打开排课表单。全新页面或整页刷新则正常。

另一个缓存问题是:后台的业务变更通知只给当前可见页面刷新,离开排课中心后新增会员、充值、开课,保留的排课候选仍是旧数据。

真实浏览器复现(本地管理端 4300 连接线上接口):先进入排课中心,再进入会员详情,点击为该学员排课。修复前排课请求只有 1 次,表单数量 0;修复后请求 2 次,表单数量 1,并自动选择目标会员。

改动

  • 记录离开页面期间的业务写入;回到排课中心时按需更新会员、课程和余额数据。
  • 页面重新挂载以及排课入口参数变化时,处理目标会员;合并同一次导航的挂载、参数事件。
  • 从会员详情明确发起排课时先获取最新数据,再选择会员与已开课程。同一会员再次发起也可打开。
  • 普通切换且没有业务写入时继续复用数据,不增加轮询。
  • 更新失败时保留错误,重新进入可以重试;销毁后取消订阅。

验证

  • 线上只读核对最近新会员 1935:身份正常,3 项有效开课;30 分钟课时 40、60 分钟课时 20、陪练时长 40。排课查询可读到本人及课程,规则有效。
  • 线上预检:单词课 30 分钟,返回可排 1 节、冲突 0,预留 0。没有进行正式排课。
  • 使用线上保存函数在强制回滚的事务中验证:成功创建 1 条预约后整体回滚。没有提交预约、预留或扣课记录(业务序列分配会产生正常空号)。
  • 修复后浏览器经过相同跨页面路径,能看到 3 门课程,预检 HTTP 200、可排 1 节,“确认保存”可点击;未点击真实保存。
  • 排课组件 28 项测试通过,包括离开期间写入、无写入返回、重复同一会员入口、读取失败重试,以及已有预检/取消测试。
  • 管理端生产构建通过,存在原有样式体积与 CommonJS 警告。

交付边界

本次仅修改管理端组件及测试,不变更云函数或数据库业务规则。本地管理端已验证;本记录不代表独立生产前端站点已发布。私人诊断材料保存在本机受限目录,不纳入仓库。