router.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. import Vue from 'vue'
  2. import UniRouteGuards from '../js_sdk/pocky-route-gurads/lib/index.js' // 路由导航守卫
  3. import { includeList } from './router.config.js' // 配置信息
  4. import ajaxService from '@/services/ajax.service.js'
  5. import UserService from '@/services/user.service'
  6. const UserApi = new UserService(ajaxService)
  7. // 路由导航守卫
  8. Vue.use(UniRouteGuards)
  9. const map = new Map()
  10. const bucketStack = []
  11. const guard = new UniRouteGuards()
  12. // 截取路径参数
  13. const getUrlParams = (appPath) => {
  14. const queryArr = appPath.split('?')
  15. const queryStr = queryArr[1]
  16. let query = queryStr.split('&')
  17. let params = {}
  18. for (let i = 0; i < query.length; i++) {
  19. let q = query[i].split('=')
  20. console.log(q, 'q')
  21. if (q.length === 2) {
  22. params[q[0]] = q[1]
  23. }
  24. }
  25. return params
  26. }
  27. // 校验是否为配置的路径
  28. const isInclude = (url) => {
  29. if (!url) return false
  30. return includeList.some(item => url.indexOf(item.url) > -1)
  31. }
  32. // 参数
  33. const userSync = uni.getStorageSync('userInfo')
  34. const defaultParams = {
  35. pagePath: '', //页面路径
  36. accessDuration: 0, //浏览时长初始值为 0
  37. pageType: '', //页面类型
  38. pageLabel: '', //页面标签
  39. userId: userSync ? userSync.userId : 0, //用户Id
  40. productId: 0 //商品Id
  41. }
  42. // 上送接口Api
  43. const userRecordStatistics = (params) => {
  44. UserApi.userRecordStatistics(params)
  45. .then(response => {
  46. console.log('<=上送用户行为记录成功=>',response.msg)
  47. })
  48. .catch(error => {
  49. console.log('<=上送用户行为记录异常=>',error.msg)
  50. return
  51. })
  52. }
  53. // 跳过路由白名单拦截
  54. guard.beforeEach((to, from, next) => {
  55. console.log('\n')
  56. console.log('============')
  57. console.log('guard.beforeEach')
  58. console.log('to:', to)
  59. console.log('from:', from)
  60. console.log('页面拦截状态:', isInclude(to.url))
  61. // if (to.action !== 'navigateBack') {
  62. // bucketStack.push(to.url)
  63. // console.log('入栈:', to.url)
  64. // }
  65. if (isInclude(to.url)) {
  66. console.log('stay time started')
  67. map.set(to.url.split('?')[0], Date.now())
  68. defaultParams.pagePath = to.url
  69. console.log('pagePath', defaultParams.pagePath)
  70. const urlParams = getUrlParams(to.url)
  71. if(urlParams){
  72. defaultParams.productId = urlParams ? urlParams.id : 0
  73. console.log('defaultParams', defaultParams)
  74. }
  75. }
  76. // map.set(to.url.split('?')[0], Date.now())
  77. console.log('============')
  78. console.log('\n')
  79. next()
  80. })
  81. guard.afterEach((to, from) => {
  82. console.log('\n')
  83. console.log('============')
  84. console.log('guard.afterEach')
  85. console.log('to:', to)
  86. console.log('from:', from)
  87. // if (to.action === 'navigateBack') {
  88. // const lastUrl = bucketStack.pop()
  89. // map.set(lastUrl.split('?')[0], Date.now())
  90. // const current = bucketStack[bucketStack.length - 1]
  91. // if(current){
  92. // map.set(current.split('?')[0], Date.now())
  93. // }
  94. // console.log('未关闭页面栈列表:', bucketStack)
  95. // }
  96. if (map.has(from.url)) {
  97. const beginTime = map.get(from.url)
  98. defaultParams.accessDuration = Date.now() - beginTime
  99. console.log('页面停留时间:', (Date.now() - beginTime), '秒')
  100. // api
  101. console.log('api is action ...')
  102. userRecordStatistics(defaultParams)
  103. }
  104. console.log('============')
  105. console.log('\n')
  106. })