统计面板那张表原来只给 `isDone` 为真的人,于是一次没对的学生连同他的提交 在面板里根本不存在——tab 却叫「提交记录」,看起来就像统计只认成功的提交。 - `data` 改成给窗口里交过东西的全部人,每行带 `done`;「完成人数」和完成度 跟着 `done` 数,不是 `data.length`,两个数字口径不变。 - 表格加「完成」列区分两种人;展开行拉的仍是那个人的全部提交(items 接口 本来就不按结果过滤),对错都在里面。 - 「交了没全对」那一栏原来无条件按花名册取,不填班级/用户名时花名册为空、 整栏跟着空掉,这批人两栏都不在。改成没有花名册时退回「有提交但没做完的 全部普通学生」,教师和禁用账号仍然排除;全站视图里保留完整用户名不剥班级 前缀。「还没交」那一栏没有花名册是真算不出来,仍然为空。 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PZbWEaPCnGvmdfNFpPFNGb
This commit is contained in:
@@ -61,7 +61,7 @@
|
||||
<div class="stat-item">
|
||||
<n-text>完成人数</n-text>
|
||||
<n-gradient-text type="error" font-size="28">{{
|
||||
list.length
|
||||
doneList.length
|
||||
}}</n-gradient-text>
|
||||
</div>
|
||||
<div class="stat-item">
|
||||
@@ -99,7 +99,12 @@
|
||||
</n-grid>
|
||||
</n-tab-pane>
|
||||
|
||||
<n-tab-pane name="submissions" tab="提交记录">
|
||||
<!--
|
||||
窗口里交过东西的**所有人**,一行一个,展开是他这段时间的全部提交(对的错的
|
||||
都在)。没做完的人也在表里 —— 一次没对的学生正是老师最想点开看的那个。
|
||||
隔壁「未完成」是点名用的名单,只有名字,两栏用途不同。
|
||||
-->
|
||||
<n-tab-pane name="submissions" :tab="`提交记录(${list.length})`">
|
||||
<n-data-table
|
||||
v-if="list.length"
|
||||
striped
|
||||
@@ -111,7 +116,7 @@
|
||||
:row-props="rowProps"
|
||||
style="margin-top: 12px"
|
||||
/>
|
||||
<n-empty v-else description="还没有人做出来" style="margin: 24px 0" />
|
||||
<n-empty v-else description="还没有人提交" style="margin: 24px 0" />
|
||||
</n-tab-pane>
|
||||
|
||||
<n-tab-pane name="unaccepted" :tab="`未完成(${unfinishedTotal})`">
|
||||
@@ -198,7 +203,7 @@ import storage from "utils/storage"
|
||||
import { useConfigStore } from "../store/config"
|
||||
import { Doughnut } from "vue-chartjs"
|
||||
import { Chart as ChartJS, ArcElement, Title, Tooltip, Legend } from "chart.js"
|
||||
import { NButton, NFlex, NText, type DataTableRowKey } from "naive-ui"
|
||||
import { NButton, NFlex, NTag, NText, type DataTableRowKey } from "naive-ui"
|
||||
import { JUDGE_STATUS } from "utils/constants"
|
||||
import type {
|
||||
AttemptedStudent,
|
||||
@@ -265,6 +270,17 @@ const columns: DataTableColumn<SubmissionStatisticsUser>[] = [
|
||||
},
|
||||
},
|
||||
{ title: "用户", key: "username" },
|
||||
// 做完没做完在同一张表里,用标签区分 —— 少了它这张表看不出谁还卡着
|
||||
{
|
||||
title: "完成",
|
||||
key: "done",
|
||||
render: (row) =>
|
||||
h(
|
||||
NTag,
|
||||
{ size: "small", type: row.done ? "success" : "default", bordered: false },
|
||||
() => (row.done ? "已完成" : "未完成"),
|
||||
),
|
||||
},
|
||||
{
|
||||
title: "提交数",
|
||||
key: "submissionCount",
|
||||
@@ -331,7 +347,10 @@ const personCount = ref(0)
|
||||
const route = useRoute()
|
||||
const router = useRouter()
|
||||
|
||||
// 交过东西的所有人(做没做完看 done)
|
||||
const list = ref<SubmissionStatisticsUser[]>([])
|
||||
// 「完成人数」「完成度」算的是做完了的那些,不是整张表的行数
|
||||
const doneList = computed(() => list.value.filter((row) => row.done))
|
||||
const listUnaccepted = ref<UnacceptedStudent[]>([])
|
||||
// 交了但一次没对的。和上面那一栏合起来才是「未完成」的全部
|
||||
const listAttempted = ref<AttemptedStudent[]>([])
|
||||
@@ -499,7 +518,7 @@ const adjustedPersonRate = computed(() => {
|
||||
if (adjustedPersonCount.value <= 0) return "0%"
|
||||
const rate = Math.min(
|
||||
100,
|
||||
(list.value.length / adjustedPersonCount.value) * 100,
|
||||
(doneList.value.length / adjustedPersonCount.value) * 100,
|
||||
)
|
||||
return `${Math.round(rate * 100) / 100}%`
|
||||
})
|
||||
|
||||
Reference in New Issue
Block a user