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();
|