nav.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /**
  2. * 统一导航工具
  3. * TabBar 页面列表(4个新Tab:首页/健康/成长/我的)
  4. * 五维页已移出 TabBar,统一用 navigateTo 访问
  5. *
  6. * 【导航防抖说明】
  7. * 快速连续多次 navigateTo 同一页面时,微信框架会因上次路由未完成而销毁
  8. * 新创建的 webview,随后上次路由执行 routeDone 时触发
  9. * "routeDone with a webviewId XX is not found" 错误。
  10. * 因此所有导航统一在此加锁:导航期间(约 300ms)重复跳转自动忽略。
  11. */
  12. var NAV_LOCK = false
  13. var NAV_LOCK_DURATION = 300
  14. var TAB_BAR_PAGES = [
  15. '/pages/index-home/index',
  16. '/pages/health-main/index',
  17. '/pages/growth-main/index',
  18. '/pages/profile-main/profile'
  19. ]
  20. /**
  21. * 跳转到维度页面
  22. * 行 = index-home(仍是 TabBar 页,用 switchTab)
  23. * 心/身/智/富 = 分包页,用 navigateTo
  24. */
  25. function goDimension(dimCode) {
  26. // 五维页已移出主包,统一在各自分包页面通过 navigateTo 访问
  27. // 保留 wealth(已注册)及其对应的 detail 入口,其他维度避免跳转至无效页面
  28. var dimMap = {
  29. wealth: '/pages/wealth/index'
  30. }
  31. var url = dimMap[dimCode]
  32. if (!url) return
  33. goPage(url)
  34. }
  35. /**
  36. * 通用页面跳转:TabBar 页用 switchTab,其他用 navigateTo
  37. */
  38. function goPage(url) {
  39. if (!url) return
  40. // 导航锁:防止快速重复点击导致 routeDone 错误
  41. if (NAV_LOCK) return
  42. NAV_LOCK = true
  43. setTimeout(function() { NAV_LOCK = false }, NAV_LOCK_DURATION)
  44. if (TAB_BAR_PAGES.indexOf(url) !== -1) {
  45. uni.switchTab({ url: url })
  46. } else {
  47. uni.navigateTo({ url: url })
  48. }
  49. }
  50. module.exports = {
  51. TAB_BAR_PAGES: TAB_BAR_PAGES,
  52. goDimension: goDimension,
  53. goPage: goPage
  54. }