const axios = require('axios'); // 模拟小程序端的数据获取和处理流程 async function testMiniprogramDataFlow() { console.log('🔍 测试小程序端数据获取和处理流程...\n'); const BASE_URL = 'http://localhost:8080/api/graphql'; try { // 1. 模拟小程序端的 GraphQL 查询(与首页完全一致) console.log('📋 步骤1: 执行与小程序首页完全一致的GraphQL查询...'); const query = ` query getActivities($page: Int!, $size: Int!, $name: String) { activities(page: $page, size: $size, name: $name) { content { id name description coverImage { id name path fullUrl fullThumbUrl mediaType } signupDeadline matchTime address playerMax state stateName playerCount } totalElements page size } } `; const variables = { page: 1, size: 10, name: null }; const response = await axios.post(BASE_URL, { query: query, variables: 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. 模拟小程序端的数据处理逻辑 console.log('📋 步骤2: 模拟小程序端数据处理...'); let newActivities = activities; // 调试:输出报名截止原始值(与小程序代码一致) console.log('活动原始报名截止:', newActivities.map(a => ({ id: a.id, name: a.name, signupDeadline: a.signupDeadline }))); // 为每个活动添加名称文字(与小程序代码一致) newActivities = newActivities.map(activity => ({ ...activity, nameText: (activity.name || '活动').substring(0, 2) })); console.log('\n📋 步骤3: 模拟小程序端时间格式化...'); // 3. 模拟 wxs 格式化函数 function formatDateYYYYMMDD_wxs(val) { var s = '' + val; if (s.length < 10) { return '—'; } if (s.charAt(4) === '-' && s.charAt(7) === '-') { return s.slice(0, 10); } if (s.charAt(4) === '/' && s.charAt(7) === '/') { var year = s.slice(0, 4); var month = s.slice(5, 7); var day = s.slice(8, 10); return year + '-' + month + '-' + day; } return '—'; } // 4. 对每个活动进行格式化测试 console.log('🎯 每个活动的时间格式化结果:'); console.log('─'.repeat(80)); console.log('ID'.padEnd(5) + '活动名称'.padEnd(15) + '原始signupDeadline'.padEnd(20) + '格式化结果'.padEnd(15) + '状态'); console.log('─'.repeat(80)); newActivities.forEach(activity => { const formatted = formatDateYYYYMMDD_wxs(activity.signupDeadline); console.log( String(activity.id).padEnd(5) + (activity.name || '').substring(0, 12).padEnd(15) + (activity.signupDeadline || '').padEnd(20) + formatted.padEnd(15) + activity.stateName ); }); console.log('─'.repeat(80)); // 5. 检查是否所有格式化结果都相同 const formattedResults = newActivities.map(a => formatDateYYYYMMDD_wxs(a.signupDeadline)); const uniqueResults = [...new Set(formattedResults)]; console.log('\n🔍 格式化结果分析:'); console.log(`总共 ${formattedResults.length} 个活动`); console.log(`唯一的格式化结果: ${uniqueResults.join(', ')}`); if (uniqueResults.length === 1 && formattedResults.length > 1) { console.log('❌ 发现问题:所有活动的格式化结果都相同!'); console.log('这可能是缓存问题或数据绑定问题'); } else { console.log('✅ 格式化结果正常,每个活动都有不同的日期'); } // 6. 检查原始数据是否有问题 console.log('\n🔍 原始数据检查:'); const originalDates = newActivities.map(a => a.signupDeadline); const uniqueOriginalDates = [...new Set(originalDates)]; console.log(`原始日期唯一值: ${uniqueOriginalDates.join(', ')}`); if (uniqueOriginalDates.length === 1 && originalDates.length > 1) { console.log('❌ 发现问题:后端返回的所有活动日期都相同!'); } else { console.log('✅ 后端返回的日期数据正常'); } // 7. 模拟小程序端可能的缓存问题 console.log('\n🔍 检查可能的缓存问题:'); // 再次请求相同的数据 const response2 = await axios.post(BASE_URL, { query: query, variables: variables }, { headers: { 'Content-Type': 'application/json' } }); const activities2 = response2.data.data.activities.content; // 比较两次请求的结果 const dates1 = activities.map(a => a.signupDeadline); const dates2 = activities2.map(a => a.signupDeadline); const isIdentical = JSON.stringify(dates1) === JSON.stringify(dates2); console.log(`两次请求结果是否一致: ${isIdentical ? '✅ 一致' : '❌ 不一致'}`); if (!isIdentical) { console.log('第一次请求日期:', dates1); console.log('第二次请求日期:', dates2); } } catch (error) { console.error('❌ 测试失败:', error.message); if (error.response) { console.error('响应状态:', error.response.status); console.error('响应数据:', error.response.data); } } } // 运行测试 testMiniprogramDataFlow();