nav.js 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  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. var dimMap = {
  27. action: '/pages/index-home/index',
  28. mind: '/pages/mind/index',
  29. body: '/pages/body/index',
  30. wisdom: '/pages/wisdom/index',
  31. wealth: '/pages/wealth/index'
  32. }
  33. var url = dimMap[dimCode]
  34. if (!url) return
  35. goPage(url)
  36. }
  37. /**
  38. * 通用页面跳转:TabBar 页用 switchTab,其他用 navigateTo
  39. */
  40. function goPage(url) {
  41. if (!url) return
  42. // 导航锁:防止快速重复点击导致 routeDone 错误
  43. if (NAV_LOCK) return
  44. NAV_LOCK = true
  45. setTimeout(function() { NAV_LOCK = false }, NAV_LOCK_DURATION)
  46. if (TAB_BAR_PAGES.indexOf(url) !== -1) {
  47. uni.switchTab({ url: url })
  48. } else {
  49. uni.navigateTo({ url: url })
  50. }
  51. }
  52. module.exports = {
  53. TAB_BAR_PAGES: TAB_BAR_PAGES,
  54. goDimension: goDimension,
  55. goPage: goPage
  56. }