|
@@ -14,7 +14,7 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
titleForm: '', //为空则不显示标题,不定义默认显示:普通搜索
|
|
|
idTable: 'commonTable',
|
|
|
showExport: true,
|
|
|
- exportDataType: "auto",
|
|
|
+ exportDataType: "auto", //支持auto,selected,all 当设定为auto时自动时有选中则导出选中,没有选中则导出全部
|
|
|
exportTypes: ['json', 'xml', 'csv', 'txt', 'doc', 'excel'],
|
|
|
exportOptions: {
|
|
|
fileName: 'export_' + Moment().format("YYYY-MM-DD"),
|
|
@@ -51,6 +51,7 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
checkOnInit: true, //是否在初始化时判断
|
|
|
escape: true, //是否对内容进行转义
|
|
|
fixDropdownPosition: true, //是否修复下拉的定位
|
|
|
+ dragCheckboxMultiselect: true, //拖拽时复选框是否多选模式
|
|
|
selectedIds: [],
|
|
|
selectedData: [],
|
|
|
extend: {
|
|
@@ -90,14 +91,14 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
name: 'edit',
|
|
|
icon: 'fa fa-pencil',
|
|
|
title: __('Edit'),
|
|
|
- extend: 'data-toggle="tooltip"',
|
|
|
+ extend: 'data-toggle="tooltip" data-container="body"',
|
|
|
classname: 'btn btn-xs btn-success btn-editone'
|
|
|
},
|
|
|
del: {
|
|
|
name: 'del',
|
|
|
icon: 'fa fa-trash',
|
|
|
title: __('Del'),
|
|
|
- extend: 'data-toggle="tooltip"',
|
|
|
+ extend: 'data-toggle="tooltip" data-container="body"',
|
|
|
classname: 'btn btn-xs btn-danger btn-delone'
|
|
|
},
|
|
|
dragsort: {
|
|
@@ -197,6 +198,8 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
//当刷新表格时
|
|
|
table.on('refresh.bs.table', function (e, settings, data) {
|
|
|
$(Table.config.refreshbtn, toolbar).find(".fa").addClass("fa-spin");
|
|
|
+ //移除指定浮动弹窗
|
|
|
+ $(".layui-layer-autocontent").remove();
|
|
|
});
|
|
|
//当执行搜索时
|
|
|
table.on('search.bs.table common-search.bs.table', function (e, settings, data) {
|
|
@@ -220,39 +223,82 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
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 $('<div class="selection" />').css('opacity', .65).appendTo(document.body);
|
|
|
- }).drag(function (ev, dd) {
|
|
|
- setTimeout(function () {
|
|
|
- $(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)
|
|
|
- });
|
|
|
- }, 0);
|
|
|
- }).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.trigger("click");
|
|
|
+ }
|
|
|
+ } else {
|
|
|
+ if ($(this).hasClass("overlaped")) {
|
|
|
+ $(this).removeClass("overlaped");
|
|
|
+ checkbox.trigger("click");
|
|
|
+ }
|
|
|
}
|
|
|
- }, 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 || $(e.target).is("input")) {
|
|
|
+ return false;
|
|
|
+ }
|
|
|
+ posx = e.pageX;
|
|
|
+ posy = e.pageY;
|
|
|
+ prepare = true;
|
|
|
+ }).on("mousemove", function (e) {
|
|
|
+ if (prepare && !drag) {
|
|
|
+ drag = true;
|
|
|
+ dragdiv = $("<div />");
|
|
|
+ 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;
|
|
@@ -282,23 +328,40 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
options.selectedIds = selectedIds;
|
|
|
options.selectedData = selectedData;
|
|
|
}
|
|
|
+
|
|
|
//如果导出类型为auto时则自动判断
|
|
|
if (exportDataType === 'auto') {
|
|
|
options.exportDataType = selectedIds.length > 0 ? 'selected' : 'all';
|
|
|
+ if ($(".export .exporttips").length === 0) {
|
|
|
+ $(".export .dropdown-menu").prepend("<li class='exporttips alert alert-warning-light mb-0 no-border p-2'></li>")
|
|
|
+ }
|
|
|
+ $(".export .exporttips").html("导出记录:" + (selectedIds.length > 0 ? "选中" : "全部"));
|
|
|
+
|
|
|
}
|
|
|
$(Table.config.disabledbtn, toolbar).toggleClass('disabled', !options.selectedIds.length);
|
|
|
});
|
|
|
+ // 提交通用搜索时判断是否和Tabs筛选一致
|
|
|
+ table.on('common-search.bs.table', function (e, setting, query) {
|
|
|
+ var tabs = $('.panel-heading [data-field]', table.closest(".panel-intro"));
|
|
|
+ var field = tabs.data("field");
|
|
|
+ var value = $("li.active > a", tabs).data("value");
|
|
|
+ if (query.filter && typeof query.filter[field] !== 'undefined' && query.filter[field] != value) {
|
|
|
+ $("li", tabs).removeClass("active");
|
|
|
+ $("li > a[data-value='" + query.filter[field] + "']", tabs).parent().addClass("active");
|
|
|
+ }
|
|
|
+ });
|
|
|
// 绑定TAB事件
|
|
|
$('.panel-heading [data-field] a[data-toggle="tab"]', table.closest(".panel-intro")).on('shown.bs.tab', function (e) {
|
|
|
var field = $(this).closest("[data-field]").data("field");
|
|
|
var value = $(this).data("value");
|
|
|
var object = $("[name='" + field + "']", table.closest(".bootstrap-table").find(".commonsearch-table"));
|
|
|
- if (object.prop('tagName') == "SELECT") {
|
|
|
+ if (object.prop('tagName') === "SELECT") {
|
|
|
$("option[value='" + value + "']", object).prop("selected", true);
|
|
|
} else {
|
|
|
object.val(value);
|
|
|
}
|
|
|
table.trigger("uncheckbox");
|
|
|
+ table.bootstrapTable('getOptions').totalRows = 0;
|
|
|
table.bootstrapTable('refresh', {pageNumber: 1});
|
|
|
return false;
|
|
|
});
|
|
@@ -677,25 +740,25 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
images: function (value, row, index) {
|
|
|
value = value == null || value.length === 0 ? '' : value.toString();
|
|
|
var classname = typeof this.classname !== 'undefined' ? this.classname : 'img-sm img-center';
|
|
|
- var arr = value !== '' ? value.split(',') : [];
|
|
|
+ var arr = value !== '' ? (value.indexOf('data:image/') === -1 ? value.split(',') : [value]) : [];
|
|
|
var html = [];
|
|
|
var url;
|
|
|
$.each(arr, function (i, value) {
|
|
|
value = value ? value : '/assets/img/blank.gif';
|
|
|
url = Fast.api.cdnurl(value, true);
|
|
|
-
|
|
|
- url = url.match(/^(\/|data:image\\)/) ? url : url + Config.upload.thumbstyle;
|
|
|
- html.push('<a href="javascript:"><img class="' + classname + '" src="' + url + '" width="30" height="30" /></a>');
|
|
|
+ //匹配本地、data:image、或已包含标识符首字符
|
|
|
+ url = !Config.upload.thumbstyle || url.match(/^(\/|data:image\/)/) || url.indexOf(Config.upload.thumbstyle.substring(0, 1)) > -1 ? url : url + Config.upload.thumbstyle;
|
|
|
+ html.push('<a href="javascript:"><img class="' + classname + '" src="' + url + '" /></a>');
|
|
|
});
|
|
|
return html.join(' ');
|
|
|
},
|
|
|
file: function (value, row, index) {
|
|
|
- return Table.api.formatter.files.call(this, value, row, index);
|
|
|
+ Table.api.formatter.files.call(this, value, row, index);
|
|
|
},
|
|
|
files: function (value, row, index) {
|
|
|
value = value == null || value.length === 0 ? '' : value.toString();
|
|
|
var classname = typeof this.classname !== 'undefined' ? this.classname : 'img-sm img-center';
|
|
|
- var arr = value !== '' ? value.split(',') : [];
|
|
|
+ var arr = value !== '' ? (value.indexOf('data:image/') === -1 ? value.split(',') : [value]) : [];
|
|
|
var html = [];
|
|
|
var suffix, url;
|
|
|
$.each(arr, function (i, value) {
|
|
@@ -708,8 +771,9 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
return html.join(' ');
|
|
|
},
|
|
|
content: function (value, row, index) {
|
|
|
- var width = this.width != undefined ? (this.width.match(/^\d+$/) ? this.width + "px" : this.width) : "250px";
|
|
|
- return "<div style='white-space: nowrap; text-overflow:ellipsis; overflow: hidden; max-width:" + width + ";'>" + value + "</div>";
|
|
|
+ var width = this.width != undefined ? (this.width.toString().match(/^\d+$/) ? this.width + "px" : this.width) : "250px";
|
|
|
+ var hover = this.hover != undefined && this.hover ? "autocontent-hover" : "";
|
|
|
+ return "<div class='autocontent-item " + hover + "' style='white-space: nowrap; text-overflow:ellipsis; overflow: hidden; max-width:" + width + ";'>" + value + "</div>";
|
|
|
},
|
|
|
status: function (value, row, index) {
|
|
|
var custom = {normal: 'success', hidden: 'gray', deleted: 'danger', locked: 'info'};
|
|
@@ -932,7 +996,7 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
$.each(dropdowns, function (i, j) {
|
|
|
dropdownHtml.push('<div class="btn-group"><button type="button" class="btn btn-primary dropdown-toggle btn-xs" data-toggle="dropdown">' + i + '</button><button type="button" class="btn btn-primary dropdown-toggle btn-xs" data-toggle="dropdown"><span class="caret"></span></button><ul class="dropdown-menu dropdown-menu-right"><li>' + j.join('</li><li>') + '</li></ul></div>');
|
|
|
});
|
|
|
- html.unshift(dropdownHtml);
|
|
|
+ html.unshift(dropdownHtml.join(' '));
|
|
|
}
|
|
|
return html.join(' ');
|
|
|
},
|
|
@@ -943,7 +1007,7 @@ define(['jquery', 'bootstrap'], function ($, undefined) {
|
|
|
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);
|