包含多个会话的累积代码变更: - backend: AI 聊天服务、触发器调度、认证增强、WebSocket、调度器最小间隔 - admin-web: ETL 状态页、任务管理、调度配置、登录优化 - miniprogram: 看板页面、聊天集成、UI 组件、导航更新 - etl: DWS 新任务(finance_area_daily/board_cache)、连接器增强 - tenant-admin: 项目初始化 - db: 19 个迁移脚本(etl_feiqiu 11 + zqyy_app 8) - packages/shared: 枚举和工具函数更新 - tools: 数据库工具、报表生成、健康检查 - docs: PRD/架构/部署/合约文档更新 Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
3.5 KiB
3.5 KiB
P8→NS1/RNS1 缺失项 #1:三看板 Tab 切换的缓存策略
简要结论
- 状态:⚠️ 部分解决
- 风险等级:🔴 高
- 三看板 Tab 切换已实现,但采用页面跳转而非组件切换,切换回来时不保持筛选状态和滚动位置。
详细审查
审查范围
apps/miniprogram/miniprogram/app.json(tabBar 配置)apps/miniprogram/miniprogram/custom-tab-bar/index.ts(自定义 TabBar)apps/miniprogram/miniprogram/components/board-tab-bar/board-tab-bar.ts(看板内 Tab 组件)apps/miniprogram/miniprogram/pages/board-finance/board-finance.ts(财务看板 Tab 切换)apps/miniprogram/miniprogram/pages/board-coach/board-coach.ts(助教看板 Tab 切换)apps/miniprogram/miniprogram/pages/board-customer/board-customer.ts(客户看板 Tab 切换)
发现
-
Tab 切换方式:页面跳转,非组件内切换
app.json中 tabBar 仅注册了board-finance为 tabBar 页面board-customer和board-coach是普通页面(非 tabBar 页面)- 从
board-finance切换到其他看板使用wx.navigateTo()(页面栈压入) - 从
board-coach/board-customer切换到board-finance使用wx.switchTab()(清空页面栈)
-
筛选状态不保持
- 每个看板页面的筛选状态(
selectedSort、selectedDimension、selectedTime等)存储在 Page data 中 - 使用
wx.navigateTo跳转时,离开的页面会被销毁(返回时重新onLoad) - 使用
wx.switchTab回到board-finance时,该页面会触发onShow但不会重新onLoad(tabBar 页面有缓存) - 但
board-coach和board-customer作为非 tabBar 页面,每次进入都会重新创建
- 每个看板页面的筛选状态(
-
滚动位置不保持
- 三个看板页面均无滚动位置保存/恢复逻辑
- 页面重新加载后滚动位置归零
-
切换动画
- 未实现 P8 定义的切换动画
- 使用微信默认的页面跳转动画(右滑进入/左滑返回)
证据
// board-finance.ts — 切换到其他看板
onTabChange(e: WechatMiniprogram.TouchEvent) {
const tab = e.currentTarget.dataset.tab as string
if (tab === 'customer') {
wx.navigateTo({ url: '/pages/board-customer/board-customer' })
} else if (tab === 'coach') {
wx.navigateTo({ url: '/pages/board-coach/board-coach' })
}
}
// board-coach.ts — 切换回财务看板
onTabChange(e: WechatMiniprogram.TouchEvent) {
const tab = e.currentTarget.dataset.tab as string
if (tab === 'finance') {
wx.switchTab({ url: '/pages/board-finance/board-finance' })
} else if (tab === 'customer') {
wx.navigateTo({ url: '/pages/board-customer/board-customer' })
}
}
// app.json — 仅 board-finance 是 tabBar 页面
"tabBar": {
"custom": true,
"list": [
{ "pagePath": "pages/task-list/task-list", "text": "任务" },
{ "pagePath": "pages/board-finance/board-finance", "text": "看板" },
{ "pagePath": "pages/my-profile/my-profile", "text": "我的" }
]
}
建议
- 方案 A(推荐):将筛选状态持久化到
getApp().globalData或wx.setStorageSync,页面onLoad时恢复 - 方案 B:将三个看板合并为一个页面,使用
wx:if或hidden切换内容区域,天然保持状态 - 滚动位置可通过
onPageScroll记录 +onLoad时wx.pageScrollTo恢复 - 切换动画可通过 CSS transition 在顶部 Tab 区域实现高亮滑动效果