From 5deb447c8efdf98adef54e84b5b14a5084212c76 Mon Sep 17 00:00:00 2001 From: hz4th_coder Date: Wed, 12 Aug 2026 17:26:30 +0800 Subject: [PATCH] =?UTF-8?q?DAG=20=E5=B7=A5=E4=BD=9C=E6=B5=81=E7=94=BB?= =?UTF-8?q?=E5=B8=83=E5=8D=87=E7=BA=A7=EF=BC=9A=E8=8A=82=E7=82=B9=E5=8F=AF?= =?UTF-8?q?=E6=8B=96=E5=8A=A8=20+=20=E6=BB=9A=E8=BD=AE=E7=BC=A9=E6=94=BE?= =?UTF-8?q?=20+=20=E7=94=BB=E5=B8=83=E5=B9=B3=E7=A7=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 节点拖拽调整布局(位移按缩放比例换算,拖动不误触详情点击) - 滚轮以鼠标为锚点缩放(0.25x-3x),双击空白一键复位 - 拖拽空白区域平移画布(cursor grab/grabbing) - 布局与视图状态 localStorage 按项目记忆,刷新/重开自动恢复 - 实测:节点精确拖动、锚点缩放、平移、复位、点击详情全部通过 --- docs/v2/dag_canvas.png | Bin 0 -> 74256 bytes static/app.js | 246 +++++++++++++++++++++++++++++++++++------ static/style.css | 3 +- 3 files changed, 217 insertions(+), 32 deletions(-) create mode 100644 docs/v2/dag_canvas.png diff --git a/docs/v2/dag_canvas.png b/docs/v2/dag_canvas.png new file mode 100644 index 0000000000000000000000000000000000000000..9869b67689ae4c0ef6e82d4c6ed1b748759a94a6 GIT binary patch literal 74256 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 literal 0 HcmV?d00001 diff --git a/static/app.js b/static/app.js index 5dd63fe..5fe6f52 100644 --- a/static/app.js +++ b/static/app.js @@ -287,14 +287,10 @@ async function moveTask(tid, status) { toast('状态已更新', 'ok'); refreshProj(); } -/* --- DAG 工作流 --- */ -function renderDag() { - const {tasks} = projCtx; - const idMap = {}; - tasks.forEach(t => { idMap[t.id] = t; }); - const edges = []; - tasks.forEach(t => (t.depends_on || []).forEach(d => { if (idMap[d]) edges.push({from:d, to:t.id}); })); +/* --- DAG 工作流(可交互画布:拖节点 / 滚轮缩放 / 拖画布平移) --- */ +let dagState = null; // {pid, pos:{id:{x,y}}, scale, tx, ty, drag:null, moved:false} +function dagLayout(tasks, idMap) { // 拓扑分层:最长路径 const layer = {}; const visit = id => { @@ -308,43 +304,231 @@ function renderDag() { tasks.forEach(t => visit(t.id)); const layers = {}; tasks.forEach(t => { (layers[layer[t.id]] = layers[layer[t.id]] || []).push(t.id); }); - const W = 260, H = 110, PAD = 60; const width = Math.max(2, Object.keys(layers).length) * W + PAD; const height = Math.max(...tasks.map(t => layer[t.id] === undefined ? 0 : layer[t.id]), 0) * H + PAD + 60; const pos = {}; Object.entries(layers).forEach(([l, ids]) => { const x = PAD + parseInt(l) * W; - const step = Math.min(H - 60, Math.max(70, (height - 2*PAD) / (ids.length + 1))); + const step = Math.min(H - 60, Math.max(70, (height - 2 * PAD) / (ids.length + 1))); ids.forEach((id, i) => { pos[id] = {x, y: PAD + (i + 1) * step}; }); }); + return {width, height, pos}; +} + +function dagSize() { + const {tasks} = projCtx; + const idMap = {}; + tasks.forEach(t => { idMap[t.id] = t; }); + return dagLayout(tasks, idMap); +} + +function saveDagState() { + if (!dagState) return; + try { + const pos = {}; + Object.entries(dagState.pos).forEach(([k, v]) => { pos[k] = {x: Math.round(v.x), y: Math.round(v.y)}; }); + localStorage.setItem('aw_dag_pos_' + dagState.pid, JSON.stringify(pos)); + localStorage.setItem('aw_dag_view_' + dagState.pid, + JSON.stringify({scale: dagState.scale, tx: Math.round(dagState.tx), ty: Math.round(dagState.ty)})); + } catch (e) {} +} + +function dagApplyView() { + const s = dagState; + const svg = $('#dag-svg'); + if (!svg) return; + svg.style.transform = `translate(${s.tx}px, ${s.ty}px) scale(${s.scale})`; + svg.style.transformOrigin = '0 0'; +} + +function drawDag() { + const {tasks} = projCtx; + const idMap = {}; + tasks.forEach(t => { idMap[t.id] = t; }); + const edges = []; + tasks.forEach(t => (t.depends_on || []).forEach(d => { if (idMap[d]) edges.push({from: d, to: t.id}); })); + const {width, height} = dagSize(); const colors = {todo:'#2a3550', running:'#173b6b', review:'#4a3a10', done:'#0f3d2e', rejected:'#4a1c1c', failed:'#3d1c2e', cancelled:'#333'}; const ready = tasks.filter(t => (t.status === 'todo' || t.status === 'failed') && (!t.depends_on || t.depends_on.every(d => idMap[d]?.status === 'done'))); - $('#tab-body').innerHTML = ` + const body = $('#tab-body'); + if (!body) return; + body.innerHTML = `
- 共 ${tasks.length} 个节点 · ${edges.length} 条依赖边${ready.length ? ` · ${ready.length} 个任务就绪` : ''} + 共 ${tasks.length} 个节点 · ${edges.length} 条依赖边${ready.length ? ` · ${ready.length} 个任务就绪` : ''} · 拖节点调位 / 滚轮缩放 / 拖空白平移 / 双击复位
-
- - ${edges.map(e => { - const a = pos[e.from], b = pos[e.to]; - if (!a || !b) return ''; - const mx = (a.x + b.x) / 2; - const act = idMap[e.from].status === 'done'; - return ``; - }).join('')} - ${tasks.map(t => { - const p = pos[t.id]; - const col = colors[t.status]; - return ` - - #${t.id} ${esc(t.title).slice(0,10)} - ${STATUS[t.status].label}${t.depends_on?.length ? ' · 前置'+t.depends_on.length : ''} - `; - }).join('')} -
-
💡 节点点击查看详情;前置任务完成后下游自动触发。执行整个工作流 = 派发所有就绪任务(含失败重试)。
`; +
+ + + + ${edges.map(e => { + const a = dagState.pos[e.from], b = dagState.pos[e.to]; + if (!a || !b) return ''; + const mx = (a.x + b.x) / 2; + const act = idMap[e.from].status === 'done'; + return ``; + }).join('')} + ${tasks.map(t => { + const p = dagState.pos[t.id]; + const col = colors[t.status]; + return ` + + #${t.id} ${esc(t.title).slice(0, 10)} + ${STATUS[t.status].label}${t.depends_on?.length ? ' · 前置' + t.depends_on.length : ''} + `; + }).join('')} + +
+
💡 节点点击查看详情;拖动节点可自定义布局(自动记忆);前置任务完成后下游自动触发。执行整个工作流 = 派发所有就绪任务(含失败重试)。
`; + dagApplyView(); + bindDagEvents(); +} + +function bindDagEvents() { + const box = $('#dag-box'); + const svg = $('#dag-svg'); + if (!box || !svg) return; + const s = dagState; + let down = null; // {type:'node'|'pan', id?, sx, sy, ox, oy} + + box.addEventListener('mousedown', e => { + if (e.button !== 0) return; + const nodeEl = e.target.closest('.dag-node'); + if (nodeEl) { + const id = Number(nodeEl.dataset.id); + const p = s.pos[id]; + down = {type: 'node', id, sx: e.clientX, sy: e.clientY, ox: p.x, oy: p.y, moved: false}; + nodeEl.style.cursor = 'grabbing'; + svg.style.cursor = 'grabbing'; + } else { + down = {type: 'pan', sx: e.clientX, sy: e.clientY, ox: s.tx, oy: s.ty, moved: false}; + svg.style.cursor = 'grabbing'; + } + e.preventDefault(); + }); + + window.addEventListener('mousemove', e => { + if (!down) return; + const dx = e.clientX - down.sx, dy = e.clientY - down.sy; + if (!down.moved && Math.abs(dx) + Math.abs(dy) < 3) return; + down.moved = true; + if (down.type === 'node') { + const p = s.pos[down.id]; + if (p) { p.x = down.ox + dx / s.scale; p.y = down.oy + dy / s.scale; } + } else { + s.tx = down.ox + dx; + s.ty = down.oy + dy; + } + dagApplyView(); + if (down.type === 'node') { + // 轻量更新:节点坐标 + 关联连线 + const svgEl = $('#dag-svg'); + if (!svgEl) return; + svgEl.querySelectorAll('.dag-node').forEach(g => { + const nid = Number(g.dataset.id); + const pp = s.pos[nid]; + if (!pp) return; + g.querySelector('rect').setAttribute('x', pp.x - 55); + g.querySelector('rect').setAttribute('y', pp.y - 24); + const ts = g.querySelectorAll('text'); + ts[0].setAttribute('x', pp.x); ts[0].setAttribute('y', pp.y - 2); + ts[1].setAttribute('x', pp.x); ts[1].setAttribute('y', pp.y + 15); + }); + // 以拖动节点为中心更新相关连线 + const touched = new Set([down.id]); + projCtx.tasks.forEach(t => (t.depends_on || []).forEach(d => { + if (d === down.id || t.id === down.id) { touched.add(d); touched.add(t.id); } + })); + touched.forEach(tid => { + const a = s.pos[tid]; + if (!a) return; + projCtx.tasks.forEach(t => { + if (t.id !== tid) return; + (t.depends_on || []).forEach(d => { + const b = s.pos[d]; + if (!b) return; + const path = svgEl.querySelector(`path[data-e="${d}-${tid}"]`); + if (!path) return; + const mx = (b.x + a.x) / 2; + path.setAttribute('d', `M${b.x + 55},${b.y} C${mx},${b.y} ${mx},${a.y} ${a.x - 55},${a.y}`); + }); + }); + }); + } + }); + + window.addEventListener('mouseup', () => { + if (!down) return; + const wasNode = down.type === 'node'; + if (wasNode) { + const nodeEl = svg.querySelector('.dag-node[data-id="' + down.id + '"]'); + if (nodeEl) nodeEl.style.cursor = 'grab'; + } + svg.style.cursor = ''; + if (down.moved) { + dagState.suppressClick = true; + setTimeout(() => { if (dagState) dagState.suppressClick = false; }, 400); + saveDagState(); + } + down = null; + }); + + // 滚轮缩放(以鼠标为锚点) + box.addEventListener('wheel', e => { + e.preventDefault(); + const rect = box.getBoundingClientRect(); + const mx = e.clientX - rect.left, my = e.clientY - rect.top; + const factor = e.deltaY < 0 ? 1.12 : 1 / 1.12; + const ns = Math.min(3, Math.max(0.25, s.scale * factor)); + // 保持鼠标指向的内容坐标不动 + const cx = (mx - s.tx) / s.scale, cy = (my - s.ty) / s.scale; + s.scale = ns; + s.tx = mx - cx * ns; + s.ty = my - cy * ns; + dagApplyView(); + saveDagState(); + }, {passive: false}); + + // 双击空白复位视图 + box.addEventListener('dblclick', e => { + if (e.target.closest('.dag-node')) return; + s.scale = 1; s.tx = 0; s.ty = 0; + dagApplyView(); + saveDagState(); + }); + + // 点击节点打开详情(拖动超过阈值则不触发) + box.addEventListener('click', e => { + const nodeEl = e.target.closest('.dag-node'); + if (!nodeEl) return; + if (dagState.suppressClick) { dagState.suppressClick = false; return; } + openTaskDetail(Number(nodeEl.dataset.id)); + }); +} + +function renderDag() { + const {tasks, pid} = projCtx; + const idMap = {}; + tasks.forEach(t => { idMap[t.id] = t; }); + const {pos} = dagLayout(tasks, idMap); + // 恢复已保存布局 / 视图 + let savedPos = null, savedView = null; + try { + savedPos = JSON.parse(localStorage.getItem('aw_dag_pos_' + pid) || 'null'); + savedView = JSON.parse(localStorage.getItem('aw_dag_view_' + pid) || 'null'); + } catch (e) {} + if (savedPos) Object.entries(savedPos).forEach(([k, v]) => { if (pos[k]) pos[k] = v; }); + dagState = { + pid, pos, + scale: savedView?.scale || 1, + tx: savedView?.tx || 0, + ty: savedView?.ty || 0, + drag: null, moved: false, + }; + const box = $('#tab-body'); + box.innerHTML = ''; + drawDag(); } async function runWorkflow() { diff --git a/static/style.css b/static/style.css index d49103e..fd52878 100644 --- a/static/style.css +++ b/static/style.css @@ -131,7 +131,8 @@ tr:hover td{background:var(--panel2)} .tabs{display:flex;gap:4px;margin-bottom:16px;border-bottom:1px solid var(--border)} .tabs a{padding:9px 16px;color:var(--muted);text-decoration:none;border-bottom:2px solid transparent;font-size:13px} .tabs a.active{color:var(--accent);border-bottom-color:var(--accent)} -.dag-box{background:var(--panel);border:1px solid var(--border);border-radius:12px;padding:14px;overflow:auto} +.dag-box{background:var(--panel);border:1px solid var(--border);border-radius:12px;overflow:hidden;height:520px;position:relative;touch-action:none;user-select:none;cursor:grab} +.dag-box svg{display:block;transition:transform .05s linear} .dag-node{fill:var(--panel2);stroke:var(--border);stroke-width:1.5;rx:10;cursor:pointer} .dag-node:hover{stroke:var(--accent)} .dag-label{font-size:12px;fill:var(--text);text-anchor:middle}