先描述下treeTable搭建:
HTML代码:
<table id="sys_menu_tab" class="table table-striped table-bordered table-condensed">
<tr/>
</table>
js代码:
/**
* 加载菜单管理Table
*/
function syncLoadMenuInfo() {
var url = WEB_ROOT + "/menu/queryMenuListsInfo";
$.gridLoading({message: "正在查询数据"});
$.ajax({
url: url,
dataType: "json",
async: true,
dataType: "html",
success: function (data) {
$.gridUnLoading({message: "正在查询数据"});
$("#sys_menu_tab").empty();
$("#sys_menu_tab").html(data);
$("#sys_menu_tab").treeTable({
expandLevel: 4,
});
}
});
}
controller代码:
/**
* 加载菜单管理树
* @param model
* @param menu
* @return
*/
@RequestMapping(value = "/queryMenuListsInfo")
public String queryMenuListsInfo(Model model, TdSysMenu menu) {
PageResponse menuInfoPage = menuApi.getMenuList(menu);
setBackPage(menuInfoPage, menu);
model.addAttribute("pageInfo",menuInfoPage);
return "menu/tabdiv/menuManagerListTab";
}
这样造成的后果就是子节点不再对应的父节点下面,查了下没查到treeTable怎么自动排序,于是在后台处理了:
/**
* 获取菜单列表
*
* @param dto
* @return
*
*/
@Override
public PageResponse getMenuList(TdSysMenu dto) {
List<TdSysMenu> list = menuService.getMenuList(dto);
//对数据排序 start -----treeTable不知道怎么排序,如果可以的话,在前端用js排序比这个效率要高,后面可以优化
List<TdSysMenu> listSorted = new LinkedList<>();
if (ListUtils.emptyIfNull(list).size() == 0)
return new PageResponse(dto.totalCount(), list);
for (TdSysMenu o:list){
sortNodeInfo(o,list,listSorted);
}
//对数据排序 end
return new PageResponse(dto.totalCount(), listSorted);
}
/**
* 对节点信息排序
*/
private void sortNodeInfo(TdSysMenu o,List<TdSysMenu> list,List<TdSysMenu> listSorted) {
if (listSorted.lastIndexOf(o) > 0) {
return;
}
listSorted.add(o);
String p1 = o.getMenuCode();
if (StringUtil.isBlank(p1)) {
return;
}
for (TdSysMenu m : list) {
if (p1.equalsIgnoreCase(m.getParentMenuCode())) {
sortNodeInfo(m, list, listSorted);
}
}
}
只是暂时解决了,感觉很low,应该有更好的解决方案的,见仁见智;