Codex Assistant
1 天以前 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
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
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();