/** * 统一导航工具 * TabBar 页面列表(4个新Tab:首页/健康/成长/我的) * 五维页已移出 TabBar,统一用 navigateTo 访问 * * 【导航防抖说明】 * 快速连续多次 navigateTo 同一页面时,微信框架会因上次路由未完成而销毁 * 新创建的 webview,随后上次路由执行 routeDone 时触发 * "routeDone with a webviewId XX is not found" 错误。 * 因此所有导航统一在此加锁:导航期间(约 300ms)重复跳转自动忽略。 */ var NAV_LOCK = false var NAV_LOCK_DURATION = 300 var TAB_BAR_PAGES = [ '/pages/index-home/index', '/pages/health-main/index', '/pages/growth-main/index', '/pages/profile-main/profile' ] /** * 跳转到维度页面 * 行 = index-home(仍是 TabBar 页,用 switchTab) * 心/身/智/富 = 分包页,用 navigateTo */ function goDimension(dimCode) { var dimMap = { action: '/pages/index-home/index', mind: '/pages/mind/index', body: '/pages/body/index', wisdom: '/pages/wisdom/index', wealth: '/pages/wealth/index' } var url = dimMap[dimCode] if (!url) return goPage(url) } /** * 通用页面跳转:TabBar 页用 switchTab,其他用 navigateTo */ function goPage(url) { if (!url) return // 导航锁:防止快速重复点击导致 routeDone 错误 if (NAV_LOCK) return NAV_LOCK = true setTimeout(function() { NAV_LOCK = false }, NAV_LOCK_DURATION) if (TAB_BAR_PAGES.indexOf(url) !== -1) { uni.switchTab({ url: url }) } else { uni.navigateTo({ url: url }) } } module.exports = { TAB_BAR_PAGES: TAB_BAR_PAGES, goDimension: goDimension, goPage: goPage }