@@ -40,6 +40,7 @@ const PAGE_SIZE = 15;
4040export default function Submissions ( ) {
4141 const [ statusFilter , setStatusFilter ] = useState ( '' ) ;
4242 const [ languageFilter , setLanguageFilter ] = useState ( '' ) ;
43+ const [ problemIdFilter , setProblemIdFilter ] = useState ( '' ) ;
4344 const [ page , setPage ] = useState ( 1 ) ;
4445 const [ data , setData ] = useState < PaginatedResponse < SubmissionType > | null > (
4546 null
@@ -58,6 +59,7 @@ export default function Submissions() {
5859 } ;
5960 if ( statusFilter ) params . status = statusFilter ;
6061 if ( languageFilter ) params . language = languageFilter ;
62+ if ( problemIdFilter ) params . problem_id = Number ( problemIdFilter ) ;
6163 const res = await api . submissions . list ( params ) ;
6264 setData ( res ) ;
6365 } catch ( err : any ) {
@@ -67,7 +69,7 @@ export default function Submissions() {
6769 } finally {
6870 setLoading ( false ) ;
6971 }
70- } , [ page , statusFilter , languageFilter ] ) ;
72+ } , [ page , statusFilter , languageFilter , problemIdFilter ] ) ;
7173
7274 useEffect ( ( ) => {
7375 fetchSubmissions ( ) ;
@@ -150,6 +152,21 @@ export default function Submissions() {
150152 </ button >
151153 </ div >
152154
155+ { /* Problem ID filter */ }
156+ < div className = "flex gap-2 mb-4" >
157+ < input
158+ type = "number"
159+ min = "1"
160+ value = { problemIdFilter }
161+ onChange = { e => {
162+ setProblemIdFilter ( e . target . value ) ;
163+ setPage ( 1 ) ;
164+ } }
165+ placeholder = "按题目ID筛选..."
166+ className = "input w-40 text-sm"
167+ />
168+ </ div >
169+
153170 { /* Status filter */ }
154171 < div className = "flex flex-wrap gap-1 mb-2" >
155172 { STATUS_FILTERS . map ( ( opt ) => (
0 commit comments