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
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
187
188
189
190
191
192
193
194
195
const http = require('http');
 
// 模拟 GraphQL 请求
function makeGraphQLRequest() {
  return new Promise((resolve, reject) => {
    const postData = JSON.stringify({
      query: `
        query GetActivities($page: Int!, $size: Int!) {
          activities(page: $page, size: $size) {
            content {
              id
              name
              signupDeadline
              playerCount
              playerMax
              state
              stateName
              coverImage {
                fullUrl
              }
            }
            totalElements
            totalPages
            number
            size
          }
        }
      `,
      variables: {
        page: 0,
        size: 10
      }
    });
 
    const options = {
      hostname: 'localhost',
      port: 8080,
      path: '/api/graphql',
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(postData)
      }
    };
 
    const req = http.request(options, (res) => {
      let data = '';
      res.on('data', (chunk) => {
        data += chunk;
      });
      res.on('end', () => {
        try {
          const result = JSON.parse(data);
          resolve(result);
        } catch (e) {
          reject(e);
        }
      });
    });
 
    req.on('error', (e) => {
      reject(e);
    });
 
    req.write(postData);
    req.end();
  });
}
 
// 模拟小程序的 dataset 和事件处理
function simulateClickEvent(activityId) {
  console.log('\n=== 模拟点击事件 ===');
  console.log('活动ID:', activityId);
  console.log('活动ID类型:', typeof activityId);
  
  // 模拟 data-id 属性设置
  const dataId = activityId;
  console.log('data-id 设置为:', dataId);
  
  // 模拟事件对象
  const mockEvent = {
    currentTarget: {
      dataset: {
        id: dataId
      }
    }
  };
  
  // 模拟 onDetailTap 函数
  function onDetailTap(e) {
    const id = e.currentTarget.dataset.id;
    console.log('onDetailTap 获取到的 id:', id);
    console.log('id 类型:', typeof id);
    
    if (id) {
      goToActivityDetail(id);
    } else {
      console.log('❌ ID 为空或未定义');
    }
  }
  
  // 模拟 goToActivityDetail 函数
  function goToActivityDetail(activityId) {
    console.log('goToActivityDetail 接收到的 activityId:', activityId);
    console.log('activityId 类型:', typeof activityId);
    
    // 模拟 utils.navigateTo
    const params = { id: activityId };
    console.log('传递给详情页的参数:', params);
    
    // 模拟 URL 构建
    const url = '/pages/activity/detail';
    const queryString = Object.keys(params)
      .map(key => key + '=' + encodeURIComponent(params[key]))
      .join('&');
    const fullUrl = url + '?' + queryString;
    console.log('构建的完整 URL:', fullUrl);
    
    // 模拟详情页接收参数
    const urlParams = new URLSearchParams('?' + queryString);
    const receivedId = urlParams.get('id');
    console.log('详情页接收到的 id:', receivedId);
    console.log('详情页接收到的 id 类型:', typeof receivedId);
    
    return {
      url: fullUrl,
      params: params,
      receivedId: receivedId
    };
  }
  
  // 执行点击事件
  const result = onDetailTap(mockEvent);
  return result;
}
 
// 主函数
async function main() {
  try {
    console.log('开始测试活动ID和参数传递...\n');
    
    const result = await makeGraphQLRequest();
    
    if (result.data && result.data.activities && result.data.activities.content) {
      const activities = result.data.activities.content;
      console.log('获取到', activities.length, '个活动');
      
      activities.forEach((activity, index) => {
        console.log('\n--- 活动', index + 1, '---');
        console.log('ID:', activity.id);
        console.log('ID类型:', typeof activity.id);
        console.log('名称:', activity.name);
        console.log('状态:', activity.stateName);
        
        // 检查 ID 是否有效
        if (!activity.id) {
          console.log('❌ 警告:活动ID为空');
        } else if (typeof activity.id !== 'string' && typeof activity.id !== 'number') {
          console.log('❌ 警告:活动ID类型异常');
        } else {
          console.log('✅ 活动ID正常');
        }
        
        // 模拟点击事件
        simulateClickEvent(activity.id);
      });
      
      // 测试边界情况
      console.log('\n=== 测试边界情况 ===');
      console.log('\n1. 测试 undefined ID:');
      simulateClickEvent(undefined);
      
      console.log('\n2. 测试 null ID:');
      simulateClickEvent(null);
      
      console.log('\n3. 测试空字符串 ID:');
      simulateClickEvent('');
      
      console.log('\n4. 测试数字 ID:');
      simulateClickEvent(123);
      
    } else {
      console.log('❌ 未获取到活动数据');
      console.log('响应:', JSON.stringify(result, null, 2));
    }
    
  } catch (error) {
    console.error('❌ 请求失败:', error.message);
    if (error.code) {
      console.error('错误代码:', error.code);
    }
  }
}
 
main();