diff --git a/src/router/router-config.ts b/src/router/router-config.ts index fc39c9d..04d7594 100644 --- a/src/router/router-config.ts +++ b/src/router/router-config.ts @@ -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() +}) diff --git a/src/utils/request.ts b/src/utils/request.ts index 5a5d39f..b9ed0d2 100644 --- a/src/utils/request.ts +++ b/src/utils/request.ts @@ -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) { diff --git a/src/utils/tracking.ts b/src/utils/tracking.ts new file mode 100644 index 0000000..97e9f97 --- /dev/null +++ b/src/utils/tracking.ts @@ -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) + }) +} diff --git a/src/utils/util.ts b/src/utils/util.ts index fae7b0c..5a96222 100644 --- a/src/utils/util.ts +++ b/src/utils/util.ts @@ -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 }