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.
dianshang-qianduan/src/api/trainingTask.js

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",
});
}