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 }) }