尚筹网:菜单维护之增加/更新

生成按钮组

/atcrowdfunding-admin-1-webui/src/main/webapp/script/my-menu.js


// 专门生成按钮组的函数
function generateBtnGrp(treeNode) {
	
	// 获取当前节点的id(HTML中li标签的id)
	var treeNodeId = treeNode.tId;
	
	// 获取当前节点在数据库中的id值
	// Menu实体类中的属性,都可以通过treeNode以“.属性名”的方式直接访问
	var menuId = treeNode.id;
	
	// 组装按钮组所在的span的id
	var btnGrpSpanId = treeNodeId + "_btnGrp";
	
	// 生成span标签对应的jQuery对象
	var $span = $("<span id='"+btnGrpSpanId+"'></span>");
	
	// 获取当前节点的level值
	var level = treeNode.level;
	
	// 声明三种按钮
	var addBtn = "<a οnclick='showAddModal(this)' id='"+menuId+"' class='btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' title='添加子节点'>&nbsp;&nbsp;<i class='fa fa-fw fa-plus rbg'></i></a>";
	var editBtn = "<a οnclick='showEditModal(this)' id='"+menuId+"' class='btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' title='编辑节点'>&nbsp;&nbsp;<i class='fa fa-fw fa-edit rbg'></i></a>";
	var removeBtn = "<a οnclick='showConfirmModal(this)' id='"+menuId+"' class='btn btn-info dropdown-toggle btn-xs' style='margin-left:10px;padding-top:0px;' title='删除节点'>&nbsp;&nbsp;<i class='fa fa-fw fa-times rbg'></i></a>";
	
	// 根据level进行判断
	if(level == 0) {
		$span.append(addBtn);
	}
	
	if(level == 1) {
		
		if(treeNode.children.length > 0) {
			
			$span.append(addBtn+" "+editBtn);
			
		} else {
			
			$span.append(addBtn+" "+editBtn+" "+removeBtn);
			
		}
		
	}
	
	if(level == 2) {
		
		$span.append(editBtn+" "+removeBtn);
		
	}
	
	return $span;
}


增加

前端部分

1、准备模态框:include-modal-menu-add.jsp:/atcrowdfunding-admin-1-webui/src/main/webapp/WEB-INF/include-modal-menu-add.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<div id="menuAddModal" class="modal fade in" tabindex="-1" role="dialog">
	<div class="modal-dialog" role="document">
		<div class="modal-content">
			<div class="modal-header">
				<button type="button" class="close" data-dismiss="modal" aria-label="Close">
					<span aria-hidden="true">×</span>
				</button>
				<h4 class="modal-title">尚筹网系统弹窗</h4>
			</div>
			<form>
				<div class="modal-body">
						请输入节点名称:<input type="text" name="name"><br>
						请输入URL地址:<input type="text" name="url"><br>
						<input type="radio" name="icon" value="glyphicon glyphicon-th-list">           <i class="glyphicon glyphicon-th-list"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-dashboard">         <i class="glyphicon glyphicon-dashboard"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon glyphicon-tasks">   <i class="glyphicon glyphicon glyphicon-tasks"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-user">              <i class="glyphicon glyphicon-user"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-king">              <i class="glyphicon glyphicon-king"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-lock">              <i class="glyphicon glyphicon-lock"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-ok">                <i class="glyphicon glyphicon-ok"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-check">             <i class="glyphicon glyphicon-check"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-th-large">          <i class="glyphicon glyphicon-th-large"></i><br>
						<input type="radio" name="icon" value="glyphicon glyphicon-picture">           <i class="glyphicon glyphicon-picture"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-equalizer">         <i class="glyphicon glyphicon-equalizer"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-random">            <i class="glyphicon glyphicon-random"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-hdd">               <i class="glyphicon glyphicon-hdd"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-comment">           <i class="glyphicon glyphicon-comment"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-list">              <i class="glyphicon glyphicon-list"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-tags">              <i class="glyphicon glyphicon-tags"></i>
						<input type="radio" name="icon" value="glyphicon glyphicon-list-alt">          <i class="glyphicon glyphicon-list-alt"></i> 
						<br/>
				</div>
				<div class="modal-footer">
					<button id="menuAddBtn" type="button" class="btn btn-success"><i class="glyphicon glyphicon-plus"></i> 保存</button>
					<button id="menuAddResetBtn" type="reset" class="btn btn-primary"><i class="glyphicon glyphicon-refresh"></i> 重置</button>
				</div>
			</form>
		</div>
	</div>
