java三级联动返回树状省市区三级json,前端el-tree显示

java三级联动返回树状省市区三级json,前端el-tree显示

java实现

前端使用element-plusel-tree组件,返回的json每一级要统一名称

@RequestMapping("/define")
public class SomeController {

    @Autowired
    ProvinceRepository provinceRepository;

    @Autowired
    CityRepository cityRepository;

    @Autowired
    AreaRepository areaRepository;

    @RequestMapping("/returnTree")
    public List<Map<String, Object>> returnTree() {
        // 获取第一层
        List<Province> maps1 = provinceRepository.getAllProvince();
        List<Map<String, Object>> listMap = new ArrayList<>();
        System.out.println(maps1);
        for (Province item1 : maps1) {
            Map<String,Object> map1 = new HashMap<>();
            String pid = item1.getPid();
            System.out.println(pid);
            map1.put("id", pid);
            map1.put("name", item1.getProvinceName());
            // 获取第二层
            List<City> maps2 = cityRepository.getByPid(pid);
            System.out.println(maps2.size());
            List<Map<String,Object>> listMap2 = new ArrayList<>();
            for (City item2 : maps2) {
                Map<String,Object> map2 = new HashMap<>();
                String cid = item2.getCid();
                map2.put("id", cid);
                map2.put("name", item2.getCityName());
                listMap2.add(map2);
                // 获取第三层
                List<Area> maps3 = areaRepository.getByCid(cid);
                List<Map<String,Object>> listMap3 = new ArrayList<>();
                System.out.println(maps3.size());
                for (Area item3 : maps3) {
                    Map<String,Object> map3 = new HashMap<>();
                    map3.put("id",item3.getAid());
                    map3.put("name",item3.getAreaName());
                    listMap3.add(map3);
                }
                map2.put("children",listMap3);
            }
            map1.put("children",listMap2);
            listMap.add(map1);
        }
        return listMap;
    }

}

例子中orm使用jpa

public interface ProvinceRepository extends JpaRepository<Province,String> {
    @Query("from Province ")
    List<Province> getAllProvince();
}
public interface CityRepository extends JpaRepository<City,String> {
    @Query("from City where pid = ?1")
    List<City> getByPid(String pid);
}
public interface AreaRepository extends JpaRepository<Area,String> {
    @Query("from Area where cid = ?1")
    List<Area> getByCid(String cid);
}

前端vue读取并显示

<template>
  <div class="aside">
    <el-button @click="getData()">getData</el-button>
    <el-tree :data="treeData" :props="defaultProps" @node-click="handleNodeClick" />
  </div>
</template>

<script setup lang="ts" name="Tree">
import { ElTree } from 'element-plus';
// 通过getCurrentInstance方法获取上下文,这里的proxy就相当于this
const { proxy } = getCurrentInstance() as any;

interface Tree {
  id: number,
  label: string
  children?: Tree[]
}

const defaultProps = {
  children: 'children',
  label: 'label',
}

const treeData = ref<Tree[]>([]);

//请求
const getData = function () {
  proxy.axios.get('/define/returnTree').then(function (res: any) {
    console.log(res.data);
    treeData.value = res.data;
  })
}

const handleNodeClick = (data: Tree) => {
  console.log(data)
}

onMounted(() => {
  getData();
})

</script>

<style lang = "scss" scoped>

</style>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

anjushi_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值