diff --git a/doc/docs/guide/community/JiangHH/AJ_Report大屏设计时多组件对齐和拖拽移动实现.md b/doc/docs/guide/community/JiangHH/AJ_Report大屏设计时多组件对齐和拖拽移动实现.md new file mode 100644 index 00000000..b9cba901 --- /dev/null +++ b/doc/docs/guide/community/JiangHH/AJ_Report大屏设计时多组件对齐和拖拽移动实现.md @@ -0,0 +1,81 @@ +## 多组件对齐和拖拽移动功能 + +注意前端版本 vue版本 + +1.多组件选中实现 +2.对齐实现 +3.拖拽实现 + +### 1、多组件选中 +1. Ctrl键 +2. 鼠标框选 +3. 组合 + +#### 方式1 Ctrl键实现多选 +说明: + +1. 第一次单击组件,会默认把选中的组件加入到已选中的组件集合中. +2. 按住Ctrl键选中的组件,会加入到已选中的组件集合中. +3. 按住Ctrl键选中的组件,如果已选中的组件中包含该组件,则该组件取消选中. +4. 点击大屏其他位置(非组件),会把选中的组件清空. + +测试截图: + + + +#### 方式2 鼠标框选实现多选 +说明: + +1. 鼠标 (按下,移动,释放)生成矩形框,跟矩形框相交的组件会被选中. +2. 组合方式多选的情况下,框选之前已选中的组件不会加入(除非框选也有). +3. 框选的组件,也支持按住Ctrl键取消选中. +4. 点击大屏其他位置(非组件),会把选中的组件清空. + +1. 鼠标按下,移动,释放,会生成一个矩形框,跟矩形框相交的组件爱你,会被选中. +2. 2.组合方式多选的情况下,框选之前已选中的组件不会加入(除非框选也有). +3. 3.框选的组件,也支持按住Ctrl键取消选中. +4. 4.点击大屏其他位置(非组件),会把选中的组件清空. + +- 1.鼠标按下,移动,释放,会生成一个矩形框,跟矩形框相交的组件爱你,会被选中. + +测试截图: + + + + + + + +### 2、多组件对齐 + +单选右键菜单 + + + +多选右键菜单 + + + +#### 左对齐/右对齐/居中对齐 + +选择左对齐 (以最上边的组件为标准对齐)---不合适自己可以修改代码 + + + +#### 上对齐/下对齐/居中对齐 + +选择上对齐(以最左边的组件为标准对齐)----不合适自己可以修改代码 + + + + + +### 3、多组件移动拖拽 + +#### 多选状态 + + + +#### 拖拽后 + + diff --git a/doc/docs/guide/community/JiangHH/picture/img_01.png b/doc/docs/guide/community/JiangHH/picture/img_01.png new file mode 100644 index 00000000..1feac87e Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_01.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_02.png b/doc/docs/guide/community/JiangHH/picture/img_02.png new file mode 100644 index 00000000..c033968c Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_02.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_03.png b/doc/docs/guide/community/JiangHH/picture/img_03.png new file mode 100644 index 00000000..033f3c18 Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_03.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_04.png b/doc/docs/guide/community/JiangHH/picture/img_04.png new file mode 100644 index 00000000..2759e8ea Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_04.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_05.png b/doc/docs/guide/community/JiangHH/picture/img_05.png new file mode 100644 index 00000000..b6ec0033 Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_05.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_06.png b/doc/docs/guide/community/JiangHH/picture/img_06.png new file mode 100644 index 00000000..abaf99a9 Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_06.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_07.png b/doc/docs/guide/community/JiangHH/picture/img_07.png new file mode 100644 index 00000000..cb12cef5 Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_07.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_08.png b/doc/docs/guide/community/JiangHH/picture/img_08.png new file mode 100644 index 00000000..ee1981da Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_08.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_09.png b/doc/docs/guide/community/JiangHH/picture/img_09.png new file mode 100644 index 00000000..e8e568f6 Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_09.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_10.png b/doc/docs/guide/community/JiangHH/picture/img_10.png new file mode 100644 index 00000000..a4aed1fd Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_10.png differ diff --git a/doc/docs/guide/community/JiangHH/picture/img_11.png b/doc/docs/guide/community/JiangHH/picture/img_11.png new file mode 100644 index 00000000..bbcfa8a9 Binary files /dev/null and b/doc/docs/guide/community/JiangHH/picture/img_11.png differ diff --git a/report-ui/src/utils/screenMixins.js b/report-ui/src/utils/screenMixins.js index a1df6f8c..fd709e79 100644 --- a/report-ui/src/utils/screenMixins.js +++ b/report-ui/src/utils/screenMixins.js @@ -258,6 +258,13 @@ const mixin = { display: "block", }; } + //设置多选和单选的菜单项展示 + document.getElementsByName("singleSelect").forEach(e=>{ + e.style.display= this.selectedWidgets.length >= 2 ?"none":"block"; + }); + document.getElementsByName("mulSelect").forEach(e=>{ + e.style.display= this.selectedWidgets.length >= 2 ?"block":"none"; + }) this.visibleContentMenu = true; return false; }, @@ -268,7 +275,11 @@ const mixin = { }, // 删除 deletelayer() { + let _this = this; this.widgets.splice(this.rightClickIndex, 1); + this.selectedWidgets.forEach(sw=>{ + _this.widgets = _this.widgets.filter(w=>w.value.widgetId !== sw.value.widgetId); + }) }, // 锁定 lockLayer() { @@ -329,6 +340,69 @@ const mixin = { } else { this.widgets.unshift(this.widgets.splice(this.rightClickIndex, 1)[0]); } + }, + //对齐 + alignment(align) { + if(this.selectedWidgets.length <= 1) { + this.$message.error("请至少选择两个组件对齐"); + return; + } + console.log("对齐方式:" + align); + let topWidget = this.selectedWidgets[0]; //最上组件(左右对齐使用) + let leftWidget = this.selectedWidgets[0]; //最左组件(上下对齐使用) + let minTop = this.selectedWidgets[0].value.position.top; + let minLeft = this.selectedWidgets[0].value.position.left; + //如果是框选的话,以【最上组件】【最左组件】为标准对齐;如果是Ctrl多选方式,则以第一个选中的组件为标准对齐,组合多选以框选逻辑为准 + if(this.kuangSelectFlag){ + for(let i = 0; i< this.selectedWidgets.length; i++){ + let widget = this.selectedWidgets[i]; + if( minTop > widget.value.position.top){ + minTop = widget.value.position.top; + topWidget = widget; + } + if( minLeft > widget.value.position.left){ + minLeft = widget.value.position.left; + leftWidget = widget; + } + } + } + for(let i = 0; i< this.selectedWidgets.length; i++){ + let widget = this.selectedWidgets[i]; + this.$refs.widgets.forEach(w=>{ + if(w.value.widgetId === widget.value.widgetId){ + w.$refs.draggable.setActive(false); + } + }); + this.widgets.forEach(w=>{ + if(w.value.widgetId === widget.value.widgetId){ + switch (align){ + case "left": //左对齐 + w.value.position.left = topWidget.value.position.left; + break; + case "right": //右对齐 + w.value.position.left = topWidget.value.position.left + topWidget.value.position.width - w.value.position.width; + break; + case "horizontal_center": //左右居中对齐 + w.value.position.left = topWidget.value.position.left + topWidget.value.position.width/2 - w.value.position.width /2; + break; + case "top": //上对齐 + w.value.position.top = leftWidget.value.position.top; + break; + case "bottom": //下对齐 + w.value.position.top = leftWidget.value.position.top + leftWidget.value.position.height - w.value.position.height; + break; + case "vertical_center": //上下居中对齐 + w.value.position.top = leftWidget.value.position.top + leftWidget.value.position.height/2 - w.value.position.height /2; + break; + } + } + }); + } + this.selectedWidgets = []; + if(this.rect){ + document.getElementById("workbench").removeChild(this.rect); + } + this.kuangSelectFlag = false; } } } diff --git a/report-ui/src/views/bigscreenDesigner/designer/components/contentMenu.vue b/report-ui/src/views/bigscreenDesigner/designer/components/contentMenu.vue index ecfbc0f5..84fd7759 100644 --- a/report-ui/src/views/bigscreenDesigner/designer/components/contentMenu.vue +++ b/report-ui/src/views/bigscreenDesigner/designer/components/contentMenu.vue @@ -10,27 +10,45 @@
-