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