</div>

2、/atcrowdfunding-admin-1-webui/src/main/webapp/WEB-INF/menu-page.jsp的最下面的body标签的上面引用:

	<%@ include file="/WEB-INF/include-modal-menu-add.jsp" %>
</body>

3、在点击+按钮之后打开模态框:/atcrowdfunding-admin-1-webui/src/main/webapp/script/my-menu.js
在这里插入图片描述

//在点击添加按钮时执行这个函数,打开模态框
function showAddModal(currentBtn) {
	
	// 打开模态框
	$("#menuAddModal").modal("show");
	
	// 将当前节点的id存入全局变量
	window.menuId = currentBtn.id;
}

4、给保存按钮绑定单击函数
在这里插入图片描述
/atcrowdfunding-admin-1-webui/src/main/webapp/WEB-INF/menu-page.jsp

$("#menuAddBtn").click(function(){
			
			// 收集表单填写的数据
			var name = $.trim($("#menuAddModal [name='name']").val());
			var url = $.trim($("#menuAddModal [name='url']").val());
			var icon = $("#menuAddModal [name='icon']:checked").val();
			
			if(name == null || name == "") {
				layer.msg("请填写菜单项名称!");
				return ;
			}
			
			if(url == null || url == "") {
				layer.msg("请填写菜单项对应的访问地址!");
				return ;
			}
			
			// 发送Ajax请求
			$.ajax({
				"url":"menu/save.json",
				"type":"post",
				"dataType":"json",
				"data":{
					"name":name,
					"url":url,
					"pid":window.menuId,	// 当前操作的节点是新节点的父节点
					"icon":icon
				},
				"success":function(response){
					
					var result = response.result;
					
					if(result == "SUCCESS") {
						layer.msg("操作成功!");
						
						initWholeTree();
					}
					
					if(result == "FAILED") {
						layer.msg(response.message);
					}
					
				},
				"error":function(response){
					layer.msg(response.message);
				}
			});
			
			$("#menuAddModal").modal("hide");
		});

后端部分

1、handler部分

@RequestMapping("/menu/save")
public ResultEntity<String> saveMenu(Menu menu) {
	
	menuService.saveMenu(menu);
	
	return ResultEntity.successWithoutData();
}

2、dao

	@Override
	public void saveMenu(Menu menu) {
		// TODO Auto-generated method stub
		menuMapper.insert(menu);
	}

更新

前端

