feat: restore teaching class task defaults

dev-QQq
chenyuan 1 month ago
parent 2ad3ee929e
commit 6e751ac2ad

@ -84,3 +84,17 @@ export function saveClassTrainingTask(teachingClassId, taskKey, data) {
data,
});
}
export function restoreClassTrainingTaskDefault(teachingClassId, taskKey) {
return request({
url: `/api/training-tasks/classes/${teachingClassId}/${taskKey}/override`,
method: "delete",
});
}
export function restoreClassTrainingTasksDefaults(teachingClassId) {
return request({
url: `/api/training-tasks/classes/${teachingClassId}/overrides`,
method: "delete",
});
}

@ -25,6 +25,16 @@
<div class="toolbar-actions">
<el-tag v-if="selectedTeachingClass" type="success"></el-tag>
<el-tag v-else></el-tag>
<el-button
v-if="selectedTeachingClass"
type="danger"
plain
size="small"
:loading="restoring"
@click="restoreAllTasksDefaults"
>
恢复本班全部默认任务
</el-button>
</div>
</div>
</div>
@ -186,6 +196,15 @@
<footer class="drawer-footer">
<el-button @click="dialogVisible = false">{{ isReadonly ? "关闭" : "取消" }}</el-button>
<el-button
v-if="!isReadonly"
type="danger"
plain
:loading="restoring"
@click="restoreTaskDefault"
>
恢复此任务默认内容
</el-button>
<el-button v-if="!isReadonly" type="primary" :loading="saving" @click="submitTask"></el-button>
</footer>
</div>
@ -198,6 +217,8 @@ import {
listTrainingTasks,
listClassTrainingTasks,
saveClassTrainingTask,
restoreClassTrainingTaskDefault,
restoreClassTrainingTasksDefaults,
uploadTrainingTaskMaterial,
} from "@/api/trainingTask";
import * as indexApi from "@/api/teacher";
@ -211,6 +232,7 @@ const keyword = ref("");
const loading = ref(false);
const classesLoading = ref(false);
const saving = ref(false);
const restoring = ref(false);
const materialUploading = ref(false);
const tasks = ref([]);
const classList = ref([]);
@ -480,6 +502,47 @@ async function submitTask() {
}
}
async function restoreTaskDefault() {
if (!selectedTeachingClass.value || !taskForm.taskKey) return;
const confirmed = await confirmRestoreDefault("恢复此任务默认内容");
if (!confirmed) return;
restoring.value = true;
try {
await restoreClassTrainingTaskDefault(selectedTeachingClassId.value, taskForm.taskKey);
dialogVisible.value = false;
proxy?.$modal?.msgSuccess("已恢复此任务的默认内容");
await queryTasks();
} finally {
restoring.value = false;
}
}
async function restoreAllTasksDefaults() {
if (!selectedTeachingClass.value) return;
const confirmed = await confirmRestoreDefault("恢复本班全部默认任务");
if (!confirmed) return;
restoring.value = true;
try {
await restoreClassTrainingTasksDefaults(selectedTeachingClassId.value);
proxy?.$modal?.msgSuccess("已恢复本班全部默认任务");
await queryTasks();
} finally {
restoring.value = false;
}
}
async function confirmRestoreDefault(action) {
try {
await proxy?.$modal?.confirm(
`确认${action}吗?仅恢复当前教学班的实训任务内容,不影响学生已提交数据、成绩、进度及其他班级。`,
"确认恢复默认内容"
);
return true;
} catch (error) {
return false;
}
}
function buildPayload() {
return {
projectName: taskForm.project,

@ -0,0 +1,20 @@
const assert = require("assert");
const fs = require("fs");
const path = require("path");
const root = path.resolve(__dirname, "..");
const read = (file) => fs.readFileSync(path.join(root, file), "utf8");
const api = read("src/api/trainingTask.js");
const page = read("src/views/teacherEnd/trainingTask/index.vue");
assert(/export function restoreClassTrainingTaskDefault/.test(api));
assert(/export function restoreClassTrainingTasksDefaults/.test(api));
assert(/\/classes\/\$\{teachingClassId\}\/\$\{taskKey\}\/override/.test(api));
assert(/\/classes\/\$\{teachingClassId\}\/overrides/.test(api));
assert(/恢复此任务默认内容/.test(page));
assert(/恢复本班全部默认任务/.test(page));
assert(/proxy\?\.\$modal\?\.confirm/.test(page));
assert(/v-if="selectedTeachingClass"/.test(page));
console.log("training task default restore front-end contract passed");
Loading…
Cancel
Save