diff --git a/src/components/OCardItem.vue b/src/components/OCardItem.vue index 966a1d98568b970adce9ea7c97ee7ddc18288424..c91822c798f290935152fcce5f37a3cbb87e5fc3 100644 --- a/src/components/OCardItem.vue +++ b/src/components/OCardItem.vue @@ -11,7 +11,7 @@ import { maintainerDefaults } from '@/data/query'; import defaultImg from '@/assets/default-logo.png'; import IconUser from '~icons/app/icon-user.svg'; -import { oaReport } from '@/shared/analytics'; +import { oaReport, searchReport } from '@/shared/analytics'; import { dataType } from 'element-plus/es/components/table-v2/src/common.mjs'; const props = defineProps({ @@ -85,7 +85,7 @@ const reportAnalytics = (data: Record, event = 'click') => { module = 'field'; } if (isPageSearch.value) { - oaReport( + searchReport( event, { module, @@ -95,18 +95,22 @@ const reportAnalytics = (data: Record, event = 'click') => { architecture: props.data.arch, ...data, }, - 'search_software' + { immediate: true } ); return; } - oaReport(event, { - module, - app_name: xssAllTag(props.data.name), - version: props.data.version, - os_version: props.data.os, - architecture: props.data.arch, - ...data, - }); + oaReport( + event, + { + module, + app_name: xssAllTag(props.data.name), + version: props.data.version, + os_version: props.data.os, + architecture: props.data.arch, + ...data, + }, + { immediate: true } + ); }; const onClickLink = (event: MouseEvent, isTag?: boolean) => { diff --git a/src/components/OTableItemNew.vue b/src/components/OTableItemNew.vue index d19c7cdb14da608d557398c1b67680b033b23bc4..6626d1f7a30c4930df90eab9a30646509ca4b941 100644 --- a/src/components/OTableItemNew.vue +++ b/src/components/OTableItemNew.vue @@ -5,7 +5,7 @@ import { useLocale } from '@/composables/useLocale'; import { formatDateTime, checkOriginLink, windowOpen, xssAllTag, getPkgName } from '@/utils/common'; import { useI18n } from 'vue-i18n'; import { SORTPARAMS } from '@/data/query'; -import { oaReport } from '@/shared/analytics'; +import { oaReport, searchReport } from '@/shared/analytics'; import OCodeCopy from '@/components/OCodeCopy.vue'; import ExternalLink from '@/components/ExternalLink.vue'; @@ -54,21 +54,25 @@ const isPageSearch = computed(() => route.name === 'search'); const reportAnalytics = (data: Record, event = 'click') => { if (isPageSearch.value) { - oaReport( + searchReport( event, { module: 'search_page', tab: route.query.tab ?? '', ...data, }, - 'search_portal' + { immediate: true } ); return; } - oaReport(event, { - module: route.name, - ...data, - }); + oaReport( + event, + { + module: route.name, + ...data, + }, + { immediate: true } + ); }; const showDlg = ref(false); diff --git a/src/components/detail/DetailAside.vue b/src/components/detail/DetailAside.vue index 696a2b3c0c5a8851c473bd65a8286b1995e13853..eb00c86045c2ac02818d0922a1e919fc25d24a1e 100644 --- a/src/components/detail/DetailAside.vue +++ b/src/components/detail/DetailAside.vue @@ -16,7 +16,6 @@ import { useRoute } from 'vue-router'; import IconChevronDown from '~icons/app/icon-chevron-down.svg'; import IconState from '~icons/pkg/icon-state.svg'; import IconLevel from '~icons/pkg/icon-level.svg'; -import { oaReport } from '@/shared/analytics'; import { inject } from 'vue'; import type { Ref } from 'vue'; import { pkgIdInjection } from '@/data/injectionKeys'; diff --git a/src/components/filter/FilterHeader.vue b/src/components/filter/FilterHeader.vue index 7547afb178e127aac26cb8600a35a45cce13bb18..43a39028d82cf6ca02c70b61978f0ad135a8988a 100644 --- a/src/components/filter/FilterHeader.vue +++ b/src/components/filter/FilterHeader.vue @@ -10,7 +10,7 @@ import { useSearchStore } from '@/stores/search'; import IconTimeOrder from '~icons/app/icon-time-order.svg'; import IconSearch from '~icons/app/icon-search.svg'; -import { oaReport } from '@/shared/analytics'; +import { searchReport } from '@/shared/analytics'; const props = defineProps({ title: { @@ -94,7 +94,7 @@ const replaceWinUrl = () => { const collectDownloadData = (keyword: string) => { const { href } = window.location; const downloadTime = new Date(); - oaReport( + searchReport( 'search', { origin: href, @@ -102,8 +102,7 @@ const collectDownloadData = (keyword: string) => { filter: 'all', pkg: props.title, downloadTime, - }, - 'search_software' + } ); }; diff --git a/src/components/search/SearchFilter.vue b/src/components/search/SearchFilter.vue index b3d4b5132ad4cdd9f8111d8d5bdbc48694acebc2..0323e422fb97bc66cb6208688f28a7e1d8140c41 100644 --- a/src/components/search/SearchFilter.vue +++ b/src/components/search/SearchFilter.vue @@ -15,7 +15,7 @@ import { TABNAME_OPTIONS, FLITERMENUOPTIONS } from '@/data/query'; import SearchRecommend from '@/components/search/SearchRecommend.vue'; import IconSearch from '~icons/app/icon-search.svg'; -import { oaReport } from '@/shared/analytics'; +import { searchReport } from '@/shared/analytics'; defineProps({ placeholder: { @@ -43,13 +43,12 @@ const tabName = ref('all'); const fliterSelected = ref(defaultValue.value); const reportAnalytics = (data: Record, event = 'click') => { - oaReport( + searchReport( event, { module: isPageHome.value ? 'home_page' : 'search_page', ...data, - }, - 'search_software' + } ); }; diff --git a/src/components/search/SearchRecommend.vue b/src/components/search/SearchRecommend.vue index d76230c1eb038ee97da9625e0f8064393b0a3e28..8337c9b8e10482f1ff4f55acb0fa0235dc363b48 100644 --- a/src/components/search/SearchRecommend.vue +++ b/src/components/search/SearchRecommend.vue @@ -12,7 +12,7 @@ import { useLocale } from '@/composables/useLocale'; import useSearchHistory from '@/composables/useSearchHistory'; import IconChevronRight from '~icons/app/icon-chevron-right.svg'; -import { oaReport } from '@/shared/analytics'; +import { searchReport } from '@/shared/analytics'; const props = defineProps({ searchValue: { @@ -42,15 +42,14 @@ const isShow = ref(props.isFeedback); const isPageHome = computed(() => route.name === 'home'); const reportAnalytics = (data: Record, event = 'click') => { - oaReport( + searchReport( event, { module: isPageHome.value ? 'home_page' : 'search_page', content: props.searchValue, ...data, ...(route.query.tab ? { tab: route.query.tab } : {}), - }, - 'search_software' + } ); }; diff --git a/src/shared/analytics/index.ts b/src/shared/analytics/index.ts index add6c1b44dfd4c202f6832a4729dffb7771ee1e6..129e5e417d4e7bab9743890f2002e94b654bbf3f 100644 --- a/src/shared/analytics/index.ts +++ b/src/shared/analytics/index.ts @@ -60,36 +60,36 @@ export const disableOA = () => { }); }; -/** - * @param event 事件名 - * @param eventData 上报数据 - * @param $service service字段取值 - * @param options options - */ -export const oaReport = >( - event: string, - eventData?: T | ((...opt: any[]) => Awaitable), - $service = 'software', - options?: { - immediate?: boolean; - eventOptions?: any; - } -) => { - if (!oa.enabled) { - return; - } - const loginStore = useLoginStore(); - return oa.report( - event, - async () => ({ - $service, - loginStatus: loginStore.isLogined, - ...(typeof eventData === 'function' ? await eventData() : eventData), - }), - options - ); +type Service = 'software' | 'search_software' + +export const getReportFn = ($service: Service = 'software') => { + return ( + event: string, + data?: Record | ((...opt: any[]) => Awaitable>), + options?: { + immediate?: boolean; + eventOptions?: any; + } + ) => { + if (!oa.enabled) { + return; + } + const loginStore = useLoginStore(); + return oa.report( + event, + async () => ({ + $service, + loginStatus: loginStore.isLogined, + ...(typeof data === 'function' ? await data() : data), + }), + options + ); + }; }; +export const searchReport = getReportFn('search_software'); +export const oaReport = getReportFn(); + export const reportPV = ($referrer?: string) => { oaReport(OpenEventKeys.PV, $referrer ? { $referrer } : undefined); }; diff --git a/src/views/image/TheImageDetail.vue b/src/views/image/TheImageDetail.vue index 284e1d47ebf1bd945f5e056978551a93bac81242..86ba44b08ed55118cf3317cd2496e6ddf06d06d5 100644 --- a/src/views/image/TheImageDetail.vue +++ b/src/views/image/TheImageDetail.vue @@ -19,7 +19,6 @@ import { getCode } from '@/utils/common'; import defaultImg from '@/assets/default-logo.png'; import { pkgIdInjection } from '@/data/injectionKeys'; -import { oaReport } from '@/shared/analytics'; import useDetailPageAnalytics from '@/composables/useDetailPageAnalytics'; const tabValue = ref('apppkg');