实现三级菜单联动综合代码

39 篇文章 0 订阅
38 篇文章 0 订阅
实现三级菜单联动综合代码

实现点击一级菜单弹出二级菜单,选择二级菜单弹出三级菜单的功能

1、html代码

       <div class="selectedSort"><b>您当前选择的商品类别是:</b><i id="selectedSort"></i></div>
	<div class="wareSort clearfix">
		<ul id="sort1"></ul>
		<ul id="sort2" style="display: none;"></ul>
		<ul id="sort3" style="display: none;"></ul>
	</div>
2、css代码

        /*选择商品分类标题*/
	.selectedSort { 
		padding: 5px 15px; 
		border: 1px solid #DDDDDD;
		background-color: #FFFFFF;
		color: #666666;
		overflow: hidden;
	}
	.selectedSort b { 
		font-weight: bold;
	 }
	.selectedSort i font {
		 font-family: simsun;
	}
	/*列表*/
	.wareSort {
		border: 1px solid #ddd; 
		position: relative;
		padding-left: 10px;
		padding-top: 10px;
		background-color: #f6f6f6;
	 }
	.wareSort ul { 
		list-style-type:none;
		float: left;
		border: 1px solid #ddd;
		width: 200px;
		max-height: 225px;
		overflow: auto;
		padding: 10px;
		margin-right: 10px;
		box-sizing: border-box;
		background-color: #fff;
	}
	.wareSort ul li a {
		display: block; 
		padding: 0 10px;
		border: 1px solid #fff;
		line-height: 28px; 
		overflow: hidden;
		white-space: nowrap;
		text-overflow: ellipsis;
		box-sizing: border-box;
	}
	.wareSort ul li.active a {
		background-color: #C5DFED;
	}

3、js代码

(function($){
	var addShopType = function () {
		
		// 商品分类
		var expressP, expressC, expressD, areaCont;  //类名
		var province = "";   //一级分类list
		var city = "";       //二级分类list
		var district = "";   //三级分类list
		var flag = false;   //目录选择的判断条件
				
		return {
			
			/**
			 * 默认参数
			 */
			defaultOption : {
				gc_id : '', 	//分类id
				type_id : '', 	//类型id
			},
			
			/**
			 * 初始化
			 */
			init : function () {
											
				//初始化规格选项
				addShopType.initSpec();							
			},					
		
			/**
			 * 初始化分类数据
			 */
			initClassData: function(){
				
				commonAjax.ajaxSubmit("shop/shopType/getGoodClass.do",'POST', null, function(result){
					if(result.success){
						var data = result.resData;
						data=JSON.parse(data);
						province = data.one;
						city = data.two;
						district = data.three;
						/*初始化一级目录*/
						areaCont = "";
						for (var i=0; i<province.length; i++) {
							areaCont += '<li onClick="addShopType.selectP('+i+ ',' + province[i].gc_id+ ',' + province[i].type_id+');"><a href="javascript:void(0)">' + province[i].gc_name + '</a></li>';
						}
						$("#sort1").html(areaCont);
					}else{
						layer.msg('系统错误,请联系管理员!');
					}
				});
			},			
			
			/*选择一级目录*/
			selectP:function(p,id,type_id) {
				areaCont = "";
				for (var j=0; j<city[p].length; j++) {
					areaCont += '<li onClick="addShopType.selectC(' + p + ',' + j + ','+city[p][j].gc_id+',' + city[p][j].type_id+');"><a href="javascript:void(0)">' + city[p][j].gc_name + '</a></li>';
				}
				if(areaCont.length > 0){
					$("#sort2").html(areaCont).show();
					flag = false;
				}else{
					$("#sort2").hide();
					addShopType.defaultOption.gc_id = id;
					addShopType.defaultOption.type_id = type_id;
					flag = true;
				}
				$("#sort3").hide();
				$("#sort1 li").eq(p).addClass("active").siblings("li").removeClass("active");
				expressP = province[p].gc_name;
				$("#selectedSort").html(expressP);
				$("#releaseBtn").removeAttr("disabled");
			},
			
			/*选择二级目录*/
			selectC:function (p,c,id,type_id) {
				areaCont = "";
				expressC = "";
				for (var k=0; k<district[p][c].length; k++) {
					areaCont += '<li onClick="addShopType.selectD(' + p + ',' + c + ',' + k +',' + district[p][c][k].gc_id +',' + district[p][c][k].type_id+ ');"><a href="javascript:void(0)">' + district[p][c][k].gc_name + '</a></li>';
				}
				if(areaCont.length > 0){
					$("#sort3").html(areaCont).show();
					flag = false;
				}else{
					$("#sort3").hide();
					addShopType.defaultOption.gc_id = id;
					addShopType.defaultOption.type_id = type_id;
					flag = true;
				}
				$("#sort2 li").eq(c).addClass("active").siblings("li").removeClass("active");
				expressC = expressP + "/" + city[p][c].gc_name;
				$("#selectedSort").html(expressC);
			},
			
			/*选择三级目录*/
			selectD:function(p,c,d,id,type_id) {
				$("#sort3 li").eq(d).addClass("active").siblings("li").removeClass("active");
				expressD = expressC + "/" + district[p][c][d].gc_name;
				$("#selectedSort").html(expressD);
				if(expressD.length > 0){
					flag = true;
					addShopType.defaultOption.gc_id = id;
					addShopType.defaultOption.type_id = type_id;
				}else{
					flag = false;
				}
			},		
		}
	}();
	window.addShopType = addShopType;
})(jQuery);

