From f80da36d6564a8c297cbce2e405e3f6db93d487e Mon Sep 17 00:00:00 2001 From: duxingchen Date: Mon, 10 Aug 2026 13:59:22 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=BF=9E=E7=BA=BF=E8=BE=B9=E7=BC=98?= =?UTF-8?q?=E5=88=B0=E8=BE=B9=E7=BC=98=E9=98=B2=E7=A9=BF=E6=A8=A1+?= =?UTF-8?q?=E7=AE=AD=E5=A4=B4=E5=83=8F=E7=B4=A0=E7=BA=A7=E8=B4=B4=E5=90=88?= =?UTF-8?q?=E5=88=86=E6=94=AF=E5=8D=A1=E7=89=87=E8=BE=B9=E7=BC=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/pages/scan/components/TreeCanvas.vue | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/track-uniapp/src/pages/scan/components/TreeCanvas.vue b/track-uniapp/src/pages/scan/components/TreeCanvas.vue index 75a0873..6fe7042 100644 --- a/track-uniapp/src/pages/scan/components/TreeCanvas.vue +++ b/track-uniapp/src/pages/scan/components/TreeCanvas.vue @@ -145,6 +145,7 @@ export default { // ============================================================ // 🚀 连线计算:中央 → 分支 // ============================================================ + // 🔧 连线:卡片边缘到边缘,杜绝穿模 lines() { const result = []; const flatMap = {}; @@ -153,14 +154,18 @@ export default { if (n._isMain) return; const parent = n.parent_task_id ? flatMap[n.parent_task_id] : null; if (!parent) return; - const px = parent.x + 160; // 卡片右边缘 - const py = parent.y + 40; // 卡片垂直中心 - const nx = n.x; // 分支卡片左边缘 - const ny = n.y + 40; - result.push({ x1: Math.min(px, nx), y1: py, x2: Math.max(px, nx), y2: py, dashed: parent.status === 'COMPLETED' || parent.status === 'ARCHIVED' }); + const isLeft = n.x < parent.x; + const startX = isLeft ? n.x + 160 : parent.x + 160; // 左分支右边缘 / 主干右边缘 + const endX = isLeft ? parent.x : n.x; // 主干左边缘 / 右分支左边缘 + result.push({ + x1: startX, y1: parent.y + 40, + x2: endX, y2: parent.y + 40, + dashed: parent.status === 'COMPLETED' || parent.status === 'ARCHIVED', + }); }); return result; }, + // 🔧 箭头:像素级贴合分支卡片边缘 arrows() { const result = []; const flatMap = {}; @@ -172,8 +177,8 @@ export default { const isLegacy = parent && (parent.status === 'COMPLETED' || parent.status === 'ARCHIVED'); const isLeft = n.x < parent.x; result.push({ - x: isLeft ? n.x + 165 : n.x - 12, - y: n.y + 36, + x: isLeft ? n.x + 160 : n.x - 6, // 左分支: 卡片右边缘; 右分支: 卡片左边缘-箭头宽度 + y: n.y + 40 - 2, // 垂直居中 (border 4+4=8, -2 微调) rot: isLeft ? 180 : 0, dashed: isLegacy, });