1、 准备模态框:include-modal-menu-edit.jsp:\atcrowdfunding-admin-1-webui/src/main/webapp/WEB-INF/include-modal-menu-edit.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<div id="menuEditModal" class="modal fade" tabindex="-1" role="dialog">
	<div class="modal-dialog" role="document">
		<div class="modal-content">
			<div class="modal-header">
				<button type="button" class="close" data-dismiss="modal"
					aria-label="Close">
					<span aria-hidden="true">&times;</span>
				</button>
				<h4 class="modal-title">尚筹网系统弹窗</h4>
			</div>
			<form>
				<div class="modal-body">
					请输入节点名称:<input type="text" name="name" /><br /> 请输入URL地址:<input
						type="text" name="url" /><br /> <input type="radio" name="icon"
						value="glyphicon glyphicon-th-list" /> <i
						class="glyphicon glyphicon-th-list"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-dashboard" /> <i
						class="glyphicon glyphicon-dashboard"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon glyphicon-tasks" /> <i
						class="glyphicon glyphicon glyphicon-tasks"></i> <input
						type="radio" name="icon" value="glyphicon glyphicon-user" /> <i
						class="glyphicon glyphicon-user"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-king" /> <i
						class="glyphicon glyphicon-king"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-lock" /> <i
						class="glyphicon glyphicon-lock"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-ok" /> <i
						class="glyphicon glyphicon-ok"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-check" /> <i
						class="glyphicon glyphicon-check"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-th-large" /> <i
						class="glyphicon glyphicon-th-large"></i><br /> <input
						type="radio" name="icon" value="glyphicon glyphicon-picture" /> <i
						class="glyphicon glyphicon-picture"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-equalizer" /> <i
						class="glyphicon glyphicon-equalizer"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-random" /> <i
						class="glyphicon glyphicon-random"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-hdd" /> <i
						class="glyphicon glyphicon-hdd"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-comment" /> <i
						class="glyphicon glyphicon-comment"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-list" /> <i
						class="glyphicon glyphicon-list"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-tags" /> <i
						class="glyphicon glyphicon-tags"></i> <input type="radio"
						name="icon" value="glyphicon glyphicon-list-alt" /> <i
						class="glyphicon glyphicon-list-alt"></i> <br />
				</div>
				<div class="modal-footer">
					<button id="menuEditBtn" type="button" class="btn btn-success">
						<i class="glyphicon glyphicon-refresh"></i> 更新
					</button>
				</div>
			</form>
		</div>
	</div>
</div>

2、/atcrowdfunding-admin-1-webui/src/main/webapp/WEB-INF/menu-page.jsp的最下面的body标签的上面引用:

	<%@ include file="/WEB-INF/include-modal-menu-edit.jsp" %>
</body>

3、在点击修改按钮之后打开模态框:/atcrowdfunding-admin-1-webui/src/main/webapp/script/my-menu.js


//在点击编辑按钮时执行这个函数,打开模态框
function showEditModal(currentBtn) {
	
	// 打开模态框
	$("#menuEditModal").modal("show");
	
	// 获取当前节点的id存入全局变量
	window.menuId = currentBtn.id;
	
	// 发送请求查询Menu对象
	$.ajax({
		"url":"menu/get/"+window.menuId+".json",
		"type":"get",
		"dataType":"json",
		"success":function(response) {
			
			var result = response.result;
			
			if(result == "SUCCESS") {
				
				// 从响应数据中获取Menu对象
				var menu = response.data;
				
				// 获取各个属性值
				var name = menu.name;
				
				var url = menu.url;
				
				var icon = menu.icon;
				
				// 设置各个对应的表单项
				$("#menuEditModal [name='name']").val(name);
				
				$("#menuEditModal [name='url']").val(url);
				
				// radio需要让value值和后端查询到的icon一致的设置为被选中
				$("#menuEditModal [name='icon'][value='"+icon+"']").attr("checked",true);
			}
			
			if(result == "FAILED") {
				layer.msg(response.message);
			}
		},
		"error":function(response) {
			layer.msg(response.message);
		}
	});
	
}

3、给更新按钮绑定单击函数

在这里插入图片描述
/atcrowdfunding-admin-1-webui/src/main/webapp/WEB-INF/menu-page.jsp

