feat: 访问埋点

This commit is contained in:
2026-05-13 17:13:25 +08:00
parent cf55389181
commit f74d4d3099
4 changed files with 49 additions and 2 deletions

View File

@@ -1,7 +1,12 @@
import i18n, { getLocaleByPath } from '@/lang'
import { trackRouteEntry } from '@/utils/tracking'
import router from './index'
router.beforeEach((to, _from, next) => {
i18n.global.locale.value = getLocaleByPath(to.path)
next()
})
router.afterEach(() => {
trackRouteEntry()
})

View File

@@ -144,7 +144,8 @@ export const Https = {
getContestantByID: '/api/global-award/contestants/', // 获取表单
getContestCount: '/api/global-award/contestants/count', // 获取已提交申请总数
getExcel: '/api/global-award/contestants/export', // 导出excel
postExportFile: '/api/global-award/contestants/export/files' // 下载指定范围文件
postExportFile: '/api/global-award/contestants/export/files', // 下载指定范围文件
visitTracking: '/api/global-award/page/visit' // 每次都调用的埋点接口
},
axiosGet(url, config) {

30
src/utils/tracking.ts Normal file
View File

@@ -0,0 +1,30 @@
import { Https } from '@/utils/request'
import { generateUuid } from '@/utils/util'
const VISIT_TRACKING_SESSION_ID_KEY = 'global_award_visit_tracking_session_id'
const getVisitTrackingSessionId = () => {
try {
const storedSessionId = window.sessionStorage.getItem(VISIT_TRACKING_SESSION_ID_KEY)
if (storedSessionId) return storedSessionId
const sessionId = generateUuid()
window.sessionStorage.setItem(VISIT_TRACKING_SESSION_ID_KEY, sessionId)
return sessionId
} catch (error) {
console.warn('[tracking] sessionStorage access failed', error)
return generateUuid()
}
}
const requestVisitTracking = async () => {
await Https.axiosPost(Https.httpUrls.visitTracking, {
sessionId: getVisitTrackingSessionId()
})
}
export const trackRouteEntry = () => {
requestVisitTracking().catch((error) => {
console.warn('[tracking] request failed', error)
})
}

View File

@@ -676,6 +676,16 @@ function sketchToMask(sketchImage) {
img.src = sketchImage
})
}
// 生成Uuid
function generateUuid() {
return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function (c) {
const r = (Math.random() * 16) | 0
const v = c === 'x' ? r : (r & 0x3) | 0x8
return v.toString(16)
})
}
export {
isEmail,
getUploadUrl,
@@ -699,5 +709,6 @@ export {
calculateGradientCoordinate,
segmentImage,
UrlToFile,
sketchToMask
sketchToMask,
generateUuid
}