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 {