仪表盘接口调整
This commit is contained in:
@@ -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>
|
||||
);
|
||||
|
||||
Reference in New Issue
Block a user