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

  菜单管理添加:

  菜单管理修改:

  前端完整代码:

  1. @section headerScripts{
  2. <style type="text/css">
  3. #grid {
  4. margin-left: 10px;
  5. margin-top: 10px;
  6. }
  7. </style>
  8.  
  9. <script type="text/javascript">
  10.  
  11. var UrlMenuDataSource = '@Url.Action("MenuDataSource")';
  12. var UrlParentNode = '@Url.Action("ParentNode")';
  13. var UrlAddMenu = '@Url.Action("AddMenu")';
  14. var UrlModifyMenu = '@Url.Action("ModifyMenu")';
  15. var UrlDeleteMenu = '@Url.Action("DeleteMenu")';
  16.  
  17. $(function () {
  18. $("#grid").ligerGrid({
  19. columns: [
  20. { display: '页面名称', name: 'name', id: 'tree1', align: 'left', width: '30%' },
  21. { display: '排列序号', name: 'tindex', type: 'int', align: 'left', width: '30%' },
  22. { display: '访问地址', name: 'url', align: 'left', width: '30%' },
  23. { display: '页面ID', name: 'rid', hide: 'hide', width: '1%' },
  24. { display: '页面父ID', name: 'parentrid', hide: 'hide', width: '1%' }
  25. ],
  26. width: '98%',
  27. pageSizeOptions: [, , ],
  28. height: '100%',
  29. rowHeight: ,
  30. headerRowHeight: ,
  31. url: UrlMenuDataSource,
  32. alternatingRow: true,
  33. tree: { columnId: 'tree1' },
  34. dataAction: 'local',
  35. toolbar: {
  36. items: [
  37. { text: '增加', click: AddMenu, img: '@Url.Content("~/Content/LigerUI/icons/add.gif")' },
  38. { line: true },
  39. { text: '修改', click: ModifyMenu, img: '@Url.Content("~/Content/LigerUI/icons/modify.gif")' },
  40. { line: true },
  41. { text: '删除', click: DeleteMenu, img: '@Url.Content("~/Content/LigerUI/icons/delete.gif")' }
  42. ]
  43. }
  44. }
  45. );
  46.  
  47. //添加
  48. function AddMenu() {
  49.  
  50. if (!window.addWin) {
  51. window.addWin = $.ligerDialog.open({
  52. target: $("#winAdd"),
  53. height: ,
  54. width: ,
  55. title: "增加菜单",
  56. isHidden: false
  57. });
  58. $("#txtParentNode").ligerComboBox(
  59. {
  60. url: UrlParentNode,
  61. valueField: 'rid',
  62. textField: 'name',
  63. selectBoxWidth: ,
  64. autocomplete: true,
  65. width: ,
  66. hideOnLoseFocus: true,
  67. css: 'combo'
  68. }
  69.  
  70. );
  71.  
  72. $("#btnCancel").click(function () {
  73. window.addWin.hide();
  74. });
  75.  
  76. $("#btnConfirm").click(function () {
  77.  
  78. var parentNode = $("#txtParentNode").ligerComboBox().getValue();
  79. var pageName = $("#txtPageName").val();
  80. var url = $("#txtUrl").val();
  81. var index = $("#txtTIndex").val();
  82.  
  83. if (pageName == "" || url == "") {
  84. alert("页面名称和访问地址不能为空!");
  85. return;
  86. }
  87.  
  88. $.post(UrlAddMenu,
  89. { parentNode: parentNode, pageName: pageName, url: url, index: index },
  90. function (data) {
  91. if (data.result) {
  92. alert("操作成功!");
  93. $("#grid").ligerGrid().reload();
  94. } else {
  95. alert(data.msg);
  96. }
  97. });
  98. });
  99. } else {
  100. window.addWin.show();
  101. }
  102.  
  103. }
  104. //修改
  105. function ModifyMenu() {
  106. var ModifyDialog;
  107. var grid = $("#grid").ligerGrid();
  108. var row = grid.getSelectedRow();
  109. if (row == null) {
  110. alert("请选择一条数据");
  111. return;
  112. }
  113. $("#winModify").data("name",row.name);
  114. $("#winModify").data("tindex",row.tindex);
  115. $("#winModify").data("url", row.url);
  116. $("#winModify").data("rid", row.rid);
  117. $("#winModify").data("parentrid", row.parentrid);
  118.  
  119. if (!window.modifyWin) {
  120. window.modifyWin = $.ligerDialog.open({
  121. target: $("#winModify"),
  122. height: ,
  123. width: ,
  124. title: "修改菜单"
  125. });
  126.  
  127. $("#txtModifyPageName").val( $("#winModify").data("name"));
  128. $("#txtIndex").val( $("#winModify").data("tindex"));
  129. $("#txtModifyUrl").val($("#winModify").data("url"));
  130. $("#txtRid").val($("#winModify").data("rid"));
  131. $("#txtParentRid").val( $("#winModify").data("parentrid"));
  132.  
  133. $("#btnModifyCancel").click(function () {
  134. window.modifyWin.hide();
  135. });
  136.  
  137. $("#btnModifyConfirm").click(function () {
  138.  
  139. var pageName = $("#txtModifyPageName").val();
  140. var index = $("#txtIndex").val();
  141. var url = $("#txtModifyUrl").val();
  142. var rid = $("#txtRid").val();
  143. var parentrid = $("#txtParentRid").val();
  144.  
  145. if (pageName == "" || url == "") {
  146. alert("页面名称和访问地址不能为空");
  147. return;
  148. }
  149.  
  150. $.post(UrlModifyMenu, { pageName: pageName, index: index, url: url, rid: rid, parentrid: parentrid }, function (data) {
  151. if (data.result) {
  152. alert("操作成功!");
  153. $("#grid").ligerGrid().reload();
  154. } else {
  155. alert(data.msg);
  156. }
  157. });
  158. });
  159. } else {
  160. $("#txtModifyPageName").val($("#winModify").data("name"));
  161. $("#txtIndex").val($("#winModify").data("tindex"));
  162. $("#txtModifyUrl").val($("#winModify").data("url"));
  163. $("#txtRid").val($("#winModify").data("rid"));
  164. $("#txtParentRid").val($("#winModify").data("parentrid"));
  165. window.modifyWin.show();
  166. }
  167.  
  168. }
  169. //删除
  170. function DeleteMenu() {
  171. var grid = $("#grid").ligerGrid();
  172. var row = grid.getSelectedRow();
  173. if (row == null) {
  174. alert("请选择一条数据");
  175. return;
  176. }
  177. if (confirm("是否确定删除?")) {
  178. $.post(UrlDeleteMenu, { rid: row.rid }, function (data) {
  179. if (data.result) {
  180. alert("删除成功!");
  181. $("#grid").ligerGrid().reload();
  182. } else {
  183. alert(data.msg);
  184. }
  185. });
  186. }
  187.  
  188. }
  189. });
  190. </script>
  191. }
  192.  
  193. <div id="grid"></div>
  194.  
  195. <div id="winAdd" style="display: none;">
  196. <table class="tb" style="height: 170px;">
  197. <tr class="tr">
  198. <td class="td">父级:</td>
  199. <td>
  200. <input id="txtParentNode" /></td>
  201. </tr>
  202. <tr class="tr">
  203. <td class="td">页面名称:</td>
  204. <td>
  205. <input id="txtPageName" type="text" /></td>
  206. </tr>
  207. <tr class="tr">
  208. <td class="td">访问地址:
  209. </td>
  210. <td>
  211. <input id="txtUrl" type="text" />
  212. </td>
  213.  
  214. </tr>
  215. <tr class="tr">
  216. <td class="td">排列序号:
  217. </td>
  218. <td>
  219. <input id="txtTIndex" type="text" />
  220. </td>
  221.  
  222. </tr>
  223. <tr class="tr">
  224. <td colspan="">
  225. <button id="btnConfirm" class="ui-button">确定</button>
  226. <button id="btnCancel" class="ui-button">取消</button>
  227. </td>
  228. </tr>
  229. </table>
  230. </div>
  231.  
  232. <div id="winModify" style="display: none;">
  233. <table class="tb" style="height: 170px;">
  234. <tr class="tr">
  235. <td class="td">页面名称:</td>
  236. <td>
  237. <input id="txtModifyPageName" type="text" /></td>
  238. </tr>
  239. <tr class="tr">
  240. <td class="td">排列序号:</td>
  241. <td>
  242. <input id="txtIndex" /></td>
  243. </tr>
  244. <tr class="tr">
  245. <td class="td">访问地址:
  246. </td>
  247. <td>
  248. <input id="txtModifyUrl" type="text" />
  249. <input id="txtRid" type="hidden" />
  250. <input id="txtParentRid" type="hidden" />
  251. </td>
  252.  
  253. </tr>
  254. <tr class="tr">
  255. <td colspan="">
  256. <button id="btnModifyConfirm" class="ui-button">确定</button>
  257. <button id="btnModifyCancel" class="ui-button">取消</button>
  258. </td>
  259. </tr>
  260. </table>
  261. </div>

  后端完整代码:

  1. public class MenuController : Controller
  2. {
  3. //
  4. // GET: /Menu/
  5.  
  6. private IMenuRepository _menuRepository;
  7.  
  8. public MenuController(IMenuRepository menuRepository)
  9. {
  10.  
  11. this._menuRepository = menuRepository;
  12. }
  13.  
  14. public ActionResult Index()
  15. {
  16. return View();
  17. }
  18.  
  19. public JsonResult MenuDataSource()
  20. {
  21.  
  22. var data = _menuRepository.GetMenuParentsNode().ToList();
  23.  
  24. var list = new List<dynamic>();
  25.  
  26. foreach (var item in data)
  27. {
  28. var children = _menuRepository.GetMenuChildrenNodeByParentId(item.rid).ToList();
  29.  
  30. if (children == null || children.Count() == )
  31. {
  32. list.Add(new
  33. {
  34. name = item.name,
  35. tindex = item.tindex,
  36. url = item.url,
  37. rid=item.rid,
  38. parentrid = item.parentrid
  39. });
  40. }
  41. else
  42. {
  43. list.Add(new
  44. {
  45. name = item.name,
  46. tindex = item.tindex,
  47. url = item.url,
  48. rid = item.rid,
  49. parentrid = item.parentrid,
  50. children = children.Select(m => new {
  51. name = m.name,
  52. tindex = m.tindex,
  53. url = m.url,
  54. rid = m.rid,
  55. parentrid = m.parentrid
  56. })
  57. });
  58. }
  59. }
  60.  
  61. return Json(new
  62. {
  63. Rows = list,
  64. Total = list.Count()
  65. }, JsonRequestBehavior.AllowGet);
  66.  
  67. }
  68.  
  69. public JsonResult ParentNode()
  70. {
  71.  
  72. var data = _menuRepository.GetMenuParentsNode().ToList();
  73.  
  74. return Json(data, JsonRequestBehavior.AllowGet);
  75. }
  76.  
  77. public JsonResult AddMenu(int? parentNode, string pageName, string url,int?index)
  78. {
  79. var check = _menuRepository.GetMenuByCondition(pageName, url);
  80.  
  81. if (check.Count() > )
  82. {
  83. return Json(new { result = false, msg = "修改失败,已存在相同的菜单!" }, JsonRequestBehavior.AllowGet);
  84. }
  85. var menu = new t_resources()
  86. {
  87. name = pageName,
  88. url = url,
  89. parentrid = parentNode,
  90. tindex=index
  91. };
  92.  
  93. try
  94. {
  95. var result= _menuRepository.AddMenu(menu);
  96. if (result)
  97. {
  98. return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
  99. }
  100. else
  101. {
  102. return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
  103. }
  104. }
  105. catch (Exception ex)
  106. {
  107. return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
  108. }
  109. }
  110.  
  111. public JsonResult DeleteMenu(int rid)
  112. {
  113. var menu = new t_resources()
  114. {
  115. rid=rid
  116. };
  117.  
  118. try
  119. {
  120. var result = _menuRepository.DeleteMenu(menu);
  121. if (result)
  122. {
  123. return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
  124. }
  125. else
  126. {
  127. return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
  128. }
  129. }
  130. catch (Exception ex)
  131. {
  132. return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
  133. }
  134. }
  135.  
  136. public JsonResult ModifyMenu(string pageName, int? index, string url, int rid, int? parentrid)
  137. {
  138. var check = _menuRepository.GetMenuByCondition(pageName,url);
  139.  
  140. if (check.Count() > ) {
  141. return Json(new { result = false, msg = "修改失败,已存在相同的菜单!" }, JsonRequestBehavior.AllowGet);
  142. }
  143.  
  144. var menu = new t_resources()
  145. {
  146. name=pageName,
  147. tindex=index,
  148. url=url,
  149. rid=rid,
  150. parentrid=parentrid
  151. };
  152.  
  153. try
  154. {
  155. var result = _menuRepository.UpdateMenu(menu);
  156. if (result)
  157. {
  158. return Json(new { result = true, msg = "" }, JsonRequestBehavior.AllowGet);
  159. }
  160. else
  161. {
  162. return Json(new { result = false, msg = "操作失败!" }, JsonRequestBehavior.AllowGet);
  163. }
  164. }
  165. catch (Exception ex)
  166. {
  167. return Json(new { result = false, msg = ex.Message }, JsonRequestBehavior.AllowGet);
  168. }
  169. }
  170. }

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. ASP.NET MVC 文件上传和路径处理

    ASP.NET MVC 文件上传和路径处理总结 目录 文件的上传和路径处理必须解决下面列出的实际问题: 1.重复文件处理 2.单独文件上传 3.编辑器中文件上传 4.处理文章中的图片路径 5.处理上传 ...

  2. 【百度地图API】自定义可编辑的交通路线

    原文:[百度地图API]自定义可编辑的交通路线 任务描述: 我想自己绘制一条从地铁站出口到天安门的道路,而且还需要根据我的喜好来改变这条路线. 如何实现: 鼠标左击地图,绘制路线:双击后,绘制结束:绘 ...

  3. IOS程序启动的过程

    IOS程序启动按照以下5个步骤执行 1.main函数 IOS程序启动首先执行main函数 2.UIApplicationMain 执行main函数中的UIApplicationMain函数,这个函数会 ...

  4. ssh ipv6

    从这里学来的.http://blog.mattandanne.org/2012/01/sftpscp-and-ipv6-link-local-addresses.html当采用ipv6的地址去连接另外 ...

  5. 【软测试】(两)计算机组成原理-cpu

    cpu,中文名称中央处理单元,central processing unit.系统的核心,用于数据的处理,算术以及逻辑运算和控制程序的运行. 组成 运算器 从字面上就能够理解到.运算器主要用来对于逻辑 ...

  6. Oracle / PLSQL写语句的时候常使用的函数

    最近在学习数据库方面的知识,做个标记. 这里有英文解释,建议多看看英文文档: https://www.techonthenet.com/oracle/functions/ 下面开始记录一下,自己在Or ...

  7. Java 多线程之内存一致性错误

    当不同的线程针对相同的数据却读到了不同的值时就发生了内存一致性错误.内存一致性错误的原因是非常复杂的.幸运的是我们程序员不需要详细的理解这些原因,我们需要做的事情就是使用策略来规避这些. 避免内存一致 ...

  8. 安装Windows操作系统的驱动程序(驱动精灵版) - 进阶者系列 - 学习者系列文章

    安装完操作系统之后,就需要安装对应的驱动程序了.下面就简要介绍下驱动程序的安装.以驱动精灵驱动安装软件为例. 1.  下载驱动精灵. 从http://www.drivergenius.com/网站下载 ...

  9. 开发环境准备:Ruby on Rails开发环境配置

    开发环境准备:Ruby on Rails开发环境配置 前情回顾 上次讲到Vmware虚拟机的安装配置以及Scientific Linux 6.X系统的安装.这回我们的主要任务是在Linux操作系统上完 ...

  10. c#定义一个方法,根据存储过程名称和存储过程参数数组,执行对应的存储过程

    定义一个根据存储过程名称和存储过程参数数组,执行对应的存储过程的方法.用SqlParameter[]代替存储过程需要的参数.这样就不用为每一个存储过程写一个方法了 1.首先定义一个ExcuteProc ...