diff --git a/Yi.Ai.Vue3/src/api/aiImage/index.ts b/Yi.Ai.Vue3/src/api/aiImage/index.ts index 64c13c2f..bd4f6335 100644 --- a/Yi.Ai.Vue3/src/api/aiImage/index.ts +++ b/Yi.Ai.Vue3/src/api/aiImage/index.ts @@ -31,8 +31,6 @@ export function publishImage(data: PublishImageRequest) { export function getImageModels() { return post('/ai-image/model').json(); } - export function deleteMyTasks(taskIds: string[]) { - // return del(`/ai-image/my-tasks/${taskIds}`).json(); - return del('/ai-image/my-tasks', { json: taskIds }).json(); + return del('/ai-image/my-tasks', taskIds).json(); } diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/MyImages.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/MyImages.vue index 74a25aa5..d9d7287d 100644 --- a/Yi.Ai.Vue3/src/pages/chat/image/components/MyImages.vue +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/MyImages.vue @@ -21,7 +21,7 @@ const currentTask = ref(null); // Batch selection const batchMode = ref(false); -const selectedTaskIds = ref>(new Set()); +const selectedTaskIds = ref([]); // Mobile detection const isMobile = ref(false); @@ -259,42 +259,37 @@ async function downloadImage(url: string) { function toggleBatchMode() { batchMode.value = !batchMode.value; if (!batchMode.value) { - selectedTaskIds.value.clear(); + selectedTaskIds.value = []; } } function toggleTaskSelection(taskId: string) { - if (selectedTaskIds.value.has(taskId)) { - selectedTaskIds.value.delete(taskId); + const index = selectedTaskIds.value.indexOf(taskId); + if (index > -1) { + selectedTaskIds.value.splice(index, 1); } else { - selectedTaskIds.value.add(taskId); + selectedTaskIds.value.push(taskId); } - // Force reactivity update - selectedTaskIds.value = new Set(selectedTaskIds.value); } function selectAll() { - taskList.value.forEach(task => selectedTaskIds.value.add(task.id)); - // Force reactivity update - selectedTaskIds.value = new Set(selectedTaskIds.value); + selectedTaskIds.value = taskList.value.map(task => task.id); } function clearSelection() { - selectedTaskIds.value.clear(); - // Force reactivity update - selectedTaskIds.value = new Set(selectedTaskIds.value); + selectedTaskIds.value = []; } async function batchDelete() { - if (selectedTaskIds.value.size === 0) { + if (selectedTaskIds.value.length === 0) { ElMessage.warning('请先选择要删除的图片'); return; } try { await ElMessageBox.confirm( - `确定要删除选中的 ${selectedTaskIds.value.size} 张图片吗?`, + `确定要删除选中的 ${selectedTaskIds.value.length} 张图片吗?`, '批量删除', { confirmButtonText: '确定', @@ -303,10 +298,10 @@ async function batchDelete() { }, ); - const ids = Array.from(selectedTaskIds.value); + const ids = selectedTaskIds.value; await deleteMyTasks(ids); ElMessage.success('删除成功'); - selectedTaskIds.value.clear(); + selectedTaskIds.value = []; batchMode.value = false; handleSearch(); } @@ -477,12 +472,33 @@ watch([() => searchForm.TaskStatus, () => searchForm.PublishStatus, dateRange], 重置 - - - - - 刷新 - + + +
+ + {{ batchMode ? '取消批量' : '批量管理' }} + + +
@@ -576,53 +592,45 @@ watch([() => searchForm.TaskStatus, () => searchForm.PublishStatus, dateRange], 搜索 - + 重置 - - - - - 刷新 - + + +
+ + {{ batchMode ? '取消批量' : '批量管理' }} + + +
- -
-
- - {{ batchMode ? '取消批量' : '批量管理' }} - - -
-
-
searchForm.TaskStatus, () => searchForm.PublishStatus, dateRange], :task="task" show-publish-status :batch-mode="batchMode" - :selected="selectedTaskIds.has(task.id)" + :selected="selectedTaskIds.includes(task.id)" @click="batchMode ? toggleTaskSelection(task.id) : handleCardClick(task)" - @toggle-select="toggleTaskSelection" @use-prompt="$emit('use-prompt', $event)" @use-reference="$emit('use-reference', $event)" @publish="openPublishDialog(task)" diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/TaskCard.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/TaskCard.vue index 896214f4..a1823dae 100644 --- a/Yi.Ai.Vue3/src/pages/chat/image/components/TaskCard.vue +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/TaskCard.vue @@ -11,7 +11,7 @@ const props = defineProps<{ selected?: boolean; }>(); -const emit = defineEmits(['click', 'use-prompt', 'use-reference', 'publish', 'preview', 'toggle-select', 'delete']); +const emit = defineEmits(['click', 'use-prompt', 'use-reference', 'publish', 'preview', 'toggle-select']); function formatTime(time: string) { try { @@ -94,14 +94,14 @@ async function handleDownload() { class="task-card relative flex flex-col bg-white rounded-xl overflow-hidden border border-gray-100 transition-all duration-300 cursor-pointer" :class="{ 'ring-2 ring-primary': selected, - 'group hover:shadow-xl hover:-translate-y-1': !batchMode + 'group hover:shadow-xl hover:-translate-y-1': !batchMode, + 'hover:ring-2 hover:ring-primary/50': batchMode }" + @click="batchMode ? $emit('click') : undefined" > -
-
- -
+
+
@@ -158,7 +158,7 @@ async function handleDownload() {