diff --git a/src/views/settings/creation/index.vue b/src/views/settings/creation/index.vue index 0fa7390..ac4aef2 100644 --- a/src/views/settings/creation/index.vue +++ b/src/views/settings/creation/index.vue @@ -769,7 +769,10 @@
- + + + +
@@ -820,6 +823,7 @@ interface TreeNode { children?: TreeNode[]; fileUrl?: string; workflowId?: number | string; + fileType?: string; sessionId?: string; } interface SelectedState { @@ -891,6 +895,7 @@ const isDraggingMiddleSplitter = ref(false); // 预览相关状态 const previewDialogVisible = ref(false); const previewUrl = ref(''); +const previewMode = ref<'iframe' | 'image' | 'video' | 'audio'>('iframe'); // 模型选择器相关状态 const showModelSelector = ref(false); const selectedModelData = ref(null); @@ -1262,6 +1267,7 @@ const buildTreeNodes = (tree: ExecutionTreeItem[]): TreeNode[] => label: item.label || `作品${ii + 1}`, nodeType: 'title', fileUrl: item.content, + fileType: item.type, workflowId: f.Id, sessionId: f.sessionId, })), @@ -2260,9 +2266,21 @@ const handleTreeNodeClick = async (data: TreeNode) => { }; // 预览节点 const previewNode = (d: TreeNode) => { - if (d.nodeType !== 'html' && d.nodeType !== 'image' && d.nodeType !== 'title') return; + if (!d.fileUrl) return ElMessage.warning('当前节点没有可用预览地址'); const url = buildAssetUrl(d.fileUrl); if (!url) return ElMessage.warning('当前节点没有可用预览地址'); + + const type = String(d.fileType || '').toLowerCase(); + if (type === 'image') { + previewMode.value = 'image'; + } else if (type === 'video') { + previewMode.value = 'video'; + } else if (type === 'audio') { + previewMode.value = 'audio'; + } else { + previewMode.value = 'iframe'; + } + previewUrl.value = url; previewDialogVisible.value = true; }; @@ -2276,7 +2294,9 @@ const downloadNode = async (d: TreeNode) => { const blob = r instanceof Blob ? r : r?.data; if (!(blob instanceof Blob)) throw new Error('invalid blob'); const fileName = d.fileUrl.split('/').pop() || ''; - const fileExt = fileName.split('.').pop()?.toLowerCase() || 'html'; + const type = String(d.fileType || '').toLowerCase(); + const defaultExt = type === 'video' ? 'mp4' : type === 'audio' ? 'mp3' : 'html'; + const fileExt = fileName.split('.').pop()?.toLowerCase() || defaultExt; const name = decodeURIComponent(fileName || `${d.label}.${fileExt}`); const u = URL.createObjectURL(blob); const a = document.createElement('a'); @@ -2286,7 +2306,7 @@ const downloadNode = async (d: TreeNode) => { a.click(); document.body.removeChild(a); URL.revokeObjectURL(u); - ElMessage.success('下载成功'); + ElMessage.success(`下载成功${type ? `(${type})` : ''}`); } catch { // 下载失败由 request 全局提示后端 message }