const axios = require('axios'); // 模拟小程序端的GraphQL请求 async function testNavigationParams() { console.log('🔍 测试首页活动数据和导航参数...\n'); try { // 1. 获取首页活动列表数据 const query = ` query GetActivitiesAndBanners($page: Int!, $size: Int!, $keyword: String, $status: String) { activities(page: $page, size: $size, keyword: $keyword, status: $status) { content { id name description signupDeadline matchTime address state stateName playerCount playerMax coverImage { fullUrl } } totalElements totalPages number size } } `; const variables = { page: 0, size: 10, keyword: null, status: null }; const response = await axios.post('http://localhost:8080/graphql', { query, variables }, { headers: { 'Content-Type': 'application/json' } }); if (response.data.errors) { console.error('❌ GraphQL错误:', response.data.errors); return; } const activities = response.data.data.activities.content; console.log(`📊 获取到 ${activities.length} 个活动\n`); // 2. 分析每个活动的ID和基本信息 console.log('🎯 活动ID和基本信息:'); console.log('────────────────────────────────────────────────────────────────────────────────'); console.log('ID 活动名称 报名截止时间 比赛时间 状态'); console.log('────────────────────────────────────────────────────────────────────────────────'); activities.forEach(activity => { const id = String(activity.id).padEnd(4); const name = (activity.name || '').substring(0, 15).padEnd(15); const signupDeadline = (activity.signupDeadline || '').substring(0, 16).padEnd(16); const matchTime = (activity.matchTime || '').substring(0, 16).padEnd(16); const state = activity.stateName || activity.state || ''; console.log(`${id} ${name} ${signupDeadline} ${matchTime} ${state}`); }); console.log('────────────────────────────────────────────────────────────────────────────────\n'); // 3. 模拟点击事件的参数传递 console.log('🔗 模拟点击事件参数传递:'); activities.forEach((activity, index) => { console.log(`活动 ${index + 1}: 点击"${activity.name}" → 传递ID: ${activity.id}`); // 模拟 utils.navigateTo 的URL构建 const params = { id: activity.id }; const queryString = Object.keys(params) .map(key => `${key}=${encodeURIComponent(params[key])}`) .join('&'); const fullUrl = '/pages/activity/detail?' + queryString; console.log(` → 构建URL: ${fullUrl}`); console.log(` → 详情页接收到的options.id: "${activity.id}"`); console.log(''); }); // 4. 检查ID类型和格式 console.log('🔍 ID类型和格式检查:'); activities.forEach(activity => { const id = activity.id; const idType = typeof id; const idString = String(id); console.log(`活动"${activity.name}": ID=${id}, 类型=${idType}, 字符串="${idString}"`); }); // 5. 模拟可能的问题场景 console.log('\n⚠️ 可能的问题场景分析:'); console.log('1. ID类型问题: 后端返回数字,前端期望字符串'); console.log('2. 数据绑定问题: wx:for循环中的item.id不正确'); console.log('3. 事件冒泡问题: 多个点击事件冲突'); console.log('4. 缓存问题: 页面数据没有及时更新'); console.log('5. 路由参数问题: URL编码或解码错误'); } catch (error) { console.error('❌ 请求失败:', error.message); } } testNavigationParams();