From b3a5342d6bda1627d475c4ed84513bbfa98277a3 Mon Sep 17 00:00:00 2001 From: alivender <13898766233@163.com> Date: Sat, 26 Apr 2025 21:53:33 +0800 Subject: [PATCH] feat: enhance DiagramCanvas and Pin components with wire creation and tooltip functionality - Added wire creation logic in DiagramCanvas.vue with mouse tracking and event handling. - Implemented tooltip display for pins in Pin.vue with detailed information on hover. - Updated ProjectView.vue to handle wire creation and deletion events. - Refactored Wire.vue to support dynamic path rendering based on routing mode. --- src/components/DiagramCanvas.vue | 540 +++++++++++++++++++++++++++++- src/components/Wire.vue | 141 ++++++++ src/components/equipments/Pin.vue | 186 +++++++++- src/views/ProjectView.vue | 62 +++- 4 files changed, 896 insertions(+), 33 deletions(-) create mode 100644 src/components/Wire.vue diff --git a/src/components/DiagramCanvas.vue b/src/components/DiagramCanvas.vue index 12a40f8..87b6a81 100644 --- a/src/components/DiagramCanvas.vue +++ b/src/components/DiagramCanvas.vue @@ -2,11 +2,46 @@
-
+ :style="{ transform: `translate(${position.x}px, ${position.y}px) scale(${scale})` }"> + + + + + + + + +
- @@ -45,6 +80,7 @@ + + diff --git a/src/components/equipments/Pin.vue b/src/components/equipments/Pin.vue index fc637a5..ff4e20e 100644 --- a/src/components/equipments/Pin.vue +++ b/src/components/equipments/Pin.vue @@ -5,15 +5,18 @@ :height="height" :viewBox="'0 0 ' + viewBoxWidth + ' ' + viewBoxHeight" class="pin-component" + :data-pin-id="props.label" > - - - - + + r="3.75" + @mouseenter="showPinTooltip" + @mouseleave="hidePinTooltip" + @click.stop="handlePinClick" + :data-pin-id="`${props.label}-${props.constraint}`" /> @@ -25,31 +28,52 @@ height="25" x="0" y="0" - rx="2.5" /> - + r="3.75" + @mouseenter="showPinTooltip" + @mouseleave="hidePinTooltip" + @click.stop="handlePinClick" + :data-pin-id="`${props.label}-${props.constraint}`" /> {{ props.label }} - - + {{ props.label }} - - + + + +
+ {{ tooltipText }} +
@@ -120,6 +264,7 @@ defineExpose({ .pin-component { display: block; user-select: none; + position: relative; } .interactive { cursor: pointer; @@ -128,4 +273,15 @@ defineExpose({ .interactive:hover { filter: brightness(1.2); } +.pin-tooltip { + background-color: rgba(0, 0, 0, 0.8); + color: white; + padding: 4px 8px; + border-radius: 4px; + font-size: 12px; + z-index: 1000; + pointer-events: none; + white-space: nowrap; + box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2); +} diff --git a/src/views/ProjectView.vue b/src/views/ProjectView.vue index cb0856f..e475bdb 100644 --- a/src/views/ProjectView.vue +++ b/src/views/ProjectView.vue @@ -4,11 +4,12 @@