From f56576b2c67d48bd1d93609ee8eca311987660ac Mon Sep 17 00:00:00 2001
From: limengnan <420004014@qq.com>
Date: Tue, 1 Jul 2025 11:00:16 +0800
Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9data-visualization\components?=
=?UTF-8?q?\data-visualization?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../data-visualization/canvas/CanvasCore.vue | 5 +-
.../canvas/ComponentWrapper.vue | 146 ++++++++++++++----
.../canvas/ContextMenuDetails.vue | 121 ++++++++-------
.../data-visualization/canvas/DePreview.vue | 100 ++++++++++--
.../data-visualization/canvas/Shape.vue | 73 ++++-----
5 files changed, 309 insertions(+), 136 deletions(-)
diff --git a/frontend/src/data-visualization/components/data-visualization/canvas/CanvasCore.vue b/frontend/src/data-visualization/components/data-visualization/canvas/CanvasCore.vue
index 94140da..22faba3 100644
--- a/frontend/src/data-visualization/components/data-visualization/canvas/CanvasCore.vue
+++ b/frontend/src/data-visualization/components/data-visualization/canvas/CanvasCore.vue
@@ -59,7 +59,6 @@ const contextmenuStore = contextmenuStoreWithOut()
const { curComponent, dvInfo, editMode, tabMoveOutComponentId, canvasState, mainScrollTop } =
storeToRefs(dvMainStore)
const { editorMap, areaData, isCtrlOrCmdDown } = storeToRefs(composeStore)
-const emits = defineEmits(['scrollCanvasAdjust'])
const props = defineProps({
themes: {
type: String,
@@ -265,7 +264,7 @@ watch(
watch(
() => areaData.value.components.length,
- (val, oldVal) => {
+ () => {
groupAreaClickChange()
}
)
@@ -938,7 +937,7 @@ function removeItem(index) {
dvMainStore.removeLinkageInfo(item['id'])
if (isMainCanvas(canvasId.value)) {
// 主画布中存在隐藏组件 直接从原始componentData中进行删除
- dvMainStore.deleteComponentById(item.id)
+ dvMainStore.deleteComponentById(item.id, undefined, false)
} else {
componentData.value.splice(index, 1)
}
diff --git a/frontend/src/data-visualization/components/data-visualization/canvas/ComponentWrapper.vue b/frontend/src/data-visualization/components/data-visualization/canvas/ComponentWrapper.vue
index 0f999e7..a453c74 100644
--- a/frontend/src/data-visualization/components/data-visualization/canvas/ComponentWrapper.vue
+++ b/frontend/src/data-visualization/components/data-visualization/canvas/ComponentWrapper.vue
@@ -1,19 +1,27 @@
props.popActive || (dvMainStore.mobileInPc &&
element-loading-text="导出中..."
element-loading-background="rgba(255, 255, 255, 1)"
>
+
+
+
+
+
props.popActive || (dvMainStore.mobileInPc &&
:element="config"
:show-position="showPosition"
:class="{ 'wrapper-edit-bar-active': active }"
+ @componentImageDownload="htmlToImage"
@userViewEnlargeOpen="opt => emits('userViewEnlargeOpen', opt)"
@datasetParamsInit="() => emits('datasetParamsInit')"
>
@@ -382,7 +454,7 @@ const showActive = computed(() => props.popActive || (dvMainStore.mobileInPc &&
class="wrapper-inner-adaptor"
:style="slotStyle"
:class="{ 'pop-wrapper-inner': showActive, 'event-active': eventEnable }"
- @mousedown="onWrapperClick"
+ @mousedown="onWrapperClickCur"
>
props.popActive || (dvMainStore.mobileInPc &&
:is-edit="false"
:suffix-id="suffixId"
:font-family="fontFamily"
+ :active="active"
+ :common-params="commonParams"
@onPointClick="onPointClick"
+ @onComponentEvent="onWrapperClick"
/>
@@ -426,12 +501,22 @@ const showActive = computed(() => props.popActive || (dvMainStore.mobileInPc &&
}
.wrapper-outer {
position: absolute;
+ .refresh-from-pc {
+ position: absolute;
+ right: 38px;
+ top: 12px;
+ z-index: 2;
+ font-size: 16px;
+ cursor: pointer;
+ color: var(--ed-color-primary);
+ }
}
.wrapper-inner {
width: 100%;
height: 100%;
position: relative;
background-size: 100% 100% !important;
+ padding: 0 !important;
.wrapper-inner-adaptor {
position: relative;
transform-style: preserve-3d;
@@ -475,4 +560,11 @@ const showActive = computed(() => props.popActive || (dvMainStore.mobileInPc &&
.event-active {
cursor: pointer;
}
+
+.freeze-component {
+ position: fixed;
+ z-index: 1;
+ top: var(--top-show-offset) px !important;
+ left: var(--left-show-offset) px !important;
+}
diff --git a/frontend/src/data-visualization/components/data-visualization/canvas/ContextMenuDetails.vue b/frontend/src/data-visualization/components/data-visualization/canvas/ContextMenuDetails.vue
index 1ad3dae..0a30c3d 100644
--- a/frontend/src/data-visualization/components/data-visualization/canvas/ContextMenuDetails.vue
+++ b/frontend/src/data-visualization/components/data-visualization/canvas/ContextMenuDetails.vue
@@ -298,64 +298,73 @@ const editQueryCriteria = () => {
{{ t('visualization.delete') }}
-
- {{ t('visualization.cancel_group') }}
-
-
-
-
- {{ t('visualization.move_to_screen_show') }}
- {{ t('visualization.edit') }}
- {{ t('visualization.rename') }}
- {{ t('visualization.copy') }}
- {{ t('visualization.paste') }}
-
- {{ t('visualization.delete') }}
+
+
+ {{ t('visualization.cancel_group') }}
+
+
+
+
+ {{ t('visualization.move_to_screen_show') }}
+ {{ t('visualization.edit') }}
+
+ {{ t('visualization.rename') }}
+
+ {{ t('visualization.copy') }}
+ {{ t('visualization.paste') }}
+
+ {{ t('visualization.delete') }}
+
+
+
+ {{ t('visualization.edit') }}
+
+ {{ t('visualization.up_component') }}
+ {{ t('visualization.down_component') }}
+ {{ t('visualization.top_component') }}
+ {{ t('visualization.bottom_component') }}
+
+ {{ t('visualization.sort') }}
+
+
+
+ {{ t('visualization.move_to_pop_area') }}
+
+
+ {{ t('visualization.hidden') }}
+
+ {{ t('visualization.cancel_hidden') }}
+
+ {{ t('visualization.lock') }}
+
+ {{ t('visualization.unlock') }}
+
+
+
+ {{ t('visualization.rename') }}
+
+ {{ t('visualization.copy') }}
+ {{ t('visualization.paste') }}
+ {{ t('visualization.cut') }}
+
+ {{ t('visualization.delete') }}
+
+ {{ t('visualization.unlock') }}
-
-
- {{ t('visualization.edit') }}
-
- {{ t('visualization.up_component') }}
- {{ t('visualization.down_component') }}
- {{ t('visualization.top_component') }}
- {{ t('visualization.bottom_component') }}
-
- {{ t('visualization.sort') }}
-
-
-
- {{ t('visualization.move_to_pop_area') }}
-
-
- {{ t('visualization.hidden') }}
-
- {{ t('visualization.cancel_hidden') }}
-
- {{ t('visualization.lock') }}
-
- {{ t('visualization.unlock') }}
-
-
- {{ t('visualization.rename') }}
- {{ t('visualization.copy') }}
- {{ t('visualization.paste') }}
- {{ t('visualization.cut') }}
-
- {{ t('visualization.delete') }}
-
- {{ t('visualization.unlock') }}
+
+ {{ t('visualization.paste') }}
+
-
- {{ t('visualization.paste') }}
-
diff --git a/frontend/src/data-visualization/components/data-visualization/canvas/DePreview.vue b/frontend/src/data-visualization/components/data-visualization/canvas/DePreview.vue
index 5f1d24b..7e244ab 100644
--- a/frontend/src/data-visualization/components/data-visualization/canvas/DePreview.vue
+++ b/frontend/src/data-visualization/components/data-visualization/canvas/DePreview.vue
@@ -1,27 +1,27 @@
@@ -1189,6 +1181,7 @@ onMounted(() => {
height: 100%;
position: relative;
background-size: 100% 100% !important;
+ padding:0 !important;
}
.shape-selected {
@@ -1318,4 +1311,14 @@ onMounted(() => {
position: relative;
transform-style: preserve-3d;
}
+
+.freeze-component {
+ position: fixed;
+ z-index: 1;
+ top: 66px !important;
+}
+
+.freeze-component-fullscreen {
+ top: 5px !important;
+}