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 开发的 快速搭建具有如下特色的后台管理系统 特色: 用户管理 菜单管理 角色管理 权限管理 ...
随机推荐
- 讨论IT选定的技术招聘企业几点
在实际的招聘总结的几点思考,企业需要怎么样的人才,例如,以下个人总结: 1.技术能力是不是第一次 企业的时候,你往往看第一点的人的招聘是不是技术实力.但是,你的个人言论的行为和态度.能在半个小时内把你 ...
- 平安某金所奇葩的面经-关于幂等和ROA设计的反思
在公司一直在做跟支付有关的项目,某日接到平安某金所一男子电话,应该是之前某猎头投的,我正好在吃早饭(也不能怪他们上班早,我们公司弹性工作制,我一般上班比较晚). 因为饭馆信号不好,只能赶紧放下剩下的半 ...
- 浙江大学PAT考试1009~1012(1010上帝是冠军。。)
哎,pat1010即使java书面,只有java书面,还增加了两个点,,.啊,智商捉佳,主要pat有些不给明确的范围.造成遐想空间.. 还是按顺序介绍.. 题目地址:http://pat.zju.ed ...
- Hibernate 之强大的HQL查询
Hibernate 配备了一种非常强大的查询语言,这种语言看上去很像 SQL.但是不要被语法结构上的相似所迷惑,HQL 是非常有意识的被设计为完全面向对象的查询,它可以理解如继承.多态和关联之类 ...
- C# winform调用WebBrowser经典怪问题总结
原文:C# winform调用WebBrowser经典怪问题总结 最近一直研究网页数据采集,单单采集数据,其实HtmlAgilityPack就足够了. 对HtmlAgilityPack感兴趣的可以到这 ...
- Swift 制作一个新闻通知中心插件1
使用 Swift 制作一个新闻通知中心插件(1) 随着 iOS 8 的发布,苹果为开发者们开放了很多新的 API,而在这些开放的接口中 通知中心插件 无疑是最显眼的一个.通知中心就不用过多介绍了,相信 ...
- SqlServer-COMPUTE BY
原文:SqlServer-COMPUTE BY COMPUTE BY子句可以通过同一个select语句即查看明细行,又查看汇总行.可以计算子组的汇总值,也可以计算整个结果集的汇总值 COMPUTE 子 ...
- 屏幕录制H.264视频,AAC音频,MP4复,LibRTMP现场活动
上周完成了一个屏幕录制节目,实时屏幕捕获.记录,视频H.264压缩,音频应用AAC压缩,复用MP4格公式,这使得计算机和ios设备上直接播放.支持HTML5的播放器都能够放,这是标准格式的优点.抓屏也 ...
- Cocos2d-x在Android在竖屏切换
在Cocos2d-x在,屏幕类型的默认设置是横屏,当我们需要切换到肖像,能够在项目目录打开proj.android目录.找到AndroidManifest.xml文件,直接打开,然后就可以看到里面:s ...
- Mike and Feet(CF 547B)
Mike and Feet time limit per test 1 second memory limit per test 256 megabytes input standard input ...