返回树形数据

三种方式:

1.查询所有数据后,自行封装树形数据

步骤如下:

1.查询所有数据,展示server层数据

这里是输入最高父节点,以及县级type

 @Override
    public List<CommonRegion> getTree() {
      //查询所有数据
     List<CommonRegion> allRegion = commonRegionDao.allList();
   

      List<CommonRegion> regionTreeList = buildTree(allRegion,"500181403","1400");

        return regionTreeList;
    }
 /**
     * 构造父子级
     *
     * @param allRegion
     * @param pid
     * @return
      type分类:省:1100 市1300 区1400
     */
     
    public static List<CommonRegion> buildTree(List<CommonRegion> allRegion,String pid,String type) {

        List<CommonRegion> regionTreeList = new ArrayList<>();
        //获取省


            if (type.equals("1100")) {
                List<CommonRegion> regionList = allRegion.stream().filter(region -> region.getRegionType().equals("1100")).collect(Collectors.toList());
                for (CommonRegion region : regionList) {
                    CommonRegion regionTree = new CommonRegion();
                    regionTree.setRegionId(region.getRegionId());
                    regionTree.setRegionName(region.getRegionName());
                    regionTree.setParRegionId(region.getParRegionId());
                    regionTreeList.add(regionTree);
                }
            } else if (type.equals("1300")) {
                //获取省市
                List<CommonRegion> regionList = allRegion.stream().filter(region -> region.getRegionType().equals("1100") || region.getRegionType().equals("1300")).collect(Collectors.toList());
                for (CommonRegion region : regionList) {
                    CommonRegion regionTree = new CommonRegion();
                    if (Objects.equals(pid, region.getParRegionId())) {
                        regionTree.setRegionId(region.getRegionId());
                        regionTree.setRegionName(region.getRegionName());
                        regionTree.setChildren(buildTree(allRegion,region.getRegionId(),type));
                        regionTreeList.add(regionTree);
                    }
                }

            } else {
                //获取省市区
                for (CommonRegion region : allRegion) {
                    CommonRegion regionTree = new CommonRegion();
                    if (Objects.equals(pid, region.getParRegionId())) {
                        regionTree.setRegionId(region.getRegionId());
                        regionTree.setRegionName(region.getRegionName());
                        regionTree.setChildren(buildTree(allRegion,region.getRegionId(),type));
                        regionTreeList.add(regionTree);
                    }
                }
            }

        return regionTreeList;
    }

2.在mybatis之中循环调用sql语句(注意:会循环调用sql语句及数据库,不适用于数据量太大的时候)

<resultMap id="getSjcpInfoList" type="com.zqzt.pm.model.SupManager.Prodtype">
        <id column="prod_type_id" property="prodTypeId" jdbcType="INTEGER"  />
        <result column="prod_type_name" property="prodTypeName" jdbcType="VARCHAR"  />
        <result column="up_prod_type_id" property="upProdTypeId" jdbcType="INTEGER"  />

        <result column="up_prod_type_name" property="upProdTypeName" jdbcType="VARCHAR"  />
        <collection property="children" ofType="com.zqzt.pm.model.SupManager.Prodtype" column="prod_type_id" select="selectListTree2"/>
    </resultMap>

    <select id="selectListTree1" resultMap="getSjcpInfoList">
        select prod_type_id,prod_type_name ,up_prod_type_id,up_prod_type_name
        from dim_prod_type where up_prod_type_id =-1
           and status_cd='1000'
        </select>

    <select id="selectListTree2" resultMap="getSjcpInfoList">
      select prod_type_id,prod_type_name ,up_prod_type_id,up_prod_type_name
        from dim_prod_type where up_prod_type_id =#{id}
           and status_cd='1000'
    </select>

3.

1.在实体类中创建List<>children

2.查询所有数据

3.分装树形

    /**
     * 遍历组织,获取树形结构
     *
     * @param list
     * @return
     */
    private List<Group> toTreeList(List<Group> list) {
        List<Group> nodeList = new ArrayList<>();
        if (list == null || list.isEmpty()) {
            return nodeList;
        }
        for (Group node1 : list) {
            node1.setName(node1.getName());
            if (!parseLevel(list, node1)) {
                nodeList.add(node1);
            }
        }
        return nodeList;
    }

    /**
     * 组织层级转化
     *
     * @param list
     * @param node1
     * @return
     */
    private boolean parseLevel(List<Group> list, Group node1) {
        boolean mark = false;
        for (Group node2 : list) {
            if (node1.getParentId() != null && node1.getParentId().equals(node2.getRowId())) {
                mark = true;
                if (node2.getChildren() == null)
                    node2.setChildren(new ArrayList<>());
                node2.getChildren().add(node1);
                break;
            }
        }
        return mark;
    }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
A:要展示后端返回树形数据,可以使用Vue的递归组件(recursive component)来实现。递归组件通过嵌套自身的方式来展示树形结构,这种方式非常适合展示树形数据。 首先,需要定义一个递归组件,并为递归组件传入数据。在组件内部,可以通过v-for指令遍历子节点,并通过递归组件的形式来展示子节点。具体的操作如下: 1. 定义递归组件: ``` <template> <div class="item"> {{ item.name }} <div v-if="item.children"> <tree-item v-for="child in item.children" :key="child.id" :item="child"></tree-item> </div> </div> </template> <script> export default { name: 'TreeItem', props: { item: { type: Object, required: true } }, components: { TreeItem: this } } </script> ``` 在递归组件的定义中,首先展示当前节点的名称,然后通过v-if指令判断当前节点是否有子节点,如果有子节点,则通过循环遍历子节点,并将每个子节点传递给递归组件,以便展示子节点的信息。 2. 在父组件中使用递归组件: ``` <template> <div> <tree-item v-for="item in treeData" :key="item.id" :item="item"></tree-item> </div> </template> <script> import TreeItem from './TreeItem.vue' export default { name: 'Tree', components: { TreeItem }, data () { return { treeData: [] } }, mounted () { // 从后端获取树形数据 axios.get('/api/getTreeData').then(res => { this.treeData = res.data }).catch(err => console.log(err)) } } </script> ``` 在父组件中,先定义一个数据属性treeData来存储从后端获取的树形数据。在mounted钩子函数中通过axios库向后端发送请求,获取树形数据,并将获取到的数据存储到treeData中。然后,通过v-for指令遍历每个节点,并将节点传递给递归组件进行展示。 通过这种方式,就可以从后端获取树形数据,并在前端展示出来。同时,由于使用了Vue的递归组件,这种方式还具有很好的可维护性,可以方便地增加或修改组件的结构和样式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值