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
// 测试筛选逻辑修复
// 验证后端筛选 vs 前端筛选的差异
 
console.log('=== 筛选逻辑修复测试 ===\n')
 
// 模拟后端返回的原始数据
const mockBackendData = [
  { id: 1, name: '活动A', state: 1, stateName: '即将开始' },
  { id: 2, name: '活动B', state: 2, stateName: '进行中' },
  { id: 3, name: '活动C', state: 1, stateName: '即将开始' },
  { id: 4, name: '活动D', state: 3, stateName: '已结束' },
  { id: 5, name: '活动E', state: 2, stateName: '进行中' },
  { id: 6, name: '活动F', state: 1, stateName: '即将开始' },
  { id: 7, name: '活动G', state: 3, stateName: '已结束' },
  { id: 8, name: '活动H', state: 2, stateName: '进行中' },
  { id: 9, name: '活动I', state: 1, stateName: '即将开始' },
  { id: 10, name: '活动J', state: 3, stateName: '已结束' }
]
 
console.log('原始数据(10条):')
mockBackendData.forEach((item, index) => {
  console.log(`  索引${index}: ID=${item.id}, 名称=${item.name}, 状态=${item.stateName}`)
})
 
console.log('\n--- 前端筛选方式(有问题的方式) ---')
 
function frontendFilter(data, filterStatus) {
  // 模拟前端筛选逻辑
  const stateMapping = {
    'upcoming': 1,
    'ongoing': 2, 
    'ended': 3
  }
  
  if (filterStatus === 'all') {
    return data
  }
  
  return data.filter(activity => activity.state === stateMapping[filterStatus])
}
 
const frontendFiltered = frontendFilter(mockBackendData, 'ongoing')
console.log(`筛选"进行中"的活动(前端筛选):`)
frontendFiltered.forEach((item, index) => {
  console.log(`  模板索引${index}: ID=${item.id}, 名称=${item.name} ← 索引与ID不匹配!`)
})
 
console.log('\n--- 后端筛选方式(修复后的方式) ---')
 
function backendFilter(data, state) {
  // 模拟后端筛选逻辑
  if (state === null) {
    return data
  }
  
  return data.filter(activity => activity.state === state)
}
 
const backendFiltered = backendFilter(mockBackendData, 2) // state=2 表示进行中
console.log(`筛选"进行中"的活动(后端筛选):`)
backendFiltered.forEach((item, index) => {
  console.log(`  模板索引${index}: ID=${item.id}, 名称=${item.name} ← 索引与ID一致`)
})
 
console.log('\n--- 问题对比 ---')
console.log('前端筛选问题:')
console.log('  - 点击索引0,期望ID=2,但可能获取到错误的ID')
console.log('  - 分页数据混乱,hasMore计算错误')
console.log('  - 加载更多时数据重复或丢失')
 
console.log('\n后端筛选优势:')
console.log('  - 索引与ID完全对应')
console.log('  - 分页逻辑正确')
console.log('  - 数据一致性保证')
 
console.log('\n--- 状态映射测试 ---')
const filterStatusMapping = {
  'all': null,
  'upcoming': 1,
  'ongoing': 2,
  'ended': 3
}
 
Object.entries(filterStatusMapping).forEach(([filterStatus, state]) => {
  const result = backendFilter(mockBackendData, state)
  console.log(`filterStatus="${filterStatus}" → state=${state} → 结果${result.length}条`)
})
 
console.log('\n=== 测试完成 ===')