@@ -42,7 +42,10 @@ const ChallengeListPage = () => {
4242
4343 // 过滤掉被标记为忽略的挑战
4444 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 ;
4649 } , [ challenges ] ) ;
4750
4851 // 初始化搜索服务
@@ -71,8 +74,10 @@ const ChallengeListPage = () => {
7174 }
7275
7376 // 设置平台
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+ } ) ;
7681 }
7782
7883 // 设置标签
@@ -151,10 +156,54 @@ const ChallengeListPage = () => {
151156 saveFilterPreferences ( { ...filters , difficulty : filters . difficulty } ) ;
152157 } ;
153158
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+
154194 // 处理平台筛选
155195 const handlePlatformChange = ( platform : string ) => {
196+ console . log ( '处理平台筛选变化:' , platform ) ;
197+
156198 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 ( ) ) ;
158207 navigate ( `/challenges?${ newSearchParams . toString ( ) } ` ) ;
159208
160209 // 保存筛选设置到本地存储
@@ -204,33 +253,6 @@ const ChallengeListPage = () => {
204253 setDrawerVisible ( false ) ;
205254 } ;
206255
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' , '2' ] ;
218- } else if ( diffParam === 'medium' ) {
219- difficultyParams = [ '3' , '4' ] ;
220- } else if ( diffParam === 'hard' ) {
221- difficultyParams = [ '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-
234256 // 获取所有可用标签
235257 const allTags = useMemo ( ( ) => {
236258 const tags = new Set < string > ( ) ;
@@ -252,12 +274,22 @@ const ChallengeListPage = () => {
252274 // 使用Fuse.js过滤和排序挑战
253275 const filteredChallenges = useMemo ( ( ) => {
254276 // 使用搜索服务过滤
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+
255285 const filtered = searchService . filterChallenges ( visibleChallenges , {
256286 tags : filters . tags ,
257287 difficulty : filters . difficulty . join ( ',' ) ,
258288 platform : filters . platform ,
259289 query : searchQuery
260290 } ) ;
291+
292+ console . log ( `过滤后挑战数量: ${ filtered . length } ` ) ;
261293
262294 // 排序
263295 return filtered . sort ( ( a : Challenge , b : Challenge ) => {
@@ -347,22 +379,25 @@ const ChallengeListPage = () => {
347379 } ;
348380
349381 // 渲染控制面板(桌面或移动)
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+ } ;
366401
367402 // 渲染过滤器(适用于桌面和移动视图)
368403 const renderFilters = ( ) => (
@@ -386,6 +421,9 @@ const ChallengeListPage = () => {
386421 < Col span = { 24 } >
387422 < h1 style = { { fontSize : isMobile ? '1.5rem' : '2rem' , marginBottom : '1rem' } } >
388423 { t ( 'challenges.title' ) }
424+ < span style = { { fontWeight : 'normal' , fontSize : isMobile ? '1.2rem' : '1.6rem' , marginLeft : '8px' } } >
425+ ({ filteredChallenges . length } )
426+ </ span >
389427 </ h1 >
390428
391429 { /* 移动端搜索和过滤器 */ }
@@ -422,7 +460,7 @@ const ChallengeListPage = () => {
422460 onPaginationChange = { handlePaginationChange }
423461 onTagClick = { handleTagClick }
424462 onDifficultyClick = { ( difficulty ) => handleDifficultyClick ( difficulty . toString ( ) ) }
425- onPlatformClick = { handlePlatformChange }
463+ onPlatformClick = { ( platform ) => handlePlatformChange ( platform ) }
426464 onChallengeClick = { ( id ) => navigate ( `/challenge/${ id } ` ) }
427465 hidePagination = { false }
428466 />
0 commit comments