const axios = require('axios'); // 测试小程序比赛详情页面获取的数据 async function testMiniprogramActivityDetail() { console.log('🔍 测试小程序比赛详情页面获取的数据格式...\n'); const GRAPHQL_URL = 'http://localhost:8080/api/graphql'; // 使用小程序端相同的GraphQL查询 const query = ` query GetActivityDetailAndStatus($id: ID!) { activity(id: $id) { id name description signupDeadline matchTime address state stateName playerCount playerMax coverImage { fullUrl } images { fullUrl } videos { fullUrl, fullThumbUrl } stages { id name matchTime description } } myActivityPlayer(activityId: $id) { id state } } `; try { // 测试几个不同的活动ID const testIds = [16, 19, 22, 25, 28, 31]; for (const activityId of testIds) { console.log(`\n📋 测试活动ID: ${activityId}`); const response = await axios.post(GRAPHQL_URL, { query, variables: { id: activityId.toString() } }, { headers: { 'Content-Type': 'application/json' } }); if (response.data.errors) { console.error('❌ GraphQL错误:', response.data.errors); continue; } const activity = response.data.data.activity; if (activity) { console.log(`🏆 比赛名称: ${activity.name}`); console.log(`📅 原始 signupDeadline: "${activity.signupDeadline}"`); console.log(`🏁 原始 matchTime: "${activity.matchTime}"`); // 模拟小程序端的时间格式化处理 console.log('\n🔧 模拟小程序端格式化:'); console.log(` signupDeadline 格式化: ${formatDateForMiniprogram(activity.signupDeadline, 'YYYY-MM-DD HH:mm')}`); console.log(` matchTime 格式化: ${formatDateForMiniprogram(activity.matchTime, 'YYYY-MM-DD HH:mm')}`); // 检查数据类型和长度 console.log('\n🔍 数据分析:'); console.log(` signupDeadline 类型: ${typeof activity.signupDeadline}, 长度: ${activity.signupDeadline ? activity.signupDeadline.length : 'null'}`); console.log(` matchTime 类型: ${typeof activity.matchTime}, 长度: ${activity.matchTime ? activity.matchTime.length : 'null'}`); } else { console.log('❌ 未找到活动数据'); } console.log('─'.repeat(50)); } } catch (error) { console.error('❌ 请求失败:', error.message); if (error.response) { console.error('响应状态:', error.response.status); console.error('响应数据:', error.response.data); } } } // 模拟小程序端的时间格式化函数 function formatDateForMiniprogram(dateStr, format) { // 强制转换为字符串,兼容 null, undefined, number 等类型 var s = '' + dateStr; // 处理空值或无效值 if (!s || s === 'null' || s === 'undefined' || s.length < 10) { return '—'; } // 处理ISO格式的时间字符串,如 "2025-10-06T00:00" 或 "2025-10-06T00:00:00" // 提取年月日 var y = s.slice(0, 4); var m = s.slice(5, 7); var d = s.slice(8, 10); if (format === 'YYYY-MM-DD') { return y + '-' + m + '-' + d; } // 处理时间部分 - 支持多种格式 if (format === 'YYYY-MM-DD HH:mm') { var h = '00'; var min = '00'; // 检查是否有时间部分 if (s.length >= 16 && s.charAt(10) === 'T') { // ISO格式: 2025-10-06T00:00 或 2025-10-06T00:00:00 h = s.slice(11, 13); min = s.slice(14, 16); } else if (s.length >= 16 && s.charAt(10) === ' ') { // 标准格式: 2025-10-06 00:00:00 h = s.slice(11, 13); min = s.slice(14, 16); } return y + '-' + m + '-' + d + ' ' + h + ':' + min; } return '—'; // 默认返回占位符 } // 运行测试 testMiniprogramActivityDetail();