先上图,再看代码。组织结构界面

  组织结构添加:

  组织结构修改:

  组织结构删除:

  我在做这个页面的时候treegrid 的远程数据加载让我很头痛,从LigerUI官网提供的Demo来看,它是根据json数据格式中的children来判断是否在前面显示展开按钮,官网提供的数据格式如下:

 var TreeDeptData = {
Rows: [
{
id: '', name: "企划部", remark: "1989-01-12",
children: [
{
id: '', name: "企划分部一", remark: "企划分部一"
},
{
id: '', name: "企划分部二", remark: "企划分部二", children:
[
{ id: '', name: "企划分部二 A组", remark: "企划分部二 A组" },
{ id: '', name: "企划分部二 B组", remark: "企划分部二 B组" }
]
},
{ id: '', name: "企划分部三", remark: "企划分部三" }
]
},
{ id: '', name: "研发部", remark: "研发部" },
{ id: '', name: "产品部", remark: "产品部" }
]
};

  从数据格式可以看出,当这一项有子节点的时候,才有children属性,但我们后台绑定数据的时候,通常返回的是一个model,所以有无子节点的数据都会有children属性,而treegrid在展示的时候,它是根据children属性来判断的,即有children,就显示展开按钮,所以界面显示的时候就会有点不伦不类.但没关系,自从我们有了dynamic 后,很多问题都解决了:)

   [NonAction]
