|
- import request from '@/utils/request.js'
- import API from '@/api/config.js'
- import { getUA } from '@/utils/util.js'
- import { getUser } from '@/utils/auth.js'
-
- let lastReportKey = ''
- let lastReportAt = 0
-
- function stringifyQuery(query = {}) {
- return Object.keys(query)
- .filter(key => query[key] !== undefined && query[key] !== null && query[key] !== '')
- .map(key => `${encodeURIComponent(key)}=${encodeURIComponent(query[key])}`)
- .join('&')
- }
-
- function getCurrentPageInfo() {
- const pages = getCurrentPages()
- const page = pages[pages.length - 1]
- if (!page) return null
-
- const route = page.route || ''
- const query = page.options || {}
- const queryString = stringifyQuery(query)
- const path = route ? `/${route}` : '/'
- const url = queryString ? `${path}?${queryString}` : path
-
- return {
- route,
- path,
- url
- }
- }
-
- export function reportPagePv(extra = {}) {
- const page = getCurrentPageInfo()
- if (!page) return
-
- const now = Date.now()
- const key = extra.key ? `${page.url}::${extra.key}` : page.url
- if (key === lastReportKey && now - lastReportAt < 800) return
- lastReportKey = key
- lastReportAt = now
-
- const user = getUser() || {}
- const referrer = uni.getStorageSync('pvcv_last_url') || ''
- uni.setStorageSync('pvcv_last_url', page.url)
-
- request({
- url: API.INTERFACE_PVCV_ADD,
- method: 'POST',
- params: {
- source: uni.getStorageSync('source') || '',
- referrer,
- url: page.url,
- path: page.path,
- page_key: page.route,
- user_id: user.user_id || 0,
- user_agent: getUA(),
- ...extra
- }
- }).catch(() => {
- // 统计失败不能影响页面主流程
- })
- }
-
- export function reportCv(key, extra = {}) {
- if (!key) return
- reportPagePv({
- ...extra,
- key
- })
- }
|