From 9888a8124bbe69402e2c7dc626348dcae8b11c5f Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Mon, 22 Dec 2025 19:11:34 +0800 Subject: [PATCH] update incomplete problem --- .../components/UserProgressView.vue | 31 ++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/src/oj/problemset/components/UserProgressView.vue b/src/oj/problemset/components/UserProgressView.vue index 4d48b60..b8e66ea 100644 --- a/src/oj/problemset/components/UserProgressView.vue +++ b/src/oj/problemset/components/UserProgressView.vue @@ -19,6 +19,7 @@ const statistics = ref<{ avg_progress: number } | null>(null) const classFilter = ref("") +const allProblems = ref>([]) // 使用分页 composable const { query } = usePagination({}, { defaultLimit: 10 }) @@ -42,6 +43,10 @@ async function loadUserProgress() { if (res.data.statistics) { statistics.value = res.data.statistics } + // 保存所有题目信息 + if (res.data.problems) { + allProblems.value = res.data.problems + } loading.value = false } @@ -107,10 +112,34 @@ const progressColumns = [ width: 100, }, { - title: "已完成题目", + title: "已/未完成题目", key: "completed_problems", width: 300, render: (row: ProblemSetProgress) => { + if (row.progress_percentage === 100) { + return "" + } + if (row.progress_percentage > 50 && row.progress_percentage < 100) { + const completedProblemIds = new Set( + row.completed_problems.map((p: any) => p.id), + ) + const incompleteProblems = allProblems.value.filter( + (p) => !completedProblemIds.has(p.id), + ) + return h("div", { style: "max-height: 120px; overflow-y: auto" }, [ + h( + "div", + { style: "display: flex; flex-wrap: wrap; gap: 4px" }, + incompleteProblems.map((problem) => + h( + NTag, + { type: "warning", size: "small", style: "margin: 2px" }, + `${problem._id}: ${problem.title}`, + ), + ), + ), + ]) + } return h("div", { style: "max-height: 120px; overflow-y: auto" }, [ h( "div",