@@ -42,7 +42,10 @@ const ChallengeListPage = () => {
42
42
43
43
// 过滤掉被标记为忽略的挑战
44
44
const visibleChallenges = useMemo ( ( ) => {
45
- return challenges . filter ( challenge => ! challenge . ignored ) ;
45
+ console . log ( `总挑战数量: ${ challenges . length } ` ) ;
46
+ const visible = challenges . filter ( challenge => challenge . ignored !== true ) ;
47
+ console . log ( `可见挑战数量(排除ignored=true): ${ visible . length } ` ) ;
48
+ return visible ;
46
49
} , [ challenges ] ) ;
47
50
48
51
// 初始化搜索服务
@@ -71,8 +74,10 @@ const ChallengeListPage = () => {
71
74
}
72
75
73
76
// 设置平台
74
- if ( parsedFilters . platform && parsedFilters . platform !== 'all' ) {
75
- newSearchParams . set ( 'platform' , parsedFilters . platform ) ;
77
+ if ( parsedFilters . platform && parsedFilters . platform . length > 0 ) {
78
+ parsedFilters . platform . forEach ( ( platform : string ) => {
79
+ newSearchParams . append ( 'platform' , platform ) ;
80
+ } ) ;
76
81
}
77
82
78
83
// 设置标签
@@ -151,10 +156,54 @@ const ChallengeListPage = () => {
151
156
saveFilterPreferences ( { ...filters , difficulty : filters . difficulty } ) ;
152
157
} ;
153
158
159
+ // 从URL同步过滤器状态
160
+ useEffect ( ( ) => {
161
+ const tags = searchParams . getAll ( 'tags' ) ;
162
+ let difficultyParams = searchParams . getAll ( 'difficulty' ) ;
163
+ const platformParam = searchParams . get ( 'platform' ) || 'all' ;
164
+
165
+ console . log ( 'URL平台参数:' , platformParam ) ;
166
+
167
+ // 处理特殊难度字符串转换
168
+ if ( difficultyParams . length === 1 ) {
169
+ const diffParam = difficultyParams [ 0 ] ;
170
+ if ( diffParam === 'easy' ) {
171
+ difficultyParams = [ '1' ] ;
172
+ } else if ( diffParam === 'medium' ) {
173
+ difficultyParams = [ '2' , '3' ] ;
174
+ } else if ( diffParam === 'hard' ) {
175
+ difficultyParams = [ '4' , '5' ] ;
176
+ }
177
+ }
178
+
179
+ const newFilters = {
180
+ tags,
181
+ difficulty : difficultyParams ,
182
+ platform : platformParam
183
+ } ;
184
+
185
+ console . log ( '设置新筛选条件:' , newFilters ) ;
186
+ setFilters ( newFilters ) ;
187
+
188
+ // 当URL发生变化时,同步到本地存储
189
+ if ( searchParams . toString ( ) ) {
190
+ saveFilterPreferences ( newFilters ) ;
191
+ }
192
+ } , [ searchParams ] ) ;
193
+
154
194
// 处理平台筛选
155
195
const handlePlatformChange = ( platform : string ) => {
196
+ console . log ( '处理平台筛选变化:' , platform ) ;
197
+
156
198
const newSearchParams = new URLSearchParams ( searchParams ) ;
157
- newSearchParams . set ( 'platform' , platform ) ;
199
+ newSearchParams . delete ( 'platform' ) ;
200
+
201
+ // 如果选择的不是"all",则添加平台参数
202
+ if ( platform !== 'all' ) {
203
+ newSearchParams . append ( 'platform' , platform ) ;
204
+ }
205
+
206
+ console . log ( '新URL参数:' , newSearchParams . toString ( ) ) ;
158
207
navigate ( `/challenges?${ newSearchParams . toString ( ) } ` ) ;
159
208
160
209
// 保存筛选设置到本地存储
@@ -204,33 +253,6 @@ const ChallengeListPage = () => {
204
253
setDrawerVisible ( false ) ;
205
254
} ;
206
255
207
- // 从URL同步过滤器状态
208
- useEffect ( ( ) => {
209
- const tags = searchParams . getAll ( 'tags' ) ;
210
- let difficultyParams = searchParams . getAll ( 'difficulty' ) ;
211
- const platform = searchParams . get ( 'platform' ) || 'all' ;
212
-
213
- // 处理特殊难度字符串转换
214
- if ( difficultyParams . length === 1 ) {
215
- const diffParam = difficultyParams [ 0 ] ;
216
- if ( diffParam === 'easy' ) {
217
- difficultyParams = [ '1' ] ;
218
- } else if ( diffParam === 'medium' ) {
219
- difficultyParams = [ '2' , '3' ] ;
220
- } else if ( diffParam === 'hard' ) {
221
- difficultyParams = [ '4' , '5' ] ;
222
- }
223
- }
224
-
225
- const newFilters = { tags, difficulty : difficultyParams , platform } ;
226
- setFilters ( newFilters ) ;
227
-
228
- // 当URL发生变化时,同步到本地存储
229
- if ( searchParams . toString ( ) ) {
230
- saveFilterPreferences ( newFilters ) ;
231
- }
232
- } , [ searchParams ] ) ;
233
-
234
256
// 获取所有可用标签
235
257
const allTags = useMemo ( ( ) => {
236
258
const tags = new Set < string > ( ) ;
@@ -252,12 +274,22 @@ const ChallengeListPage = () => {
252
274
// 使用Fuse.js过滤和排序挑战
253
275
const filteredChallenges = useMemo ( ( ) => {
254
276
// 使用搜索服务过滤
277
+ console . log ( `过滤前挑战数量: ${ visibleChallenges . length } ` ) ;
278
+ console . log ( `过滤条件:` , {
279
+ tags : filters . tags ,
280
+ difficulty : filters . difficulty . join ( ',' ) ,
281
+ platform : filters . platform ,
282
+ query : searchQuery
283
+ } ) ;
284
+
255
285
const filtered = searchService . filterChallenges ( visibleChallenges , {
256
286
tags : filters . tags ,
257
287
difficulty : filters . difficulty . join ( ',' ) ,
258
288
platform : filters . platform ,
259
289
query : searchQuery
260
290
} ) ;
291
+
292
+ console . log ( `过滤后挑战数量: ${ filtered . length } ` ) ;
261
293
262
294
// 排序
263
295
return filtered . sort ( ( a : Challenge , b : Challenge ) => {
@@ -347,22 +379,25 @@ const ChallengeListPage = () => {
347
379
} ;
348
380
349
381
// 渲染控制面板(桌面或移动)
350
- const renderControls = ( ) => (
351
- < ChallengeControls
352
- allTags = { allTags }
353
- allPlatforms = { allPlatforms }
354
- selectedTags = { filters . tags }
355
- selectedDifficulty = { filters . difficulty }
356
- selectedPlatform = { filters . platform }
357
- sortBy = { sortBy }
358
- sortOrder = { sortOrder }
359
- onTagsChange = { handleTagsChange }
360
- onDifficultyChange = { handleDifficultyClick }
361
- onPlatformChange = { handlePlatformChange }
362
- onSortByChange = { handleSortByChange }
363
- onSortOrderChange = { handleSortOrderChange }
364
- />
365
- ) ;
382
+ const renderControls = ( ) => {
383
+ console . log ( '渲染控制面板,当前平台选择:' , filters . platform ) ;
384
+ return (
385
+ < ChallengeControls
386
+ allTags = { allTags }
387
+ allPlatforms = { allPlatforms }
388
+ selectedTags = { filters . tags }
389
+ selectedDifficulty = { filters . difficulty }
390
+ selectedPlatform = { filters . platform }
391
+ sortBy = { sortBy }
392
+ sortOrder = { sortOrder }
393
+ onTagsChange = { handleTagsChange }
394
+ onDifficultyChange = { handleDifficultyClick }
395
+ onPlatformChange = { handlePlatformChange }
396
+ onSortByChange = { handleSortByChange }
397
+ onSortOrderChange = { handleSortOrderChange }
398
+ />
399
+ ) ;
400
+ } ;
366
401
367
402
// 渲染过滤器(适用于桌面和移动视图)
368
403
const renderFilters = ( ) => (
@@ -425,7 +460,7 @@ const ChallengeListPage = () => {
425
460
onPaginationChange = { handlePaginationChange }
426
461
onTagClick = { handleTagClick }
427
462
onDifficultyClick = { ( difficulty ) => handleDifficultyClick ( difficulty . toString ( ) ) }
428
- onPlatformClick = { handlePlatformChange }
463
+ onPlatformClick = { ( platform ) => handlePlatformChange ( platform ) }
429
464
onChallengeClick = { ( id ) => navigate ( `/challenge/${ id } ` ) }
430
465
hidePagination = { false }
431
466
/>
0 commit comments