import Vue from 'vue' import UniRouteGuards from '../js_sdk/pocky-route-gurads/lib/index.js' // 路由导航守卫 import { includeList } from './router.config.js' // 配置信息 import ajaxService from '@/services/ajax.service.js' import UserService from '@/services/user.service' const UserApi = new UserService(ajaxService) // 路由导航守卫 Vue.use(UniRouteGuards) const map = new Map() const bucketStack = [] const guard = new UniRouteGuards() // 截取路径参数 const getUrlParams = (appPath) => { const queryArr = appPath.split('?') const queryStr = queryArr[1] let query = queryStr.split('&') let params = {} for (let i = 0; i < query.length; i++) { let q = query[i].split('=') if (q.length === 2) { params[q[0]] = q[1] } } return params } // 校验是否为配置的路径 const isInclude = (url) => { if (!url) return false return includeList.some(item => url.indexOf(item.url) > -1) } // 校验返回页面类型 const isIncludeType = (url) => { if (!url) return false return includeList.find(item => url === item.url) } // 参数 const userSync = uni.getStorageSync('userInfo') const defaultParams = { pagePath: '', //页面路径 accessDuration: 0, //浏览时长初始值为 0 pageType: '', //页面类型 pageLabel: '', //页面标签 userId: userSync ? userSync.userId : 0, //用户Id productId: 0 //商品Id } // 上送接口Api const userRecordStatistics = (params) => { UserApi.userRecordStatistics(params) .then(response => { console.log('◆◇◆◇上送用户行为记录成功◇◆◇◆') }) .catch(error => { console.log('◇◆◇◆上送用户行为记录异常◇◆◇◆') return }) } // 跳过路由白名单拦截 guard.beforeEach((to, from, next) => { console.log('\n') console.log('◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆') console.log('guard.beforeEach') console.log('to:', to) console.log('from:', from) console.log('页面拦截状态:', isInclude(to.url)) // if (to.action !== 'navigateBack') { // bucketStack.push(to.url) // console.log('入栈:', to.url) // } if (isInclude(to.url)) { console.log('stay time started') defaultParams.pagePath = to.url if (to.url.indexOf('?') != -1) { map.set(to.url.split('?')[0], Date.now()) const urlParams = getUrlParams(to.url) if (urlParams) { defaultParams.productId = urlParams ? urlParams.id : 0 } }else{ map.set(to.url, Date.now()) } } // map.set(to.url.split('?')[0], Date.now()) console.log('◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆') console.log('\n') next() }) guard.afterEach((to, from) => { console.log('\n') console.log('◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆') console.log('guard.afterEach') console.log('to:', to) console.log('from:', from) // if (to.action === 'navigateBack') { // const lastUrl = bucketStack.pop() // map.set(lastUrl.split('?')[0], Date.now()) // const current = bucketStack[bucketStack.length - 1] // if(current){ // map.set(current.split('?')[0], Date.now()) // } // console.log('未关闭页面栈列表:', bucketStack) // } if (map.has(from.url)) { const beginTime = map.get(from.url) defaultParams.pageType = isIncludeType(from.url).pageType defaultParams.accessDuration = Date.now() - beginTime defaultParams.pageLabel = uni.getStorageSync('pageLabel') console.log('页面停留时间:', (Date.now() - beginTime), '毫秒') // api console.log('api is action ...') userRecordStatistics(defaultParams) } console.log('◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆◆') console.log('\n') })