Spring Boot + Vue实现二级菜单

从数据读取二级菜单减少了前太代码的改动,更方便回护人员维护

首先DAO层:

这里DAO层的方法分两步,一是先查询出一级菜单,然后根据一级菜单的id查询出一级菜单所对应的的子菜单,这样思路就更清晰了。

	//查询一级菜单
	@Query(value = "SELECT * FROM lead WHERE fid=0",nativeQuery = true)
	List<Map<String, Object>> findByFid();
	//按一级菜单id查询一级菜单下的子菜单
	@Query(value = "SELECT * FROM lead WHERE fid=:fid",nativeQuery = true)
	List<Map<String, Object>> findByFidList(Integer fid);
	

Service层:

	public List<Map<String, Object>> findByFid(){
		return leadDAO.findByFid();//调用DAO层findByFid方法
	}
	
	public List<Map<String, Object>> findByFidList(Integer fid){
		return leadDAO.findByFidList(fid);//调用DAO层findByFidList方法
	}

Controller层:

这里利用两次循环,将查询结果放到集合里面
第一层for循环,调用findByFid方法,查询出第一层菜单的id,赋给findByFidList方法,查询出所对应的子菜单,然后用第二层for循环赋值到集合里,

@RequestMapping("findByFid")
	@ResponseBody
	public List<Map<String, Object>> findBy(){
		//return leadService.findByFid();
		List<Map<String, Object>> leadData = leadService.findByFid();
		List<Map<String, Object>> dataList =new ArrayList<Map<String,Object>>();
		for (int i = 0; i < leadData.size(); i++) {
			Map<String, Object> one = new  HashMap<>();
			one.put("lname", leadData.get(i).get("lname"));
			one.put("lhref",leadData.get(i).get("lhref"));
			List<Map<String, Object>> thisLead=leadService.findByFidList(Integer.parseInt(leadData.get(i).get("lid").toString()));
			List<Map<String, Object>> date = new ArrayList<Map<String,Object>>();
			for (int j = 0; j < thisLead.size(); j++) {
				Map<String, Object> mp = new HashMap<String, Object>();
				mp.put("name", thisLead.get(j).get("lname"));
				mp.put("lhref",thisLead.get(j).get("lhref"));
				date.add(mp);
			}
			one.put("dataList", date);
			dataList.add(one);
		}
		return dataList;
	}

这里要注意,findByFidList()方法,里面传值传的是第一层菜单的id,而不是第一层菜单的fid,因为在数据库里子菜单的fid字段是对应着第一层菜单的id的

数据库:
在这里插入图片描述
html代码:
因为集合维度高于二维,所以这里循环的时候也要用双层for循环才可以

<li class="fl" v-for="lists in list">
	<span class="shouye"></span>
	<a v-bind:href="lists.lhref" class="action">{{lists.lname}}</a>
	<div class="nav-news">
		<a v-bind:href="son.lhref" v-for="son in lists.dataList">{{son.name}}</a>
	</div>     
</li>

vue:

var vm = new Vue({
	el : "#app",
	data : {
		lead:[],
		list:[]
	},
	mounted(){
		this.findByAll();
	},
	methods : {
		findByAll:function(){
			$.post("/lead/findByFid",{},function(data){
				//alert(JSON.stringify(data))
				var len = data.length;
				for(var i=0;i<len;i++){
					vm.list.push(data[i]);
				}
			})
		},
		
		
	}
});

效果:
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值