diff --git a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java index 06fb5480..4045c5c3 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/web/controller/demo/controller/DemoTableController.java @@ -65,6 +65,57 @@ public class DemoTableController extends BaseController users.add(new UserTableModel(26, "1000026", "测试26", "1", "15666666666", "ry@qq.com", 250.0, "1")); } + private final static List areas = new ArrayList(); + { + areas.add(new AreaModel(1, 0, "广东省", "440000", "GDS", "GuangDongSheng", 1)); + areas.add(new AreaModel(2, 0, "湖南省", "430000", "HNS", "HuNanSheng", 1)); + areas.add(new AreaModel(3, 0, "河南省", "410000", "HNS", "HeNanSheng", 0)); + areas.add(new AreaModel(4, 0, "湖北省", "420000", "HBS", "HuBeiSheng", 0)); + areas.add(new AreaModel(5, 0, "辽宁省", "210000", "LNS", "LiaoNingSheng", 0)); + areas.add(new AreaModel(6, 0, "山东省", "370000", "SDS", "ShanDongSheng", 0)); + areas.add(new AreaModel(7, 0, "陕西省", "610000", "SXS", "ShanXiSheng", 0)); + areas.add(new AreaModel(8, 0, "贵州省", "520000", "GZS", "GuiZhouSheng", 0)); + areas.add(new AreaModel(9, 0, "上海市", "310000", "SHS", "ShangHaiShi", 0)); + areas.add(new AreaModel(10, 0, "重庆市", "500000", "CQS", "ChongQingShi", 0)); + areas.add(new AreaModel(11, 0, "若依省", "666666", "YYS", "RuoYiSheng", 0)); + areas.add(new AreaModel(12, 0, "安徽省", "340000", "AHS", "AnHuiSheng", 0)); + areas.add(new AreaModel(13, 0, "福建省", "350000", "FJS", "FuJianSheng", 0)); + areas.add(new AreaModel(14, 0, "海南省", "460000", "HNS", "HaiNanSheng", 0)); + areas.add(new AreaModel(15, 0, "江苏省", "320000", "JSS", "JiangSuSheng", 0)); + areas.add(new AreaModel(16, 0, "青海省", "630000", "QHS", "QingHaiSheng", 0)); + areas.add(new AreaModel(17, 0, "广西壮族自治区", "450000", "GXZZZZQ", "GuangXiZhuangZuZiZhiQu", 0)); + areas.add(new AreaModel(18, 0, "宁夏回族自治区", "640000", "NXHZZZQ", "NingXiaHuiZuZiZhiQu", 0)); + areas.add(new AreaModel(19, 0, "内蒙古自治区", "150000", "NMGZZQ", "NeiMengGuZiZhiQu", 0)); + areas.add(new AreaModel(20, 0, "新疆维吾尔自治区", "650000", "XJWWEZZQ", "XinJiangWeiWuErZiZhiQu", 0)); + areas.add(new AreaModel(21, 0, "江西省", "360000", "JXS", "JiangXiSheng", 0)); + areas.add(new AreaModel(22, 0, "浙江省", "330000", "ZJS", "ZheJiangSheng", 0)); + areas.add(new AreaModel(23, 0, "河北省", "130000", "HBS", "HeBeiSheng", 0)); + areas.add(new AreaModel(24, 0, "天津市", "120000", "TJS", "TianJinShi", 0)); + areas.add(new AreaModel(25, 0, "山西省", "140000", "SXS", "ShanXiSheng", 0)); + areas.add(new AreaModel(26, 0, "台湾省", "710000", "TWS", "TaiWanSheng", 0)); + areas.add(new AreaModel(27, 0, "甘肃省", "620000", "GSS", "GanSuSheng", 0)); + areas.add(new AreaModel(28, 0, "四川省", "510000", "SCS", "SiChuanSheng", 0)); + areas.add(new AreaModel(29, 0, "云南省", "530000", "YNS", "YunNanSheng", 0)); + areas.add(new AreaModel(30, 0, "北京市", "110000", "BJS", "BeiJingShi", 0)); + areas.add(new AreaModel(31, 0, "香港特别行政区", "810000", "XGTBXZQ", "XiangGangTeBieXingZhengQu", 0)); + areas.add(new AreaModel(32, 0, "澳门特别行政区", "820000", "AMTBXZQ", "AoMenTeBieXingZhengQu", 0)); + + areas.add(new AreaModel(100, 1, "深圳市", "440300", "SZS", "ShenZhenShi", 1)); + areas.add(new AreaModel(101, 1, "广州市", "440100", "GZS", "GuangZhouShi", 0)); + areas.add(new AreaModel(102, 1, "东莞市", "441900", "DGS", "DongGuanShi", 0)); + areas.add(new AreaModel(103, 2, "长沙市", "410005", "CSS", "ChangShaShi", 1)); + areas.add(new AreaModel(104, 2, "岳阳市", "414000", "YYS", "YueYangShi", 0)); + + areas.add(new AreaModel(1000, 100, "龙岗区", "518172", "LGQ", "LongGangQu", 0)); + areas.add(new AreaModel(1001, 100, "南山区", "518051", "NSQ", "NanShanQu", 0)); + areas.add(new AreaModel(1002, 100, "宝安区", "518101", "BAQ", "BaoAnQu", 0)); + areas.add(new AreaModel(1003, 100, "福田区", "518081", "FTQ", "FuTianQu", 0)); + areas.add(new AreaModel(1004, 103, "天心区", "410004", "TXQ", "TianXinQu", 0)); + areas.add(new AreaModel(1005, 103, "开福区", "410008", "KFQ", "KaiFuQu", 0)); + areas.add(new AreaModel(1006, 103, "芙蓉区", "410011", "FRQ", "FuRongQu", 0)); + areas.add(new AreaModel(1007, 103, "雨花区", "410011", "YHQ", "YuHuaQu", 0)); + } + private final static List columns = new ArrayList(); { columns.add(new UserTableColumn("用户ID", "userId")); @@ -348,6 +399,15 @@ public class DemoTableController extends BaseController return prefix + "/customView"; } + /** + * 异步加载表格树 + */ + @GetMapping("/asynTree") + public String asynTree() + { + return prefix + "/asynTree"; + } + /** * 表格其他操作 */ @@ -412,6 +472,84 @@ public class DemoTableController extends BaseController rspData.setTotal(userList.size()); return rspData; } + + /** + * 查询树表数据 + */ + @PostMapping("/tree/list") + @ResponseBody + public TableDataInfo treeList(AreaModel areaModel) + { + TableDataInfo rspData = new TableDataInfo(); + List areaList = new ArrayList(Arrays.asList(new AreaModel[areas.size()])); + // 默认查询条件 parentId 0 + Collections.copy(areaList, areas); + areaList.clear(); + if (StringUtils.isNotEmpty(areaModel.getAreaName())) + { + for (AreaModel area : areas) + { + if (area.getParentId() == 0 && area.getAreaName().equals(areaModel.getAreaName())) + { + areaList.add(area); + } + } + } + else + { + for (AreaModel area : areas) + { + if (area.getParentId() == 0) + { + areaList.add(area); + } + } + } + PageDomain pageDomain = TableSupport.buildPageRequest(); + Integer pageNum = (pageDomain.getPageNum() - 1) * 10; + Integer pageSize = pageDomain.getPageNum() * 10; + if (pageSize > areaList.size()) + { + pageSize = areaList.size(); + } + rspData.setRows(areaList.subList(pageNum, pageSize)); + rspData.setTotal(areaList.size()); + return rspData; + } + + /** + * 查询树表子节点数据 + */ + @PostMapping("/tree/listChild") + @ResponseBody + public List listChild(AreaModel areaModel) + { + List areaList = new ArrayList(Arrays.asList(new AreaModel[areas.size()])); + // 查询条件 parentId + Collections.copy(areaList, areas); + areaList.clear(); + if (StringUtils.isNotEmpty(areaModel.getAreaName())) + { + for (AreaModel area : areas) + { + if (area.getParentId().intValue() == areaModel.getParentId().intValue() && area.getAreaName().equals(areaModel.getAreaName())) + { + areaList.add(area); + } + } + } + else + { + for (AreaModel area : areas) + { + if (area.getParentId().intValue() == areaModel.getParentId().intValue()) + { + areaList.add(area); + } + } + } + return areaList; + } } class UserTableColumn @@ -597,3 +735,112 @@ class UserTableModel this.createTime = createTime; } } +class AreaModel +{ + /** 编号 */ + private Long id; + + /** 父编号 */ + private Long parentId; + + /** 区域名称 */ + private String areaName; + + /** 区域代码 */ + private String areaCode; + + /** 名称首字母 */ + private String simplePy; + + /** 名称全拼 */ + private String pinYin; + + /** 是否有子节点(0无 1有) */ + private Integer isTreeLeaf = 1; + + public AreaModel() + { + + } + + public AreaModel(int id, int parentId, String areaName, String areaCode, String simplePy, String pinYin, Integer isTreeLeaf) + { + this.id = Long.valueOf(id); + this.parentId = Long.valueOf(parentId); + this.areaName = areaName; + this.areaCode = areaCode; + this.simplePy = simplePy; + this.pinYin = pinYin; + this.isTreeLeaf = isTreeLeaf; + } + + public Long getId() + { + return id; + } + + public void setId(Long id) + { + this.id = id; + } + + public Long getParentId() + { + return parentId; + } + + public void setParentId(Long parentId) + { + this.parentId = parentId; + } + + public String getAreaName() + { + return areaName; + } + + public void setAreaName(String areaName) + { + this.areaName = areaName; + } + + public String getAreaCode() + { + return areaCode; + } + + public void setAreaCode(String areaCode) + { + this.areaCode = areaCode; + } + + public String getSimplePy() + { + return simplePy; + } + + public void setSimplePy(String simplePy) + { + this.simplePy = simplePy; + } + + public String getPinYin() + { + return pinYin; + } + + public void setPinYin(String pinYin) + { + this.pinYin = pinYin; + } + + public Integer getIsTreeLeaf() + { + return isTreeLeaf; + } + + public void setIsTreeLeaf(Integer isTreeLeaf) + { + this.isTreeLeaf = isTreeLeaf; + } +} diff --git a/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.js index bb3002d1..364b3455 100644 --- a/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.js +++ b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.js @@ -14,12 +14,14 @@ } // 如果是初始化组件 options = $.extend({}, $.fn.bootstrapTreeTable.defaults, options || {}); - target.hasSelectItem = false;// 是否有radio或checkbox - target.data_list = null; //用于缓存格式化后的数据-按父分组 - target.data_obj = null; //用于缓存格式化后的数据-按id存对象 - target.hiddenColumns = []; //用于存放被隐藏列的field - target.lastAjaxParams; //用户最后一次请求的参数 - target.isFixWidth=false; //是否有固定宽度 + target.hasSelectItem = false; // 是否有radio或checkbox + target.data_list = null; // 用于缓存格式化后的数据-按父分组 + target.data_obj = null; // 用于缓存格式化后的数据-按id存对象 + target.hiddenColumns = []; // 用于存放被隐藏列的field + target.lastAjaxParams; // 用户最后一次请求的参数 + target.isFixWidth=false; // 是否有固定宽度 + target.totalRows = 0; // 记录总数 + target.totalPages = 0; // 总页数 // 初始化 var init = function() { // 初始化容器 @@ -148,12 +150,30 @@ if (options.height) { $tbody.css("height", options.height); } + if (options.pagination) { + var $pagination = $('
'); + target.append($pagination); + } } // 初始化数据服务 var initServer = function(parms) { + if (options.pagination) { + if(parms == undefined || parms == null) { + parms = {}; + } + parms[options.parentCode] = options.rootIdValue; + } // 加载数据前先清空 target.data_list = {}; target.data_obj = {}; + // 设置请求分页参数 + if (options.pagination) { + var params = {}; + params.offset = options.pageSize * (options.pageNumber - 1); + params.limit = options.pageSize; + var curParams = { pageSize: params.limit, pageNum: params.offset / params.limit + 1 }; + parms = $.extend(curParams, parms); + } var $tbody = target.find("tbody"); // 添加加载loading var $loading = '
正在努力地加载数据中,请稍候……
' @@ -163,16 +183,15 @@ type: options.type, url: options.url, data: parms ? parms : options.ajaxParams, - dataType: "JSON", + dataType: "json", success: function(data, textStatus, jqXHR) { data = calculateObjectValue(options, options.responseHandler, [data], data); renderTable(data); - calculateObjectValue(options, options.onLoadSuccess, [data], data); }, error: function(xhr, textStatus) { var _errorMsg = '
' + xhr.responseText + '
' $tbody.html(_errorMsg); - }, + } }); } else { renderTable(options.data); @@ -180,6 +199,17 @@ } // 加载完数据后渲染表格 var renderTable = function(data) { + var list, totalPage = 0, currPage = 0; + if (options.pagination) { + list = data.rows; // 数据 + currPage = options.pageNumber; // 当前页 + totalPage = ~~((data.total - 1) / options.pageSize) + 1 // 总页数 + target.totalPages = totalPage; + target.totalRows = data.total; // 总记录数 + } else { + list = data; + } + data = list; var $tbody = target.find("tbody"); // 先清空 $tbody.html(""); @@ -196,22 +226,24 @@ if (rootNode) { $.each(rootNode, function(i, item) { var _child_row_id = "row_id_" + i - recursionNode(item, 1, _child_row_id, "row_root"); + recursionNode(item, 1, _child_row_id, "row_root", item[options.code]); }); } // 下边的操作主要是为了查询时让一些没有根节点的节点显示 $.each(data, function(i, item) { if (!item.isShow) { - var tr = renderRow(item, false, 1, "", ""); + var tr = renderRow(item, false, 1, "", "", options.pagination, item[options.code]); $tbody.append(tr); } }); - target.append($tbody); registerExpanderEvent(); registerRowClickEvent(); initHiddenColumns(); // 动态设置表头宽度 autoTheadWidth(); + if (options.pagination) { + initPagination(totalPage, currPage); + } // 移动端适配 var treetableTable = $(target).parent('.treetable-table'); var availableHeight = treetableTable.outerWidth(); @@ -229,6 +261,180 @@ $(target).attr('style','width:' + w +'px'); } } + // 初始化分页 + var initPagination = function (totalPage,currPage) { + var $pagination = target.find(".fixed-table-pagination"); + $pagination.empty(); + var html = []; + var pageFrom = (options.pageNumber - 1) * options.pageSize + 1; + var pageTo = options.pageNumber * options.pageSize; + if (pageTo > target.totalRows) { + pageTo = target.totalRows; + } + html.push('
'); + html.push('' + formatShowingRows(pageFrom, pageTo, target.totalRows) + ''); + var pageList = false; + $.each(options.pageList, function (i, page) { + if(target.totalRows > page){ + pageList = true; + } + }) + if(pageList){ + var _page_list = []; + _page_list.push(''); + _page_list.push(''); + _page_list.push(''); + _page_list.push(''); + _page_list.push(''); + html.push(formatRecordsPerPage(_page_list.join(''))) + html.push(''); + } + html.push('
'); + + if(totalPage > 1){ + html.push(''); + } + + $pagination.append(html.join('')); + + var $pageList = $pagination.find('.page-list a'); + var $pre = $pagination.find('.page-pre'); + var $next = $pagination.find('.page-next'); + var $number = $pagination.find('.page-number'); + var $first = $pagination.find('.page-first'); + var $last = $pagination.find('.page-last'); + $pre.off('click').on('click', $.proxy(onPagePre, this)); + $pageList.off('click').on('click', $.proxy(onPageListChange, this)); + $number.off('click').on('click', $.proxy(onPageNumber, this)); + $first.off('click').on('click', $.proxy(onPageFirst, this)); + $last.off('click').on('click', $.proxy(onPageLast, this)); + $next.off('click').on('click', $.proxy(onPageNext, this)); + } + var onPageListChange = function(event){ + var $this = $(event.currentTarget); + $this.parent().addClass('active').siblings().removeClass('active'); + var $pagination = target.find(".fixed-table-pagination"); + options.pageSize = $this.text().toUpperCase() === target.totalRows ? target.totalRows : + $this.text(); + + if(target.totalRows < options.pageSize * options.pageNumber){ + options.pageNumber = 1; + } + $pagination.find('.page-size').text(options.pageSize); + initServer(); + } + var onPagePre = function(event){ + if ((options.pageNumber - 1) === 0) { + options.pageNumber = target.totalPages; + } else { + options.pageNumber--; + } + initServer(); + } + var onPageNumber = function(event){ + if (options.pageNumber == $(event.currentTarget).text()) { + return; + } + options.pageNumber = $(event.currentTarget).text(); + initServer(); + } + var onPageFirst = function(event){ + options.pageNumber = 1; + initServer(); + } + var onPageLast = function (event) { + options.pageNumber = target.totalPages; + initServer(); + } + var onPageNext = function(event){ + if ((options.pageNumber + 1) > target.totalPages) { + options.pageNumber = 1; + } else { + options.pageNumber++; + } + initServer(); + } // 动态设置表头宽度 var autoTheadWidth = function(initFlag) { if(options.height>0){ @@ -269,6 +475,14 @@ $.each(data, function(index, item) { // 添加一个默认属性,用来判断当前节点有没有被显示 item.isShow = false; + // 是否分页 + if (options.pagination) { + if (item.isTreeLeaf == undefined || item.isTreeLeaf == null) { + item.isTreeLeaf = false; + } else { + item.isTreeLeaf = (item["isTreeLeaf"] == 1 ? true: false) || ((item["isTreeLeaf"] == 'true' || item["isTreeLeaf"] == true) ? true: false); + } + } // 顶级节点校验判断,兼容0,'0','',null var _defaultRootFlag = item[options.parentCode] == '0' || item[options.parentCode] == 0 || @@ -295,26 +509,26 @@ }); } // 递归获取子节点并且设置子节点 - var recursionNode = function(parentNode, lv, row_id, p_id) { + var recursionNode = function(parentNode, lv, row_id, p_id, k) { var $tbody = target.find("tbody"); var _ls = target.data_list["_n_" + parentNode[options.code]]; - var $tr = renderRow(parentNode, _ls ? true : false, lv, row_id, p_id); + var $tr = renderRow(parentNode, _ls ? true : false, lv, row_id, p_id, options.pagination, k); $tbody.append($tr); if (_ls) { $.each(_ls, function(i, item) { var _child_row_id = row_id + "_" + i - recursionNode(item, (lv + 1), _child_row_id, row_id) + recursionNode(item, (lv + 1), _child_row_id, row_id, item[options.code]) }); } }; // 绘制行 - var renderRow = function(item, isP, lv, row_id, p_id) { + var renderRow = function(item, isP, lv, row_id, p_id, _pagination, k) { // 标记已显示 item.isShow = true; item.row_id = row_id; item.p_id = p_id; item.lv = lv; - var $tr = $(''); + var $tr = $(''); var _icon = options.expanderCollapsedClass; if (options.expandAll) { $tr.css("display", "table"); @@ -329,6 +543,10 @@ $tr.css("display", "none"); } _icon = options.expanderCollapsedClass; + } else if (_pagination) { + if (item.isTreeLeaf) { + _icon = options.expanderCollapsedClass; + } } else { $tr.css("display", "none"); _icon = options.expanderCollapsedClass; @@ -375,12 +593,20 @@ $td.text(getItemField(item, column.field)); } if (options.expandColumn == index) { - if (!isP) { - $td.prepend('') - } else { - $td.prepend('') - } - for (var int = 0; int < (lv - 1); int++) { + if (_pagination) { + if (item["isTreeLeaf"]) { + $td.prepend(''); + } else { + $td.prepend('') + } + } else { + if (!isP) { + $td.prepend('') + } else { + $td.prepend(''); + } + } + for (var int = 0; int < (lv - options.expandColumn); int++) { $td.prepend('') } } @@ -440,6 +666,8 @@ $(this).addClass("treetable-selected"); } } + var _rowData = target.data_obj["id_" + $(this).data('id')]; + calculateObjectValue(options, options.onClickRow, [_rowData], _rowData); } }); } @@ -452,26 +680,76 @@ if (_isExpanded || _isCollapsed) { var tr = $(this).parent().parent(); var row_id = tr.attr("id"); - var _ls = target.find("tbody").find("tr[id^='" + row_id + "_']"); //下所有 - if (_isExpanded) { - $(this).removeClass(options.expanderExpandedClass); - $(this).addClass(options.expanderCollapsedClass); - if (_ls && _ls.length > 0) { - $.each(_ls, function(index, item) { - $(item).css("display", "none"); - }); - } + var _id = tr.attr("data-id"); + var _ls = target.find("tbody").find("tr[id^='" + row_id + "_']"); + if (!options.pagination) { + if (_isExpanded) { + $(this).removeClass(options.expanderExpandedClass); + $(this).addClass(options.expanderCollapsedClass); + if (_ls && _ls.length > 0) { + $.each(_ls, function(index, item) { + $(item).css("display", "none"); + }); + } + } else { + $(this).removeClass(options.expanderCollapsedClass); + $(this).addClass(options.expanderExpandedClass); + if (_ls && _ls.length > 0) { + $.each(_ls, function(index, item) { + var _p_icon = $("#" + $(item).attr("pid")).children().eq(options.expandColumn).find(".treetable-expander"); + if (_p_icon.hasClass(options.expanderExpandedClass)) { + $(item).css("display", "table"); + } + }); + } + } } else { - $(this).removeClass(options.expanderCollapsedClass); - $(this).addClass(options.expanderExpandedClass); + var _ls = target.find("tbody").find("tr[id^='" + row_id + "_']"); if (_ls && _ls.length > 0) { - $.each(_ls, function(index, item) { - // 父icon - var _p_icon = $("#" + $(item).attr("pid")).children().eq(options.expandColumn).find(".treetable-expander"); - if (_p_icon.hasClass(options.expanderExpandedClass)) { - $(item).css("display", "table"); + if (_isExpanded) { + $.each(_ls, function(index, item) { + $(item).css("display", "none"); + }); + } else { + $.each(_ls, function(index, item) { + var _icon = $(item).eq(options.expandColumn).find(".treetable-expander"); + if (_icon && _icon.hasClass(options.expanderExpandedClass)) { + $(item).css("display", "table"); + } else { + $(item).css("display", "table"); + } + }); + } + } else { + if (options.pagination) { + var parms = {}; + parms[options.parentCode] = _id; + if (options.dataUrl) { + $.ajax({ + type: options.type, + url: options.dataUrl, + data: parms ? parms : options.ajaxParams, + dataType: "json", + success: function(data, textStatus, jqXHR) { + $("#" + row_id + "_load").remove(); + var list = data; + data = list; + target.appendData(data) + }, + error: function(xhr, textStatus) { + var _errorMsg = '
' + xhr.responseText + '
' + $("#" + row_id).after(_errorMsg); + } + }); } - }); + } + } + if (_isExpanded) { + $(this).removeClass(options.expanderExpandedClass); + $(this).addClass(options.expanderCollapsedClass); + } else { + $(this).removeClass(options.expanderCollapsedClass); + $(this).addClass(options.expanderExpandedClass); } } } @@ -488,6 +766,9 @@ target.appendData = function(data) { // 下边的操作主要是为了查询时让一些没有根节点的节点显示 $.each(data, function(i, item) { + if (options.pagination) { + item.__nodes = (item["nodes"] == 1 ? true: false) || ((item["nodes"] == 'true' || item["nodes"] == true) ? true: false); + } var _data = target.data_obj["id_" + item[options.code]]; var _p_data = target.data_obj["id_" + item[options.parentCode]]; var _c_list = target.data_list["_n_" + item[options.parentCode]]; @@ -509,7 +790,7 @@ } _lv = _p_data.lv + 1; //如果有父 // 绘制行 - tr = renderRow(item, false, _lv, row_id, p_id); + tr = renderRow(item, true, _lv, row_id, p_id, options.pagination, item[options.code]); var _p_icon = $("#" + _p_data.row_id).children().eq(options.expandColumn).find(".treetable-expander"); var _isExpanded = _p_icon.hasClass(options.expanderExpandedClass); @@ -531,12 +812,11 @@ } else { // 计算父的同级下一行 var _tmp_ls = _p_data.row_id.split("_"); - var _p_next = _p_data.row_id.substring(0, _p_data.row_id.length - 1) + (parseInt(_tmp_ls[_tmp_ls.length - 1]) + 1); - // 画上 - $("#" + _p_next).before(tr); + var _p_next = _p_data.row_id.substring(0, _p_data.row_id.length - (_tmp_ls[_tmp_ls.length - 1] + "").length) + (parseInt(_tmp_ls[_tmp_ls.length - 1]) + 1); + $("#" + _p_data.row_id).after(tr); } } else { - tr = renderRow(item, false, _lv, row_id, p_id); + tr = renderRow(item, false, _lv, row_id, p_id, options.pagination, item[options.code]); if (_data) { $("#" + _data.row_id).before(tr); $("#" + _data.row_id).remove(); @@ -660,6 +940,12 @@ } return defaultValue; }; + var formatRecordsPerPage = function (pageNumber) { + return '每页显示 ' + pageNumber + ' 条记录'; + }; + var formatShowingRows = function (pageFrom, pageTo, totalRows) { + return '显示第 ' + pageFrom + ' 到第 ' + pageTo + ' 条记录,总共 ' + totalRows + ' 条记录。'; + }; // 初始化 init(); return target; @@ -732,12 +1018,12 @@ $.fn.bootstrapTreeTable.defaults = { code: 'code', // 选取记录返回的值,用于设置父子关系 parentCode: 'parentCode', // 用于设置父子关系 - rootIdValue: null, // 设置根节点id值----可指定根节点,默认为null,"",0,"0" + rootIdValue: 0, // 设置根节点id值----可指定根节点,默认为null,"",0,"0" data: null, // 构造table的数据集合 type: "GET", // 请求数据的ajax类型 url: null, // 请求数据的ajax的url ajaxParams: {}, // 请求数据的ajax的data属性 - expandColumn: 0, // 在哪一列上面显示展开按钮 + expandColumn: 1, // 在哪一列上面显示展开按钮 expandAll: false, // 是否全部展开 expandFirst: true, // 是否默认第一级展开--expandAll为false时生效 striped: false, // 是否各行渐变色 @@ -747,11 +1033,19 @@ columns: [], // 列 toolbar: null, // 顶部工具条 height: 0, // 表格高度 + pagination: false, // 是否显示分页 + dataUrl: null, // 加载子节点异步请求数据url + pageNumber: 1, // 当前页条数 + pageSize: 10, // 每页的记录行数 + onClickRow: null, // 单击某行事件 + pageList: [10, 25, 50], // 可供选择的每页的行数 showTitle: true, // 是否采用title属性显示字段内容(被formatter格式化的字段不会显示) showSearch: true, // 是否显示检索信息 showColumns: true, // 是否显示内容列下拉框 showRefresh: true, // 是否显示刷新按钮 - expanderExpandedClass: 'glyphicon glyphicon-chevron-down', // 展开的按钮的图标 + paginationPreText: '‹', + paginationNextText: '›', + expanderExpandedClass: 'glyphicon glyphicon-chevron-down', // 展开的按钮的图标 expanderCollapsedClass: 'glyphicon glyphicon-chevron-right', // 缩起的按钮的图标 responseHandler: function(res) { return false; diff --git a/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.min.js b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.min.js index 6055c243..243c7854 100644 --- a/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.min.js +++ b/ruoyi-admin/src/main/resources/static/ajax/libs/bootstrap-table/extensions/tree/bootstrap-table-tree.min.js @@ -2,4 +2,4 @@ * 基于bootstrapTreeTable/bootstrap-table-treegrid修改 * Copyright (c) 2019 ruoyi */ -!function(e){e.fn.bootstrapTreeTable=function(t,a){var n=e(this).data("bootstrap.tree.table");if(n=n?n:e(this),"string"==typeof t){return e.fn.bootstrapTreeTable.methods[t](n,a)}t=e.extend({},e.fn.bootstrapTreeTable.defaults,t||{}),n.hasSelectItem=!1,n.data_list=null,n.data_obj=null,n.hiddenColumns=[],n.lastAjaxParams,n.isFixWidth=!1;var l=function(){d(),i(),o(),r(),c(),h(!0),n.data("bootstrap.tree.table",n)},d=function(){var a=e("
"),l=e("
");n.before(a),a.append(l),l.append(n),n.addClass("table"),t.striped&&n.addClass("table-striped"),t.bordered&&n.addClass("table-bordered"),t.hover&&n.addClass("table-hover"),t.condensed&&n.addClass("table-condensed"),n.html("")},i=function(){var a=e("
");t.toolbar&&(e(t.toolbar).addClass("tool-left"),a.append(e(t.toolbar)));var l=e('
');if(a.append(l),n.parent().before(a),t.showSearch){var d=e('');l.append(d),v(d)}if(t.showRefresh){var i=e('');l.append(i),C(i)}if(t.showColumns){var s=e('
'),o=e('');e.each(t.columns,function(t,a){if("selectItem"!=a.field){var l=null;void 0===a.visible||1==a.visible?l=e('
  • "):(l=e('
  • "),n.hiddenColumns.push(a.field)),o.append(l)}}),s.append(o),l.append(s),x()}else{e.each(t.columns,function(e,t){"selectItem"!=t.field&&void 0!==t.visible&&1!=t.visible&&n.hiddenColumns.push(t.field)})}},s=function(){e.each(n.hiddenColumns,function(e,t){n.find("."+t+"_cls").hide()})},o=function(){var a=e("");e.each(t.columns,function(t,l){var d=null;0==t&&"selectItem"==l.field?(n.hasSelectItem=!0,d=e('')):d=e(''),!n.isFixWidth&&l.width&&(n.isFixWidth=l.width.indexOf("px")>-1?!0:!1),d.html(l.title),a.append(d)});var l=e('');l.append(a),n.append(l)},r=function(){var a=e('');n.append(a),t.height&&a.css("height",t.height)},c=function(a){n.data_list={},n.data_obj={};var l=n.find("tbody"),d='
    正在努力地加载数据中,请稍候……
    ';l.html(d),t.url?e.ajax({type:t.type,url:t.url,data:a?a:t.ajaxParams,dataType:"JSON",success:function(e,a,n){e=y(t,t.responseHandler,[e],e),p(e),y(t,t.onLoadSuccess,[e],e)},error:function(e,a){var n='
    '+e.responseText+"
    ";l.html(n)}}):p(t.data)},p=function(a){var l=n.find("tbody");if(l.html(""),!a||a.length<=0){var d='
    没有找到匹配的记录
    ';return void l.html(d)}f(a);var i=n.data_list._root_;i&&e.each(i,function(e,t){var a="row_id_"+e;u(t,1,a,"row_root")}),e.each(a,function(e,t){if(!t.isShow){var a=b(t,!1,1,"","");l.append(a)}}),n.append(l),_(),m(),s(),h();var o=e(n).parent(".treetable-table"),r=o.outerWidth();if(e.common.isMobile()||769>r){var c="width: "+r+"px;overflow: auto;position: relative;";o.attr("style",c);var p=0;e.each(t.columns,function(e,t){p+=0==e&&"selectItem"==t.field?36:200}),e(n).attr("style","width:"+p+"px")}},h=function(a){if(t.height>0){var l=n.find("thead"),d=n.find("tbody"),i=parseInt(n.css("border-left-width"))+parseInt(n.css("border-right-width"));if(l.css("width",d.children(":first").width()),a){var s=!1;e(window).resize(function(){s||(s=!0,setTimeout(function(){n.isFixWidth||d.css("width",n.parent().width()-i),l.css("width",d.children(":first").width()),s=!1},300))})}}},f=function(a){var l=t.rootIdValue?t.rootIdValue:null,d=[],i=!1;e.each(a,function(a,n){-1==e.inArray(n[t.parentCode],d)&&d.push(n[t.parentCode])}),e.each(a,function(a,s){s.isShow=!1;var o="0"==s[t.parentCode]||0==s[t.parentCode]||null==s[t.parentCode]||""==s[t.parentCode]||e.inArray(s[t.code],d)>0&&!i;!s[t.parentCode]||(l?s[t.parentCode]==t.rootIdValue:o)?(i=!0,n.data_list._root_||(n.data_list._root_=[]),n.data_obj["id_"+s[t.code]]||n.data_list._root_.push(s)):(n.data_list["_n_"+s[t.parentCode]]||(n.data_list["_n_"+s[t.parentCode]]=[]),n.data_obj["id_"+s[t.code]]||n.data_list["_n_"+s[t.parentCode]].push(s)),n.data_obj["id_"+s[t.code]]=s})},u=function(a,l,d,i){var s=n.find("tbody"),o=n.data_list["_n_"+a[t.code]],r=b(a,o?!0:!1,l,d,i);s.append(r),o&&e.each(o,function(e,t){var a=d+"_"+e;u(t,l+1,a,d)})},b=function(a,l,d,i,s){a.isShow=!0,a.row_id=i,a.p_id=s,a.lv=d;var o=e(''),r=t.expanderCollapsedClass;return t.expandAll?(o.css("display","table"),r=t.expanderExpandedClass):1==d?(o.css("display","table"),r=t.expandFirst?t.expanderExpandedClass:t.expanderCollapsedClass):2==d?(t.expandFirst?o.css("display","table"):o.css("display","none"),r=t.expanderCollapsedClass):(o.css("display","none"),r=t.expanderCollapsedClass),e.each(t.columns,function(i,s){if("selectItem"==s.field){n.hasSelectItem=!0;var c=e('');if(s.radio){var p=e('');c.append(p)}if(s.checkbox){var p=e('');c.append(p)}o.append(c)}else{var c=e('');if(s.width&&c.css("width",s.width+(s.widthUnit?s.widthUnit:"px")),s.align&&c.css("text-align",s.align),t.expandColumn==i&&c.css("text-align","left"),s.valign&&c.css("vertical-align",s.valign),t.showTitle&&c.addClass("ellipsis"),s.formatter?c.html(s.formatter.call(this,w(a,s.field),a,i)):(t.showTitle&&c.attr("title",a[s.field]),c.text(w(a,s.field))),t.expandColumn==i){l?c.prepend(''):c.prepend('');for(var h=0;d-1>h;h++){c.prepend('')}}o.append(c)}}),o},v=function(t){e(t).off("click").on("click",function(){e(".search-collapse").slideToggle()})},C=function(t){e(t).off("click").on("click",function(){n.refresh()})},x=function(){e(".bootstrap-tree-table .treetable-bars .columns label input").off("click").on("click",function(){var t=e(this);t.prop("checked")?n.showColumn(e(this).val()):n.hideColumn(e(this).val())})},m=function(){n.find("tbody").find("tr").unbind(),n.find("tbody").find("tr").click(function(){if(n.hasSelectItem){var t=e(this).find("input[name='select_item']");"radio"==t.attr("type")?(t.prop("checked",!0),n.find("tbody").find("tr").removeClass("treetable-selected"),e(this).addClass("treetable-selected")):"checkbox"==t.attr("type")?t.prop("checked")?(t.prop("checked",!0),n.find("tbody").find("tr").removeClass("treetable-selected"),e(this).addClass("treetable-selected")):(t.prop("checked",!1),n.find("tbody").find("tr").removeClass("treetable-selected")):t.prop("checked")?(t.prop("checked",!1),e(this).removeClass("treetable-selected")):(t.prop("checked",!0),e(this).addClass("treetable-selected"))}})},_=function(){n.find("tbody").find("tr").find(".treetable-expander").unbind(),n.find("tbody").find("tr").find(".treetable-expander").click(function(){var a=e(this).hasClass(t.expanderExpandedClass),l=e(this).hasClass(t.expanderCollapsedClass);if(a||l){var d=e(this).parent().parent(),i=d.attr("id"),s=n.find("tbody").find("tr[id^='"+i+"_']");a?(e(this).removeClass(t.expanderExpandedClass),e(this).addClass(t.expanderCollapsedClass),s&&s.length>0&&e.each(s,function(t,a){e(a).css("display","none")})):(e(this).removeClass(t.expanderCollapsedClass),e(this).addClass(t.expanderExpandedClass),s&&s.length>0&&e.each(s,function(a,n){var l=e("#"+e(n).attr("pid")).children().eq(t.expandColumn).find(".treetable-expander");l.hasClass(t.expanderExpandedClass)&&e(n).css("display","table")}))}})};n.refresh=function(e){e&&(n.lastAjaxParams=e),c(n.lastAjaxParams)},n.appendData=function(a){e.each(a,function(a,l){var d,i=n.data_obj["id_"+l[t.code]],s=n.data_obj["id_"+l[t.parentCode]],o=n.data_list["_n_"+l[t.parentCode]],r="",c="",p=1;if(i&&i.row_id&&""!=i.row_id&&(r=i.row_id),s){if(c=s.row_id,""==r){var h=0;o&&o.length>0&&(h=o.length),r=s.row_id+"_"+h}p=s.lv+1,d=b(l,!1,p,r,c);var u=e("#"+s.row_id).children().eq(t.expandColumn).find(".treetable-expander"),v=u.hasClass(t.expanderExpandedClass),C=u.hasClass(t.expanderCollapsedClass);if(v||C?v&&d.css("display","table"):u.addClass(t.expanderCollapsedClass),i){e("#"+i.row_id).before(d),e("#"+i.row_id).remove()}else{var x=s.row_id.split("_"),m=s.row_id.substring(0,s.row_id.length-1)+(parseInt(x[x.length-1])+1);e("#"+m).before(d)}}else{if(d=b(l,!1,p,r,c),i){e("#"+i.row_id).before(d),e("#"+i.row_id).remove()}else{var _=n.find("tbody");_.append(d)}}l.isShow=!0,f([l])}),_(),m(),s()},n.toggleRow=function(t){var a=n.data_obj["id_"+t],l=e("#"+a.row_id).find(".treetable-expander");l.trigger("click")},n.expandRow=function(t){var a=n.data_obj["id_"+t],l=e("#"+a.row_id).find(".treetable-expander"),d=l.hasClass(n.options.expanderCollapsedClass);d&&l.trigger("click")},n.collapseRow=function(t){var a=n.data_obj["id_"+t],l=e("#"+a.row_id).find(".treetable-expander"),d=l.hasClass(n.options.expanderExpandedClass);d&&l.trigger("click")},n.expandAll=function(){n.find("tbody").find("tr").find(".treetable-expander").each(function(a,n){var l=e(n).hasClass(t.expanderCollapsedClass);l&&e(n).trigger("click")})},n.collapseAll=function(){n.find("tbody").find("tr").find(".treetable-expander").each(function(a,n){var l=e(n).hasClass(t.expanderExpandedClass);l&&e(n).trigger("click")})},n.showColumn=function(a,l){var d=e.inArray(a,n.hiddenColumns);if(d>-1&&n.hiddenColumns.splice(d,1),n.find("."+a+"_cls").show(),l&&t.showColumns){var i=e(".bootstrap-tree-table .treetable-bars .columns label").find("input[value='"+a+"']");i.prop("checked","checked")}},n.hideColumn=function(a,l){if(n.hiddenColumns.push(a),n.find("."+a+"_cls").hide(),l&&t.showColumns){var d=e(".bootstrap-tree-table .treetable-bars .columns label").find("input[value='"+a+"']");d.prop("checked","")}};var w=function(e,t){var a=e;if("string"!=typeof t||e.hasOwnProperty(t)){return e[t]}var n=t.split(".");for(var l in n){a=a&&a[n[l]]}return a},y=function(t,a,n,l){var d=a;if("string"==typeof a){var i=a.split(".");i.length>1?(d=window,e.each(i,function(e,t){d=d[t]})):d=window[a]}return"object"==typeof d?d:"function"==typeof d?d.apply(t,n):!d&&"string"==typeof a&&sprintf.apply(this,[a].concat(n))?sprintf.apply(this,[a].concat(n)):l};return l(),n},e.fn.bootstrapTreeTable.methods={getSelections:function(t,a){var n=t.find("tbody").find("tr").find("input[name='select_item']:checked"),l=[];if("radio"==n.attr("type")){var d=t.data_obj["id_"+n.val()];l.push(d)}else{n.each(function(a,n){var d=t.data_obj["id_"+e(n).val()];l.push(d)})}return l},refresh:function(e,t){t?e.refresh(t):e.refresh()},appendData:function(e,t){t&&e.appendData(t)},toggleRow:function(e,t){e.toggleRow(t)},expandRow:function(e,t){e.expandRow(t)},collapseRow:function(e,t){e.collapseRow(t)},expandAll:function(e){e.expandAll()},collapseAll:function(e){e.collapseAll()},showColumn:function(e,t){e.showColumn(t,!0)},hideColumn:function(e,t){e.hideColumn(t,!0)}},e.fn.bootstrapTreeTable.defaults={code:"code",parentCode:"parentCode",rootIdValue:null,data:null,type:"GET",url:null,ajaxParams:{},expandColumn:0,expandAll:!1,expandFirst:!0,striped:!1,bordered:!1,hover:!0,condensed:!1,columns:[],toolbar:null,height:0,showTitle:!0,showSearch:!0,showColumns:!0,showRefresh:!0,expanderExpandedClass:"glyphicon glyphicon-chevron-down",expanderCollapsedClass:"glyphicon glyphicon-chevron-right",responseHandler:function(e){return !1},onLoadSuccess:function(e){return !1}}}(jQuery); \ No newline at end of file +!function(e){e.fn.bootstrapTreeTable=function(a,t){var n=e(this).data("bootstrap.tree.table");if(n=n?n:e(this),"string"==typeof a){return e.fn.bootstrapTreeTable.methods[a](n,t)}a=e.extend({},e.fn.bootstrapTreeTable.defaults,a||{}),n.hasSelectItem=!1,n.data_list=null,n.data_obj=null,n.hiddenColumns=[],n.lastAjaxParams,n.isFixWidth=!1,n.totalRows=0,n.totalPages=0;var i=function(){s(),l(),o(),r(),p(),C(!0),n.data("bootstrap.tree.table",n)},s=function(){var t=e("
    "),i=e("
    ");n.before(t),t.append(i),i.append(n),n.addClass("table"),a.striped&&n.addClass("table-striped"),a.bordered&&n.addClass("table-bordered"),a.hover&&n.addClass("table-hover"),a.condensed&&n.addClass("table-condensed"),n.html("")},l=function(){var t=e("
    ");a.toolbar&&(e(a.toolbar).addClass("tool-left"),t.append(e(a.toolbar)));var i=e('
    ');if(t.append(i),n.parent().before(t),a.showSearch){var s=e('');i.append(s),_(s)}if(a.showRefresh){var l=e('');i.append(l),k(l)}if(a.showColumns){var d=e('
    '),o=e('');e.each(a.columns,function(a,t){if("selectItem"!=t.field){var i=null;void 0===t.visible||1==t.visible?i=e('
  • "):(i=e('
  • "),n.hiddenColumns.push(t.field)),o.append(i)}}),d.append(o),i.append(d),j()}else{e.each(a.columns,function(e,a){"selectItem"!=a.field&&void 0!==a.visible&&1!=a.visible&&n.hiddenColumns.push(a.field)})}},d=function(){e.each(n.hiddenColumns,function(e,a){n.find("."+a+"_cls").hide()})},o=function(){var t=e("");e.each(a.columns,function(a,i){var s=null;0==a&&"selectItem"==i.field?(n.hasSelectItem=!0,s=e('')):s=e(''),!n.isFixWidth&&i.width&&(n.isFixWidth=i.width.indexOf("px")>-1?!0:!1),s.html(i.title),t.append(s)});var i=e('');i.append(t),n.append(i)},r=function(){var t=e('');if(n.append(t),a.height&&t.css("height",a.height),a.pagination){var i=e('
    ');n.append(i)}},p=function(t){if(a.pagination&&((void 0==t||null==t)&&(t={}),t[a.parentCode]=a.rootIdValue),n.data_list={},n.data_obj={},a.pagination){var i={};i.offset=a.pageSize*(a.pageNumber-1),i.limit=a.pageSize;var s={pageSize:i.limit,pageNum:i.offset/i.limit+1};t=e.extend(s,t)}var l=n.find("tbody"),d='
    正在努力地加载数据中,请稍候……
    ';l.html(d),a.url?e.ajax({type:a.type,url:a.url,data:t?t:a.ajaxParams,dataType:"json",success:function(e,t,n){e=N(a,a.responseHandler,[e],e),c(e)},error:function(e,t){var n='
    '+e.responseText+"
    ";l.html(n)}}):c(a.data)},c=function(t){var i,s=0,l=0;a.pagination?(i=t.rows,l=a.pageNumber,s=~~((t.total-1)/a.pageSize)+1,n.totalPages=s,n.totalRows=t.total):i=t,t=i;var o=n.find("tbody");if(o.html(""),!t||t.length<=0){var r='
    没有找到匹配的记录
    ';return void o.html(r)}m(t);var p=n.data_list._root_;p&&e.each(p,function(e,t){var n="row_id_"+e;w(t,1,n,"row_root",t[a.code])}),e.each(t,function(e,t){if(!t.isShow){var n=y(t,!1,1,"","",a.pagination,t[a.code]);o.append(n)}}),R(),T(),d(),C(),a.pagination&&u(s,l);var c=e(n).parent(".treetable-table"),f=c.outerWidth();if(e.common.isMobile()||769>f){var h="width: "+f+"px;overflow: auto;position: relative;";c.attr("style",h);var b=0;e.each(a.columns,function(e,a){b+=0==e&&"selectItem"==a.field?36:200}),e(n).attr("style","width:"+b+"px")}},u=function(t,i){var s=n.find(".fixed-table-pagination");s.empty();var l=[],d=(a.pageNumber-1)*a.pageSize+1,o=a.pageNumber*a.pageSize;o>n.totalRows&&(o=n.totalRows),l.push('
    '),l.push(''+z(d,o,n.totalRows)+"");var r=!1;if(e.each(a.pageList,function(e,a){n.totalRows>a&&(r=!0)}),r){var p=[];p.push(''),p.push(''),p.push('"),p.push('"),p.push(""),l.push(I(p.join(""))),l.push("")}if(l.push("
    "),t>1){l.push('")}s.append(l.join(""));var m=s.find(".page-list a"),w=s.find(".page-pre"),y=s.find(".page-next"),_=s.find(".page-number"),k=s.find(".page-first"),j=s.find(".page-last");w.off("click").on("click",e.proxy(h,this)),m.off("click").on("click",e.proxy(f,this)),_.off("click").on("click",e.proxy(b,this)),k.off("click").on("click",e.proxy(v,this)),j.off("click").on("click",e.proxy(g,this)),y.off("click").on("click",e.proxy(x,this))},f=function(t){var i=e(t.currentTarget);i.parent().addClass("active").siblings().removeClass("active");var s=n.find(".fixed-table-pagination");a.pageSize=i.text().toUpperCase()===n.totalRows?n.totalRows:+i.text(),n.totalRowsn.totalPages?a.pageNumber=1:a.pageNumber++,p()},C=function(t){if(a.height>0){var i=n.find("thead"),s=n.find("tbody"),l=parseInt(n.css("border-left-width"))+parseInt(n.css("border-right-width"));if(i.css("width",s.children(":first").width()),t){var d=!1;e(window).resize(function(){d||(d=!0,setTimeout(function(){n.isFixWidth||s.css("width",n.parent().width()-l),i.css("width",s.children(":first").width()),d=!1},300))})}}},m=function(t){var i=a.rootIdValue?a.rootIdValue:null,s=[],l=!1;e.each(t,function(t,n){-1==e.inArray(n[a.parentCode],s)&&s.push(n[a.parentCode])}),e.each(t,function(t,d){d.isShow=!1,a.pagination&&(void 0==d.isTreeLeaf||null==d.isTreeLeaf?d.isTreeLeaf=!1:d.isTreeLeaf=!((1==d.isTreeLeaf?0:1)&&("true"==d.isTreeLeaf||1==d.isTreeLeaf?0:1)));var o="0"==d[a.parentCode]||0==d[a.parentCode]||null==d[a.parentCode]||""==d[a.parentCode]||e.inArray(d[a.code],s)>0&&!l;!d[a.parentCode]||(i?d[a.parentCode]==a.rootIdValue:o)?(l=!0,n.data_list._root_||(n.data_list._root_=[]),n.data_obj["id_"+d[a.code]]||n.data_list._root_.push(d)):(n.data_list["_n_"+d[a.parentCode]]||(n.data_list["_n_"+d[a.parentCode]]=[]),n.data_obj["id_"+d[a.code]]||n.data_list["_n_"+d[a.parentCode]].push(d)),n.data_obj["id_"+d[a.code]]=d})},w=function(t,i,s,l,d){var o=n.find("tbody"),r=n.data_list["_n_"+t[a.code]],p=y(t,r?!0:!1,i,s,l,a.pagination,d);o.append(p),r&&e.each(r,function(e,t){var n=s+"_"+e;w(t,i+1,n,s,t[a.code])})},y=function(t,i,s,l,d,o,r){t.isShow=!0,t.row_id=l,t.p_id=d,t.lv=s;var p=e(''),c=a.expanderCollapsedClass;return a.expandAll?(p.css("display","table"),c=a.expanderExpandedClass):1==s?(p.css("display","table"),c=a.expandFirst?a.expanderExpandedClass:a.expanderCollapsedClass):2==s?(a.expandFirst?p.css("display","table"):p.css("display","none"),c=a.expanderCollapsedClass):o?t.isTreeLeaf&&(c=a.expanderCollapsedClass):(p.css("display","none"),c=a.expanderCollapsedClass),e.each(a.columns,function(l,d){if("selectItem"==d.field){n.hasSelectItem=!0;var r=e('');if(d.radio){var u=e('');r.append(u)}if(d.checkbox){var u=e('');r.append(u)}p.append(r)}else{var r=e('');if(d.width&&r.css("width",d.width+(d.widthUnit?d.widthUnit:"px")),d.align&&r.css("text-align",d.align),a.expandColumn==l&&r.css("text-align","left"),d.valign&&r.css("vertical-align",d.valign),a.showTitle&&r.addClass("ellipsis"),d.formatter?r.html(d.formatter.call(this,S(t,d.field),t,l)):(a.showTitle&&r.attr("title",t[d.field]),r.text(S(t,d.field))),a.expandColumn==l){o?t.isTreeLeaf?r.prepend(''):r.prepend(''):i?r.prepend(''):r.prepend('');for(var f=0;f')}}p.append(r)}}),p},_=function(a){e(a).off("click").on("click",function(){e(".search-collapse").slideToggle()})},k=function(a){e(a).off("click").on("click",function(){n.refresh()})},j=function(){e(".bootstrap-tree-table .treetable-bars .columns label input").off("click").on("click",function(){var a=e(this);a.prop("checked")?n.showColumn(e(this).val()):n.hideColumn(e(this).val())})},T=function(){n.find("tbody").find("tr").unbind(),n.find("tbody").find("tr").click(function(){if(n.hasSelectItem){var t=e(this).find("input[name='select_item']");"radio"==t.attr("type")?(t.prop("checked",!0),n.find("tbody").find("tr").removeClass("treetable-selected"),e(this).addClass("treetable-selected")):"checkbox"==t.attr("type")?t.prop("checked")?(t.prop("checked",!0),n.find("tbody").find("tr").removeClass("treetable-selected"),e(this).addClass("treetable-selected")):(t.prop("checked",!1),n.find("tbody").find("tr").removeClass("treetable-selected")):t.prop("checked")?(t.prop("checked",!1),e(this).removeClass("treetable-selected")):(t.prop("checked",!0),e(this).addClass("treetable-selected"));var i=n.data_obj["id_"+e(this).data("id")];N(a,a.onClickRow,[i],i)}})},R=function(){n.find("tbody").find("tr").find(".treetable-expander").unbind(),n.find("tbody").find("tr").find(".treetable-expander").click(function(){var t=e(this).hasClass(a.expanderExpandedClass),i=e(this).hasClass(a.expanderCollapsedClass);if(t||i){var s=e(this).parent().parent(),l=s.attr("id"),d=s.attr("data-id"),o=n.find("tbody").find("tr[id^='"+l+"_']");if(a.pagination){var o=n.find("tbody").find("tr[id^='"+l+"_']");if(o&&o.length>0){t?e.each(o,function(a,t){e(t).css("display","none")}):e.each(o,function(t,n){var i=e(n).eq(a.expandColumn).find(".treetable-expander");i&&i.hasClass(a.expanderExpandedClass)?e(n).css("display","table"):e(n).css("display","table")})}else{if(a.pagination){var r={};r[a.parentCode]=d,a.dataUrl&&e.ajax({type:a.type,url:a.dataUrl,data:r?r:a.ajaxParams,dataType:"json",success:function(a,t,i){e("#"+l+"_load").remove();var s=a;a=s,n.appendData(a)},error:function(t,n){var i='
    '+t.responseText+"
    ";e("#"+l).after(i)}})}}t?(e(this).removeClass(a.expanderExpandedClass),e(this).addClass(a.expanderCollapsedClass)):(e(this).removeClass(a.expanderCollapsedClass),e(this).addClass(a.expanderExpandedClass))}else{t?(e(this).removeClass(a.expanderExpandedClass),e(this).addClass(a.expanderCollapsedClass),o&&o.length>0&&e.each(o,function(a,t){e(t).css("display","none")})):(e(this).removeClass(a.expanderCollapsedClass),e(this).addClass(a.expanderExpandedClass),o&&o.length>0&&e.each(o,function(t,n){var i=e("#"+e(n).attr("pid")).children().eq(a.expandColumn).find(".treetable-expander");i.hasClass(a.expanderExpandedClass)&&e(n).css("display","table")}))}}})};n.refresh=function(e){e&&(n.lastAjaxParams=e),p(n.lastAjaxParams)},n.appendData=function(t){e.each(t,function(t,i){a.pagination&&(i.__nodes=!((1==i.nodes?0:1)&&("true"==i.nodes||1==i.nodes?0:1)));var s,l=n.data_obj["id_"+i[a.code]],d=n.data_obj["id_"+i[a.parentCode]],o=n.data_list["_n_"+i[a.parentCode]],r="",p="",c=1;if(l&&l.row_id&&""!=l.row_id&&(r=l.row_id),d){if(p=d.row_id,""==r){var u=0;o&&o.length>0&&(u=o.length),r=d.row_id+"_"+u}c=d.lv+1,s=y(i,!0,c,r,p,a.pagination,i[a.code]);var f=e("#"+d.row_id).children().eq(a.expandColumn).find(".treetable-expander"),h=f.hasClass(a.expanderExpandedClass),b=f.hasClass(a.expanderCollapsedClass);if(h||b?h&&s.css("display","table"):f.addClass(a.expanderCollapsedClass),l){e("#"+l.row_id).before(s),e("#"+l.row_id).remove()}else{var v=d.row_id.split("_");d.row_id.substring(0,d.row_id.length-(v[v.length-1]+"").length)+(parseInt(v[v.length-1])+1);e("#"+d.row_id).after(s)}}else{if(s=y(i,!1,c,r,p,a.pagination,i[a.code]),l){e("#"+l.row_id).before(s),e("#"+l.row_id).remove()}else{var g=n.find("tbody");g.append(s)}}i.isShow=!0,m([i])}),R(),T(),d()},n.toggleRow=function(a){var t=n.data_obj["id_"+a],i=e("#"+t.row_id).find(".treetable-expander");i.trigger("click")},n.expandRow=function(a){var t=n.data_obj["id_"+a],i=e("#"+t.row_id).find(".treetable-expander"),s=i.hasClass(n.options.expanderCollapsedClass);s&&i.trigger("click")},n.collapseRow=function(a){var t=n.data_obj["id_"+a],i=e("#"+t.row_id).find(".treetable-expander"),s=i.hasClass(n.options.expanderExpandedClass);s&&i.trigger("click")},n.expandAll=function(){n.find("tbody").find("tr").find(".treetable-expander").each(function(t,n){var i=e(n).hasClass(a.expanderCollapsedClass);i&&e(n).trigger("click")})},n.collapseAll=function(){n.find("tbody").find("tr").find(".treetable-expander").each(function(t,n){var i=e(n).hasClass(a.expanderExpandedClass);i&&e(n).trigger("click")})},n.showColumn=function(t,i){var s=e.inArray(t,n.hiddenColumns);if(s>-1&&n.hiddenColumns.splice(s,1),n.find("."+t+"_cls").show(),i&&a.showColumns){var l=e(".bootstrap-tree-table .treetable-bars .columns label").find("input[value='"+t+"']");l.prop("checked","checked")}},n.hideColumn=function(t,i){if(n.hiddenColumns.push(t),n.find("."+t+"_cls").hide(),i&&a.showColumns){var s=e(".bootstrap-tree-table .treetable-bars .columns label").find("input[value='"+t+"']");s.prop("checked","")}};var S=function(e,a){var t=e;if("string"!=typeof a||e.hasOwnProperty(a)){return e[a]}var n=a.split(".");for(var i in n){t=t&&t[n[i]]}return t},N=function(a,t,n,i){var s=t;if("string"==typeof t){var l=t.split(".");l.length>1?(s=window,e.each(l,function(e,a){s=s[a]})):s=window[t]}return"object"==typeof s?s:"function"==typeof s?s.apply(a,n):!s&&"string"==typeof t&&sprintf.apply(this,[t].concat(n))?sprintf.apply(this,[t].concat(n)):i},I=function(e){return"每页显示 "+e+" 条记录"},z=function(e,a,t){return"显示第 "+e+" 到第 "+a+" 条记录,总共 "+t+" 条记录。"};return i(),n},e.fn.bootstrapTreeTable.methods={getSelections:function(a,t){var n=a.find("tbody").find("tr").find("input[name='select_item']:checked"),i=[];if("radio"==n.attr("type")){var s=a.data_obj["id_"+n.val()];i.push(s)}else{n.each(function(t,n){var s=a.data_obj["id_"+e(n).val()];i.push(s)})}return i},refresh:function(e,a){a?e.refresh(a):e.refresh()},appendData:function(e,a){a&&e.appendData(a)},toggleRow:function(e,a){e.toggleRow(a)},expandRow:function(e,a){e.expandRow(a)},collapseRow:function(e,a){e.collapseRow(a)},expandAll:function(e){e.expandAll()},collapseAll:function(e){e.collapseAll()},showColumn:function(e,a){e.showColumn(a,!0)},hideColumn:function(e,a){e.hideColumn(a,!0)}},e.fn.bootstrapTreeTable.defaults={code:"code",parentCode:"parentCode",rootIdValue:0,data:null,type:"GET",url:null,ajaxParams:{},expandColumn:1,expandAll:!1,expandFirst:!0,striped:!1,bordered:!1,hover:!0,condensed:!1,columns:[],toolbar:null,height:0,pagination:!1,dataUrl:null,pageNumber:1,pageSize:10,onClickRow:null,pageList:[10,25,50],showTitle:!0,showSearch:!0,showColumns:!0,showRefresh:!0,paginationPreText:"‹",paginationNextText:"›",expanderExpandedClass:"glyphicon glyphicon-chevron-down",expanderCollapsedClass:"glyphicon glyphicon-chevron-right",responseHandler:function(e){return !1},onLoadSuccess:function(e){return !1}}}(jQuery); \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css b/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css index 1a1a05f5..a77e9d25 100644 --- a/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css +++ b/ruoyi-admin/src/main/resources/static/ruoyi/css/ry-ui.css @@ -948,6 +948,7 @@ table.rc-table-resizing thead > th > a { .bootstrap-tree-table .table{border-bottom: 0px solid #e7eaec!important;} .bootstrap-tree-table .table-bordered .treetable-thead th {border-left: 1px solid #e7eaec!important;} .bootstrap-tree-table .table-bordered .treetable-tbody td {border-right: 1px solid #e7eaec!important;} +.bootstrap-tree-table .fixed-table-pagination .pagination-detail {margin-top: 10px;margin-bottom: 10px;} /** 首页样式 **/ .ax_close_max { diff --git a/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js index a9660b7c..382330b3 100644 --- a/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js +++ b/ruoyi-admin/src/main/resources/static/ruoyi/js/ry-ui.js @@ -588,10 +588,13 @@ var table = { id: "bootstrap-tree-table", type: 1, // 0 代表bootstrapTable 1代表bootstrapTreeTable height: 0, - rootIdValue: null, + rootIdValue: 0, ajaxParams: {}, toolbar: "toolbar", striped: false, + pagination: false, + pageSize: 10, + pageList: [10, 25, 50], expandColumn: 1, showSearch: true, showRefresh: true, @@ -612,6 +615,10 @@ var table = { ajaxParams: options.ajaxParams, // 请求数据的ajax的data属性 rootIdValue: options.rootIdValue, // 设置指定根节点id值 height: options.height, // 表格树的高度 + pagination: options.pagination, // 是否显示分页 + dataUrl: options.dataUrl, // 加载子节点异步请求数据url + pageSize: options.pageSize, // 每页的记录行数 + pageList: options.pageList, // 可供选择的每页的行数 expandColumn: options.expandColumn, // 在哪一列上面显示展开按钮 striped: options.striped, // 是否显示行间隔色 bordered: options.bordered, // 是否显示边框 @@ -622,6 +629,7 @@ var table = { expandAll: options.expandAll, // 是否全部展开 expandFirst: options.expandFirst, // 是否默认第一级展开--expandAll为false时生效 columns: options.columns, // 显示列信息(*) + onClickRow: options.onClickRow, // 单击某行事件 responseHandler: $.treeTable.responseHandler, // 在加载服务器发送来的数据之前处理函数 onLoadSuccess: $.treeTable.onLoadSuccess // 当所有数据被加载时触发处理函数 }); diff --git a/ruoyi-admin/src/main/resources/templates/demo/table/asynTree.html b/ruoyi-admin/src/main/resources/templates/demo/table/asynTree.html new file mode 100644 index 00000000..90e71f8e --- /dev/null +++ b/ruoyi-admin/src/main/resources/templates/demo/table/asynTree.html @@ -0,0 +1,85 @@ + + + + + + +
    +
    +
    +
    +
    + +
    +
    +
    + + +
    +
    +
    +
    +
    + + + + \ No newline at end of file diff --git a/ruoyi-admin/src/main/resources/templates/index-topnav.html b/ruoyi-admin/src/main/resources/templates/index-topnav.html index 4ed15254..d183a654 100644 --- a/ruoyi-admin/src/main/resources/templates/index-topnav.html +++ b/ruoyi-admin/src/main/resources/templates/index-topnav.html @@ -146,6 +146,7 @@
  • 表格打印配置
  • 表格动态列
  • 自定义视图分页
  • +
  • 异步加载表格树
  • 表格其他操作
  • diff --git a/ruoyi-admin/src/main/resources/templates/index.html b/ruoyi-admin/src/main/resources/templates/index.html index f8433c61..ddbbf383 100644 --- a/ruoyi-admin/src/main/resources/templates/index.html +++ b/ruoyi-admin/src/main/resources/templates/index.html @@ -127,6 +127,7 @@
  • 表格打印配置
  • 表格动态列
  • 自定义视图分页
  • +
  • 异步加载表格树
  • 表格其他操作
  • diff --git a/ruoyi-generator/src/main/resources/vm/html/list-tree.html.vm b/ruoyi-generator/src/main/resources/vm/html/list-tree.html.vm index d9398029..dcb91e83 100644 --- a/ruoyi-generator/src/main/resources/vm/html/list-tree.html.vm +++ b/ruoyi-generator/src/main/resources/vm/html/list-tree.html.vm @@ -103,7 +103,6 @@ createUrl: prefix + "/add/{id}", updateUrl: prefix + "/edit/{id}", removeUrl: prefix + "/remove/{id}", - exportUrl: prefix + "/export", modalName: "${functionName}", columns: [{ field: 'selectItem',