diff --git a/src/components/Rank/index.jsx b/src/components/Rank/index.jsx index 1fdf5c0..b6115d5 100644 --- a/src/components/Rank/index.jsx +++ b/src/components/Rank/index.jsx @@ -1,58 +1,79 @@ -import { Avatar } from "@arco-design/web-react"; +import { Avatar, Skeleton } from "@arco-design/web-react"; import "./index.css"; -const Rank = ({ className }) => { +const Rank = ({ className, data = null, loading = false }) => { + if (loading) { + return ( +
+

班级排名

+ +
+ ); + } + + if (!data || !data.rankings || data.rankings.length === 0) { + return ( +
+

班级排名

+
暂无排名数据
+
+ ); + } + + const rankings = data.rankings.slice(0, 6); + + // 安全处理领奖台学生,确保至少有3个位置 + const podiumStudents = [ + rankings[1] || null, // 第2名 + rankings[0] || null, // 第1名 + rankings[2] || null // 第3名 + ]; + + const listStudents = rankings.slice(3); + return (

班级排名

); diff --git a/src/pages/Dashboard/index.jsx b/src/pages/Dashboard/index.jsx index 1cce0a7..5cc7e82 100644 --- a/src/pages/Dashboard/index.jsx +++ b/src/pages/Dashboard/index.jsx @@ -6,9 +6,31 @@ import StudyStatus from "./components/StudyStatus"; import Rank from "@/components/Rank"; import StageProgress from "@/components/StageProgress"; import TaskList from "./components/TaskList"; +import { getClassRanking } from "@/services/dashboard"; import "./index.css"; const Dashboard = () => { + const [rankingData, setRankingData] = useState(null); + const [rankingLoading, setRankingLoading] = useState(true); + + useEffect(() => { + fetchRankingData(); + }, []); + + const fetchRankingData = async () => { + try { + setRankingLoading(true); + const response = await getClassRanking(); + if (response) { + setRankingData(response); + } + } catch (error) { + console.error('Failed to fetch ranking data:', error); + } finally { + setRankingLoading(false); + } + }; + return (
@@ -18,7 +40,7 @@ const Dashboard = () => { - +
diff --git a/src/services/dashboard.js b/src/services/dashboard.js index 61fb5f2..7eee5fa 100644 --- a/src/services/dashboard.js +++ b/src/services/dashboard.js @@ -20,7 +20,7 @@ export async function getLearningProgressSummary(params = {}) { } // 获取当前学生班级排名 -export async function getClassRanking(params = {}) { +export async function getClassRanking(params = { limit: 6 }) { return request({ url: `/api/rankings/class`, method: "GET",