diff --git a/public/assets/js/require-backend.js b/public/assets/js/require-backend.js index 4a2bfc4c..36383dac 100644 --- a/public/assets/js/require-backend.js +++ b/public/assets/js/require-backend.js @@ -6,14 +6,12 @@ require.config({ main: 'moment' }], //在打包压缩时将会把include中的模块合并到主文件中 - include: ['css', 'layer', 'toastr', 'fast', 'backend', 'backend-init', 'table', 'form', 'dragsort', 'drag', 'drop', 'addtabs', 'selectpage'], + include: ['css', 'layer', 'toastr', 'fast', 'backend', 'backend-init', 'table', 'form', 'dragsort', 'addtabs', 'selectpage'], paths: { 'lang': "empty:", 'form': 'require-form', 'table': 'require-table', 'upload': 'require-upload', - 'drag': 'jquery.drag.min', - 'drop': 'jquery.drop.min', 'dropzone': 'dropzone.min', 'echarts': 'echarts.min', 'echarts-theme': 'echarts-theme', diff --git a/public/assets/js/require-backend.min.js b/public/assets/js/require-backend.min.js index 07214637..196fddfe 100644 --- a/public/assets/js/require-backend.min.js +++ b/public/assets/js/require-backend.min.js @@ -17,14 +17,12 @@ require.config({ main: 'moment' }], //在打包压缩时将会把include中的模块合并到主文件中 - include: ['css', 'layer', 'toastr', 'fast', 'backend', 'backend-init', 'table', 'form', 'dragsort', 'drag', 'drop', 'addtabs', 'selectpage'], + include: ['css', 'layer', 'toastr', 'fast', 'backend', 'backend-init', 'table', 'form', 'dragsort', 'addtabs', 'selectpage'], paths: { 'lang': "empty:", 'form': 'require-form', 'table': 'require-table', 'upload': 'require-upload', - 'drag': 'jquery.drag.min', - 'drop': 'jquery.drop.min', 'dropzone': 'dropzone.min', 'echarts': 'echarts.min', 'echarts-theme': 'echarts-theme', @@ -11711,6 +11709,7 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr checkOnInit: true, //是否在初始化时判断 escape: true, //是否对内容进行转义 fixDropdownPosition: true, //是否修复下拉的定位 + dragCheckboxMultiselect: true, //拖拽时复选框是否多选模式 selectedIds: [], selectedData: [], extend: { @@ -11880,37 +11879,82 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr table.on('post-body.bs.table', function (e, data) { $(Table.config.refreshbtn, toolbar).find(".fa").removeClass("fa-spin"); if ($(Table.config.checkboxtd + ":first", table).find("input[type='checkbox'][data-index]").length > 0) { - // 拖拽选择,需要重新绑定事件 - require(['drag', 'drop'], function () { - var checkboxtd = $(Table.config.checkboxtd, table); - checkboxtd.drag("start", function (ev, dd) { - return $('
').css('opacity', .65).appendTo(document.body); - }).drag(function (ev, dd) { - $(dd.proxy).css({ - top: Math.min(ev.pageY, dd.startY), - left: Math.min(ev.pageX, dd.startX), - height: Math.abs(ev.pageY - dd.startY), - width: Math.abs(ev.pageX - dd.startX) - }); - }).drag("end", function (ev, dd) { - $(dd.proxy).remove(); - }); - checkboxtd.drop("start", function () { - Table.api.toggleattr(this); - }).drop(function () { - // Table.api.toggleattr(this); - }).drop("end", function (e) { - var that = this; - setTimeout(function () { - if (e.type === 'mousemove') { - Table.api.toggleattr(that); + //拖拽选择复选框 + var posx, posy, dragdiv, drag = false, prepare = false; + var mousemove = function (e) { + if (drag) { + var left = Math.min(e.pageX, posx); + var top = Math.min(e.pageY, posy); + var width = Math.abs(posx - e.pageX); + var height = Math.abs(posy - e.pageY); + dragdiv.css({left: left + "px", top: top + "px", width: width + "px", height: height + "px"}); + var dragrect = {x: left, y: top, width: width, height: height}; + $(Table.config.checkboxtd, table).each(function () { + var checkbox = $("input:checkbox", this); + var tdrect = this.getBoundingClientRect(); + tdrect.x += document.documentElement.scrollLeft; + tdrect.y += document.documentElement.scrollTop; + + var td_min_x = tdrect.x; + var td_min_y = tdrect.y; + var td_max_x = tdrect.x + tdrect.width; + var td_max_y = tdrect.y + tdrect.height; + + var drag_min_x = dragrect.x; + var drag_min_y = dragrect.y; + var drag_max_x = dragrect.x + dragrect.width; + var drag_max_y = dragrect.y + dragrect.height; + var overlapped = td_min_x <= drag_max_x && td_max_x >= drag_min_x && td_min_y <= drag_max_y && td_max_y >= drag_min_y; + if (overlapped) { + if (!$(this).hasClass("overlaped")) { + $(this).addClass("overlaped"); + checkbox.prop("checked", !checkbox.prop("checked")); + } + } else { + if ($(this).hasClass("overlaped")) { + $(this).removeClass("overlaped"); + checkbox.prop("checked", !checkbox.prop("checked")); + } } - }, 0); - }); - $.drop({ - multi: true - }); + }); + } + }; + var selectstart = function () { + return false; + }; + var mouseup = function () { + if (drag) { + $(document).off("mousemove", mousemove); + $(document).off("selectstart", selectstart); + dragdiv.remove(); + } + drag = false; + prepare = false; + $(document.body).css({'MozUserSelect': '', 'webkitUserSelect': ''}).attr('unselectable', 'off'); + }; + + $(Table.config.checkboxtd, table).on("mousedown", function (e) { + //禁止鼠标右键事件 + if (e.button === 2) { + return false; + } + posx = e.pageX; + posy = e.pageY; + prepare = true; + }).on("mousemove", function (e) { + if (prepare && !drag) { + drag = true; + dragdiv = $("
"); + dragdiv.css({position: 'absolute', width: 0, height: 0, border: "1px dashed blue", background: "#0029ff", left: e.pageX + "px", top: e.pageY + "px", opacity: .1}); + dragdiv.appendTo(document.body); + $(document.body).css({'MozUserSelect': 'none', 'webkitUserSelect': 'none'}).attr('unselectable', 'on'); + $(document).on("mousemove", mousemove).on("mouseup", mouseup).on("selectstart", selectstart); + if (options.dragCheckboxMultiselect) { + $(Table.config.checkboxtd, table).removeClass("overlaped"); + } + } }); + } }); var exportDataType = options.exportDataType; @@ -12576,7 +12620,7 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr row.ids = ids ? ids : (typeof row.ids !== 'undefined' ? row.ids : 0); url = url == null || url.length === 0 ? '' : url.toString(); //自动添加ids参数 - url = !url.match(/(?=([?&]ids=)|(\/ids\/)|(\{ids}))/i) ? + url = !url.match(/(?=([?&]ids=)|(\/ids\/)|(\{ids}))/i) ? url + (url.match(/(\?|&)+/) ? "&ids=" : "/ids/") + '{ids}' : url; url = url.replace(/\{(.*?)\}/gi, function (matched) { matched = matched.substring(1, matched.length - 1); @@ -13029,22 +13073,6 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr define("dragsort", function(){}); -/*! - * jquery.event.drag - v 2.2 - * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com - * Open Source MIT License - http://threedubmedia.com/code/license - */ -;(function(e){e.fn.drag=function(k,g,j){var i=typeof k=="string"?k:"",h=e.isFunction(k)?k:e.isFunction(g)?g:null;if(i.indexOf("drag")!==0){i="drag"+i}j=(k==h?g:j)||{};return h?this.bind(i,j,h):this.trigger(i)};var b=e.event,a=b.special,d=a.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:false,drop:true,click:false},datakey:"dragdata",noBubble:true,add:function(i){var h=e.data(this,d.datakey),g=i.data||{};h.related+=1;e.each(d.defaults,function(j,k){if(g[j]!==undefined){h[j]=g[j]}})},remove:function(){e.data(this,d.datakey).related-=1},setup:function(){if(e.data(this,d.datakey)){return}var g=e.extend({related:0},d.defaults);e.data(this,d.datakey,g);b.add(this,"touchstart mousedown",d.init,g);if(this.attachEvent){this.attachEvent("ondragstart",d.dontstart)}},teardown:function(){var g=e.data(this,d.datakey)||{};if(g.related){return}e.removeData(this,d.datakey);b.remove(this,"touchstart mousedown",d.init);d.textselect(true);if(this.detachEvent){this.detachEvent("ondragstart",d.dontstart)}},init:function(i){if(d.touched){return}var g=i.data,h;if(i.which!=0&&g.which>0&&i.which!=g.which){return}if(e(i.target).is(g.not)){return}if(g.handle&&!e(i.target).closest(g.handle,i.currentTarget).length){return}d.touched=i.type=="touchstart"?this:null;g.propagates=1;g.mousedown=this;g.interactions=[d.interaction(this,g)];g.target=i.target;g.pageX=i.pageX;g.pageY=i.pageY;g.dragging=null;h=d.hijack(i,"draginit",g);if(!g.propagates){return}h=d.flatten(h);if(h&&h.length){g.interactions=[];e.each(h,function(){g.interactions.push(d.interaction(this,g))})}g.propagates=g.interactions.length;if(g.drop!==false&&a.drop){a.drop.handler(i,g)}d.textselect(false);if(d.touched){b.add(d.touched,"touchmove touchend",d.handler,g)}else{b.add(document,"mousemove mouseup",d.handler,g)}if(!d.touched||g.live){return false}},interaction:function(h,g){var i=e(h)[g.relative?"position":"offset"]()||{top:0,left:0};return{drag:h,callback:new d.callback(),droppable:[],offset:i}},handler:function(h){var g=h.data;switch(h.type){case !g.dragging&&"touchmove":h.preventDefault();case !g.dragging&&"mousemove":if(Math.pow(h.pageX-g.pageX,2)+Math.pow(h.pageY-g.pageY,2)0){e.removeData(this,"suppress."+g.type);return}return f.apply(this,arguments)};if(b.fixHooks!==undefined){var c=b.fixHooks.touchstart=b.fixHooks.touchmove=b.fixHooks.touchend=b.fixHooks.touchcancel={props:"clientX clientY pageX pageY screenX screenY".split(" "),filter:function(h,i){if(i){var g=(i.touches&&i.touches[0])||(i.changedTouches&&i.changedTouches[0])||null;if(g){e.each(c.props,function(j,k){h[k]=g[k]})}}return h}};}a.draginit=a.dragstart=a.dragend=d})(jQuery); -define("drag", function(){}); - -/*! - * jquery.event.drop - v 2.2 - * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com - * Open Source MIT License - http://threedubmedia.com/code/license - */ -;(function(d){d.fn.drop=function(i,e,h){var g=typeof i=="string"?i:"",f=d.isFunction(i)?i:d.isFunction(e)?e:null;if(g.indexOf("drop")!==0){g="drop"+g}h=(i==f?e:h)||{};return f?this.bind(g,h,f):this.trigger(g)};d.drop=function(e){e=e||{};b.multi=e.multi===true?Infinity:e.multi===false?1:!isNaN(e.multi)?e.multi:b.multi;b.delay=e.delay||b.delay;b.tolerance=d.isFunction(e.tolerance)?e.tolerance:e.tolerance===null?null:b.tolerance;b.mode=e.mode||b.mode||"intersect"};var c=d.event,a=c.special,b=d.event.special.drop={multi:1,delay:20,mode:"overlap",targets:[],datakey:"dropdata",noBubble:true,add:function(f){var e=d.data(this,b.datakey);e.related+=1},remove:function(){d.data(this,b.datakey).related-=1},setup:function(){if(d.data(this,b.datakey)){return}var e={related:0,active:[],anyactive:0,winner:0,location:{}};d.data(this,b.datakey,e);b.targets.push(this);return false},teardown:function(){var f=d.data(this,b.datakey)||{};if(f.related){return}d.removeData(this,b.datakey);var e=this;b.targets=d.grep(b.targets,function(g){return(g!==e)})},handler:function(g,e){var f,h;if(!e){return}switch(g.type){case"mousedown":case"touchstart":h=d(b.targets);if(typeof e.drop=="string"){h=h.filter(e.drop)}h.each(function(){var i=d.data(this,b.datakey);i.active=[];i.anyactive=0;i.winner=0});e.droppable=h;a.drag.hijack(g,"dropinit",e);break;case"mousemove":case"touchmove":b.event=g;if(!b.timer){b.tolerate(e)}break;case"mouseup":case"touchend":b.timer=clearTimeout(b.timer);if(e.propagates){a.drag.hijack(g,"drop",e);a.drag.hijack(g,"dropend",e)}break}},locate:function(k,h){var l=d.data(k,b.datakey),g=d(k),i=g.offset()||{},e=g.outerHeight(),j=g.outerWidth(),f={elem:k,width:j,height:e,top:i.top,left:i.left,right:i.left+j,bottom:i.top+e};if(l){l.location=f;l.index=h;l.elem=k}return f},contains:function(e,f){return((f[0]||f.left)>=e.left&&(f[0]||f.right)<=e.right&&(f[1]||f.top)>=e.top&&(f[1]||f.bottom)<=e.bottom)},modes:{intersect:function(f,e,g){return this.contains(g,[f.pageX,f.pageY])?1000000000:this.modes.overlap.apply(this,arguments)},overlap:function(f,e,g){return Math.max(0,Math.min(g.bottom,e.bottom)-Math.max(g.top,e.top))*Math.max(0,Math.min(g.right,e.right)-Math.max(g.left,e.left))},fit:function(f,e,g){return this.contains(g,e)?1:0},middle:function(f,e,g){return this.contains(g,[e.left+e.width*0.5,e.top+e.height*0.5])?1:0}},sort:function(f,e){return(e.winner-f.winner)||(f.index-e.index)},tolerate:function(q){var k,e,n,j,l,m,g,p=0,f,h=q.interactions.length,r=[b.event.pageX,b.event.pageY],o=b.tolerance||b.modes[b.mode];do{if(f=q.interactions[p]){if(!f){return}f.drop=[];l=[];m=f.droppable.length;if(o){n=b.locate(f.proxy)}k=0;do{if(g=f.droppable[k]){j=d.data(g,b.datakey);e=j.location;if(!e){continue}j.winner=o?o.call(b,b.event,n,e):b.contains(e,r)?1:0;l.push(j)}}while(++k 0) { - // 拖拽选择,需要重新绑定事件 - require(['drag', 'drop'], function () { - var checkboxtd = $(Table.config.checkboxtd, table); - checkboxtd.drag("start", function (ev, dd) { - return $('
').css('opacity', .65).appendTo(document.body); - }).drag(function (ev, dd) { - $(dd.proxy).css({ - top: Math.min(ev.pageY, dd.startY), - left: Math.min(ev.pageX, dd.startX), - height: Math.abs(ev.pageY - dd.startY), - width: Math.abs(ev.pageX - dd.startX) - }); - }).drag("end", function (ev, dd) { - $(dd.proxy).remove(); - }); - checkboxtd.drop("start", function () { - Table.api.toggleattr(this); - }).drop(function () { - // Table.api.toggleattr(this); - }).drop("end", function (e) { - var that = this; - setTimeout(function () { - if (e.type === 'mousemove') { - Table.api.toggleattr(that); + //拖拽选择复选框 + var posx, posy, dragdiv, drag = false, prepare = false; + var mousemove = function (e) { + if (drag) { + var left = Math.min(e.pageX, posx); + var top = Math.min(e.pageY, posy); + var width = Math.abs(posx - e.pageX); + var height = Math.abs(posy - e.pageY); + dragdiv.css({left: left + "px", top: top + "px", width: width + "px", height: height + "px"}); + var dragrect = {x: left, y: top, width: width, height: height}; + $(Table.config.checkboxtd, table).each(function () { + var checkbox = $("input:checkbox", this); + var tdrect = this.getBoundingClientRect(); + tdrect.x += document.documentElement.scrollLeft; + tdrect.y += document.documentElement.scrollTop; + + var td_min_x = tdrect.x; + var td_min_y = tdrect.y; + var td_max_x = tdrect.x + tdrect.width; + var td_max_y = tdrect.y + tdrect.height; + + var drag_min_x = dragrect.x; + var drag_min_y = dragrect.y; + var drag_max_x = dragrect.x + dragrect.width; + var drag_max_y = dragrect.y + dragrect.height; + var overlapped = td_min_x <= drag_max_x && td_max_x >= drag_min_x && td_min_y <= drag_max_y && td_max_y >= drag_min_y; + if (overlapped) { + if (!$(this).hasClass("overlaped")) { + $(this).addClass("overlaped"); + checkbox.prop("checked", !checkbox.prop("checked")); + } + } else { + if ($(this).hasClass("overlaped")) { + $(this).removeClass("overlaped"); + checkbox.prop("checked", !checkbox.prop("checked")); + } } - }, 0); - }); - $.drop({ - multi: true - }); + }); + } + }; + var selectstart = function () { + return false; + }; + var mouseup = function () { + if (drag) { + $(document).off("mousemove", mousemove); + $(document).off("selectstart", selectstart); + dragdiv.remove(); + } + drag = false; + prepare = false; + $(document.body).css({'MozUserSelect': '', 'webkitUserSelect': ''}).attr('unselectable', 'off'); + }; + + $(Table.config.checkboxtd, table).on("mousedown", function (e) { + //禁止鼠标右键事件 + if (e.button === 2) { + return false; + } + posx = e.pageX; + posy = e.pageY; + prepare = true; + }).on("mousemove", function (e) { + if (prepare && !drag) { + drag = true; + dragdiv = $("
"); + dragdiv.css({position: 'absolute', width: 0, height: 0, border: "1px dashed blue", background: "#0029ff", left: e.pageX + "px", top: e.pageY + "px", opacity: .1}); + dragdiv.appendTo(document.body); + $(document.body).css({'MozUserSelect': 'none', 'webkitUserSelect': 'none'}).attr('unselectable', 'on'); + $(document).on("mousemove", mousemove).on("mouseup", mouseup).on("selectstart", selectstart); + if (options.dragCheckboxMultiselect) { + $(Table.config.checkboxtd, table).removeClass("overlaped"); + } + } }); + } }); var exportDataType = options.exportDataType; @@ -12424,7 +12468,7 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr row.ids = ids ? ids : (typeof row.ids !== 'undefined' ? row.ids : 0); url = url == null || url.length === 0 ? '' : url.toString(); //自动添加ids参数 - url = !url.match(/(?=([?&]ids=)|(\/ids\/)|(\{ids}))/i) ? + url = !url.match(/(?=([?&]ids=)|(\/ids\/)|(\{ids}))/i) ? url + (url.match(/(\?|&)+/) ? "&ids=" : "/ids/") + '{ids}' : url; url = url.replace(/\{(.*?)\}/gi, function (matched) { matched = matched.substring(1, matched.length - 1); @@ -12877,22 +12921,6 @@ define('table',['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstr define("dragsort", function(){}); -/*! - * jquery.event.drag - v 2.2 - * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com - * Open Source MIT License - http://threedubmedia.com/code/license - */ -;(function(e){e.fn.drag=function(k,g,j){var i=typeof k=="string"?k:"",h=e.isFunction(k)?k:e.isFunction(g)?g:null;if(i.indexOf("drag")!==0){i="drag"+i}j=(k==h?g:j)||{};return h?this.bind(i,j,h):this.trigger(i)};var b=e.event,a=b.special,d=a.drag={defaults:{which:1,distance:0,not:":input",handle:null,relative:false,drop:true,click:false},datakey:"dragdata",noBubble:true,add:function(i){var h=e.data(this,d.datakey),g=i.data||{};h.related+=1;e.each(d.defaults,function(j,k){if(g[j]!==undefined){h[j]=g[j]}})},remove:function(){e.data(this,d.datakey).related-=1},setup:function(){if(e.data(this,d.datakey)){return}var g=e.extend({related:0},d.defaults);e.data(this,d.datakey,g);b.add(this,"touchstart mousedown",d.init,g);if(this.attachEvent){this.attachEvent("ondragstart",d.dontstart)}},teardown:function(){var g=e.data(this,d.datakey)||{};if(g.related){return}e.removeData(this,d.datakey);b.remove(this,"touchstart mousedown",d.init);d.textselect(true);if(this.detachEvent){this.detachEvent("ondragstart",d.dontstart)}},init:function(i){if(d.touched){return}var g=i.data,h;if(i.which!=0&&g.which>0&&i.which!=g.which){return}if(e(i.target).is(g.not)){return}if(g.handle&&!e(i.target).closest(g.handle,i.currentTarget).length){return}d.touched=i.type=="touchstart"?this:null;g.propagates=1;g.mousedown=this;g.interactions=[d.interaction(this,g)];g.target=i.target;g.pageX=i.pageX;g.pageY=i.pageY;g.dragging=null;h=d.hijack(i,"draginit",g);if(!g.propagates){return}h=d.flatten(h);if(h&&h.length){g.interactions=[];e.each(h,function(){g.interactions.push(d.interaction(this,g))})}g.propagates=g.interactions.length;if(g.drop!==false&&a.drop){a.drop.handler(i,g)}d.textselect(false);if(d.touched){b.add(d.touched,"touchmove touchend",d.handler,g)}else{b.add(document,"mousemove mouseup",d.handler,g)}if(!d.touched||g.live){return false}},interaction:function(h,g){var i=e(h)[g.relative?"position":"offset"]()||{top:0,left:0};return{drag:h,callback:new d.callback(),droppable:[],offset:i}},handler:function(h){var g=h.data;switch(h.type){case !g.dragging&&"touchmove":h.preventDefault();case !g.dragging&&"mousemove":if(Math.pow(h.pageX-g.pageX,2)+Math.pow(h.pageY-g.pageY,2)0){e.removeData(this,"suppress."+g.type);return}return f.apply(this,arguments)};if(b.fixHooks!==undefined){var c=b.fixHooks.touchstart=b.fixHooks.touchmove=b.fixHooks.touchend=b.fixHooks.touchcancel={props:"clientX clientY pageX pageY screenX screenY".split(" "),filter:function(h,i){if(i){var g=(i.touches&&i.touches[0])||(i.changedTouches&&i.changedTouches[0])||null;if(g){e.each(c.props,function(j,k){h[k]=g[k]})}}return h}};}a.draginit=a.dragstart=a.dragend=d})(jQuery); -define("drag", function(){}); - -/*! - * jquery.event.drop - v 2.2 - * Copyright (c) 2010 Three Dub Media - http://threedubmedia.com - * Open Source MIT License - http://threedubmedia.com/code/license - */ -;(function(d){d.fn.drop=function(i,e,h){var g=typeof i=="string"?i:"",f=d.isFunction(i)?i:d.isFunction(e)?e:null;if(g.indexOf("drop")!==0){g="drop"+g}h=(i==f?e:h)||{};return f?this.bind(g,h,f):this.trigger(g)};d.drop=function(e){e=e||{};b.multi=e.multi===true?Infinity:e.multi===false?1:!isNaN(e.multi)?e.multi:b.multi;b.delay=e.delay||b.delay;b.tolerance=d.isFunction(e.tolerance)?e.tolerance:e.tolerance===null?null:b.tolerance;b.mode=e.mode||b.mode||"intersect"};var c=d.event,a=c.special,b=d.event.special.drop={multi:1,delay:20,mode:"overlap",targets:[],datakey:"dropdata",noBubble:true,add:function(f){var e=d.data(this,b.datakey);e.related+=1},remove:function(){d.data(this,b.datakey).related-=1},setup:function(){if(d.data(this,b.datakey)){return}var e={related:0,active:[],anyactive:0,winner:0,location:{}};d.data(this,b.datakey,e);b.targets.push(this);return false},teardown:function(){var f=d.data(this,b.datakey)||{};if(f.related){return}d.removeData(this,b.datakey);var e=this;b.targets=d.grep(b.targets,function(g){return(g!==e)})},handler:function(g,e){var f,h;if(!e){return}switch(g.type){case"mousedown":case"touchstart":h=d(b.targets);if(typeof e.drop=="string"){h=h.filter(e.drop)}h.each(function(){var i=d.data(this,b.datakey);i.active=[];i.anyactive=0;i.winner=0});e.droppable=h;a.drag.hijack(g,"dropinit",e);break;case"mousemove":case"touchmove":b.event=g;if(!b.timer){b.tolerate(e)}break;case"mouseup":case"touchend":b.timer=clearTimeout(b.timer);if(e.propagates){a.drag.hijack(g,"drop",e);a.drag.hijack(g,"dropend",e)}break}},locate:function(k,h){var l=d.data(k,b.datakey),g=d(k),i=g.offset()||{},e=g.outerHeight(),j=g.outerWidth(),f={elem:k,width:j,height:e,top:i.top,left:i.left,right:i.left+j,bottom:i.top+e};if(l){l.location=f;l.index=h;l.elem=k}return f},contains:function(e,f){return((f[0]||f.left)>=e.left&&(f[0]||f.right)<=e.right&&(f[1]||f.top)>=e.top&&(f[1]||f.bottom)<=e.bottom)},modes:{intersect:function(f,e,g){return this.contains(g,[f.pageX,f.pageY])?1000000000:this.modes.overlap.apply(this,arguments)},overlap:function(f,e,g){return Math.max(0,Math.min(g.bottom,e.bottom)-Math.max(g.top,e.top))*Math.max(0,Math.min(g.right,e.right)-Math.max(g.left,e.left))},fit:function(f,e,g){return this.contains(g,e)?1:0},middle:function(f,e,g){return this.contains(g,[e.left+e.width*0.5,e.top+e.height*0.5])?1:0}},sort:function(f,e){return(e.winner-f.winner)||(f.index-e.index)},tolerate:function(q){var k,e,n,j,l,m,g,p=0,f,h=q.interactions.length,r=[b.event.pageX,b.event.pageY],o=b.tolerance||b.modes[b.mode];do{if(f=q.interactions[p]){if(!f){return}f.drop=[];l=[];m=f.droppable.length;if(o){n=b.locate(f.proxy)}k=0;do{if(g=f.droppable[k]){j=d.data(g,b.datakey);e=j.location;if(!e){continue}j.winner=o?o.call(b,b.event,n,e):b.contains(e,r)?1:0;l.push(j)}}while(++k 0) { - // 拖拽选择,需要重新绑定事件 - require(['drag', 'drop'], function () { - var checkboxtd = $(Table.config.checkboxtd, table); - checkboxtd.drag("start", function (ev, dd) { - return $('
').css('opacity', .65).appendTo(document.body); - }).drag(function (ev, dd) { - $(dd.proxy).css({ - top: Math.min(ev.pageY, dd.startY), - left: Math.min(ev.pageX, dd.startX), - height: Math.abs(ev.pageY - dd.startY), - width: Math.abs(ev.pageX - dd.startX) - }); - }).drag("end", function (ev, dd) { - $(dd.proxy).remove(); - }); - checkboxtd.drop("start", function () { - Table.api.toggleattr(this); - }).drop(function () { - // Table.api.toggleattr(this); - }).drop("end", function (e) { - var that = this; - setTimeout(function () { - if (e.type === 'mousemove') { - Table.api.toggleattr(that); + //拖拽选择复选框 + var posx, posy, dragdiv, drag = false, prepare = false; + var mousemove = function (e) { + if (drag) { + var left = Math.min(e.pageX, posx); + var top = Math.min(e.pageY, posy); + var width = Math.abs(posx - e.pageX); + var height = Math.abs(posy - e.pageY); + dragdiv.css({left: left + "px", top: top + "px", width: width + "px", height: height + "px"}); + var dragrect = {x: left, y: top, width: width, height: height}; + $(Table.config.checkboxtd, table).each(function () { + var checkbox = $("input:checkbox", this); + var tdrect = this.getBoundingClientRect(); + tdrect.x += document.documentElement.scrollLeft; + tdrect.y += document.documentElement.scrollTop; + + var td_min_x = tdrect.x; + var td_min_y = tdrect.y; + var td_max_x = tdrect.x + tdrect.width; + var td_max_y = tdrect.y + tdrect.height; + + var drag_min_x = dragrect.x; + var drag_min_y = dragrect.y; + var drag_max_x = dragrect.x + dragrect.width; + var drag_max_y = dragrect.y + dragrect.height; + var overlapped = td_min_x <= drag_max_x && td_max_x >= drag_min_x && td_min_y <= drag_max_y && td_max_y >= drag_min_y; + if (overlapped) { + if (!$(this).hasClass("overlaped")) { + $(this).addClass("overlaped"); + checkbox.prop("checked", !checkbox.prop("checked")); + } + } else { + if ($(this).hasClass("overlaped")) { + $(this).removeClass("overlaped"); + checkbox.prop("checked", !checkbox.prop("checked")); + } } - }, 0); - }); - $.drop({ - multi: true - }); + }); + } + }; + var selectstart = function () { + return false; + }; + var mouseup = function () { + if (drag) { + $(document).off("mousemove", mousemove); + $(document).off("selectstart", selectstart); + dragdiv.remove(); + } + drag = false; + prepare = false; + $(document.body).css({'MozUserSelect': '', 'webkitUserSelect': ''}).attr('unselectable', 'off'); + }; + + $(Table.config.checkboxtd, table).on("mousedown", function (e) { + //禁止鼠标右键事件 + if (e.button === 2) { + return false; + } + posx = e.pageX; + posy = e.pageY; + prepare = true; + }).on("mousemove", function (e) { + if (prepare && !drag) { + drag = true; + dragdiv = $("
"); + dragdiv.css({position: 'absolute', width: 0, height: 0, border: "1px dashed blue", background: "#0029ff", left: e.pageX + "px", top: e.pageY + "px", opacity: .1}); + dragdiv.appendTo(document.body); + $(document.body).css({'MozUserSelect': 'none', 'webkitUserSelect': 'none'}).attr('unselectable', 'on'); + $(document).on("mousemove", mousemove).on("mouseup", mouseup).on("selectstart", selectstart); + if (options.dragCheckboxMultiselect) { + $(Table.config.checkboxtd, table).removeClass("overlaped"); + } + } }); + } }); var exportDataType = options.exportDataType; @@ -914,7 +960,7 @@ define(['jquery', 'bootstrap', 'moment', 'moment/locale/zh-cn', 'bootstrap-table row.ids = ids ? ids : (typeof row.ids !== 'undefined' ? row.ids : 0); url = url == null || url.length === 0 ? '' : url.toString(); //自动添加ids参数 - url = !url.match(/(?=([?&]ids=)|(\/ids\/)|(\{ids}))/i) ? + url = !url.match(/(?=([?&]ids=)|(\/ids\/)|(\{ids}))/i) ? url + (url.match(/(\?|&)+/) ? "&ids=" : "/ids/") + '{ids}' : url; url = url.replace(/\{(.*?)\}/gi, function (matched) { matched = matched.substring(1, matched.length - 1);