diff --git a/src/pages/Dashboard.vue b/src/pages/Dashboard.vue
index fa06d1c..cff449b 100644
--- a/src/pages/Dashboard.vue
+++ b/src/pages/Dashboard.vue
@@ -48,6 +48,11 @@ const menu = computed(() =>
route: { name: "showcase-manage" },
show: roleSuper.value,
},
+ {
+ label: "平时成绩",
+ route: { name: "gradebook" },
+ show: roleAdmin.value || roleSuper.value,
+ },
{
label: "提交",
route: { name: "submissions", params: { page: 1 } },
diff --git a/src/pages/Gradebook.vue b/src/pages/Gradebook.vue
new file mode 100644
index 0000000..1936bcd
--- /dev/null
+++ b/src/pages/Gradebook.vue
@@ -0,0 +1,423 @@
+
+
+
+
+
+
+
+
+ 全部有提交任务
+ 只看计入任务
+
+
+
+
+
+
+
+
+
+
+
+
+ 导出 CSV
+
+
+
+
+
+ {{ loadError }}
+
+
+
+ 学生 {{ gradebook.student_count }}
+ 任务 {{ gradebook.task_count }}
+
+ 计入 {{ gradebook.included_task_count }}
+
+
+ 覆盖门槛 {{ gradebook.coverage_threshold_count }} 人
+
+
+
+
+
+
+
+
+
+
diff --git a/src/router.ts b/src/router.ts
index 379bb1e..936b0e7 100644
--- a/src/router.ts
+++ b/src/router.ts
@@ -64,6 +64,11 @@ const routes = [
name: "showcase-manage",
component: () => import("./pages/ShowcaseManage.vue"),
},
+ {
+ path: "gradebook",
+ name: "gradebook",
+ component: () => import("./pages/Gradebook.vue"),
+ },
],
},
]