"use client"; import Link from "next/link"; import { useEffect, useState } from "react"; import { apiFetch } from "@/lib/api"; type Submission = { id: number; user_id: number; problem_id: number; contest_id: number | null; status: string; score: number; time_ms: number; created_at: number; }; type ListResp = { items: Submission[]; page: number; page_size: number }; export default function SubmissionsPage() { const [userId, setUserId] = useState(""); const [problemId, setProblemId] = useState(""); const [contestId, setContestId] = useState(""); const [items, setItems] = useState([]); const [loading, setLoading] = useState(false); const [error, setError] = useState(""); const load = async () => { setLoading(true); setError(""); try { const params = new URLSearchParams(); if (userId) params.set("user_id", userId); if (problemId) params.set("problem_id", problemId); if (contestId) params.set("contest_id", contestId); const data = await apiFetch(`/api/v1/submissions?${params.toString()}`); setItems(data.items); } catch (e: unknown) { setError(String(e)); } finally { setLoading(false); } }; useEffect(() => { void load(); // eslint-disable-next-line react-hooks/exhaustive-deps }, []); return (

提交记录

setUserId(e.target.value)} /> setProblemId(e.target.value)} /> setContestId(e.target.value)} />
{error &&

{error}

}
{items.map((s) => ( ))}
ID 用户 题目 状态 分数 耗时(ms) 详情
{s.id} {s.user_id} {s.problem_id} {s.status} {s.score} {s.time_ms} 查看
); }