From 9721b8bd74232cfa4e2a1c8363ff4ea197a91180 Mon Sep 17 00:00:00 2001 From: Gsh <15170702455@163.com> Date: Sun, 4 Jan 2026 17:09:28 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=9B=BE=E7=89=87=E5=B9=BF=E5=9C=BA?= =?UTF-8?q?=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Yi.Ai.Vue3/src/api/aiImage/index.ts | 9 +- .../chat/image/components/ImageGenerator.vue | 25 +- .../chat/image/components/ImagePlaza.vue | 86 +++++-- .../pages/chat/image/components/MyImages.vue | 215 ++++++++++++++++-- .../pages/chat/image/components/TaskCard.vue | 21 +- Yi.Ai.Vue3/src/pages/chat/image/index.vue | 4 +- Yi.Ai.Vue3/types/components.d.ts | 2 + 7 files changed, 314 insertions(+), 48 deletions(-) diff --git a/Yi.Ai.Vue3/src/api/aiImage/index.ts b/Yi.Ai.Vue3/src/api/aiImage/index.ts index e4c55e67..64c13c2f 100644 --- a/Yi.Ai.Vue3/src/api/aiImage/index.ts +++ b/Yi.Ai.Vue3/src/api/aiImage/index.ts @@ -1,4 +1,3 @@ -import { get, post } from '@/utils/request'; import type { GenerateImageRequest, ImageModel, @@ -7,6 +6,7 @@ import type { TaskListResponse, TaskStatusResponse, } from './types'; +import { del, get, post } from '@/utils/request'; export function generateImage(data: GenerateImageRequest) { return post('/ai-image/generate', data).json(); @@ -30,4 +30,9 @@ export function publishImage(data: PublishImageRequest) { export function getImageModels() { return post('/ai-image/model').json(); -} \ No newline at end of file +} + +export function deleteMyTasks(taskIds: string[]) { + // return del(`/ai-image/my-tasks/${taskIds}`).json(); + return del('/ai-image/my-tasks', { json: taskIds }).json(); +} diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue index 03a82d35..90ab0244 100644 --- a/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/ImageGenerator.vue @@ -47,6 +47,7 @@ const currentTaskId = ref(''); const currentTask = ref(null); const showViewer = ref(false); let pollTimer: any = null; +let debounceTimer: any = null; const canGenerate = computed(() => { return selectedModelId.value && prompt.value && !generating.value; @@ -142,6 +143,18 @@ async function handleGenerate() { if (!canGenerate.value) return; + // Clear existing debounce timer + if (debounceTimer) { + clearTimeout(debounceTimer); + } + + // Set debounce timer + debounceTimer = setTimeout(async () => { + await executeGenerate(); + }, 300); +} + +async function executeGenerate() { generating.value = true; // Reset current task display immediately currentTask.value = { @@ -360,7 +373,7 @@ onUnmounted(() => { 配置 - + { { -
+
{

请稍候,这可能需要几秒钟

+ +

+ 您可以离开或者继续创建下一个任务,稍后到“我的图库”中查看任务进度 +

@@ -531,7 +548,7 @@ onUnmounted(() => { circle :icon="CopyDocument" title="复制错误信息" - @click="copyError(currentTask.errorInfo || '')" + @click.stop="copyError(currentTask.errorInfo || '')" />
diff --git a/Yi.Ai.Vue3/src/pages/chat/image/components/ImagePlaza.vue b/Yi.Ai.Vue3/src/pages/chat/image/components/ImagePlaza.vue index 046d744d..79b98264 100644 --- a/Yi.Ai.Vue3/src/pages/chat/image/components/ImagePlaza.vue +++ b/Yi.Ai.Vue3/src/pages/chat/image/components/ImagePlaza.vue @@ -26,7 +26,7 @@ const emit = defineEmits(['use-prompt', 'use-reference']); const taskList = ref([]); const pageIndex = ref(1); -const pageSize = ref(20); +const pageSize = ref(10); const loading = ref(false); const noMore = ref(false); const dialogVisible = ref(false); @@ -42,6 +42,7 @@ function checkMobile() { onMounted(() => { checkMobile(); window.addEventListener('resize', checkMobile); + loadMore(); }); onUnmounted(() => { @@ -60,6 +61,8 @@ const searchForm = reactive({ Prompt: '', Categories: '', UserName: '', + OrderByColumn: '', + IsAscending: true, }); const dateRange = ref<[string, string] | null>(null); @@ -74,7 +77,7 @@ async function loadMore() { loading.value = true; try { const params: TaskListRequest = { - SkipCount: (pageIndex.value - 1) * pageSize.value, + SkipCount: pageIndex.value, MaxResultCount: pageSize.value, TaskStatus: 'Success', Prompt: searchForm.Prompt || undefined, @@ -82,6 +85,8 @@ async function loadMore() { UserName: searchForm.UserName || undefined, StartTime: dateRange.value ? dateRange.value[0] : undefined, EndTime: dateRange.value ? dateRange.value[1] : undefined, + OrderByColumn: searchForm.OrderByColumn || undefined, + IsAscending: searchForm.IsAscending, }; const res = await getImagePlaza(params); @@ -91,10 +96,6 @@ async function loadMore() { const items = data.items || []; const total = data.total || 0; - if (items.length < pageSize.value) { - noMore.value = true; - } - if (pageIndex.value === 1) { taskList.value = items; } @@ -104,16 +105,13 @@ async function loadMore() { taskList.value.push(...newItems); } - // Check if we reached total - if (taskList.value.length >= total) { + // Check if we should stop loading more + if (items.length === 0 || items.length < pageSize.value || taskList.value.length >= total) { noMore.value = true; } - - if (items.length > 0) { - pageIndex.value++; - } else { - noMore.value = true; + // Increment pageIndex for next load only if there's more data + pageIndex.value++; } } catch (error) { @@ -223,7 +221,7 @@ watch(dateRange, () => {