1. 程式人生 > >遞迴組裝Cascader 級聯選擇器和Tree 樹形控制元件結構的資料

遞迴組裝Cascader 級聯選擇器和Tree 樹形控制元件結構的資料

以商品分類表為例,重點看分類ID和父分類ID

    public List<Map<String,Object>> getGoodsCategoryTree() {
        //1.獲取所有商品分類,條件:category_id!=0(0為頂級選單的父類ID)和disabled=0(刪除標記為正常)
        List<GoodsCategoryEntity> goodsCategoryList = this.baseMapper.selectList(new EntityWrapper<GoodsCategoryEntity>()
                .ne("category_id", 0)
                .eq("disabled", 0));
        //2.呼叫生成tree結構資料的方法,引數是所有商品分類和頂級選單父類ID
        List<Map<String,Object>> categoryTree = categoryTreeHandle(goodsCategoryList, 0);
        return categoryTree;
    }
    private List<Map<String,Object>> categoryTreeHandle(List<GoodsCategoryEntity> categoryEntityList, int pid) {
        List<Map<String,Object>> resultList = new ArrayList<>();

        //獲取頂級元素集合
        Integer parentId;
        for (GoodsCategoryEntity goodsCategory : categoryEntityList) {
            parentId = goodsCategory.getParentCategoryId();
            if (pid == parentId) {
                Map map = new HashMap();
                map.put("label", goodsCategory.getCategoryName());
                map.put("value", goodsCategory.getCategoryId());
                resultList.add(map);
            }
        }

        //獲取每個頂層元素的子資料集合
        for (Map map : resultList) {
            int value = Integer.parseInt(map.get("value").toString());
            List<Map<String,Object>> temp = categoryTreeHandle(categoryEntityList, value);
            if (temp.size() > 0) {
                map.put("children", temp);
            }
        }
        return resultList;
    }

頁面接收到的資料效果

主要是應用遞迴遍歷出父節點下的所有子節點