# 变更审计记录:助教看板和客户看板懒加载(分页加载) | 字段 | 值 | |------|-----| | 日期 | 2026-03-29 05:49:50 | | Prompt-ID | P20260329-054800 | ## 操作摘要 为助教看板(BOARD-1)和客户看板(BOARD-2)添加懒加载(分页加载)功能。后端 `get_coach_board` 新增 `page`/`page_size` 参数和内存分页逻辑,`CoachBoardResponse` 新增 `total`/`page`/`page_size` 字段。前端两个看板页面新增分页状态管理(`currentPage`/`pageSize`/`totalCount`/`hasMore`/`isLoadingMore`)、`onReachBottom` 触底加载、筛选变更时重置分页,以及加载更多/已加载全部的 UI 提示。 ## 改动注解 ### `apps/backend/app/schemas/xcx_board.py` - 变更类型:修改 - 原始原因:后端需要返回分页元数据,前端才能判断是否还有更多数据 - 思路分析:在 `CoachBoardResponse` 中新增 `total`、`page`、`page_size` 三个字段,与客户看板 `CustomerBoardResponse` 保持一致的分页响应结构。同时本次 diff 包含了之前的 AreaFilterEnum 重建(7→9 项)、OverviewPanel 现金流字段 Optional 化、RevenuePanel/CashflowPanel 环比字段扩展等财务看板改动 - 修改结果:助教看板响应现在携带分页信息,前端可据此判断 hasMore 状态 ### `apps/backend/app/routers/xcx_board.py` - 变更类型:修改 - 原始原因:路由层需要接收前端传入的分页参数 - 思路分析:`get_coach_board` 路由新增 `page`(默认 1,≥1)和 `page_size`(默认 20,1~100)两个 Query 参数,透传给 service 层。同时添加了 `@trace_service` 装饰器用于链路追踪 - 修改结果:助教看板 API 支持 `?page=1&page_size=20` 分页查询 ### `apps/backend/app/services/board_service.py` - 变更类型:修改 - 原始原因:service 层需要实现分页逻辑,将全量数据切片返回 - 思路分析:采用内存分页策略——先查询全部助教数据并排序,再根据 `page`/`page_size` 切片。这种方式适合助教数量不大(通常 <100)的场景,避免了 SQL 层分页的复杂性。同时本次 diff 包含大量其他改动:环比同期对比重构、档位距升档计算、项目标签映射、客户看板批量查询优化、财务看板区域日粒度重构等 - 修改结果:`get_coach_board` 返回 `{items, total, page, page_size, dim_type}`,items 为当前页数据 ### `apps/miniprogram/miniprogram/services/api.ts` - 变更类型:修改 - 原始原因:API 层需要支持分页参数传递,并返回完整响应(含 total)而非仅 items - 思路分析:`fetchBoardCoaches` 新增 `page`/`pageSize` 参数,返回类型从 `CoachCard[]` 改为 `{ items, total, page, pageSize }`(返回完整 data 而非 `data.items`)。`fetchBoardCustomers` 同样改为返回完整响应。这样前端页面可以从响应中获取 total 来计算 hasMore - 修改结果:两个看板 API 函数现在返回分页元数据,前端可实现无限滚动 ### `apps/miniprogram/miniprogram/pages/board-coach/board-coach.ts` - 变更类型:修改 - 原始原因:助教看板页面需要实现触底加载更多的交互 - 思路分析:新增分页状态字段(`currentPage`/`pageSize`/`totalCount`/`hasMore`/`isLoadingMore`)。`loadData` 改为 async 函数,首页显示 loading,后续页显示底部加载指示器。新增 `onReachBottom` 生命周期函数实现触底加载。筛选变更(sort/skill/time)时重置分页状态并重新加载。同时将 Mock 数据替换为真实 API 调用 - 修改结果:助教看板支持下拉刷新 + 触底加载更多,每页 20 条 ### `apps/miniprogram/miniprogram/pages/board-coach/board-coach.wxml` - 变更类型:修改 - 原始原因:需要在列表底部显示加载状态提示 - 思路分析:在列表末尾新增两个条件渲染块:`isLoadingMore` 时显示 loading 动画 + "加载中...",`!hasMore && coaches.length > 0` 时显示"已加载全部"。同时引入 WXS 格式化工具 `fmt`,将硬编码值替换为 `fmt.safe()` 调用 - 修改结果:用户滚动到底部时有明确的加载反馈 ### `apps/miniprogram/miniprogram/pages/board-coach/board-coach.wxss` - 变更类型:修改 - 原始原因:新增的加载更多 UI 需要样式支持 - 思路分析:新增 `.load-more` 容器(flex 居中、padding 36rpx)、`.load-more-text`(24rpx 灰色)、`.load-more-text--end`(更浅灰色表示已加载全部) - 修改结果:加载更多区域视觉效果与整体页面风格一致 ### `apps/miniprogram/miniprogram/pages/board-customer/board-customer.ts` - 变更类型:修改 - 原始原因:客户看板同样需要懒加载功能,移除硬编码的 pageSize:100 - 思路分析:与助教看板相同的分页模式——新增分页状态、async loadData、onReachBottom、筛选重置分页。将 Mock 数据替换为真实 API 调用,新增头像颜色计算和项目标签映射。PROJECT_OPTIONS 的 value 从小写改为大写(与后端枚举一致) - 修改结果:客户看板支持触底加载更多,默认每页 20 条,不再硬编码 100 条限制 ### `apps/miniprogram/miniprogram/pages/board-customer/board-customer.wxml` - 变更类型:修改 - 原始原因:移除"前100名"硬编码文案,新增加载更多 UI - 思路分析:删除列表头部的"· 前100名"文案,totalCount 改用 `fmt.safe()` 格式化。列表末尾新增与助教看板相同的加载更多/已加载全部提示。同时新增客户项目标签(skill-tag)渲染 - 修改结果:客户列表不再暗示 100 条限制,底部有加载状态反馈 ### `apps/miniprogram/miniprogram/pages/board-customer/board-customer.wxss` - 变更类型:修改 - 原始原因:新增加载更多样式和项目标签样式 - 思路分析:新增 `.load-more` 系列样式(与助教看板一致)。新增 `.skill-tag` 及 4 种项目颜色类(chinese/snooker/mahjong/karaoke),样式与助教看板 skill-tag 保持一致。调整 `.card-grid--4` 列宽比例为 `1fr 0.6fr 0.5fr 0.6fr` - 修改结果:加载更多和项目标签的视觉效果统一 ## 风险评估 - 影响范围:助教看板和客户看板的前后端全链路 - 风险等级:中(接口契约变更,但向后兼容——新增字段不影响旧客户端) - 注意事项:助教看板采用内存分页(先全量查询再切片),当助教数量较大时可能有性能问题,但当前业务场景下助教数量通常 <100,可接受