diff --git a/web/static/css/style.css b/web/static/css/style.css index 41b555ba..b5985397 100644 --- a/web/static/css/style.css +++ b/web/static/css/style.css @@ -32872,6 +32872,12 @@ html[data-theme="dark"] .form-group select { overflow-y: auto; } +.workflow-properties > .workflow-dry-run-panel { + flex: 0 0 auto; + max-height: 42%; + overflow-y: auto; +} + .workflow-property-empty { margin: 14px; padding: 18px; @@ -32913,6 +32919,38 @@ html[data-theme="dark"] .form-group select { font-weight: 700; } +.workflow-dry-run-panel { + flex-shrink: 0; + border-top: 1px solid var(--border-color); + margin-top: auto; +} + +.workflow-dry-run-head { + margin-top: 0; +} + +.workflow-dry-run-close { + flex-shrink: 0; +} + +.workflow-dry-run-step { + display: flex; + flex-direction: column; + gap: 2px; + padding: 8px 0; + border-bottom: 1px solid var(--border-color); + font-size: 13px; +} + +.workflow-dry-run-step:last-child { + border-bottom: none; +} + +.workflow-dry-run-step span { + color: var(--text-secondary); + font-size: 12px; +} + .workflow-custom-fields { display: grid; gap: 8px; diff --git a/web/static/js/workflows.js b/web/static/js/workflows.js index b4ebe965..ae67e279 100644 --- a/web/static/js/workflows.js +++ b/web/static/js/workflows.js @@ -873,6 +873,7 @@ layoutWorkflowGraph(false); } selectWorkflowElement(null); + closeWorkflowDryRunPanel(); updateEmptyState(); renderWorkflowList(); setTimeout(() => cy && cy.resize(), 0); @@ -1581,6 +1582,14 @@ } } + function closeWorkflowDryRunPanel() { + const panel = document.getElementById('workflow-dry-run-panel'); + const output = document.getElementById('workflow-dry-run-output'); + if (!panel) return; + panel.hidden = true; + if (output) output.innerHTML = ''; + } + function renderWorkflowDryRunTrace(result) { const panel = document.getElementById('workflow-dry-run-panel'); const output = document.getElementById('workflow-dry-run-output'); @@ -1601,6 +1610,8 @@ }).join(''); } + window.closeWorkflowDryRunPanel = closeWorkflowDryRunPanel; + window.saveWorkflowDraft = async function () { initCy(); const meta = readWorkflowMetaFromForm(); @@ -1684,8 +1695,9 @@ console.log(result); console.groupEnd(); renderWorkflowDryRunTrace(result); - const summary = trace.slice(0, 8).map(item => `${item.label || item.nodeId}: ${item.status}`).join('\n'); - window.alert((_t('workflows.dryRunDone') || 'Dry-run completed') + '\n\n' + summary); + if (typeof showNotification === 'function') { + showNotification(_t('workflows.dryRunDone') || 'Dry-run completed', 'success'); + } } catch (error) { showNotification(error.message || _t('workflows.dryRunFailed'), 'error'); } diff --git a/web/templates/index.html b/web/templates/index.html index 795ca8e1..372da749 100644 --- a/web/templates/index.html +++ b/web/templates/index.html @@ -2633,9 +2633,14 @@
-