From 2ae927a8516fa02bb42f8acdd215bd3158c1425f Mon Sep 17 00:00:00 2001 From: 2910410219 <2910410219@qq.com> Date: Wed, 29 Apr 2026 09:52:56 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8A=9F=E8=83=BD:=E9=80=9A=E8=BF=87=E5=88=86?= =?UTF-8?q?=E9=A1=B5=E5=92=8C=E4=BB=BB=E5=8A=A1=E6=8E=A7=E5=88=B6=E5=8A=9F?= =?UTF-8?q?=E8=83=BD=E5=A2=9E=E5=BC=BA=E4=BB=BB=E5=8A=A1=E7=AE=A1=E7=90=86?= =?UTF-8?q?=20-=E4=B8=BA=E5=88=9B=E5=BB=BA=E4=BB=BB=E5=8A=A1=E5=BC=95?= =?UTF-8?q?=E5=85=A5=E5=88=86=E9=A1=B5=E5=8A=9F=E8=83=BD=EF=BC=8C=E4=BB=A5?= =?UTF-8?q?=E6=8F=90=20=E5=8D=87=E7=94=A8=E6=88=B7=E4=BD=93=E9=AA=8C?= =?UTF-8?q?=E3=80=82=20-=E6=96=B0=E5=A2=9E=E6=9A=82=E5=81=9C=E3=80=81?= =?UTF-8?q?=E7=BB=A7=E7=BB=AD=E5=92=8C=E5=88=A0=E9=99=A4=E4=BB=BB=E5=8A=A1?= =?UTF-8?q?=E7=9A=84=E5=8A=9F=E8=83=BD=E3=80=82=20-=E6=9B=B4=E6=96=B0?= =?UTF-8?q?=E4=BA=86=E4=BB=BB=E5=8A=A1=E7=8A=B6=E6=80=81=E5=A4=84=E7=90=86?= =?UTF-8?q?=EF=BC=8C=E5=8C=85=E6=8B=AC'=E5=B7=B2=E6=9A=82=E5=81=9C'?= =?UTF-8?q?=E7=8A=B6=E6=80=81=E5=8F=8A=E5=85=B6=E7=9B=B8=E5=BA=94=E7=9A=84?= =?UTF-8?q?UI=E6=9B=B4=E6=96=B0=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/digitalHuman/creation/index.vue | 49 +++++++++++++++++++++-- 1 file changed, 45 insertions(+), 4 deletions(-) diff --git a/src/views/digitalHuman/creation/index.vue b/src/views/digitalHuman/creation/index.vue index a4691e1..563f863 100644 --- a/src/views/digitalHuman/creation/index.vue +++ b/src/views/digitalHuman/creation/index.vue @@ -147,7 +147,7 @@
-
+
{{ task.title }}
{{ getTaskStatusText(task.status) }} @@ -158,10 +158,23 @@
{{ task.error }}
+ 暂停 + 继续 重新执行 + 删除
+
+ +
@@ -196,7 +209,7 @@ interface PreviewState { nodeType: 'html' | 'image'; } const formRef = ref(); -type CreationTaskStatus = 'running' | 'success' | 'failed'; +type CreationTaskStatus = 'running' | 'success' | 'failed' | 'paused'; interface CreationTask { id: number; title: string; @@ -215,6 +228,8 @@ const treeNodes = ref([]); const selectedPreview = ref(null); const descriptionFiles = ref([]); const taskDialogVisible = ref(false); +const taskPage = ref(1); +const taskPageSize = ref(3); const mockCreationParams: CreationSubmitParams = { mode: '混合模式(文案 + 图片)', content_type: '穿搭分享', @@ -292,13 +307,27 @@ const styleOptions = [ ]; const imageRatioOptions = ['3:4 — 小红书', '1:1 — 方图', '16:9 — 横版']; const taskBadgeCount = computed(() => creationTasks.value.filter((task) => task.status !== 'success').length); +const pagedCreationTasks = computed(() => { + const start = (taskPage.value - 1) * taskPageSize.value; + return creationTasks.value.slice(start, start + taskPageSize.value); +}); +watch( + () => creationTasks.value.length, + (total) => { + const maxPage = Math.max(1, Math.ceil(total / taskPageSize.value)); + if (taskPage.value > maxPage) taskPage.value = maxPage; + } +); +const handleTaskPageChange = (page: number) => { + taskPage.value = page; +}; const formatTaskTime = () => { const date = new Date(); return `${date.getFullYear()}-${String(date.getMonth() + 1).padStart(2, '0')}-${String(date.getDate()).padStart(2, '0')} ${String(date.getHours()).padStart(2, '0')}:${String(date.getMinutes()).padStart(2, '0')}:${String(date.getSeconds()).padStart(2, '0')}`; }; -const getTaskStatusText = (status: CreationTaskStatus) => ({ running: '执行中', success: '已完成', failed: '失败' })[status]; +const getTaskStatusText = (status: CreationTaskStatus) => ({ running: '执行中', success: '已完成', failed: '失败', paused: '已暂停' })[status]; const getTaskTagType = (status: CreationTaskStatus) => - ({ running: 'warning', success: 'success', failed: 'danger' })[status] as 'warning' | 'success' | 'danger'; + ({ running: 'warning', success: 'success', failed: 'danger', paused: 'info' })[status] as 'warning' | 'success' | 'danger' | 'info'; const buildTaskSummary = (params: CreationSubmitParams) => `${params.content_type} / ${params.theme || '未填写主题'} / ${params.title || '未填写标题'}`; watch( @@ -509,6 +538,18 @@ const retryTask = async (task: CreationTask) => { if (submitLoading.value) return; await runCreationTask(task); }; +const deleteTask = (taskId: number) => { + creationTasks.value = creationTasks.value.filter((task) => task.id !== taskId); +}; +const pauseTask = (task: CreationTask) => { + if (task.status !== 'running') return; + task.status = 'paused'; + task.updatedAt = formatTaskTime(); +}; +const continueTask = async (task: CreationTask) => { + if (task.status !== 'paused' || submitLoading.value) return; + await runCreationTask(task); +}; const handleSubmit = async () => { if (!formRef.value || submitLoading.value) return; try {