From 5fcbe4703b6eb2413b34e826cb68d9108e5f8f29 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Tue, 23 Dec 2025 20:57:13 +0800 Subject: [PATCH] add filter --- src/oj/api.ts | 7 ++- .../components/UserProgressView.vue | 53 +++++++++++++++---- 2 files changed, 49 insertions(+), 11 deletions(-) diff --git a/src/oj/api.ts b/src/oj/api.ts index 4e1b97b..b46fc9d 100644 --- a/src/oj/api.ts +++ b/src/oj/api.ts @@ -363,7 +363,12 @@ export function getProblemSetBadges(problemSetId: number) { // 获取题单用户进度列表 export function getProblemSetUserProgress( problemSetId: number, - params?: { limit?: number; offset?: number; class_name?: string }, + params?: { + limit?: number + offset?: number + class_name?: string + completion_status?: "" | "completed" | "in_progress" | "not_started" + }, ) { return http.get(`problemset/${problemSetId}/users_progress`, { params }) } diff --git a/src/oj/problemset/components/UserProgressView.vue b/src/oj/problemset/components/UserProgressView.vue index 6fcc5c0..def342e 100644 --- a/src/oj/problemset/components/UserProgressView.vue +++ b/src/oj/problemset/components/UserProgressView.vue @@ -19,8 +19,17 @@ const statistics = ref<{ avg_progress: number } | null>(null) const classFilter = ref("") +const completionFilter = ref<"" | "completed" | "in_progress" | "not_started">("") const allProblems = ref>([]) +// 完成度筛选选项 +const completionOptions = [ + { label: "全部", value: "" }, + { label: "未开始", value: "not_started"}, + { label: "已完成", value: "completed" }, + { label: "进行中", value: "in_progress" }, +] + // 使用分页 composable const { query } = usePagination({}, { defaultLimit: 10 }) @@ -28,13 +37,21 @@ const { query } = usePagination({}, { defaultLimit: 10 }) async function loadUserProgress() { loading.value = true const offset = (query.page - 1) * query.limit - const params: { limit?: number; offset?: number; class_name?: string } = { + const params: { + limit?: number + offset?: number + class_name?: string + completion_status?: "" | "completed" | "in_progress" | "not_started" + } = { limit: query.limit, offset, } if (classFilter.value.trim()) { params.class_name = classFilter.value.trim() } + if (completionFilter.value) { + params.completion_status = completionFilter.value + } const res = await getProblemSetUserProgress(problemSetId.value, params) progress.value = res.data.results @@ -61,6 +78,11 @@ watchDebounced( }, { debounce: 500 }, ) +// 监听完成度筛选变化 +watch(completionFilter, () => { + query.page = 1 // 重置到第一页 + loadUserProgress() +}) // 使用后端返回的统计数据 const stats = computed(() => { @@ -185,15 +207,26 @@ const progressColumns = [