feat: 访问埋点
This commit is contained in:
@@ -1,7 +1,12 @@
|
|||||||
import i18n, { getLocaleByPath } from '@/lang'
|
import i18n, { getLocaleByPath } from '@/lang'
|
||||||
|
import { trackRouteEntry } from '@/utils/tracking'
|
||||||
import router from './index'
|
import router from './index'
|
||||||
|
|
||||||
router.beforeEach((to, _from, next) => {
|
router.beforeEach((to, _from, next) => {
|
||||||
i18n.global.locale.value = getLocaleByPath(to.path)
|
i18n.global.locale.value = getLocaleByPath(to.path)
|
||||||
next()
|
next()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
router.afterEach(() => {
|
||||||
|
trackRouteEntry()
|
||||||
|
})
|
||||||
|
|||||||
@@ -144,7 +144,8 @@ export const Https = {
|
|||||||
getContestantByID: '/api/global-award/contestants/', // 获取表单
|
getContestantByID: '/api/global-award/contestants/', // 获取表单
|
||||||
getContestCount: '/api/global-award/contestants/count', // 获取已提交申请总数
|
getContestCount: '/api/global-award/contestants/count', // 获取已提交申请总数
|
||||||
getExcel: '/api/global-award/contestants/export', // 导出excel
|
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) {
|
axiosGet(url, config) {
|
||||||
|
|||||||
30
src/utils/tracking.ts
Normal file
30
src/utils/tracking.ts
Normal 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)
|
||||||
|
})
|
||||||
|
}
|
||||||
@@ -676,6 +676,16 @@ function sketchToMask(sketchImage) {
|
|||||||
img.src = 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 {
|
export {
|
||||||
isEmail,
|
isEmail,
|
||||||
getUploadUrl,
|
getUploadUrl,
|
||||||
@@ -699,5 +709,6 @@ export {
|
|||||||
calculateGradientCoordinate,
|
calculateGradientCoordinate,
|
||||||
segmentImage,
|
segmentImage,
|
||||||
UrlToFile,
|
UrlToFile,
|
||||||
sketchToMask
|
sketchToMask,
|
||||||
|
generateUuid
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user