仪表盘接口调整

This commit is contained in:
2025-08-25 20:56:56 +08:00
parent 2c67099e95
commit 11b529c502
15 changed files with 700 additions and 208 deletions

View File

@@ -6,44 +6,46 @@ import StudyStatus from "./components/StudyStatus";
import Rank from "@/components/Rank";
import StageProgress from "@/components/StageProgress";
import TaskList from "./components/TaskList";
import { getClassRanking, getStudyRecordsProgress } from "@/services";
import { getDashboardStatistics } from "@/services";
import "./index.css";
const Dashboard = () => {
const [rankingData, setRankingData] = useState(null);
const [rankingLoading, setRankingLoading] = useState(true);
const [dashboardData, setDashboardData] = useState(null);
const [loading, setLoading] = useState(true);
const [selectedDate, setSelectedDate] = useState(new Date());
useEffect(() => {
fetchRankingData();
fetchLearningProgressSummary();
fetchDashboardData();
}, []);
// 获取班级排名数据
const fetchRankingData = async () => {
// 获取仪表板完整数据
const fetchDashboardData = async () => {
try {
setRankingLoading(true);
const response = await getClassRanking();
setLoading(true);
const response = await getDashboardStatistics();
if (response && response.success) {
setRankingData(response.data);
setDashboardData(response.data);
} else if (response) {
// 兼容直接返回数据的情况
setRankingData(response);
setDashboardData(response);
}
} catch (error) {
console.error('Failed to fetch ranking data:', error);
console.error('Failed to fetch dashboard data:', error);
} finally {
setRankingLoading(false);
setLoading(false);
}
};
// 获取整体学习进度
const fetchLearningProgressSummary = async () => {
try {
const res = await getStudyRecordsProgress();
console.log("learningProgressSummary", res);
} catch (error) {
console.error('Failed to fetch learning progress:', error);
// 根据选中日期筛选任务
const getTasksForDate = (date) => {
if (!dashboardData?.tasks?.allTasks) return [];
// Check if date is valid before calling toISOString
if (!date || isNaN(date.getTime())) {
console.warn('Invalid date provided to getTasksForDate:', date);
return [];
}
const dateStr = date.toISOString().split('T')[0];
return dashboardData.tasks.allTasks.filter(task => task.date === dateStr);
};
return (
@@ -51,12 +53,33 @@ const Dashboard = () => {
<StageProgress showBlockageAlert={true} />
<div className="dashboard-grid">
<StartClass />
<StartClass
courses={dashboardData?.courses}
tasks={dashboardData?.tasks}
loading={loading}
/>
<QuickAccess />
<CalendarTaskModule />
<StudyStatus />
<Rank data={rankingData} loading={rankingLoading} />
<TaskList />
<CalendarTaskModule
tasks={dashboardData?.tasks?.allTasks}
selectedDate={selectedDate}
onDateChange={setSelectedDate}
loading={loading}
/>
<StudyStatus
progress={dashboardData?.overview?.overallProgress}
loading={loading}
/>
<Rank
data={dashboardData?.ranking ? {
rankings: dashboardData.ranking.topStudents
} : null}
loading={loading}
/>
<TaskList
tasks={getTasksForDate(selectedDate)}
selectedDate={selectedDate}
loading={loading}
/>
</div>
</div>
);