feat(智能分析): 页面改成每节课一行,一眼看出哪道一次就对、哪道交了很多次、哪道还没做对
Deploy / deploy (push) Canceled after 0s

一年热力图、半年月度图、难度分布、时间活跃度这些对多数学生大半空白的图都去掉了;
右边是差一点的(接着做)、错在哪、知识点;老师看学生能 ‹ › 翻同班下一个人。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
xuyueandClaude Opus 5.5 committed 2026-10-12 23:20:34 +08:00
1 parent 890e731a1c
commit e4abbc1645
27 files changed
+1343 -1710

No files matched your search

+10 -30
View File
@@ -1,5 +1,7 @@
import {
type AiAnalysisRecord,
type LearningPeriod,
type LearningReport,
type AiHintFeedbackRequest,
type Contest,
type ContestAccess,
@@ -35,10 +37,6 @@ import {
type FlowchartScores,
type FlowchartList,
type FlowchartSubmission,
type AiDetail,
type DurationData,
type HeatmapItem,
type SolvedList,
type ProblemSet,
type ProblemSetClassView,
type ProblemSetList,
@@ -409,38 +407,20 @@ export function getTutorials(type: "python" | "c") {
return api.get<TutorialSummary[]>("tutorials", { params: { type } })
}
export function getAIDetailData(start: string, end: string, username?: string) {
return api.get<AiDetail>("ai/detail", { params: { start, end, username } })
}
export function getAISolved(
start: string,
end: string,
offset: number,
limit: number,
username?: string,
) {
return api.get<SolvedList>("ai/solved", {
params: { start, end, offset, limit, username },
/** 智能分析整页的数据。username 只有老师传才生效,学生传了也只会拿到自己 */
export function getLearningReport(period: LearningPeriod, username?: string) {
return api.get<LearningReport>("ai/report", {
params: { period, username: username || undefined },
})
}
export function getAIDurationData(end: string, duration: string, username?: string) {
return api.get<DurationData[]>("ai/duration", {
params: { end, duration, username },
/** 这个时间段上次生成的 AI 小结(老师钉住的优先),没有为 null */
export function getLatestAnalysis(period: LearningPeriod, username?: string) {
return api.get<AiAnalysisRecord | null>("ai/analysis/latest", {
params: { period, username: username || undefined },
})
}
export function getAIHeatmapData(username?: string) {
return api.get<HeatmapItem[]>("ai/heatmap", {
params: username ? { username } : {},
})
}
export function getAIPinnedReport() {
return api.get<AiAnalysisRecord | null>("ai/pinned")
}
/** 学生评价一条 AI 提示。id 来自 /ai/hint 流的 done 事件,可以改票 */
export function submitHintFeedback(hintId: number, helpful: boolean) {
return api.post<null>(`ai/hint/${hintId}/feedback`, {