hookehuyr

fix(ActivitiesDetail): 修复分享海报缺少活动ID的问题

**问题描述**:
点击分享海报按钮时提示"缺少活动ID"

**根本原因**:
1. ActivitiesDetail 页面跳转到海报页面时没有传递 activityId 参数
2. PosterCheckinDetail 页面调用 posterAPI 时没有传递 activity_id 参数

**修改内容**:

### src/pages/ActivitiesDetail/index.vue
- 修复 onSharePoster 函数,跳转时传递 activityId 参数
- 优化 useLoad 钩子,支持 id/activityId/activity_id 三种参数名
- 移除默认ID逻辑,改为友好提示并返回上一页

### src/pages/PosterCheckinDetail/index.vue
- 修改 onMounted 钩子,读取 URL 中的 activityId 参数
- 修改 fetchPosterDetail 函数,将 activityId 传递给 posterAPI

### src/pages/CheckinMap/index.vue
- 更新 LastEditTime

**测试建议**:
1. 打开活动详情页(确保URL有activityId参数)
2. 点击"分享海报"按钮
3. 应该能正常显示海报打卡页面

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
<!--
* @Date: 2026-02-09
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-02-09 18:55:56
* @LastEditTime: 2026-02-10 09:58:37
* @FilePath: /lls_program/src/pages/ActivitiesDetail/index.vue
* @Description: 活动详情页面 - 完全使用 map_activity.js 新接口,支持多活动详情展示
-->
......@@ -156,6 +156,7 @@ import { mockMapActivityDetailAPI } from '@/utils/mockData'
// 环境变量:是否使用 mock 数据
const USE_MOCK_DATA = process.env.NODE_ENV === 'development'
// const USE_MOCK_DATA = false
// 默认海报图
const defaultPoster = ref(
......@@ -633,8 +634,9 @@ defineExpose({
*/
const onSharePoster = () => {
console.log('分享海报')
// 传递 activityId 参数给海报页面
Taro.navigateTo({
url: '/pages/PosterCheckinDetail/index',
url: `/pages/PosterCheckinDetail/index?activityId=${activityId.value}`,
})
}
......@@ -1045,15 +1047,26 @@ const initPageData = async () => {
useLoad(options => {
console.log('[ActivitiesCover] 页面加载, 参数:', options)
// 获取活动 ID(如果有)
// 获取活动 ID(必须有)
if (options.id) {
activityId.value = options.id
} else if (options.activityId) {
activityId.value = options.activityId
} else if (options.activity_id) {
activityId.value = options.activity_id
} else {
// 如果没有活动ID,使用默认ID
activityId.value = '1'
console.warn('[ActivitiesCover] 未提供活动ID,使用默认ID: 1')
// 如果没有活动ID,提示用户并返回
Taro.showToast({
title: '缺少活动ID参数',
icon: 'none',
duration: 2000,
})
console.error('[ActivitiesDetail] 缺少活动ID参数')
// 返回上一页
setTimeout(() => {
Taro.navigateBack()
}, 2000)
return
}
// 处理分享页面的授权逻辑
......
<!--
* @Date: 2026-02-05 19:48:00
* @LastEditors: hookehuyr hookehuyr@gmail.com
* @LastEditTime: 2026-02-05 20:09:34
* @LastEditTime: 2026-02-10 10:19:50
* @FilePath: /lls_program/src/pages/CheckinMap/index.vue
* @Description: 便民地图列表页
-->
......@@ -43,6 +43,7 @@ import { useLoad } from '@tarojs/taro'
// ⚠️ MOCK 数据开关 - 开发环境使用 mock 数据,生产环境使用真实 API
const USE_MOCK_DATA = process.env.NODE_ENV === 'development'
// const USE_MOCK_DATA = false
// 默认封面图
const DEFAULT_COVER =
......
......@@ -209,7 +209,13 @@ const fetchPosterDetail = async () => {
// 小程序版本。正式版为 "release",体验版为 "trial"。默认是正式版
const env_version = envVersion === 'release' ? 'release' : 'trial'
const response = await posterAPI({ env_version })
// 构建请求参数,包含 activity_id
const requestParams = { env_version }
if (pageParams.value.activityId) {
requestParams.activity_id = pageParams.value.activityId
}
const response = await posterAPI(requestParams)
if (response.code === 1) {
apiData.value = response.data
......@@ -557,6 +563,7 @@ onMounted(async () => {
pageParams.value = {
id: params.id || '',
activityId: params.activityId || params.activity_id || params.id || '', // 接收 activityId 参数
}
console.log('海报打卡页面接收到的参数:', pageParams.value)
......