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>
1 <!-- 1 <!--
2 * @Date: 2026-02-09 2 * @Date: 2026-02-09
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2026-02-09 18:55:56 4 + * @LastEditTime: 2026-02-10 09:58:37
5 * @FilePath: /lls_program/src/pages/ActivitiesDetail/index.vue 5 * @FilePath: /lls_program/src/pages/ActivitiesDetail/index.vue
6 * @Description: 活动详情页面 - 完全使用 map_activity.js 新接口,支持多活动详情展示 6 * @Description: 活动详情页面 - 完全使用 map_activity.js 新接口,支持多活动详情展示
7 --> 7 -->
...@@ -156,6 +156,7 @@ import { mockMapActivityDetailAPI } from '@/utils/mockData' ...@@ -156,6 +156,7 @@ import { mockMapActivityDetailAPI } from '@/utils/mockData'
156 156
157 // 环境变量:是否使用 mock 数据 157 // 环境变量:是否使用 mock 数据
158 const USE_MOCK_DATA = process.env.NODE_ENV === 'development' 158 const USE_MOCK_DATA = process.env.NODE_ENV === 'development'
159 +// const USE_MOCK_DATA = false
159 160
160 // 默认海报图 161 // 默认海报图
161 const defaultPoster = ref( 162 const defaultPoster = ref(
...@@ -633,8 +634,9 @@ defineExpose({ ...@@ -633,8 +634,9 @@ defineExpose({
633 */ 634 */
634 const onSharePoster = () => { 635 const onSharePoster = () => {
635 console.log('分享海报') 636 console.log('分享海报')
637 + // 传递 activityId 参数给海报页面
636 Taro.navigateTo({ 638 Taro.navigateTo({
637 - url: '/pages/PosterCheckinDetail/index', 639 + url: `/pages/PosterCheckinDetail/index?activityId=${activityId.value}`,
638 }) 640 })
639 } 641 }
640 642
...@@ -1045,15 +1047,26 @@ const initPageData = async () => { ...@@ -1045,15 +1047,26 @@ const initPageData = async () => {
1045 useLoad(options => { 1047 useLoad(options => {
1046 console.log('[ActivitiesCover] 页面加载, 参数:', options) 1048 console.log('[ActivitiesCover] 页面加载, 参数:', options)
1047 1049
1048 - // 获取活动 ID(如果有) 1050 + // 获取活动 ID(必须有)
1049 if (options.id) { 1051 if (options.id) {
1050 activityId.value = options.id 1052 activityId.value = options.id
1053 + } else if (options.activityId) {
1054 + activityId.value = options.activityId
1051 } else if (options.activity_id) { 1055 } else if (options.activity_id) {
1052 activityId.value = options.activity_id 1056 activityId.value = options.activity_id
1053 } else { 1057 } else {
1054 - // 如果没有活动ID,使用默认ID 1058 + // 如果没有活动ID,提示用户并返回
1055 - activityId.value = '1' 1059 + Taro.showToast({
1056 - console.warn('[ActivitiesCover] 未提供活动ID,使用默认ID: 1') 1060 + title: '缺少活动ID参数',
1061 + icon: 'none',
1062 + duration: 2000,
1063 + })
1064 + console.error('[ActivitiesDetail] 缺少活动ID参数')
1065 + // 返回上一页
1066 + setTimeout(() => {
1067 + Taro.navigateBack()
1068 + }, 2000)
1069 + return
1057 } 1070 }
1058 1071
1059 // 处理分享页面的授权逻辑 1072 // 处理分享页面的授权逻辑
......
1 <!-- 1 <!--
2 * @Date: 2026-02-05 19:48:00 2 * @Date: 2026-02-05 19:48:00
3 * @LastEditors: hookehuyr hookehuyr@gmail.com 3 * @LastEditors: hookehuyr hookehuyr@gmail.com
4 - * @LastEditTime: 2026-02-05 20:09:34 4 + * @LastEditTime: 2026-02-10 10:19:50
5 * @FilePath: /lls_program/src/pages/CheckinMap/index.vue 5 * @FilePath: /lls_program/src/pages/CheckinMap/index.vue
6 * @Description: 便民地图列表页 6 * @Description: 便民地图列表页
7 --> 7 -->
...@@ -43,6 +43,7 @@ import { useLoad } from '@tarojs/taro' ...@@ -43,6 +43,7 @@ import { useLoad } from '@tarojs/taro'
43 43
44 // ⚠️ MOCK 数据开关 - 开发环境使用 mock 数据,生产环境使用真实 API 44 // ⚠️ MOCK 数据开关 - 开发环境使用 mock 数据,生产环境使用真实 API
45 const USE_MOCK_DATA = process.env.NODE_ENV === 'development' 45 const USE_MOCK_DATA = process.env.NODE_ENV === 'development'
46 +// const USE_MOCK_DATA = false
46 47
47 // 默认封面图 48 // 默认封面图
48 const DEFAULT_COVER = 49 const DEFAULT_COVER =
......
...@@ -209,7 +209,13 @@ const fetchPosterDetail = async () => { ...@@ -209,7 +209,13 @@ const fetchPosterDetail = async () => {
209 // 小程序版本。正式版为 "release",体验版为 "trial"。默认是正式版 209 // 小程序版本。正式版为 "release",体验版为 "trial"。默认是正式版
210 const env_version = envVersion === 'release' ? 'release' : 'trial' 210 const env_version = envVersion === 'release' ? 'release' : 'trial'
211 211
212 - const response = await posterAPI({ env_version }) 212 + // 构建请求参数,包含 activity_id
213 + const requestParams = { env_version }
214 + if (pageParams.value.activityId) {
215 + requestParams.activity_id = pageParams.value.activityId
216 + }
217 +
218 + const response = await posterAPI(requestParams)
213 219
214 if (response.code === 1) { 220 if (response.code === 1) {
215 apiData.value = response.data 221 apiData.value = response.data
...@@ -557,6 +563,7 @@ onMounted(async () => { ...@@ -557,6 +563,7 @@ onMounted(async () => {
557 563
558 pageParams.value = { 564 pageParams.value = {
559 id: params.id || '', 565 id: params.id || '',
566 + activityId: params.activityId || params.activity_id || params.id || '', // 接收 activityId 参数
560 } 567 }
561 568
562 console.log('海报打卡页面接收到的参数:', pageParams.value) 569 console.log('海报打卡页面接收到的参数:', pageParams.value)
......