diff --git a/report-ui/src/views/bigscreenDesigner/designer/editor/EditRange.vue b/report-ui/src/views/bigscreenDesigner/designer/editor/EditRange.vue
new file mode 100644
index 0000000000000000000000000000000000000000..26f111e5f32ecd2cb1d3d7f04556e42064f7cadb
--- /dev/null
+++ b/report-ui/src/views/bigscreenDesigner/designer/editor/EditRange.vue
@@ -0,0 +1,142 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/report-ui/src/views/bigscreenDesigner/designer/editor/EditSelect.vue b/report-ui/src/views/bigscreenDesigner/designer/editor/EditSelect.vue
new file mode 100644
index 0000000000000000000000000000000000000000..f6ba4419d7998188cb137ac6b791c71e013f1e01
--- /dev/null
+++ b/report-ui/src/views/bigscreenDesigner/designer/editor/EditSelect.vue
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/report-ui/src/views/bigscreenDesigner/designer/index.vue b/report-ui/src/views/bigscreenDesigner/designer/index.vue
index 4aa964b05d74fd60d9ad22c69c971416ac9dcb74..535ea5f3137228ff3e163065d24dbf6220212796 100644
--- a/report-ui/src/views/bigscreenDesigner/designer/index.vue
+++ b/report-ui/src/views/bigscreenDesigner/designer/index.vue
@@ -116,6 +116,116 @@
+
+
+ -
+
+
+ -
+
+
左侧对齐
+
+
+ -
+
+
顶部对齐
+
+
+ -
+
+
右侧对齐
+
+
+ -
+
+
底部对齐
+
+
+ -
+
+
水平居中
+
+
+ -
+
+
垂直居中
+
+
+ -
+
+
宽度相同
+
+
+ -
+
+
高度相同
+
+
+ -
+
+
横向分布
+
+
+ -
+
+
纵向分布
+
+
+
+
+
+
+ selectWidgetByBox(box)">
+
@@ -356,7 +473,7 @@ import dynamicForm from "./components/dynamicForm.vue";
import draggable from "vuedraggable";
import VueRulerTool from "vue-ruler-tool"; // 大屏设计页面的标尺插件
import contentMenu from "./components/contentMenu";
-
+import EditRange from './editor/EditRange.vue'
export default {
name: "Login",
components: {
@@ -365,6 +482,7 @@ export default {
widget,
dynamicForm,
contentMenu,
+ EditRange
},
mixins: [mixin],
data() {
@@ -388,6 +506,7 @@ export default {
dragWidgetCode: "", //从工具栏拖拽的组件code
// 大屏画布中的组件
widgets: [], // 工作区中拖放的组件
+ activeWidget: [], //当前激活的widget列表
// 当前激活组件
widgetIndex: 0,
// 当前激活组件右侧配置属性
@@ -620,6 +739,8 @@ export default {
this.screenCode = "screen";
// 选中不同的组件 右侧都显示第一栏
this.activeName = "first";
+ this.visibleContentMenu =false
+ this.handleMouseOver()
this.widgetOptions = getToolByCode("screen")["options"];
},
// 如果是点击某个组件,获取该组件的配置项
@@ -643,10 +764,46 @@ export default {
});
this.widgetOptions = this.deepClone(this.widgets[obj.index]["options"]);
},
+ selectWidgetByBox (box) {
+ this.handleMouseDown()
+ this.handleMouseOver()
+ this.activeWidget=[]
+ for (let i = 0; i < this.widgets.length; i++) {
+ const w = this.widgets[i]
+
+ const { left, top, width, height } = this.widgets[i].value.position
+
+ const wAttr = {
+ // 左上角
+ x1: left,
+ y1: top,
+ // 右下角
+ x2: left + width,
+ y2: top + height
+ }
+ // 全包含则选中
+ if (
+ wAttr.x1 - box.x1 >= 0 &&
+ wAttr.y1 - box.y1 >= 0 &&
+ wAttr.x2 - box.x2 <= 0 &&
+ wAttr.y2 - box.y2 <= 0
+ ) {
+ const id = i
+ this.$refs.widgets[i].$refs.draggable.setOverActive(true);
+
+ if (!this.activeWidget.includes(id)) {
+ this.activeWidget.push(id) //加入激活的列表
+ }
+ }
+ }
+
+ },
widgetsClick(index) {
+ this.activeWidget=[]
const draggableArr = this.$refs.widgets;
for (let i = 0; i < draggableArr.length; i++) {
if (i == index) {
+ this.activeWidget.push(i)
this.$refs.widgets[i].$refs.draggable.setActive(true);
} else {
this.$refs.widgets[i].$refs.draggable.setActive(false);
@@ -655,7 +812,17 @@ export default {
this.setOptionsOnClickWidget(index);
this.grade = true;
},
+ handleMouseOver() {
+ this.activeWidget=[]
+ const draggableArr = this.$refs.widgets;
+ if (draggableArr) {
+ for (let i = 0; i < draggableArr.length; i++) {
+ this.$refs.widgets[i].$refs.draggable.setOverActive(false);
+ }
+ }
+ },
handleMouseDown() {
+ this.activeWidget=[]
const draggableArr = this.$refs.widgets;
for (let i = 0; i < draggableArr.length; i++) {
this.$refs.widgets[i].$refs.draggable.setActive(false);
@@ -724,6 +891,127 @@ export default {
evt.preventDefault();
this.widgets = this.swapArr(this.widgets, evt.oldIndex, evt.newIndex);
},
+ widgetAlign (mode) {
+ if (this.activeWidget.length > 1) {
+ /* 参考对象 */
+ const referID = this.activeWidget[0]
+
+ for (let i = 0; i < this.activeWidget.length; i++) {
+ const currenId = this.activeWidget[i]
+ var w =this.widgets[currenId]
+ if (referID === currenId) continue
+ if (mode === 'left') { /* 左对齐 */
+ const v= this.widgets[referID].value.position.left
+ w.value.position.left =v
+ } else if (mode === 'top') { /* 上对齐 */
+ const v= this.widgets[referID].value.position.top
+ w.value.position.top =v
+ } else if (mode === 'right') { /* 右对齐 */
+ const r1 =
+ this.widgets[referID].value.position.left +
+ this.widgets[referID].value.position.width
+
+ const _left =this.widgets[currenId].value.position.left
+ const r2 =_left + this.widgets[currenId].value.position.width
+
+ const dist = r1 - r2
+ w.value.position.left =_left+dist
+
+ } else if (mode === 'bottom') { /* 下对齐 */
+ const b1 =
+ this.widgets[referID].value.position.top +
+ this.widgets[referID].value.position.height
+
+ const _top = this.widgets[currenId].value.position.top
+ const b2 = _top + this.widgets[currenId].value.position.height
+
+ const dist = b1 - b2
+ w.value.position.top =_top+dist
+
+ } else if (mode === 'horizontal') {
+ const h1 =
+ this.widgets[referID].value.position.top +
+ this.widgets[referID].value.position.height / 2
+
+ const h2 =
+ this.widgets[currenId].value.position.top +
+ this.widgets[currenId].value.position.height / 2
+
+ const dist = h1 - h2
+ const _top = this.widgets[currenId].value.position.top
+ w.value.position.top =_top+dist
+
+ } else if (mode === 'vertical') {
+ const v1 =
+ this.widgets[referID].value.position.left +
+ this.widgets[referID].value.position.width / 2
+
+ const v2 =
+ this.widgets[currenId].value.position.left +
+ this.widgets[currenId].value.position.width / 2
+
+ const dist = v1 - v2
+ const _left = this.widgets[currenId].value.position.left
+ w.value.position.left =_left+dist
+
+
+ }
+ }
+ }
+ },
+ sameSize (mode) {
+ if (this.activeWidget.length > 1) {
+ var referId = this.activeWidget[0]
+ const v =this.widgets[referId]
+ for (let i = 0; i < this.activeWidget.length; i++) {
+ var currenId = this.activeWidget[i]
+ var w =this.widgets[currenId]
+ if (referId === currenId) continue
+ if (mode === 'width') {
+ w.value.position.width =v.value.position.width
+ } else if (mode === 'height') {
+ w.value.position.height =v.value.position.height
+ }
+ }
+ }
+ },
+ distribute (mode) {
+ if (this.activeWidget.length > 2) {
+ var items = []
+ for (let i = 0; i < this.activeWidget.length; i++) {
+ var currenId = this.activeWidget[i]
+ var w =this.widgets[currenId]
+ let x = w.value.position.left
+ let y = w.value.position.top
+ if (mode == 'horizontal') items.push({ value: x, index: currenId })
+ else items.push({ value: y, index: currenId })
+ }
+
+ var sortItem = this.bubleSort(items)
+ var len = sortItem.length
+ var minV = sortItem[0].value
+ var maxV = sortItem[len - 1].value
+ var dist = (maxV - minV) / (len - 1)
+ for (let i = 1; i < sortItem.length - 1; i++) {
+ var idx = sortItem[i].index
+ var mWidget = this.widgets[idx]
+ if (mode == 'horizontal') mWidget.value.position.left = minV + dist * i
+ else mWidget.value.position.top = minV + dist * i
+ }
+ }
+ },
+ /* 冒泡排序 */
+ bubleSort (arr) {
+ var len = arr.length
+ for (let i = 0; i < len - 1; i++) {
+ for (let j = i; j < len; j++) {
+ if (arr[j].value < arr[i].value) {
+ [arr[i], arr[j]] = [arr[j], arr[i]]
+ }
+ }
+ }
+ return arr
+ }
},
};