| /* eslint-disable */ | 
| var selectable = { | 
|   bind: function (el, binding, vnode) { | 
|     var rect = { | 
|       el: null, | 
|       isMove: false, | 
|       from: { | 
|         x: 0, | 
|         y: 0 | 
|       }, | 
|       to: { | 
|         x: 0, | 
|         y: 0 | 
|       }, | 
|       init() { | 
|         this.el = document.createElement('div'); | 
|         el.append(this.el); | 
|         this.el.style.left = this.from.x + "px"; | 
|         this.el.style.top = this.from.y + "px"; | 
|         this.el.setAttribute("class", "selectable"); | 
|       }, | 
|       move() { | 
|         var width = this.to.x - this.from.x; | 
|         var height = this.to.y - this.from.y; | 
|   | 
|         if (width >= 0) { | 
|           this.el.style.left = this.from.x + "px"; | 
|         } else { | 
|           this.el.style.left = this.to.x + "px"; | 
|         } | 
|   | 
|         if (height >= 0) { | 
|           this.el.style.top = this.from.y + "px"; | 
|         } else { | 
|           this.el.style.top = this.to.y + "px"; | 
|         } | 
|   | 
|         this.el.style.width = Math.abs(width) + 'px'; | 
|         this.el.style.height = Math.abs(height) + 'px'; | 
|   | 
|         this.selectItems(); | 
|       }, | 
|       remove() { | 
|         if (this.el) { | 
|           this.el.remove(); | 
|         } | 
|       }, | 
|       selectItems() { | 
|         document.querySelectorAll('.resable-item').forEach(item => { | 
|           if (this.isIntersection(this.el, item)) { | 
|             item.classList.add('selected'); | 
|           } else { | 
|             item.classList.remove('selected'); | 
|           } | 
|         }) | 
|       }, | 
|       // 判断两个矩形是否存在交集 | 
|       isIntersection(rect1, rect2) { | 
|         let maxX, maxY, minX, minY; | 
|   | 
|         rect1.width = parseInt(rect1.style.width); | 
|         rect1.height = parseInt(rect1.style.height); | 
|         rect2.width = parseInt(rect2.style.width); | 
|         rect2.height = parseInt(rect2.style.height); | 
|   | 
|         maxX = rect1.offsetLeft + rect1.width >= rect2.offsetLeft + rect2.width ? rect1.offsetLeft + rect1.width : rect2.offsetLeft + rect2.width; | 
|         maxY = rect1.offsetTop + rect1.height >= rect2.offsetTop + rect2.height ? rect1.offsetTop + rect1.height : rect2.offsetTop + rect2.height; | 
|         minX = rect1.offsetLeft <= rect2.offsetLeft ? rect1.offsetLeft : rect2.offsetLeft; | 
|         minY = rect1.offsetTop <= rect2.offsetTop ? rect1.offsetTop : rect2.offsetTop; | 
|         // console.log('rect1.offsetLeft=' + rect1.offsetLeft + ", rect1.offsetTop=" + rect1.offsetTop + ', rect2.offsetLeft=' + rect2.offsetLeft + ", rect2.offsetTop = " + rect2.offsetTop); | 
|         // console.log('rect1.width=' + rect1.width + ", rect1.height=" + rect1.height + ', rect2.width=' + rect2.width + ", rect2.height = " + rect2.height); | 
|   | 
|         if (maxX - minX <= rect1.width + rect2.width && maxY - minY <= rect1.height + rect2.height) { | 
|           return true; | 
|         } else { | 
|           return false; | 
|         } | 
|       } | 
|     } | 
|     document.oncontextmenu = new Function('event.returnValue=false;'); | 
|     document.onselectstart = new Function('event.returnValue=false;'); | 
|     el.onmousedown = function (e) { | 
|       rect.from.x = e.offsetX; | 
|       rect.from.y = e.offsetY; | 
|       rect.to.x = e.offsetX; | 
|       rect.to.y = e.offsetY; | 
|       rect.isMove = true; | 
|       rect.init(); | 
|       document.onmouseup = function (e) { | 
|         rect.isMove = false; | 
|         rect.remove(); | 
|       } | 
|     } | 
|     el.onmousemove = function (e) { | 
|       if (rect.isMove) { | 
|         rect.to.x += e.movementX; | 
|         rect.to.y += e.movementY; | 
|         // console.log("movementX=" + e.movementX + ", movementY=" + e.movementY) | 
|         rect.move(); | 
|       } | 
|     } | 
|     document.onmousedown = function () { | 
|       document.querySelectorAll('.resable-item').forEach(item => { | 
|         item.classList.remove('selected'); | 
|       }); | 
|     } | 
|   }, | 
|   update: function (el, binding, vnode) { | 
|     var fields = binding.value; | 
|     //  键盘操作 | 
|     document.onkeyup = function (e) { | 
|       let dX = 0; | 
|       let dY = 0; | 
|       if (e.keyCode == 39) { | 
|         dX = 1; | 
|       } // 右键 | 
|       else if (e.keyCode == 37) { | 
|         dX = -1; | 
|       } // 左键 | 
|       else if (e.keyCode == 38) { | 
|         dY = -1; | 
|       } // 上键 | 
|       else if (e.keyCode == 40) { | 
|         dY = 1; | 
|       } // 下键 | 
|   | 
|       document.querySelectorAll(".resable-item.selected").forEach(item => { | 
|         let key = item.attributes["data-key"].value; | 
|         let field = fields.find(item => { | 
|           return item.key == key; | 
|         }); | 
|         if (!field) return; | 
|   | 
|         field.options.x += dX; | 
|         field.options.y += dY; | 
|       }); | 
|     } | 
|   } | 
| } | 
|   | 
| export { | 
|   selectable | 
| } |