fix: 任务页操作补防抖加载

This commit is contained in:
2026-08-05 21:43:28 +08:00
parent c95e593cf1
commit be4db68550
+23 -6
View File
@@ -44,6 +44,9 @@ const pageSize = 20;
const taskApplications = ref<TaskApplication[]>([]); const taskApplications = ref<TaskApplication[]>([]);
const applicationsLoading = ref(false); const applicationsLoading = ref(false);
const appUrlTitles = ref<Record<number, string>>({}); const appUrlTitles = ref<Record<number, string>>({});
const updatingApplicationId = ref<number | null>(null);
const removingTask = ref(false);
const weightsLoading = ref(false);
const selectedTask = computed(() => const selectedTask = computed(() =>
tasks.value.find((item) => item.taskId === selectedTaskId.value) || null tasks.value.find((item) => item.taskId === selectedTaskId.value) || null
@@ -104,6 +107,8 @@ async function loadTaskApplications(taskNum: string) {
} }
const changeApplicationStatus = async (item: TaskApplication) => { const changeApplicationStatus = async (item: TaskApplication) => {
if (updatingApplicationId.value !== null) return;
updatingApplicationId.value = item.id;
try { try {
await updateTaskApplication(item.id, { await updateTaskApplication(item.id, {
title: item.title, title: item.title,
@@ -117,6 +122,8 @@ const changeApplicationStatus = async (item: TaskApplication) => {
if (selectedTask.value) { if (selectedTask.value) {
await loadTaskApplications(selectedTask.value.taskNum); await loadTaskApplications(selectedTask.value.taskNum);
} }
} finally {
updatingApplicationId.value = null;
} }
}; };
@@ -203,6 +210,8 @@ const removeTask = async () => {
ElMessage.warning("请先选择一个任务"); ElMessage.warning("请先选择一个任务");
return; return;
} }
if (removingTask.value) return;
removingTask.value = true;
const target = selectedTask.value; const target = selectedTask.value;
try { try {
await ElMessageBox.confirm(`确定删除任务「${target.title}」?关联的学习会话、学习报告、应用场景等数据将被一并删除。`, "确认删除", { await ElMessageBox.confirm(`确定删除任务「${target.title}」?关联的学习会话、学习报告、应用场景等数据将被一并删除。`, "确认删除", {
@@ -210,15 +219,17 @@ const removeTask = async () => {
cancelButtonText: "取消", cancelButtonText: "取消",
type: "warning", type: "warning",
}); });
} catch {
return; // 用户取消
}
const res = await request.del(`/tasks/${target.taskId}`, {}); const res = await request.del(`/tasks/${target.taskId}`, {});
if (res.code === 200) { if (res.code === 200) {
ElMessage.success(`任务 ${target.title} 删除成功`); ElMessage.success(`任务 ${target.title} 删除成功`);
tasks.value = tasks.value.filter((item) => item.taskId !== target.taskId); tasks.value = tasks.value.filter((item) => item.taskId !== target.taskId);
selectedTaskId.value = tasks.value[0]?.taskId ?? null; selectedTaskId.value = tasks.value[0]?.taskId ?? null;
} }
} catch {
// 用户取消或删除失败,保持页面状态
} finally {
removingTask.value = false;
}
}; };
// ============ 优先级权重配置 ============ // ============ 优先级权重配置 ============
@@ -237,6 +248,8 @@ const weightsSum = computed(() =>
); );
const openWeightsDialog = async () => { const openWeightsDialog = async () => {
if (weightsLoading.value) return;
weightsLoading.value = true;
try { try {
const res = await getPriorityWeights(); const res = await getPriorityWeights();
const data = res?.data; const data = res?.data;
@@ -248,8 +261,10 @@ const openWeightsDialog = async () => {
} }
} catch { } catch {
// 读取失败时保持默认值 // 读取失败时保持默认值
} } finally {
weightsLoading.value = false;
weightsDialogVisible.value = true; weightsDialogVisible.value = true;
}
}; };
const saveWeights = async () => { const saveWeights = async () => {
@@ -385,6 +400,8 @@ onMounted(() => {
v-model="item.status" v-model="item.status"
size="small" size="small"
class="application-status" class="application-status"
:loading="updatingApplicationId === item.id"
:disabled="updatingApplicationId !== null"
@change="changeApplicationStatus(item)" @change="changeApplicationStatus(item)"
> >
<el-option <el-option
@@ -413,8 +430,8 @@ onMounted(() => {
<el-button type="success" size="large" @click="startTask">开始任务</el-button> <el-button type="success" size="large" @click="startTask">开始任务</el-button>
<el-button @click="addTask">添加任务</el-button> <el-button @click="addTask">添加任务</el-button>
<el-button @click="changeTask">更新任务</el-button> <el-button @click="changeTask">更新任务</el-button>
<el-button @click="openWeightsDialog">权重配置</el-button> <el-button :loading="weightsLoading" @click="openWeightsDialog">权重配置</el-button>
<el-button type="danger" @click="removeTask">删除任务</el-button> <el-button type="danger" :loading="removingTask" @click="removeTask">删除任务</el-button>
</aside> </aside>
</main> </main>
</div> </div>