document.addEventListener('DOMContentLoaded', function() { // 工作流编辑器的主要元素 const workflowCanvas = document.getElementById('workflowCanvas'); const connectionsSvg = document.getElementById('connectionsSvg'); // 工作流数据对象 let workflowData = { metadata: { name: '新建工作流', description: '', created: new Date().toISOString(), modified: new Date().toISOString() }, nodes: [], connections: [] }; // 拖拽相关变量 let isDragging = false; let dragTarget = null; let dragOffset = { x: 0, y: 0 }; // 连接相关变量 let isConnecting = false; let connectionStart = null; let connectionPreviewPath = null; // 设置编辑器网格背景 setEditorBackground(); // 初始化组件面板拖拽 initializeComponentDrag(); function setEditorBackground() { workflowCanvas.style.backgroundSize = '20px 20px'; workflowCanvas.style.backgroundImage = ` linear-gradient(to right, #f0f0f0 1px, transparent 1px), linear-gradient(to bottom, #f0f0f0 1px, transparent 1px) `; } function initializeComponentDrag() { const components = document.querySelectorAll('.component-item'); components.forEach(component => { component.setAttribute('draggable', 'true'); component.addEventListener('dragstart', function(e) { e.dataTransfer.setData('componentType', this.dataset.type); e.dataTransfer.setData('componentSubtype', this.dataset.subtype); }); }); } // 创建模板卡片 function createTemplateCard(template) { const div = document.createElement('div'); div.className = 'template-item'; div.innerHTML = `
${nodeData.config ? '已配置' : '点击配置参数'}
任务运行中,请稍候...
'; $('#taskStatusModal').modal('show'); // 开始定期检查任务状态 if (taskStatusInterval) { clearInterval(taskStatusInterval); } pollTaskStatus(taskId); taskStatusInterval = setInterval(() => pollTaskStatus(taskId), 3000); } function pollTaskStatus(taskId) { fetch(`/api/task/${taskId}/status`) .then(response => response.json()) .then(data => { updateTaskStatusDisplay(data); // 如果任务已完成或失败,停止轮询 if (data.status === 'completed' || data.status === 'failed') { if (taskStatusInterval) { clearInterval(taskStatusInterval); taskStatusInterval = null; } } }) .catch(error => { console.error('获取任务状态出错:', error); }); } function updateTaskStatusDisplay(taskData) { const statusDisplay = document.getElementById('taskStatusDisplay'); const progressBar = document.getElementById('taskProgressBar'); const resultPreview = document.getElementById('taskResultPreview'); statusDisplay.textContent = getStatusText(taskData.status); // 更新进度条 progressBar.style.width = `${taskData.progress || 0}%`; // 根据状态设置进度条颜色 progressBar.className = 'progress-bar'; if (taskData.status === 'completed') { progressBar.classList.add('bg-success'); document.getElementById('taskCompleteTimeDisplay').textContent = new Date().toLocaleString(); } else if (taskData.status === 'failed') { progressBar.classList.add('bg-danger'); document.getElementById('taskCompleteTimeDisplay').textContent = new Date().toLocaleString(); } else { progressBar.classList.add('bg-primary'); } // 显示结果预览 if (taskData.status === 'completed' && taskData.resultPreview) { resultPreview.innerHTML = generateResultPreview(taskData.resultPreview); } else if (taskData.status === 'failed' && taskData.error) { resultPreview.innerHTML = `无可用预览
'; let html = ''; if (resultData.type === 'text') { html = `${resultData.content}`;
} else if (resultData.type === 'table') {
html = '| ${header} | `; }); html += '
|---|
| ${cell} | `; }); html += '
显示前5行,共${resultData.rows.length}行
`; } html += '