菜单管理跟上篇的组织结构实现方式差不多,所以不存在多大的问题。还是老样,先上图,再看代码。菜单管理界面

  菜单管理添加:

  菜单管理修改:

  前端完整代码:

 @section headerScripts{
<style type="text/css">
#grid {
margin-left: 10px;
margin-top: 10px;
}
</style> <script type="text/javascript"> var UrlMenuDataSource = '@Url.Action("MenuDataSource")';
var UrlParentNode = '@Url.Action("ParentNode")';
var UrlAddMenu = '@Url.Action("AddMenu")';
var UrlModifyMenu = '@Url.Action("ModifyMenu")';
var UrlDeleteMenu = '@Url.Action("DeleteMenu")'; $(function () {
$("#grid").ligerGrid({
columns: [
{ display: '页面名称', name: 'name', id: 'tree1', align: 'left', width: '30%' },
{ display: '排列序号', name: 'tindex', type: 'int', align: 'left', width: '30%' },
{ display: '访问地址', name: 'url', align: 'left', width: '30%' },
{ display: '页面ID', name: 'rid', hide: 'hide', width: '1%' },
{ display: '页面父ID', name: 'parentrid', hide: 'hide', width: '1%' }
],
width: '98%',
pageSizeOptions: [, , ],
height: '100%',
rowHeight: ,
headerRowHeight: ,
url: UrlMenuDataSource,
alternatingRow: true,
tree: { columnId: 'tree1' },
dataAction: 'local',
toolbar: {
items: [
{ text: '增加', click: AddMenu, img: '@Url.Content("~/Content/LigerUI/icons/add.gif")' },
{ line: true },
{ text: '修改', click: ModifyMenu, img: '@Url.Content("~/Content/LigerUI/icons/modify.gif")' },
{ line: true },
{ text: '删除', click: DeleteMenu, img: '@Url.Content("~/Content/LigerUI/icons/delete.gif")' }
]
}
}
); //添加
function AddMenu() { if (!window.addWin) {
window.addWin = $.ligerDialog.open({
target: $("#winAdd"),
height: ,
width: ,
title: "增加菜单",
isHidden: false
});
$("#txtParentNode").ligerComboBox(
{
url: UrlParentNode,
valueField: 'rid',
textField: 'name',
selectBoxWidth: ,
autocomplete: true,
width: ,
hideOnLoseFocus: true,
css: 'combo'
} ); $("#btnCancel").click(function () {
window.addWin.hide();
}); $("#btnConfirm").click(function () { var parentNode = $("#txtParentNode").ligerComboBox().getValue();
var pageName = $("#txtPageName").val();
var url = $("#txtUrl").val();
var index = $("#txtTIndex").val(); if (pageName == "" || url == "") {
alert("页面名称和访问地址不能为空!");
return;
} $.post(UrlAddMenu,
{ parentNode: parentNode, pageName: pageName, url: url, index: index },
function (data) {
if (data.result) {
alert("操作成功!");
$("#grid").ligerGrid().reload();
} else {
alert(data.msg);
}
});
});
} else {
window.addWin.show();
} }
//修改
function ModifyMenu() {
var ModifyDialog;
var grid = $("#grid").ligerGrid();
var row = grid.getSelectedRow();
if (row == null) {
alert("请选择一条数据");
return;
}
$("#winModify").data("name",row.name);
$("#winModify").data("tindex",row.tindex);
$("#winModify").data("url", row.url);
$("#winModify").data("rid", row.rid);
$("#winModify").data("parentrid", row.parentrid); if (!window.modifyWin) {
window.modifyWin = $.ligerDialog.open({
target: $("#winModify"),
height: ,
width: ,
title: "修改菜单"
}); $("#txtModifyPageName").val( $("#winModify").data("name"));
$("#txtIndex").val( $("#winModify").data("tindex"));
$("#txtModifyUrl").val($("#winModify").data("url"));
$("#txtRid").val($("#winModify").data("rid"));
$("#txtParentRid").val( $("#winModify").data("parentrid")); $("#btnModifyCancel").click(function () {
window.modifyWin.hide();
}); $("#btnModifyConfirm").click(function () { var pageName = $("#txtModifyPageName").val();
var index = $("#txtIndex").val();
var url = $("#txtModifyUrl").val();
var rid = $("#txtRid").val();
var parentrid = $("#txtParentRid").val(); if (pageName == "" || url == "") {
alert("页面名称和访问地址不能为空");
return;
} $.post(UrlModifyMenu, { pageName: pageName, index: index, url: url, rid: rid, parentrid: parentrid }, function (data) {
if (data.result) {
alert("操作成功!");
$("#grid").ligerGrid().reload();
} else {
alert(data.msg);
}
});
});
} else {
$("#txtModifyPageName").val($("#winModify").data("name"));
$("#txtIndex").val($("#winModify").data("tindex"));
$("#txtModifyUrl").val($("#winModify").data("url"));
$("#txtRid").val($("#winModify").data("rid"));
$("#txtParentRid").val($("#winModify").data("parentrid"));
window.modifyWin.show();
} }
//删除
function DeleteMenu() {
var grid = $("#grid").ligerGrid();
var row = grid.getSelectedRow();
if (row == null) {
alert("请选择一条数据");
return;
}
if (confirm("是否确定删除?")) {
$.post(UrlDeleteMenu, { rid: row.rid }, function (data) {
if (data.result) {
alert("删除成功!");
$("#grid").ligerGrid().reload();
} else {
alert(data.msg);
}
});
} }
});
</script>
} <div id="grid"></div> <div id="winAdd" style="display: none;">
<table class="tb" style="height: 170px;">
<tr class="tr">
<td class="td">父级:</td>
<td>
<input id="txtParentNode" /></td>
</tr>
<tr class="tr">
<td class="td">页面名称:</td>
<td>
<input id="txtPageName" type="text" /></td>
</tr>
<tr class="tr">
<td class="td">访问地址:
</td>
<td>
<input id="txtUrl" type="text" />
</td> </tr>
<tr class="tr">
<td class="td">排列序号:
</td>
<td>
<input id="txtTIndex" type="text" />
</td> </tr>
<tr class="tr">
<td colspan="">
<button id="btnConfirm" class="ui-button">确定</button>
<button id="btnCancel" class="ui-button">取消</button>
</td>
</tr>
</table>
</div> <div id="winModify" style="display: none;">
<table class="tb" style="height: 170px;">
<tr class="tr">
<td class="td">页面名称:</td>
<td>
<input id="txtModifyPageName" type="text" /></td>
</tr>
<tr class="tr">
<td class="td">排列序号:</td>
<td>
<input id="txtIndex" /></td>
</tr>
<tr class="tr">
<td class="td">访问地址:
</td>
<td>
<input id="txtModifyUrl" type="text" />
<input id="txtRid" type="hidden" />
<input id="txtParentRid" type="hidden" />
</td> </tr>
<tr class="tr">
<td colspan="">
<button id="btnModifyConfirm" class="ui-button">确定</button>
<button id="btnModifyCancel" class="ui-button">取消</button>
</td>
</tr>
</table>
</div>

  后端完整代码:

 public class MenuController : Controller
{
//
// GET: /Menu/ private IMenuRepository _menuRepository; public MenuController(IMenuRepository menuRepository)
{ this._menuRepository = menuRepository;
} public ActionResult Index()
{
return View();
} public JsonResult MenuDataSource()
{ var data = _menuRepository.GetMenuParentsNode().ToList(); var list = new List<dynamic>(); foreach (var item in data)
{
var children = _menuRepository.GetMenuChildrenNodeByParentId(item.rid).ToList(); if (children == null || children.Count() == )
{
list.Add(new
{
name = item.name,
tindex = item.tindex,
url = item.url,
rid=item.rid,
parentrid = item.parentrid
});
}
else
{
list.Add(new
{
name = item.name,
tindex = item.tindex,
url = item.url,
rid = item.rid,
parentrid = item.parentrid,
children = children.Select(m => new {
name = m.name,
tindex = m.tindex,
url = m.url,
rid = m.rid,
parentrid = m.parentrid
})
});
}
} return Json(new
{
Rows = list,
Total = list.Count()
}, JsonRequestBehavior.AllowGet); } public JsonResult ParentNode()
{ var data = _menuRepository.GetMenuParentsNode().ToList(); return Json(data, JsonRequestBehavior.AllowGet);
} public JsonResult AddMenu(int? parentNode, string pageName, string url,int?index)
{
var check = _menuRepository.GetMenuByCondition(pageName, url); if (check.Count() > )
{
return Json(new { result = false, msg = "修改失败,已存在相同的菜单!" }, JsonRequestBehavior.AllowGet);
}
var menu = new t_resources()
{
name = pageName,
url = url,
parentrid = parentNode,
tindex=index
}; try
{
var result= _menuRepository.AddMenu(menu);
if (result)
{
return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
}
} public JsonResult DeleteMenu(int rid)
{
var menu = new t_resources()
{
rid=rid
}; try
{
var result = _menuRepository.DeleteMenu(menu);
if (result)
{
return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
}
} public JsonResult ModifyMenu(string pageName, int? index, string url, int rid, int? parentrid)
{
var check = _menuRepository.GetMenuByCondition(pageName,url); if (check.Count() > ) {
return Json(new { result = false, msg = "修改失败,已存在相同的菜单!" }, JsonRequestBehavior.AllowGet);
} var menu = new t_resources()
{
name=pageName,
tindex=index,
url=url,
rid=rid,
parentrid=parentrid
}; try
{
var result = _menuRepository.UpdateMenu(menu);
if (result)
{
return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
}
else
{
return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
}
}
catch (Exception ex)
{
return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
}
}
}

LigerUI权限系统之菜单管理的更多相关文章

  1. LigerUI权限系统之用户管理

    用户管理较之前的的组织结构和菜单管理稍显复杂.不管怎样还是先上图吧,再来讲解 左边是组织结构,右边是用户,用户是跟组织机构挂钩的,通过点击左边的组织结构,来刷新右边,加载该组织机构下的用户. 用户管理 ...

  2. LigerUI权限系统之角色管理

    角色管理比前面几个页面都稍显复杂点.好吧,还是先看图. 左边是角色列表,右边是页面列表,它们也是多对多的关系,即一个角色可以访问多个页面,同时一个页面也可以被多个角色访问. 点击左边的角色,刷新右边页 ...

  3. 分享Mvc3+NInject+EF+LigerUI权限系统

    分享Mvc3+NInject+EF+LigerUI权限系统   前段时间时不时看到有园友的分享权限系统,于是本人突发奇想,也想写一个玩玩,就利用晚上时间,陆陆续续花了一周多样子,写了如今这个权限系统, ...

  4. 分享Mvc3+NInject+EF+LigerUI权限系统Demo

    前段时间时不时看到有园友的分享权限系统,于是本人突发奇想,也想写一个玩玩,就利用晚上时间,陆陆续续花了一周多样子,写了如今这个权限系统,这个权限系统具有 组织结构.用户.角色.菜单,组织结构下挂用户, ...

  5. LigerUI权限系统之组织结构

    先上图,再看代码.组织结构界面 组织结构添加: 组织结构修改: 组织结构删除: 我在做这个页面的时候treegrid 的远程数据加载让我很头痛,从LigerUI官网提供的Demo来看,它是根据json ...

  6. 手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示

    手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示 效果演示地址 项目demo展示 重要功能总结 权限功能的实现 权限路由思路: 根据用户登录的roles信息与路由中配置的roles信息进行比 ...

  7. 分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)

