You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
127 lines
3.2 KiB
JavaScript
127 lines
3.2 KiB
JavaScript
import request from "@/utils/request";
|
|
|
|
// 学生页面和全局“补充步骤”导航会在同一轮路由渲染中读取同一任务配置。
|
|
// 仅合并进行中的请求:教师保存后下一次读取仍会获得最新配置,不引入陈旧缓存。
|
|
const pendingTaskRequests = new Map();
|
|
|
|
function notifyStudentTaskConfigLoading(taskKey, loading) {
|
|
if (typeof window === "undefined") return;
|
|
window.dispatchEvent(new CustomEvent("student-task-config-loading", { detail: { taskKey, loading } }));
|
|
}
|
|
|
|
export function listTrainingTasks(params) {
|
|
return request({
|
|
url: "/api/training-tasks",
|
|
method: "get",
|
|
params,
|
|
});
|
|
}
|
|
|
|
export function getTrainingTaskByKey(taskKey) {
|
|
const normalizedTaskKey = String(taskKey || "").trim();
|
|
if (pendingTaskRequests.has(normalizedTaskKey)) {
|
|
return pendingTaskRequests.get(normalizedTaskKey);
|
|
}
|
|
notifyStudentTaskConfigLoading(normalizedTaskKey, true);
|
|
const requestPromise = request({
|
|
url: `/api/training-tasks/key/${normalizedTaskKey}`,
|
|
method: "get",
|
|
});
|
|
pendingTaskRequests.set(normalizedTaskKey, requestPromise);
|
|
requestPromise.then(
|
|
() => {
|
|
pendingTaskRequests.delete(normalizedTaskKey);
|
|
notifyStudentTaskConfigLoading(normalizedTaskKey, false);
|
|
},
|
|
() => {
|
|
pendingTaskRequests.delete(normalizedTaskKey);
|
|
notifyStudentTaskConfigLoading(normalizedTaskKey, false);
|
|
}
|
|
);
|
|
return requestPromise;
|
|
}
|
|
|
|
export function updateTrainingTask(id, data) {
|
|
return request({
|
|
url: `/api/training-tasks/${id}`,
|
|
method: "put",
|
|
data,
|
|
});
|
|
}
|
|
|
|
export function createTrainingTask(data) {
|
|
return request({
|
|
url: "/api/training-tasks",
|
|
method: "post",
|
|
data,
|
|
});
|
|
}
|
|
|
|
export function importTrainingTasks(file) {
|
|
const data = new FormData();
|
|
data.append("file", file);
|
|
return request({
|
|
url: "/api/training-tasks/import",
|
|
method: "post",
|
|
data,
|
|
headers: { "Content-Type": "multipart/form-data" },
|
|
});
|
|
}
|
|
|
|
export function downloadTrainingTaskTemplate() {
|
|
return request({
|
|
url: "/api/training-tasks/template",
|
|
method: "get",
|
|
responseType: "blob",
|
|
});
|
|
}
|
|
|
|
export function uploadTrainingTaskMaterial(data) {
|
|
return request({
|
|
url: "/common/upload",
|
|
method: "post",
|
|
data,
|
|
headers: {
|
|
"Content-Type": "multipart/form-data",
|
|
repeatSubmit: false,
|
|
},
|
|
});
|
|
}
|
|
|
|
export function listClassTrainingTasks(teachingClassId, params) {
|
|
return request({
|
|
url: `/api/training-tasks/classes/${teachingClassId}`,
|
|
method: "get",
|
|
params,
|
|
});
|
|
}
|
|
|
|
export function getClassTrainingTaskByKey(teachingClassId, taskKey) {
|
|
return request({
|
|
url: `/api/training-tasks/classes/${teachingClassId}/key/${taskKey}`,
|
|
method: "get",
|
|
});
|
|
}
|
|
|
|
export function saveClassTrainingTask(teachingClassId, taskKey, data) {
|
|
return request({
|
|
url: `/api/training-tasks/classes/${teachingClassId}/${taskKey}`,
|
|
method: "put",
|
|
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",
|
|
});
|
|
}
|