public List<dynamic> GetOrgs(IEnumerable<t_org> orgs)
{
var result = new List<dynamic>(); foreach (var item in orgs)
{
var children = _orgRepository.GetOrgChildrenNodeByParentCode(item.orgcode).ToList();
if (children == null || children.Count() == )
{
result.Add(new
{
name = item.name,
orgcode = item.orgcode,
parentCode = item.parentCode
});
}
else
{ result.Add(new
{
name = item.name,
orgcode = item.orgcode,
parentCode = item.parentCode,
children = GetOrgs(children)
});
}
}
return result;
}

  前端完整代码:

 @section headerScripts{
<style type="text/css">
#grid {
margin-left: 10px;
margin-top: 10px;
}
</style>
<script type="text/javascript">
var UrlOrgDataSource = '@Url.Action("OrgDataSource")';
var UrlParentNode = '@Url.Action("ParentNode")';
var UrlAddOrg = '@Url.Action("AddOrg")';
var UrlModifyOrg = '@Url.Action("ModifyOrg")';
var UrlDeleteOrg = '@Url.Action("DeleteOrg")'; $(function () { $("#grid").ligerGrid({
columns: [
{ display: '组织结构名称', name: 'name', id:'tree1', align: 'left', width:'30%' },
{ display: '组织结构编码', name: 'orgcode', align: 'left',width:'30%' }
],
width: '98%',
pageSizeOptions: [, , ],
height: '97%',
url: UrlOrgDataSource,
alternatingRow: true,
rowHeight: ,
headerRowHeight: ,
tree: { columnId: 'tree1' },
toolbar: {
items: [
{ text: '增加', click: AddOrg, img: '@Url.Content("~/Content/LigerUI/icons/add.gif")' },
{ line: true },
{ text: '修改', click: ModifyOrg, img:'@Url.Content("~/Content/LigerUI/icons/modify.gif")' },
{ line: true },
{ text: '删除', click: DeleteOrg, img: '@Url.Content("~/Content/LigerUI/icons/delete.gif")' }
]
} }
);
function AddOrg() {
if (!window.addWin) {
window.addWin = $.ligerDialog.open({
target: $("#winAdd"),
height: ,
width: ,
title: "增加组织机构"
});
$("#txtParentCode").ligerComboBox(
{
url: UrlParentNode,
valueField: 'orgcode',
textField: 'name',
selectBoxWidth: ,
autocomplete: true,
width: ,
hideOnLoseFocus: true,
css: 'combo'
} ); $("#btnCancel").click(function () {
window.addWin.hide();
}); $("#btnConfirm").click(function () { var parentNode = $("#txtParentCode").ligerComboBox().getValue();
var orgName = $("#txtOrgName").val();
var orgCode = $("#txtOrgCode").val(); if (orgName == "" || orgCode == "") {
alert("组织机构名称和组织机构编码不能为空!");
return;
} $.post(UrlAddOrg,
{ parentNode: parentNode, orgName: orgName, orgCode: orgCode},
function (data) {
if (data.result) {
alert("操作成功!");
$("#grid").ligerGrid().reload();
} else {
alert(data.msg);
}
});
});
} else {
window.addWin.show();
}
}
function ModifyOrg() {
var ModifyDialog;
var grid = $("#grid").ligerGrid();
var row = grid.getSelectedRow();
if (row == null) {
alert("请选择一条数据");
return;
}
$("#winModify").data("orgName", row.name);
$("#winModify").data("orgCode", row.orgcode); if (!window.modifyWin) {
window.modifyWin = $.ligerDialog.open({
target: $("#winModify"),
height: ,
width: ,
title: "修改组织机构"
}); $("#txtModifyOrgName").val($("#winModify").data("orgName"));
$("#txtModifyOrgCode").val($("#winModify").data("orgCode")); $("#btnModifyCancel").click(function () {
window.modifyWin.hide();
}); $("#btnModifyConfirm").click(function () { var orgName = $("#txtModifyOrgName").val();
var orgCode = $("#txtModifyOrgCode").val(); if (orgName == "" || orgCode == "") {
alert("组织机构名称和组织机构编码不能为空");
return;
} $.post(UrlModifyOrg, { orgName: orgName, orgCode: orgCode }, function (data) {
if (data.result) {
alert("操作成功!");
$("#grid").ligerGrid().reload();
} else {
alert(data.msg);
}
});
});
} else {
$("#winModify").data("OrgName", row.name);
$("#winModify").data("orgCode", row.orgcode);
window.modifyWin.show();
}
}
function DeleteOrg() {
var grid = $("#grid").ligerGrid();
var row = grid.getSelectedRow();
if (row == null) {
alert("请选择一条数据");
return;
}
if (confirm("是否确定删除?")) {
$.post(UrlDeleteOrg, { orgCode: row.orgcode }, 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 style="padding-right:45px;">
<input id="txtParentCode" /></td>
</tr>
<tr class="tr">
<td class="td">组织机构名称:</td>
<td>
<input id="txtOrgName" type="text" /></td>
</tr>
<tr class="tr">
<td class="td">组织机构编码:
</td>
<td>
<input id="txtOrgCode" 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="txtModifyOrgName" type="text" /></td>
</tr>
<tr class="tr">
<td class="td">组织机构编码:
</td>
<td>
<input id="txtModifyOrgCode" type="text" />
</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 OrganizationController : Controller
{
//
// GET: /Organization/ private IOrgRepository _orgRepository; public OrganizationController(IOrgRepository orgRepository)
{
this._orgRepository = orgRepository;
} public ActionResult Index()
{
return View();
} public JsonResult OrgDataSource()
{
var data = _orgRepository.GetOrgParentsNode().ToList();
var result = GetOrgs(data);
return Json(new { Rows = result, Total = result.Count() }, JsonRequestBehavior.AllowGet);
} [NonAction]
public List<dynamic> GetOrgs(IEnumerable<t_org> orgs)
{
var result = new List<dynamic>(); foreach (var item in orgs)
{
var children = _orgRepository.GetOrgChildrenNodeByParentCode(item.orgcode).ToList();
if (children == null || children.Count() == )
{
result.Add(new
{
name = item.name,
orgcode = item.orgcode,
parentCode = item.parentCode
});
}
else
{ result.Add(new
{
name = item.name,
orgcode = item.orgcode,
parentCode = item.parentCode,
children = GetOrgs(children)
});
}
}
return result;
} public JsonResult ParentNode()
{
var data = _orgRepository.GetOrgAll().ToList(); return Json(data, JsonRequestBehavior.AllowGet);
} public JsonResult AddOrg(string parentNode, string orgName, string orgCode)
{ var check = _orgRepository.GetOrgBySpecifiedCondition(orgCode); if (check.Count() > )
{
return Json(new { result = false, msg = "添加失败,已存在相同的组织结构名称或组织机构编码!" }, JsonRequestBehavior.AllowGet);
} var org = new t_org()
{
parentCode = parentNode,
name = orgName,
orgcode = orgCode
}; try
{
var result = _orgRepository.AddOrg(org);
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 ModifyOrg(string orgName, string orgCode) { var check = _orgRepository.GetOrgBySpecifiedCondition(orgCode); if (check.Count() > )
{
return Json(new { result = false, msg = "修改失败,已存在相同的组织结构名称或组织机构编码!" }, JsonRequestBehavior.AllowGet);
} var org = new t_org()
{
name = orgName,
orgcode = orgCode
}; try
{
var result = _orgRepository.ModifyOrg(org);
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 DeleteOrg(string orgCode) { var org = new t_org()
{
orgcode = orgCode
}; try
{
var result = _orgRepository.DeleteOrg(org);
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. 分享Mvc3+NInject+EF+LigerUI权限系统

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

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

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

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

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

  4. LigerUI权限系统之菜单管理

    菜单管理跟上篇的组织结构实现方式差不多,所以不存在多大的问题.还是老样,先上图,再看代码.菜单管理界面 菜单管理添加: 菜单管理修改: 前端完整代码: @section headerScripts{ ...

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

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

  6. phpcms中的RBAC权限系统

    PHPCMS中的RBAC权限系统主要用到了4张数据表:管理员表,角色表,菜单表,菜单权限表.先来看看数据库的数据表结构: admin 管理员表 ID 字段 类型 Null 默认 索引 额外 注释 1 ...

  7. 基于资源的权限系统-API设计

    概述 权限系统需要和别的系统集成,因此,良好的API是易用性的保证. 这里只设计一些权限相关的核心 API,关于用户,组织,导入导出之类的后续再逐步补充 API 设计 围绕权限有以下 4 类 API: ...

  8. 高校手机签到系统——第一部分Authority权限系统(下)

    很抱歉,之前寝室光纤断了,所以到现在才更新这个系列的第二篇博客.点击访问高校手机签到系统——第一部分Authority权限系统(上) 这几天我反思了一下上一篇写博上的方式,一味的贴代码式的,是否应该更 ...

  9. ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 2、linux 如何修改只读文件 3、ubuntu安装

    1.ubuntu chmod 无法更改 文件夹权限 系统提示“不允许的操作 答案:需要超级用户权限 sudo 2.linux 如何修改只读文件 答案:可以使用chmod命令,为改文件提供其他的权限.u ...

随机推荐

  1. NET 平台下的插件化开发内核

    .NET 平台下的插件化开发内核(Rabbit Kernel)   每个程序猿都有一个框架梦,曾经在2013年8月15日写过一篇“Koala Framework是什么?我为什么要写这个框架?”的文章, ...

  2. 分布式服务弹性框架“Hystrix”实践与源码研究(一)

    文章初衷 为了应对将来在线(特别是无线端)业务量的成倍增长,后端服务的分布式化程度需要不断提高,对于服务的延迟和容错管理将面临更大挑战,公司框架和开源团队选择内部推广Netflix的Hystrix,一 ...

  3. C#操作Word文档(加密、解密、对应书签插入分页符)

    原文:C#操作Word文档(加密.解密.对应书签插入分页符) 最近做一个项目,客户要求对已经生成好的RTF文件中的内容进行分页显示,由于之前对这方面没有什么了解,后来在网上也找了相关的资料,并结合自己 ...

  4. Kaggle入门——使用scikit-learn解决DigitRecognition问题

    Kaggle入门--使用scikit-learn解决DigitRecognition问题 @author: wepon @blog: http://blog.csdn.net/u012162613 1 ...

  5. HTML页面的动画的制作及性能

    原文:HTML页面的动画的制作及性能 WEB页面的动画的制作及性能 简介 目前WEB页面做动画的方式大的分两种1.JS间隔时间不断修改元素属性值,这也是CSS3出来前常用的做法,貌似也是唯一的做法.2 ...

  6. 完整的thinphp+phpexcel实现excel报表的输出(有图有效果)

    准备工作:1.下载phpexcel1.7.6类包:2.解压至TP框架的ThinkPHP\Vendor目录下,改类包文件夹名为PHPExcel176,目录结构如下图:       编写代码(以一个订单汇 ...

  7. python基础课程_学习笔记20:标准库:有些收藏夹——os

    标准库:有些收藏夹 os os模块为您提供访问多个操作系统服务特征. os和它的子模块os.path还包含一些用于检查.构造.删除文件夹和文件的函数,以及一些处理路径的函数. os模块中一些重要函数和 ...

  8. openwrt构建过程探索

    参考网站:http://wiki.openwrt.org/doc/howto/buildroot.exigence 需要下载必要的库文件,编译器等... 1 首先要获得openwrt的源码,参考ope ...

  9. Scala很难!

    Scala很难! 本文是从 Yes, Virginia, Scala is hard 这篇文章翻译而来. 首先要说的是,我是一个Scala粉丝,我作为一个Scala语言的倡导者差不多有5年历史了.我写 ...

  10. WebIM(1)

    WebIM系列文章 之前笔者发布的云翔在线软件平台中已经包含了一个功能相对比较齐全的WebIM,这个系列的文章就是介绍如何开发出功能类似的WebIM,在文章开始前,先介绍一下相关的技术: 1.Come ...