|  | @@ -0,0 +1,273 @@
 | 
	
		
			
				|  |  | +export default {
 | 
	
		
			
				|  |  | +    data() {
 | 
	
		
			
				|  |  | +        return {
 | 
	
		
			
				|  |  | +            /**  多选  */
 | 
	
		
			
				|  |  | +            selectList: [],
 | 
	
		
			
				|  |  | +            selectTabelList: [],
 | 
	
		
			
				|  |  | +            multipleSelection_1: [],
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            moveSelected: null,
 | 
	
		
			
				|  |  | +            moveSelected1: null,
 | 
	
		
			
				|  |  | +            flag: false,//是搜开启拖拽的标志
 | 
	
		
			
				|  |  | +            oldLeft: 0,//鼠标按下时的left,top
 | 
	
		
			
				|  |  | +            oldTop: 0,
 | 
	
		
			
				|  |  | +            selectedList: [],//拖拽多选选中的块集合
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            isToLeft: true,
 | 
	
		
			
				|  |  | +            isToTop: true,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            startX: 0,
 | 
	
		
			
				|  |  | +            startY: 0,
 | 
	
		
			
				|  |  | +            endX: 0,
 | 
	
		
			
				|  |  | +            endY: 0,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            isMousemove: false,
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            scrollTop: 0,
 | 
	
		
			
				|  |  | +            scrollLeft: 0,
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    mounted() {
 | 
	
		
			
				|  |  | +        this.flag = false
 | 
	
		
			
				|  |  | +        this.$refs.seatbox.addEventListener('mousemove', this.mousemoveFun);
 | 
	
		
			
				|  |  | +        this.$refs.seatbox.addEventListener('mouseup', this.mouseupFun);
 | 
	
		
			
				|  |  | +        this.moveSelected = document.getElementById('moveSelected')
 | 
	
		
			
				|  |  | +        this.moveSelected1 = document.getElementById('sm-scroll-box')
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    methods: {
 | 
	
		
			
				|  |  | +        // 鼠标按下时开启拖拽多选,将遮罩定位并展现
 | 
	
		
			
				|  |  | +        mousedownFun(event) {
 | 
	
		
			
				|  |  | +            console.log("鼠标按下!!!",event.target.scrollTop,event.target.scrollLeft)
 | 
	
		
			
				|  |  | +            if(event.button != 0) return
 | 
	
		
			
				|  |  | +            //this.selectedList = []
 | 
	
		
			
				|  |  | +           // this.selectList = []
 | 
	
		
			
				|  |  | +            
 | 
	
		
			
				|  |  | +            this.flag=true;
 | 
	
		
			
				|  |  | +            let offsetTop = this.moveSelected1.getBoundingClientRect().y
 | 
	
		
			
				|  |  | +            let offsetLeft = this.moveSelected1.getBoundingClientRect().x 
 | 
	
		
			
				|  |  | +            this.moveSelected.style.top=( event.pageY - offsetTop - 5 + this.screenTop )+'px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.left=( event.pageX - offsetLeft - 5 + this.scrollLeft )+'px';
 | 
	
		
			
				|  |  | +            this.oldLeft=event.pageX;
 | 
	
		
			
				|  |  | +            this.oldTop=event.pageY;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            this.startX=event.pageX;
 | 
	
		
			
				|  |  | +            this.startY=event.pageY;
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +           event.preventDefault(); // 阻止默认行为
 | 
	
		
			
				|  |  | +           event.stopPropagation(); // 阻止事件冒泡
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        // 鼠标移动时计算遮罩的位置,宽 高
 | 
	
		
			
				|  |  | +        mousemoveFun(event) {
 | 
	
		
			
				|  |  | +            if(!this.flag) return;//只有开启了拖拽,才进行mouseover操作
 | 
	
		
			
				|  |  | +            console.log("鼠标移动!!!",this.moveSelected.style.width,this.moveSelected.style.height)
 | 
	
		
			
				|  |  | +            this.endX=event.pageX;
 | 
	
		
			
				|  |  | +            this.endY=event.pageY;
 | 
	
		
			
				|  |  | +            let offsetTop = this.moveSelected1.getBoundingClientRect().y
 | 
	
		
			
				|  |  | +            let offsetLeft = this.moveSelected1.getBoundingClientRect().x 
 | 
	
		
			
				|  |  | +            if(event.pageX<this.oldLeft){//向左拖
 | 
	
		
			
				|  |  | +              this.isToLeft = true
 | 
	
		
			
				|  |  | +              this.moveSelected.style.left=(event.pageX-offsetLeft + this.scrollLeft)+'px';
 | 
	
		
			
				|  |  | +              this.moveSelected.style.width=(this.oldLeft-event.pageX)+'px';
 | 
	
		
			
				|  |  | +            }else{
 | 
	
		
			
				|  |  | +                this.isToLeft = false
 | 
	
		
			
				|  |  | +              this.moveSelected.style.width=(event.pageX-this.oldLeft)+'px';
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(event.pageY<this.oldTop){//向上
 | 
	
		
			
				|  |  | +              this.isToTop = true
 | 
	
		
			
				|  |  | +              this.moveSelected.style.top=(event.pageY-offsetTop  + this.screenTop )+'px';
 | 
	
		
			
				|  |  | +              this.moveSelected.style.height=(this.oldTop-event.pageY)+'px';
 | 
	
		
			
				|  |  | +            }else{
 | 
	
		
			
				|  |  | +                this.isToTop = false
 | 
	
		
			
				|  |  | +              this.moveSelected.style.height=(event.pageY-this.oldTop)+'px';
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if((this.moveSelected.style.width && Number(this.moveSelected.style.width.replace('px','')) > 10) ||
 | 
	
		
			
				|  |  | +                (this.moveSelected.style.height && Number(this.moveSelected.style.height.replace('px','')) > 10)){
 | 
	
		
			
				|  |  | +                this.isMousemove = true
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            event.preventDefault(); // 阻止默认行为
 | 
	
		
			
				|  |  | +            event.stopPropagation(); // 阻止事件冒泡
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        //鼠标抬起时计算遮罩的right 和 bottom,找出遮罩覆盖的块,关闭拖拽选中开关,清除遮罩数据
 | 
	
		
			
				|  |  | +        mouseupFun(event) {
 | 
	
		
			
				|  |  | +            console.log("鼠标抬起!!!")
 | 
	
		
			
				|  |  | +            if(event.button != 0) return
 | 
	
		
			
				|  |  | +            this.moveSelected.style.bottom=Number(this.moveSelected.style.top.split('px')[0])+Number(this.moveSelected.style.height.split('px')[0]) + 'px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.right=Number(this.moveSelected.style.left.split('px')[0])+Number(this.moveSelected.style.width.split('px')[0])+'px';
 | 
	
		
			
				|  |  | +            this.flag=false;
 | 
	
		
			
				|  |  | +            if( this.isMousemove){
 | 
	
		
			
				|  |  | +                this.getSelectItem()
 | 
	
		
			
				|  |  | +            }else {
 | 
	
		
			
				|  |  | +                // let id = event.srcElement.getAttribute('dragSelectId')
 | 
	
		
			
				|  |  | +                // if(id){
 | 
	
		
			
				|  |  | +                //     this.seatMapListKey.forEach((item1,index1)=>{
 | 
	
		
			
				|  |  | +                //         this.seatMapList[item1.key].forEach((item,index)=>{
 | 
	
		
			
				|  |  | +                //             if(id = item.id){
 | 
	
		
			
				|  |  | +                //                 this.seatClick(this.seatMapList[item1.key][index])
 | 
	
		
			
				|  |  | +                //                 this.seatMapList[item1.key][index].isSelect = !this.seatMapList[item1.key][index].isSelect
 | 
	
		
			
				|  |  | +                //             }
 | 
	
		
			
				|  |  | +                //         })
 | 
	
		
			
				|  |  | +                //     })
 | 
	
		
			
				|  |  | +                //     this.$forceUpdate()
 | 
	
		
			
				|  |  | +                // }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            this.isMousemove = false
 | 
	
		
			
				|  |  | +            this.clearDragData();
 | 
	
		
			
				|  |  | +            event.preventDefault(); // 阻止默认行为
 | 
	
		
			
				|  |  | +            event.stopPropagation(); // 阻止事件冒泡
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        mouseleaveFun(event) {
 | 
	
		
			
				|  |  | +            this.flag=false;
 | 
	
		
			
				|  |  | +            this.moveSelected.style.width='0px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.height='0px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.top='0px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.left='0px';
 | 
	
		
			
				|  |  | +            event.preventDefault(); // 阻止默认行为
 | 
	
		
			
				|  |  | +            event.stopPropagation(); // 阻止事件冒泡
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        clearDragData(){
 | 
	
		
			
				|  |  | +            this.moveSelected.style.width='0px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.height='0px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.top='0px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.left='0px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.bottom='0px';
 | 
	
		
			
				|  |  | +            this.moveSelected.style.right='0px';
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        /**  批量判断元素的位置  */
 | 
	
		
			
				|  |  | +        getSelectItem(){
 | 
	
		
			
				|  |  | +            let list = document.getElementsByClassName('seat-item-class')
 | 
	
		
			
				|  |  | +            let listCopy = []
 | 
	
		
			
				|  |  | +            let drawDialog = document.getElementById("moveSelected");
 | 
	
		
			
				|  |  | +            // 获取div元素的坐标点
 | 
	
		
			
				|  |  | +            let rect = drawDialog.getBoundingClientRect();
 | 
	
		
			
				|  |  | +            for(let i = 0; i < list.length; i++) {
 | 
	
		
			
				|  |  | +                let rect_div = list[i].getBoundingClientRect();
 | 
	
		
			
				|  |  | +                //console.log("rect===",list[i].getAttribute('index'),rect_div.top,rect_div.left)
 | 
	
		
			
				|  |  | +                if(rect.top < (rect_div.top + rect_div.height) && rect.bottom > (rect_div.bottom - rect_div.height) &&
 | 
	
		
			
				|  |  | +                  rect.left < (rect_div.left + rect_div.width) && rect.right > (rect_div.right - rect_div.width)) {
 | 
	
		
			
				|  |  | +                    listCopy.push(list[i].getAttribute("dragSelectId"));
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            let listCopy1 = []
 | 
	
		
			
				|  |  | +            listCopy.forEach((item,index)=>{
 | 
	
		
			
				|  |  | +                this.setList.forEach((item1,index1)=>{
 | 
	
		
			
				|  |  | +                    if(item == item1.id ) {
 | 
	
		
			
				|  |  | +                        listCopy1.push(item1)
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +            let flog = false;
 | 
	
		
			
				|  |  | +            let seatTypeId = null
 | 
	
		
			
				|  |  | +            for(let i = 0; i<listCopy1.length; i++) {
 | 
	
		
			
				|  |  | +                let row = listCopy1[i]
 | 
	
		
			
				|  |  | +                if(row.occupyStatus == 0) {
 | 
	
		
			
				|  |  | +                    this.$message.error('不能选择已锁定的座位');
 | 
	
		
			
				|  |  | +                    flog = true
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +                if(row.isDisabled || row.status == 2) {
 | 
	
		
			
				|  |  | +                    this.$message.error('不能选择已售或不可售座位');
 | 
	
		
			
				|  |  | +                    flog = true
 | 
	
		
			
				|  |  | +                    break;
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            if(flog){
 | 
	
		
			
				|  |  | +                return
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            listCopy1.forEach((item,index)=>{
 | 
	
		
			
				|  |  | +                if(index == 0) {
 | 
	
		
			
				|  |  | +                    seatTypeId = item.seatTypeId
 | 
	
		
			
				|  |  | +                }else {
 | 
	
		
			
				|  |  | +                    if(item.seatTypeId != seatTypeId) {
 | 
	
		
			
				|  |  | +                        flog = true
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +            if(flog){
 | 
	
		
			
				|  |  | +                this.$message.error('只能选同一类型的座位');
 | 
	
		
			
				|  |  | +                return
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +            listCopy1.forEach((item,index)=>{
 | 
	
		
			
				|  |  | +                this.seatSelectList.forEach((item1,index1)=>{
 | 
	
		
			
				|  |  | +                    if(item.seatTypeId != item1.seatTypeId) {
 | 
	
		
			
				|  |  | +                        flog = true
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +            if(flog){
 | 
	
		
			
				|  |  | +                this.$message.error('只能选同一类型的座位');
 | 
	
		
			
				|  |  | +                return
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +            listCopy.forEach((item,index)=>{
 | 
	
		
			
				|  |  | +                this.seatMapListKey.forEach((item1,index1)=>{
 | 
	
		
			
				|  |  | +                    this.seatMapList[item1.key].forEach((item,index)=>{
 | 
	
		
			
				|  |  | +                        if(listCopy.includes(item.id)){
 | 
	
		
			
				|  |  | +                            this.seatMapList[item1.key][index].isSelect = true
 | 
	
		
			
				|  |  | +                        }
 | 
	
		
			
				|  |  | +                    })
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +            let listCopy2 = []
 | 
	
		
			
				|  |  | +            listCopy1.forEach((item,index)=>{
 | 
	
		
			
				|  |  | +                let flag1 = false
 | 
	
		
			
				|  |  | +                this.seatSelectList.forEach((item1,index1)=>{
 | 
	
		
			
				|  |  | +                    if(item.id == item1.id) {
 | 
	
		
			
				|  |  | +                        flag1 = true
 | 
	
		
			
				|  |  | +                    }
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +                if(!flag1){
 | 
	
		
			
				|  |  | +                    listCopy2.push(item)
 | 
	
		
			
				|  |  | +                }
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +            this.seatSelectList = this.seatSelectList.concat(listCopy2)
 | 
	
		
			
				|  |  | +            this.$forceUpdate()
 | 
	
		
			
				|  |  | +            console.log("listCopy===",listCopy)
 | 
	
		
			
				|  |  | +            console.log("listCopy1===",listCopy1)
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        /**  清除全部已选 */
 | 
	
		
			
				|  |  | +        clearSeatSelectListAll () {
 | 
	
		
			
				|  |  | +            this.seatMapListKey.forEach((item1,index1)=>{
 | 
	
		
			
				|  |  | +                this.seatMapList[item1.key].forEach((item,index)=>{
 | 
	
		
			
				|  |  | +                    this.seatMapList[item1.key][index].isSelect = false
 | 
	
		
			
				|  |  | +                })
 | 
	
		
			
				|  |  | +            })
 | 
	
		
			
				|  |  | +            this.seatSelectList = [] 
 | 
	
		
			
				|  |  | +            this.$forceUpdate()
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        /** 滚动的位置  */
 | 
	
		
			
				|  |  | +        scrollFun(event) {
 | 
	
		
			
				|  |  | +            console.log("滚动===!!!",event.target.scrollTop,event.target.scrollLeft)
 | 
	
		
			
				|  |  | +            this.screenTop = event.target.scrollTop
 | 
	
		
			
				|  |  | +            this.scrollLeft = event.target.scrollLeft
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        /** 座位大小 拖动变化是  */
 | 
	
		
			
				|  |  | +        scaleNumInput() {
 | 
	
		
			
				|  |  | +            console.log("sfasdfsfd===")
 | 
	
		
			
				|  |  | +            this.$refs.seatbox.removeEventListener('mousemove', this.mousemoveFun);
 | 
	
		
			
				|  |  | +            this.$refs.seatbox.removeEventListener('mouseup', this.mouseupFun);
 | 
	
		
			
				|  |  | +        },
 | 
	
		
			
				|  |  | +        scaleNumChange() {
 | 
	
		
			
				|  |  | +            console.log("sfasdfsfd11111===")
 | 
	
		
			
				|  |  | +            this.$refs.seatbox.removeEventListener('mousemove', this.mousemoveFun);
 | 
	
		
			
				|  |  | +            this.$refs.seatbox.removeEventListener('mouseup', this.mouseupFun);
 | 
	
		
			
				|  |  | +            setTimeout(()=>{
 | 
	
		
			
				|  |  | +                this.$refs.seatbox.addEventListener('mousemove', this.mousemoveFun);
 | 
	
		
			
				|  |  | +                this.$refs.seatbox.addEventListener('mouseup', this.mouseupFun);
 | 
	
		
			
				|  |  | +            },500)
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    watch: {
 | 
	
		
			
				|  |  | +        scaleNum(){
 | 
	
		
			
				|  |  | +            this.scaleNumInput()
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    destroyed() {
 | 
	
		
			
				|  |  | +        if(this.$refs.seatbox) {
 | 
	
		
			
				|  |  | +            this.$refs.seatbox.removeEventListener('mousemove', this.mousemoveFun);
 | 
	
		
			
				|  |  | +            this.$refs.seatbox.removeEventListener('mouseup', this.mouseupFun);
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +}
 |