From 5ab1a537dbf6813941d7309ad93a914f19ead2cd Mon Sep 17 00:00:00 2001 From: zerosaturation Date: Mon, 27 Jul 2026 15:47:01 +0800 Subject: [PATCH] =?UTF-8?q?feat(frontend):=20daily-task=20reportEvent=20?= =?UTF-8?q?=E6=8E=A5=E5=85=A5=20+=20exhibition=20=E9=94=99=E4=BD=8D?= =?UTF-8?q?=E5=AE=9E=E7=8E=B0=E8=BF=81=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Phase F.2 前端接入: - asset-detail.vue: onLoad 触发 daily_browse_asset reportEvent(后端幂等: status=completed/claimed 时 skip;本地不缓存避免跨天去重逻辑复杂) - exhibition.vue: 删除原 exhibition 页 onLoad 的 daily_browse_asset reportEvent 调用(错位实现,浏览发生在详情页不在展厅页) - myWorks.vue: handleAssetSelect 成功分支新增 daily_place_asset reportEvent - daily-tasks.vue: 移除多余的 task-progress 文本显示(接口不返回 current_count/target_count,前端 UI 也不展示) Co-Authored-By: Claude Fable 5 --- frontend/pages/asset-detail/asset-detail.vue | 8 ++++++++ frontend/pages/exhibition/exhibition.vue | 7 ------- frontend/pages/profile/myWorks.vue | 9 ++++++++- frontend/pages/tasks/daily-tasks.vue | 9 --------- 4 files changed, 16 insertions(+), 17 deletions(-) diff --git a/frontend/pages/asset-detail/asset-detail.vue b/frontend/pages/asset-detail/asset-detail.vue index 896fdaf..28e4b5f 100644 --- a/frontend/pages/asset-detail/asset-detail.vue +++ b/frontend/pages/asset-detail/asset-detail.vue @@ -242,6 +242,7 @@ import { ref, computed, onUnmounted } from 'vue'; import { onLoad, onShow, onHide, onUnload } from '@dcloudio/uni-app'; import { getAssetDetailApi, getMintOrderDetailApi, likeAssetApi, unlikeAssetApi, getAssetMaterialsApi, getAssetLikersApi } from '@/utils/api.js'; +import { reportEvent } from '@/utils/task-api.js'; import { getPreloadApi } from '@/utils/preloadApi/index'; import { getAssetCoverRealUrl } from '@/utils/assetImageHelper.js'; import LikeUsersModal from '@/pages/components/LikeUsersModal.vue'; @@ -857,6 +858,13 @@ onLoad((options) => { // 订阅跨页面点赞事件 uni.$on('assetLikeChanged', handleAssetLikeChangedExternal); + // 触发每日首次浏览藏品任务(spec §3 / Phase F.2) + // 后端幂等:completed/claimed 状态时 skip;本地不缓存避免跨天去重逻辑复杂 + const starIdBrowse = uni.getStorageSync('star_id') || 1; + reportEvent('daily_browse_asset', starIdBrowse).catch(err => { + console.error('上报浏览事件失败:', err); + }); + // craft_confirm 模式:不需要调用 loadData,而是加载本地表单数据 if (fromParam.value === 'craft_confirm') { craftConfirmMode.value = true; diff --git a/frontend/pages/exhibition/exhibition.vue b/frontend/pages/exhibition/exhibition.vue index 6db540d..181f43e 100644 --- a/frontend/pages/exhibition/exhibition.vue +++ b/frontend/pages/exhibition/exhibition.vue @@ -377,7 +377,6 @@ export default { import NftCard from '../components/NftCard.vue'; import { getMyGalleriesApi, placeAssetToGalleryApi, getMyAssetsApi, removeAssetFromGalleryApi, getUserGalleriesApi, getRandomGalleryApi } from '@/utils/api.js'; import { getAssetCoverRealUrl } from '@/utils/assetImageHelper.js'; - import { reportEvent } from '@/utils/task-api.js'; import GuideOverlay from "@/components/GuideOverlay.vue"; const store = useStore(); @@ -1561,12 +1560,6 @@ export default { // 加载展馆槽位信息 loadGallerySlots(); - // 上报每日首次预览事件 - const starId = uni.getStorageSync('star_id') || 1 - reportEvent('daily_browse_asset', starId).catch(err => { - console.error('上报预览事件失败:', err) - }) - // 启动倒计时定时器(每秒更新一次) countdownTimer = setInterval(() => { updateCountdowns(); diff --git a/frontend/pages/profile/myWorks.vue b/frontend/pages/profile/myWorks.vue index a3de6ba..0e154e1 100644 --- a/frontend/pages/profile/myWorks.vue +++ b/frontend/pages/profile/myWorks.vue @@ -218,7 +218,7 @@