    阅读目录 简介 系统特色 系统介绍 - 首页 系统介绍 - 列表页 系统介绍 - 明细页(表单) 系统介绍 - 菜单/按钮 系统介绍 - 权限中心 系统介绍 - 数据权限 系统介绍 - 字段权限 系统 ...

  8. TP支持菜单动态生成RBAC权限系统数据库结构设计方案

    最简单基于RBAC权限系统数据库结构设计 包括如下几个表 1. 用户表 -- Table "t_user" DDL CREATE TABLE `t_user` ( `id` int ...

  9. netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源

    AntMgr https://github.com/yuzd/AntMgr 基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统 特色: 用户管理 菜单管理 角色管理 权限管理 ...

随机推荐

  1. Socket 学习(三).5 UDP 的弱点

    前面 讲到了,udp 传输文本的例子,发现 udp 确实 比tcp 高效一些,现在我用来传输文件,问题果然来了,结果发现 他不能一次 传输大于 64K的东西! 那么 我自然想到了 切包,多次发送,再合 ...

  2. SQL Server 板机

    触发器是一种特殊类型的存储过程.们介绍的存储过程. 触发器主要是通过事件进行触发被自己主动调用运行的. 而存储过程能够通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删除的时候 ...

  3. Tomcat 80 端口被占,解决方案

    Windows 平台下Tomcat启动不起,显示 SEVERE: Failed to initialize end point associated with ProtocolHandler [&qu ...

  4. 经验总结35--IP地址区域匹配

    想知道客服端訪问的IP地址是多少,并知道区域. 一般能够去http://www.ip138.com/,输入IP查询,但没提供比較好的接口,程序使用不方便. 另外有些企业提供一些离线的IP数据库,能够进 ...

  5. 三星GT-S7572换屏幕教程

    家里人手机被摔坏了,尽管不是什么值钱的手机.可是自从上了大学之后,就一直认为赚钱真的非常不easy,不到逼不得已,就不要乱花钱.于是,就从淘宝上买了外屏.以下是我在淘宝上的链接:点击打开链接.好不ea ...

  6. hdu - 4979 - A simple math problem.(可反复覆盖DLX + 打表)

    题意:一种彩票共同拥有 N 个号码,每注包括 M 个号码,假设开出来的 M 个号码中与自己买的注有 R 个以上的同样号码,则中二等奖,问要保证中二等奖至少要买多少注(1<=R<=M< ...

  7. 过度补脑系列:Nokia的不归路

    没有数据,没有调查,只是突然想起诺基亚... 23号的一节酱油课,脑海中突然闪过两个关键字--nokia & android 于是用手机百度了一下,竟然真的出了新机型,NokiaX,X东24日 ...

  8. Spring IOC之容器概述

    1.SpringIOC容器和beans介绍 IOC的依赖注入是这样的,对象定义他们的依赖也就是他们需要在一起起作用的对象是通过构造器参数以及工厂方法的参数或者是当他们被构建或者是从工厂中返回时设置在对 ...

  9. nginx启动,重启,关闭命令

    nginx启动,重启,关闭命令 停止操作停止操作是通过向nginx进程发送信号(什么是信号请参阅linux文 章)来进行的步骤1:查询nginx主进程号ps -ef | grep nginx在进程列表 ...

  10. 藏地传奇js

    http://zd.163.com/m/zhenyan/ js很厉害,有很多值得学习的地方,记录下来. http://res.nie.netease.com/zdcq/qt/13/0625_zheny ...