diff --git a/src/components/Study.vue b/src/components/Study.vue index 9d6ce3d..01f72da 100644 --- a/src/components/Study.vue +++ b/src/components/Study.vue @@ -44,6 +44,9 @@ const pageSize = 20; const taskApplications = ref([]); const applicationsLoading = ref(false); const appUrlTitles = ref>({}); +const updatingApplicationId = ref(null); +const removingTask = ref(false); +const weightsLoading = ref(false); const selectedTask = computed(() => tasks.value.find((item) => item.taskId === selectedTaskId.value) || null @@ -104,6 +107,8 @@ async function loadTaskApplications(taskNum: string) { } const changeApplicationStatus = async (item: TaskApplication) => { + if (updatingApplicationId.value !== null) return; + updatingApplicationId.value = item.id; try { await updateTaskApplication(item.id, { title: item.title, @@ -117,6 +122,8 @@ const changeApplicationStatus = async (item: TaskApplication) => { if (selectedTask.value) { await loadTaskApplications(selectedTask.value.taskNum); } + } finally { + updatingApplicationId.value = null; } }; @@ -203,6 +210,8 @@ const removeTask = async () => { ElMessage.warning("请先选择一个任务"); return; } + if (removingTask.value) return; + removingTask.value = true; const target = selectedTask.value; try { await ElMessageBox.confirm(`确定删除任务「${target.title}」?关联的学习会话、学习报告、应用场景等数据将被一并删除。`, "确认删除", { @@ -210,14 +219,16 @@ const removeTask = async () => { cancelButtonText: "取消", type: "warning", }); + const res = await request.del(`/tasks/${target.taskId}`, {}); + if (res.code === 200) { + ElMessage.success(`任务 ${target.title} 删除成功`); + tasks.value = tasks.value.filter((item) => item.taskId !== target.taskId); + selectedTaskId.value = tasks.value[0]?.taskId ?? null; + } } catch { - return; // 用户取消 - } - const res = await request.del(`/tasks/${target.taskId}`, {}); - if (res.code === 200) { - ElMessage.success(`任务 ${target.title} 删除成功`); - tasks.value = tasks.value.filter((item) => item.taskId !== target.taskId); - selectedTaskId.value = tasks.value[0]?.taskId ?? null; + // 用户取消或删除失败,保持页面状态 + } finally { + removingTask.value = false; } }; @@ -237,6 +248,8 @@ const weightsSum = computed(() => ); const openWeightsDialog = async () => { + if (weightsLoading.value) return; + weightsLoading.value = true; try { const res = await getPriorityWeights(); const data = res?.data; @@ -248,8 +261,10 @@ const openWeightsDialog = async () => { } } catch { // 读取失败时保持默认值 + } finally { + weightsLoading.value = false; + weightsDialogVisible.value = true; } - weightsDialogVisible.value = true; }; const saveWeights = async () => { @@ -385,6 +400,8 @@ onMounted(() => { v-model="item.status" size="small" class="application-status" + :loading="updatingApplicationId === item.id" + :disabled="updatingApplicationId !== null" @change="changeApplicationStatus(item)" > { 开始任务 添加任务 更新任务 - 权重配置 - 删除任务 + 权重配置 + 删除任务