Files
JiaZhiQianYan/src/composables/useSearchTracking.js
2025-12-04 17:41:33 +08:00

109 lines
2.0 KiB
JavaScript

import { ref } from 'vue'
import searchTracker from '@/utils/posthog/search-tracker'
/**
* 搜索追踪组合式函数
*
* 使用方式:
* const {
* onSearchFocus,
* onSearch,
* onSearchResult,
* onResultClick,
* } = useSearchTracking()
*/
export function useSearchTracking() {
// 当前搜索关键词
const currentQuery = ref('')
// 搜索结果数量
const resultCount = ref(0)
/**
* 搜索框聚焦
*/
const onSearchFocus = (pagePath = '') => {
searchTracker.onSearchFocus(pagePath)
}
/**
* 执行搜索
*/
const onSearch = (params) => {
currentQuery.value = params.query || ''
searchTracker.onSearch(params)
}
/**
* 搜索结果返回
*/
const onSearchResult = (result) => {
resultCount.value = result.total || result.list?.length || 0
searchTracker.onSearchResult(result)
}
/**
* 点击搜索结果
*/
const onResultClick = (item, position) => {
searchTracker.onResultClick(item, position)
}
/**
* 点击搜索建议
*/
const onSuggestionClick = (suggestion, position) => {
searchTracker.onSuggestionClick(suggestion, position)
currentQuery.value = suggestion
}
/**
* 点击热门搜索
*/
const onHotSearchClick = (keyword, position) => {
searchTracker.onHotSearchClick(keyword, position)
currentQuery.value = keyword
}
/**
* 点击搜索历史
*/
const onHistoryClick = (keyword, position) => {
searchTracker.onHistoryClick(keyword, position)
currentQuery.value = keyword
}
/**
* 清空搜索历史
*/
const onHistoryClear = () => {
searchTracker.onHistoryClear()
}
/**
* 重置搜索状态
*/
const reset = () => {
currentQuery.value = ''
resultCount.value = 0
searchTracker.reset()
}
return {
// 状态
currentQuery,
resultCount,
// 方法
onSearchFocus,
onSearch,
onSearchResult,
onResultClick,
onSuggestionClick,
onHotSearchClick,
onHistoryClick,
onHistoryClear,
reset,
}
}
export default useSearchTracking