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