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

菜单管理添加:

菜单管理修改:

前端完整代码:
@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权限系统之菜单管理的更多相关文章
- LigerUI权限系统之用户管理
用户管理较之前的的组织结构和菜单管理稍显复杂.不管怎样还是先上图吧,再来讲解 左边是组织结构,右边是用户,用户是跟组织机构挂钩的,通过点击左边的组织结构,来刷新右边,加载该组织机构下的用户. 用户管理 ...
- LigerUI权限系统之角色管理
角色管理比前面几个页面都稍显复杂点.好吧,还是先看图. 左边是角色列表,右边是页面列表,它们也是多对多的关系,即一个角色可以访问多个页面,同时一个页面也可以被多个角色访问. 点击左边的角色,刷新右边页 ...
- 分享Mvc3+NInject+EF+LigerUI权限系统
分享Mvc3+NInject+EF+LigerUI权限系统 前段时间时不时看到有园友的分享权限系统,于是本人突发奇想,也想写一个玩玩,就利用晚上时间,陆陆续续花了一周多样子,写了如今这个权限系统, ...
- 分享Mvc3+NInject+EF+LigerUI权限系统Demo
前段时间时不时看到有园友的分享权限系统,于是本人突发奇想,也想写一个玩玩,就利用晚上时间,陆陆续续花了一周多样子,写了如今这个权限系统,这个权限系统具有 组织结构.用户.角色.菜单,组织结构下挂用户, ...
- LigerUI权限系统之组织结构
先上图,再看代码.组织结构界面 组织结构添加: 组织结构修改: 组织结构删除: 我在做这个页面的时候treegrid 的远程数据加载让我很头痛,从LigerUI官网提供的Demo来看,它是根据json ...
- 手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示
手摸手,带你用vue实现后台管理权限系统及顶栏三级菜单显示 效果演示地址 项目demo展示 重要功能总结 权限功能的实现 权限路由思路: 根据用户登录的roles信息与路由中配置的roles信息进行比 ...
- 分享一个基于ligerui的系统应用案例ligerRM V2(权限管理系统)(提供下载)
阅读目录 简介 系统特色 系统介绍 - 首页 系统介绍 - 列表页 系统介绍 - 明细页(表单) 系统介绍 - 菜单/按钮 系统介绍 - 权限中心 系统介绍 - 数据权限 系统介绍 - 字段权限 系统 ...
- TP支持菜单动态生成RBAC权限系统数据库结构设计方案
最简单基于RBAC权限系统数据库结构设计 包括如下几个表 1. 用户表 -- Table "t_user" DDL CREATE TABLE `t_user` ( `id` int ...
- netcore mvc快速开发系统(菜单,角色,权限[精确到按钮])开源
AntMgr https://github.com/yuzd/AntMgr 基于netcore2.0 mvc 开发的 快速搭建具有如下特色的后台管理系统 特色: 用户管理 菜单管理 角色管理 权限管理 ...
随机推荐
- MVC+MQ+WinServices+Lucene.Net
MVC+MQ+WinServices+Lucene.Net Demo 前言: 我之前没有接触过Lucene.Net相关的知识,最近在园子里看到很多大神在分享这块的内容,深受启发.秉着“实践出真知”的精 ...
- Socket 学习(一)
本次项目增加的引用using System.Net; using System.Net.Sockets; using System.Threading; TextBox.CheckForIllegal ...
- 理解iOS软件开发框架
iOS软件开发框架理解 这个东西是硬伤,框架?自带的mvc? 自带的UIViewController UIView UINavigationController 这些算不算?当然算的,cocoa框架嘛 ...
- JS常用的标准函数
原文:JS常用的标准函数 1.Array类型函数 array.concat(item...) 函数功能:关联数组,实现数组相加功能,但并不影响原先数组,concat返回新数组. array.join( ...
- RESTful API的设计原则
好RESTful API的设计原则 说在前面,这篇文章是无意中发现的,因为感觉写的很好,所以翻译了一下.由于英文水平有限,难免有出错的地方,请看官理解一下.翻译和校正文章花了我大约2周的业余时间, ...
- struts2注解redirect传递参数解决方案时,中国的垃圾问题
struts2注解redirect传递参数解决方案时,中国的垃圾问题 试过很多方法 tomcat 编码 .字符串转换 .URLEncoder .. 但是,没有解决方案,然后仔细阅读 stru ...
- 配置phonegap Android开发环境
phonegap的安装路途曲折,首先要基于多种程序,中途还要解决各种问题,下面是phonegap需要的程序 1.NodeJs 2.Phonegap 3.jdk,jre 4.Apache Ant 5.A ...
- 安装Windows2008操作系统 - 初学者系列 - 学习者系列文章
Windows2008这款服务器操作系统不知道有多少服务器在使用,毕竟前面有经典的2003系统,后续有2012操作系统.具体就不讨论这些了.下面就对Windows2008服务器操作系统的安装进行介绍. ...
- 网易ios 面试
1 说说 你对 MRC和 ARC 的理解 2 对OC内存分析 有什么好的方法, 3 corePlot 4 pop 动画 5 cocoapods 6 GCD 7 瀑布流 及 uicollection ...
- KNN算法的理解
一.算法 1.kNN算法又称为k近邻分类(k-nearest neighbor classification)算法. 最简单平庸的分类器或许是那种死记硬背式的分类器,记住全部的训练数据.对于新的数据则 ...