4、java代码

       mybatis

     

        @Override
	public ResultVO getGoodClass() throws Exception {
		
		log.info(GlobalContract.LOG_BEGIN);
		ResultVO resultVO = null;
		JSONObject json = new JSONObject();
		Map<String, String> map = new HashMap<String, String>();
		
		map.put("type", "1");
		List<ShopGoodClassRVO> list = shopConfigDao.getGoodClass(map);
		int listSize = list.size();
		int listSize2 = 0;
		int listSize3 = 0;
		if(listSize > 0){
			List<ShopGoodClassRVO> list3 = null;
			StringBuffer oneIds = new StringBuffer();
			for (int i = 0; i < listSize; i++) {
				oneIds.append(",").append(list.get(i).getGc_id());
			}
			map.remove("type");
			map.put("gc_parent_id", oneIds.toString().replaceFirst(",", ""));
			
			// 获取第二级
			List<ShopGoodClassRVO> list2 = shopConfigDao.getGoodClass(map);
			listSize2 = list2.size();
			if(listSize2 > 0){
				StringBuffer twoIds = new StringBuffer();
				for (int i = 0; i < listSize2; i++) {
					twoIds.append(",").append(list2.get(i).getGc_id());
				}
				map.put("gc_parent_id", twoIds.toString().replaceFirst(",", ""));
				
				// 获取第三级
				list3 = shopConfigDao.getGoodClass(map);
				listSize3 = list3.size();
			}
			
			
			List<ShopGoodClassRVO> one = new ArrayList<ShopGoodClassRVO>();
			List<ShopGoodClassRVO> two1 = null;
			List<List<ShopGoodClassRVO>> two = new ArrayList<List<ShopGoodClassRVO>>();
			List<ShopGoodClassRVO> three2 = null;
			List<List<ShopGoodClassRVO>> three1 = null;
			List<List<List<ShopGoodClassRVO>>> three = new ArrayList<List<List<ShopGoodClassRVO>>>();
			// 一级
			for (int i = 0; i < listSize; i++) {
				one.add(list.get(i));
				two1 = new ArrayList<ShopGoodClassRVO>();
				three1 = new ArrayList<List<ShopGoodClassRVO>>();
				// 二级
				for (int j = 0; j < listSize2; j++) {
					three2 = new ArrayList<ShopGoodClassRVO>();
					if(list.get(i).getGc_id().equals(list2.get(j).getGc_parent_id())){
						two1.add(list2.get(j));
						// 三级
						for (int k = 0; k < listSize3; k++) {
							if(list3.get(k).getGc_parent_id().equals(list2.get(j).getGc_id()) 
									&& list2.get(j).getGc_parent_id().equals(list.get(i).getGc_id())){
								three2.add(list3.get(k));
							}
						}
						three1.add(three2);
					}
				}
				two.add(two1);
				three.add(three1);
			}
			
			json.put("one", one);
			json.put("two", two);
			json.put("three", three);
		}
		
		resultVO = new ResultVO();
		resultVO.setResData(json);
		
		log.info(GlobalContract.LOG_END);
		return resultVO;
	}

       ibatis

        @Override
	public ResultVO getGoodClass() throws Exception {
		
		log.info(GlobalContract.LOG_BEGIN);
		ResultVO resultVO = null;
		JSONObject json = new JSONObject();
		Map<String, Object> map = new HashMap<String, Object>();
		
		//用来查询主菜单
		map.put("type", "1");
		List<ShopGoodClassRVO> list = shopTypeDao.getGoodClass(map);
		
		//主类型集合长度
		int listSize = list.size();
		
		//二级类型集合长度
		int listSize2 = 0;
		
		//三级类型集合长度
		int listSize3 = 0;
		if(listSize > 0){
			List<ShopGoodClassRVO> list3 = null;
			map.remove("type");
			map.put("gc_parent_id", list);
			
			// 获取第二级类型
			List<ShopGoodClassRVO> list2 = shopTypeDao.getGoodClass(map);
			listSize2 = list2.size();
			if(listSize2 > 0){
				
				//获取三级类型
				map.put("gc_parent_id", list2);
				list3 = shopTypeDao.getGoodClass(map);
				listSize3 = list3.size();
			}
			
			//定义需要返回的一级商品类型集合
			List<ShopGoodClassRVO> one = new ArrayList<ShopGoodClassRVO>();
			
			//定义需要返回的二级商品类型集合
			List<List<ShopGoodClassRVO>> two = new ArrayList<List<ShopGoodClassRVO>>();
			List<ShopGoodClassRVO> two1 = null;
			
			//定义需要返回的三级商品类型集合
			List<List<List<ShopGoodClassRVO>>> three = new ArrayList<List<List<ShopGoodClassRVO>>>();
			List<List<ShopGoodClassRVO>> three1 = null;
			List<ShopGoodClassRVO> three2 = null;
			
			// 一级
			for (int i = 0; i < listSize; i++) {
				one.add(list.get(i));
				two1 = new ArrayList<ShopGoodClassRVO>();
				three1 = new ArrayList<List<ShopGoodClassRVO>>();
				// 二级
				for (int j = 0; j < listSize2; j++) {
					three2 = new ArrayList<ShopGoodClassRVO>();
					if(list.get(i).getGc_id().equals(list2.get(j).getGc_parent_id())){
						two1.add(list2.get(j));
						// 三级
						for (int k = 0; k < listSize3; k++) {
							if(list3.get(k).getGc_parent_id().equals(list2.get(j).getGc_id()) 
									&& list2.get(j).getGc_parent_id().equals(list.get(i).getGc_id())){
								three2.add(list3.get(k));
							}
						}
						three1.add(three2);
					}
					
				}
				two.add(two1);
				three.add(three1);
			}
			
			//存入json
			json.put("one", one);
			json.put("two", two);
			json.put("three", three);
		}
		
		resultVO = new ResultVO();
		resultVO.setResData(json.toString());
		
		log.info(GlobalContract.LOG_END);
		return resultVO;
	}

