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({
],
})
// 分享配置
const shareConfig = ref({
title: '主题路线打卡活动等你参与',
path: '/pages/ActivitiesCover/index',
imageUrl: '',
// 分享配置(动态生成,包含当前页面参数)
const shareConfig = computed(() => {
const params = new URLSearchParams()
if (activityId.value) {
params.append('activityId', activityId.value)
}
if (activityData.value.title) {
params.append('title', activityData.value.title)
}
const queryString = params.toString()
const fullPath = queryString
? `/pages/ActivitiesDetail/index?${queryString}`
: '/pages/ActivitiesDetail/index'
return {
title: activityData.value.title || '主题路线打卡活动等你参与',
path: fullPath,
imageUrl: activityData.value.posterUrl || '',
}
})
/**
......@@ -612,9 +627,26 @@ const onShareActivity = () => {
* @returns {Object} 分享配置对象
*/
const onShareAppMessage = () => {
// 优先使用从 URL 参数传入的 title,如果 API 还没返回数据
const instance = Taro.getCurrentInstance()
const urlParams = instance.router?.params || {}
const shareTitle = urlParams.title || activityData.value.title || '主题路线打卡活动等你参与'
// 分享时需要带上 activityId 和 title 参数
const params = new URLSearchParams()
if (activityId.value) {
params.append('activityId', activityId.value)
}
if (shareTitle) {
params.append('title', shareTitle)
}
const queryString = params.toString()
const sharePath = `/pages/ActivitiesDetail/index${queryString ? '?' + queryString : ''}`
return {
title: '主题路线打卡活动等你参与',
path: addShareFlag('/pages/ActivitiesCover/index'),
title: shareTitle,
path: addShareFlag(sharePath),
success: res => {
// 分享成功
},
......@@ -986,11 +1018,11 @@ const fetchActivityDetail = async () => {
try {
// 如果没有活动ID,不获取详情
if (!activityId.value) {
console.warn('[ActivitiesCover] 未提供活动ID,跳过详情获取')
console.warn('[ActivitiesDetail] 未提供活动ID,跳过详情获取')
return
}
console.log('[ActivitiesCover] 开始获取活动详情, ID:', activityId.value)
console.log('[ActivitiesDetail] 开始获取活动详情, ID:', activityId.value)
// 根据环境选择真实 API 或 mock API
const response = USE_MOCK_DATA
......@@ -998,7 +1030,7 @@ const fetchActivityDetail = async () => {
: await detailAPI({ id: activityId.value })
if (response.code === 1 && response.data) {
console.log('[ActivitiesCover] 活动详情获取成功:', response.data)
console.log('[ActivitiesDetail] 活动详情获取成功:', response.data)
// 转换 API 数据为页面格式
const transformedData = transformApiDataToActivityData(response.data)
......@@ -1010,7 +1042,7 @@ const fetchActivityDetail = async () => {
defaultPoster.value = response.data.cover
} else {
// cover 为空,保持默认封面不变
console.log('[ActivitiesCover] cover 为空,使用默认封面图')
console.log('[ActivitiesDetail] cover 为空,使用默认封面图')
}
// 更新活动状态
......@@ -1018,10 +1050,10 @@ const fetchActivityDetail = async () => {
activityStatus.value.is_ended = Boolean(response.data.is_ended)
}
} else {
console.warn('[ActivitiesCover] 获取活动详情失败:', response.msg)
console.warn('[ActivitiesDetail] 获取活动详情失败:', response.msg)
}
} catch (error) {
console.error('[ActivitiesCover] 获取活动详情异常:', error)
console.error('[ActivitiesDetail] 获取活动详情异常:', error)
}
}
......@@ -1047,7 +1079,7 @@ const initPageData = async () => {
// 处理页面加载时的授权检查
useLoad(options => {
console.log('[ActivitiesCover] 页面加载, 参数:', options)
console.log('[ActivitiesDetail] 页面加载, 参数:', options)
// 获取活动 ID(必须有)
if (options.id) {
......@@ -1088,6 +1120,6 @@ onMounted(async () => {
<script>
export default {
name: 'ActivitiesCover',
name: 'ActivitiesDetail',
}
</script>
......