$("#menuEditBtn").click(function(){
			
			// 收集表单填写的数据
			var name = $.trim($("#menuEditModal [name='name']").val());
			var url = $.trim($("#menuEditModal [name='url']").val());
			var icon = $("#menuEditModal [name='icon']:checked").val();
			
			if(name == null || name == "") {
				layer.msg("请填写菜单项名称!");
				return ;
			}
			
			if(url == null || url == "") {
				layer.msg("请填写菜单项对应的访问地址!");
				return ;
			}
			
			// 发送Ajax请求
			$.ajax({
				"url":"menu/update.json",
				"type":"post",
				"dataType":"json",
				"data":{
					"id":window.menuId,
					"name":name,
					"url":url,
					"icon":icon
				},
				"success":function(response){
					
					var result = response.result;
					
					if(result == "SUCCESS") {
						layer.msg("操作成功!");
						
						initWholeTree();
					}
					
					if(result == "FAILED") {
						layer.msg(response.message);
					}
					
				},
				"error":function(response){
					layer.msg(response.message);
				}
			});
			
			$("#menuEditModal").modal("hide");
		});

后端

1、根据id查询menu

// handler
	@RequestMapping("/menu/get/{menuId}")
	public ResultEntity<Menu> getMenuById(@PathVariable("menuId")Integer menuId) {
		Menu menu = menuService.getMenuById(menuId);
		return ResultEntity.successWithData(menu);
	}
//dao
	@Override
	public Menu getMenuById(Integer menuId) {
		// TODO Auto-generated method stub
		return menuMapper.selectByPrimaryKey(menuId);
	}

2、更新菜单

	@RequestMapping("/menu/update")
	public ResultEntity<String> updateMenu(Menu menu){
		menuService.updateMenu(menu);
		return ResultEntity.successWithoutData();
	}
	@Override
	public void updateMenu(Menu menu) {
		// TODO Auto-generated method stub
		menuMapper.updateByPrimaryKey(menu);
	}

/atcrowdfunding-admin-1-webui/src/main/resources/mybatis/mapper/MenuMapper.xml:注意:把SQL中的pid修改去掉,不改变节点的父节点。

<update id="updateByPrimaryKey"
	parameterType="com.atguigu.crowd.funding.entity.Menu">
	update t_menu
	set pid = #{pid,jdbcType=INTEGER},
	name = #{name,jdbcType=VARCHAR},
	url = #{url,jdbcType=VARCHAR},
	icon = #{icon,jdbcType=VARCHAR}
	where id = #{id,jdbcType=INTEGER}
</update>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码是 `jQuery.dropotron` 函数的主体部分,用于生成下拉菜单。 首先,通过 `jQuery.extend()` 方法将传入的 `options` 对象与默认设置进行合并,得到最终的 `settings` 对象,其中包含了菜单的各种设置,例如: - `selectorParent`:菜单的父级元素; - `baseZIndex`:菜单的基础 Z-Index 值; - `menuClass`:菜单的样式类; - `expandMode`:菜单的展开模式(鼠标悬停或点击); - `hoverDelay`:鼠标悬停延迟时间; - `hideDelay`:鼠标移开后菜单的隐藏时间; - `openerClass`:触发菜单展开的元素的样式类; - `openerActiveClass`:触发菜单展开的元素的激活状态样式类; - `submenuClassPrefix`:子菜单的样式类前缀; - `mode`:菜单展开的动画效果(即菜单的模式:直接显示、渐变、滑动或缩放); - `speed`:菜单展开的速度; - `easing`:菜单展开的缓动函数; - `alignment`:菜单的对齐方式; - `offsetX` 和 `offsetY`:子菜单的偏移量; - `globalOffsetY`:整个菜单的全局偏移量; - `IEOffsetX` 和 `IEOffsetY`:针对 IE 浏览器的偏移量; - `noOpenerFade`:如果为 true,当菜单展开时,顶级触发元素不会渐变; - `detach`:是否将二级菜单从父级菜单中分离(以防父级菜单的样式影响子菜单)。 然后,该函数会对菜单的每个子菜单进行遍历,设置其初始状态和绑定事件。具体实现过程较为复杂,包括以下几个主要步骤: - 为子菜单添加样式类; - 设置子菜单的位置; - 绑定鼠标悬停或点击事件,根据 `expandMode` 展开菜单; - 绑定菜单的隐藏事件。 最后,该函数返回菜单的 jQuery 对象,供调用者使用。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值