fix: 任务页操作补防抖加载
This commit is contained in:
+27
-10
@@ -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,14 +219,16 @@ const removeTask = async () => {
|
|||||||
cancelButtonText: "取消",
|
cancelButtonText: "取消",
|
||||||
type: "warning",
|
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 {
|
} catch {
|
||||||
return; // 用户取消
|
// 用户取消或删除失败,保持页面状态
|
||||||
}
|
} finally {
|
||||||
const res = await request.del(`/tasks/${target.taskId}`, {});
|
removingTask.value = false;
|
||||||
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;
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -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>
|
||||||
|
|||||||
Reference in New Issue
Block a user