5、sql语句

        mybatis

        <!-- 获取商品分类 -->
	<select id="getGoodClass" resultMap="shopGoodClassRVO">
		select t.gc_id,
		       t.gc_name,
		       t.type_id,
		       t.type_name,
		       t.store_id,
		       t.gc_parent_id,
		       t.gc_sort,
		       t.gc_show,
		       t.gc_keyword,
		       t.creatorid,
		       t.createdate,
		       t.updateid,
		       t.updatedate,
		       t.delflag
		  from T_SHOP_GOODS_CLASS t
		  where t.delflag = '0'
		  <if test="type == '1'.toString()">
		  	AND t.gc_parent_id is null
		  </if>
		  <if test="gc_parent_id != null and gc_parent_id != ''">
		  	AND t.gc_parent_id in (${gc_parent_id}) 
		  </if>
		  order by t.gc_sort,t.gc_id
	</select>

        ibatis

        <!-- 获取商品分类 -->
	<select id="getGoodClass" parameterClass="java.util.Map" resultClass="shopGoodClassRVO">
		<![CDATA[
		select t.gc_id,
		       t.gc_name,
		       t.type_id,
		       t.type_name,
		       t.store_id,
		       t.gc_parent_id,
		       t.gc_sort,
		       t.gc_show,
		       t.gc_keyword,
		       t.creatorid,
		       t.createdate,
		       t.updateid,
		       t.updatedate,
		       t.delflag
		  from T_SHOP_GOODS_CLASS t
		  where t.delflag = '0'
		   ]]>
		  <dynamic>
			<isEqual property="type" compareValue="1" prepend="and">
				t.gc_parent_id is null
			</isEqual>
			<isNotEmpty prepend="and" property="gc_parent_id">
		   		t.gc_parent_id in 
		   		<iterate property="gc_parent_id" open="(" conjunction="," close=")">  
				<!--每一个NameSpace实例的name属性通过namespaces[].name获取-->  
			    #gc_parent_id[].gc_id#  
				</iterate> 
		 	</isNotEmpty>
		 	</dynamic>
		   <![CDATA[
		  order by t.gc_sort,t.gc_id
		   ]]>
	</select>


  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值