diff --git a/src/views/EventDetail/hooks/useEventDetailEvents.js b/src/views/EventDetail/hooks/useEventDetailEvents.js
index 10d9446a..82d441b1 100644
--- a/src/views/EventDetail/hooks/useEventDetailEvents.js
+++ b/src/views/EventDetail/hooks/useEventDetailEvents.js
@@ -251,6 +251,77 @@ export const useEventDetailEvents = ({ event, navigate } = {}) => {
});
}, [track, event]);
+ /**
+ * 追踪评论点赞/取消点赞
+ * @param {string} commentId - 评论ID
+ * @param {boolean} isLiked - 是否点赞
+ */
+ const trackCommentLiked = useCallback((commentId, isLiked) => {
+ if (!commentId) {
+ logger.warn('useEventDetailEvents', 'Comment ID is required');
+ return;
+ }
+
+ track(isLiked ? 'Comment Liked' : 'Comment Unliked', {
+ comment_id: commentId,
+ event_id: event?.id,
+ action: isLiked ? 'like' : 'unlike',
+ timestamp: new Date().toISOString(),
+ });
+
+ logger.debug('useEventDetailEvents', `${isLiked ? '❤️' : '🤍'} Comment ${isLiked ? 'Liked' : 'Unliked'}`, {
+ commentId,
+ eventId: event?.id,
+ });
+ }, [track, event]);
+
+ /**
+ * 追踪添加评论
+ * @param {string} commentId - 评论ID
+ * @param {number} contentLength - 评论内容长度
+ */
+ const trackCommentAdded = useCallback((commentId, contentLength = 0) => {
+ if (!event || !event.id) {
+ logger.warn('useEventDetailEvents', 'Event object is required for comment tracking');
+ return;
+ }
+
+ track('Comment Added', {
+ comment_id: commentId,
+ event_id: event.id,
+ content_length: contentLength,
+ timestamp: new Date().toISOString(),
+ });
+
+ logger.debug('useEventDetailEvents', '💬 Comment Added', {
+ commentId,
+ eventId: event.id,
+ contentLength,
+ });
+ }, [track, event]);
+
+ /**
+ * 追踪删除评论
+ * @param {string} commentId - 评论ID
+ */
+ const trackCommentDeleted = useCallback((commentId) => {
+ if (!commentId) {
+ logger.warn('useEventDetailEvents', 'Comment ID is required');
+ return;
+ }
+
+ track('Comment Deleted', {
+ comment_id: commentId,
+ event_id: event?.id,
+ timestamp: new Date().toISOString(),
+ });
+
+ logger.debug('useEventDetailEvents', '🗑️ Comment Deleted', {
+ commentId,
+ eventId: event?.id,
+ });
+ }, [track, event]);
+
return {
// 页面级事件
trackEventAnalysisViewed,
@@ -264,6 +335,11 @@ export const useEventDetailEvents = ({ event, navigate } = {}) => {
// 用户行为事件
trackEventFavoriteToggled,
trackEventShared,
+
+ // 社交互动事件
+ trackCommentLiked,
+ trackCommentAdded,
+ trackCommentDeleted,
};
};
diff --git a/src/views/EventDetail/index.js b/src/views/EventDetail/index.js
index 2a5ddbc3..52bd6f2f 100644
--- a/src/views/EventDetail/index.js
+++ b/src/views/EventDetail/index.js
@@ -111,7 +111,7 @@ const StatCard = ({ icon, label, value, color }) => {
};
// 帖子组件
-const PostItem = ({ post, onRefresh }) => {
+const PostItem = ({ post, onRefresh, eventEvents }) => {
const [showComments, setShowComments] = useState(false);
const [comments, setComments] = useState([]);
const [newComment, setNewComment] = useState('');
@@ -146,8 +146,14 @@ const PostItem = ({ post, onRefresh }) => {
try {
const result = await eventService.likePost(post.id);
if (result.success) {
- setLiked(result.liked);
+ const newLikedState = result.liked;
+ setLiked(newLikedState);
setLikesCount(result.likes_count);
+
+ // 🎯 追踪评论点赞
+ if (eventEvents && eventEvents.trackCommentLiked) {
+ eventEvents.trackCommentLiked(post.id, newLikedState);
+ }
}
} catch (error) {
toast({
@@ -167,6 +173,14 @@ const PostItem = ({ post, onRefresh }) => {
});
if (result.success) {
+ // 🎯 追踪添加评论
+ if (eventEvents && eventEvents.trackCommentAdded) {
+ eventEvents.trackCommentAdded(
+ result.data?.id || post.id,
+ newComment.length
+ );
+ }
+
toast({
title: '评论发表成功',
status: 'success',
@@ -193,6 +207,11 @@ const PostItem = ({ post, onRefresh }) => {
try {
const result = await eventService.deletePost(post.id);
if (result.success) {
+ // 🎯 追踪删除评论
+ if (eventEvents && eventEvents.trackCommentDeleted) {
+ eventEvents.trackCommentDeleted(post.id);
+ }
+
toast({
title: '删除成功',
status: 'success',
@@ -824,7 +843,12 @@ const EventDetail = () => {
) : posts.length > 0 ? (
posts.map((post) => (
-
+
))
) : (