Codex Assistant
17 小时以前 58d9f460b2f8c34430285115e2557d18333c5cab
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
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();