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>
Showing
1 changed file
with
47 additions
and
15 deletions
| ... | @@ -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> | ... | ... |
-
Please register or login to post a comment