jQuery的treeTable不能自动排序么,后台处理解决方案

 先描述下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,应该有更好的解决方案的,见仁见智;

猜你喜欢

转载自blog.csdn.net/SELECT_BIN/article/details/81231394