hookehuyr

fix(ActivitiesDetail): 修复分享功能参数传递和页面引用

- 修复分享配置(shareConfig)改为动态计算,包含activityId和title参数
- 修复onShareAppMessage函数,完整传递activityId和title参数
- 优先使用URL参数的title,避免API未返回时标题为空
- 将所有ActivitiesCover页面引用改为ActivitiesDetail
- 更新所有日志前缀从[ActivitiesCover]改为[ActivitiesDetail]

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
...@@ -274,11 +274,26 @@ const activityData = ref({ ...@@ -274,11 +274,26 @@ const activityData = ref({
274 ], 274 ],
275 }) 275 })
276 276
277 -// 分享配置 277 +// 分享配置(动态生成,包含当前页面参数)
278 -const shareConfig = ref({ 278 +const shareConfig = computed(() => {
279 - title: '主题路线打卡活动等你参与', 279 + const params = new URLSearchParams()
280 - path: '/pages/ActivitiesCover/index', 280 + if (activityId.value) {
281 - imageUrl: '', 281 + params.append('activityId', activityId.value)
282 + }
283 + if (activityData.value.title) {
284 + params.append('title', activityData.value.title)
285 + }
286 +
287 + const queryString = params.toString()
288 + const fullPath = queryString
289 + ? `/pages/ActivitiesDetail/index?${queryString}`
290 + : '/pages/ActivitiesDetail/index'
291 +
292 + return {
293 + title: activityData.value.title || '主题路线打卡活动等你参与',
294 + path: fullPath,
295 + imageUrl: activityData.value.posterUrl || '',
296 + }
282 }) 297 })
283 298
284 /** 299 /**
...@@ -612,9 +627,26 @@ const onShareActivity = () => { ...@@ -612,9 +627,26 @@ const onShareActivity = () => {
612 * @returns {Object} 分享配置对象 627 * @returns {Object} 分享配置对象
613 */ 628 */
614 const onShareAppMessage = () => { 629 const onShareAppMessage = () => {
630 + // 优先使用从 URL 参数传入的 title,如果 API 还没返回数据
631 + const instance = Taro.getCurrentInstance()
632 + const urlParams = instance.router?.params || {}
633 + const shareTitle = urlParams.title || activityData.value.title || '主题路线打卡活动等你参与'
634 +
635 + // 分享时需要带上 activityId 和 title 参数
636 + const params = new URLSearchParams()
637 + if (activityId.value) {
638 + params.append('activityId', activityId.value)
639 + }
640 + if (shareTitle) {
641 + params.append('title', shareTitle)
642 + }
643 +
644 + const queryString = params.toString()
645 + const sharePath = `/pages/ActivitiesDetail/index${queryString ? '?' + queryString : ''}`
646 +
615 return { 647 return {
616 - title: '主题路线打卡活动等你参与', 648 + title: shareTitle,
617 - path: addShareFlag('/pages/ActivitiesCover/index'), 649 + path: addShareFlag(sharePath),
618 success: res => { 650 success: res => {
619 // 分享成功 651 // 分享成功
620 }, 652 },
...@@ -986,11 +1018,11 @@ const fetchActivityDetail = async () => { ...@@ -986,11 +1018,11 @@ const fetchActivityDetail = async () => {
986 try { 1018 try {
987 // 如果没有活动ID,不获取详情 1019 // 如果没有活动ID,不获取详情
988 if (!activityId.value) { 1020 if (!activityId.value) {
989 - console.warn('[ActivitiesCover] 未提供活动ID,跳过详情获取') 1021 + console.warn('[ActivitiesDetail] 未提供活动ID,跳过详情获取')
990 return 1022 return
991 } 1023 }
992 1024
993 - console.log('[ActivitiesCover] 开始获取活动详情, ID:', activityId.value) 1025 + console.log('[ActivitiesDetail] 开始获取活动详情, ID:', activityId.value)
994 1026
995 // 根据环境选择真实 API 或 mock API 1027 // 根据环境选择真实 API 或 mock API
996 const response = USE_MOCK_DATA 1028 const response = USE_MOCK_DATA
...@@ -998,7 +1030,7 @@ const fetchActivityDetail = async () => { ...@@ -998,7 +1030,7 @@ const fetchActivityDetail = async () => {
998 : await detailAPI({ id: activityId.value }) 1030 : await detailAPI({ id: activityId.value })
999 1031
1000 if (response.code === 1 && response.data) { 1032 if (response.code === 1 && response.data) {
1001 - console.log('[ActivitiesCover] 活动详情获取成功:', response.data) 1033 + console.log('[ActivitiesDetail] 活动详情获取成功:', response.data)
1002 1034
1003 // 转换 API 数据为页面格式 1035 // 转换 API 数据为页面格式
1004 const transformedData = transformApiDataToActivityData(response.data) 1036 const transformedData = transformApiDataToActivityData(response.data)
...@@ -1010,7 +1042,7 @@ const fetchActivityDetail = async () => { ...@@ -1010,7 +1042,7 @@ const fetchActivityDetail = async () => {
1010 defaultPoster.value = response.data.cover 1042 defaultPoster.value = response.data.cover
1011 } else { 1043 } else {
1012 // cover 为空,保持默认封面不变 1044 // cover 为空,保持默认封面不变
1013 - console.log('[ActivitiesCover] cover 为空,使用默认封面图') 1045 + console.log('[ActivitiesDetail] cover 为空,使用默认封面图')
1014 } 1046 }
1015 1047
1016 // 更新活动状态 1048 // 更新活动状态
...@@ -1018,10 +1050,10 @@ const fetchActivityDetail = async () => { ...@@ -1018,10 +1050,10 @@ const fetchActivityDetail = async () => {
1018 activityStatus.value.is_ended = Boolean(response.data.is_ended) 1050 activityStatus.value.is_ended = Boolean(response.data.is_ended)
1019 } 1051 }
1020 } else { 1052 } else {
1021 - console.warn('[ActivitiesCover] 获取活动详情失败:', response.msg) 1053 + console.warn('[ActivitiesDetail] 获取活动详情失败:', response.msg)
1022 } 1054 }
1023 } catch (error) { 1055 } catch (error) {
1024 - console.error('[ActivitiesCover] 获取活动详情异常:', error) 1056 + console.error('[ActivitiesDetail] 获取活动详情异常:', error)
1025 } 1057 }
1026 } 1058 }
1027 1059
...@@ -1047,7 +1079,7 @@ const initPageData = async () => { ...@@ -1047,7 +1079,7 @@ const initPageData = async () => {
1047 1079
1048 // 处理页面加载时的授权检查 1080 // 处理页面加载时的授权检查
1049 useLoad(options => { 1081 useLoad(options => {
1050 - console.log('[ActivitiesCover] 页面加载, 参数:', options) 1082 + console.log('[ActivitiesDetail] 页面加载, 参数:', options)
1051 1083
1052 // 获取活动 ID(必须有) 1084 // 获取活动 ID(必须有)
1053 if (options.id) { 1085 if (options.id) {
...@@ -1088,6 +1120,6 @@ onMounted(async () => { ...@@ -1088,6 +1120,6 @@ onMounted(async () => {
1088 1120
1089 <script> 1121 <script>
1090 export default { 1122 export default {
1091 - name: 'ActivitiesCover', 1123 + name: 'ActivitiesDetail',
1092 } 1124 }
1093 </script> 1125 </script>
......