Codex Assistant
昨天 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
const axios = require('axios');
 
// 模拟小程序端的GraphQL请求
async function testNavigationParams() {
  console.log('🔍 测试首页活动数据和导航参数...\n');
 
  try {
    // 1. 获取首页活动列表数据
    const query = `
      query GetActivitiesAndBanners($page: Int!, $size: Int!, $keyword: String, $status: String) {
        activities(page: $page, size: $size, keyword: $keyword, status: $status) {
          content {
            id
            name
            description
            signupDeadline
            matchTime
            address
            state
            stateName
            playerCount
            playerMax
            coverImage { fullUrl }
          }
          totalElements
          totalPages
          number
          size
        }
      }
    `;
 
    const variables = {
      page: 0,
      size: 10,
      keyword: null,
      status: null
    };
 
    const response = await axios.post('http://localhost:8080/graphql', {
      query,
      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. 分析每个活动的ID和基本信息
    console.log('🎯 活动ID和基本信息:');
    console.log('────────────────────────────────────────────────────────────────────────────────');
    console.log('ID   活动名称           报名截止时间          比赛时间              状态');
    console.log('────────────────────────────────────────────────────────────────────────────────');
    
    activities.forEach(activity => {
      const id = String(activity.id).padEnd(4);
      const name = (activity.name || '').substring(0, 15).padEnd(15);
      const signupDeadline = (activity.signupDeadline || '').substring(0, 16).padEnd(16);
      const matchTime = (activity.matchTime || '').substring(0, 16).padEnd(16);
      const state = activity.stateName || activity.state || '';
      
      console.log(`${id} ${name} ${signupDeadline} ${matchTime} ${state}`);
    });
    console.log('────────────────────────────────────────────────────────────────────────────────\n');
 
    // 3. 模拟点击事件的参数传递
    console.log('🔗 模拟点击事件参数传递:');
    activities.forEach((activity, index) => {
      console.log(`活动 ${index + 1}: 点击"${activity.name}" → 传递ID: ${activity.id}`);
      
      // 模拟 utils.navigateTo 的URL构建
      const params = { id: activity.id };
      const queryString = Object.keys(params)
        .map(key => `${key}=${encodeURIComponent(params[key])}`)
        .join('&');
      const fullUrl = '/pages/activity/detail?' + queryString;
      
      console.log(`  → 构建URL: ${fullUrl}`);
      console.log(`  → 详情页接收到的options.id: "${activity.id}"`);
      console.log('');
    });
 
    // 4. 检查ID类型和格式
    console.log('🔍 ID类型和格式检查:');
    activities.forEach(activity => {
      const id = activity.id;
      const idType = typeof id;
      const idString = String(id);
      
      console.log(`活动"${activity.name}": ID=${id}, 类型=${idType}, 字符串="${idString}"`);
    });
 
    // 5. 模拟可能的问题场景
    console.log('\n⚠️  可能的问题场景分析:');
    console.log('1. ID类型问题: 后端返回数字,前端期望字符串');
    console.log('2. 数据绑定问题: wx:for循环中的item.id不正确');
    console.log('3. 事件冒泡问题: 多个点击事件冲突');
    console.log('4. 缓存问题: 页面数据没有及时更新');
    console.log('5. 路由参数问题: URL编码或解码错误');
 
  } catch (error) {
    console.error('❌ 请求失败:', error.message);
  }
}
 
testNavigationParams();