资源树(BootStrap)
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using H3C.RD.RDOP.OnlineProblem.Business; using H3C.RD.RDOP.OnlineProblem.Common; using H3C.RD.RDOP.OnlineProblem.Models.WebDp; using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace H3C.RD.RDOP.OnlineProblem.UI.Controllers.UserManagement { public class RoleResourceRelationController : BaseController { #region 私有变量 SysResourceBusiness SResource = new SysResourceBusiness(); Role_Resource_RelationBusiness roleResourceReationBusiness = new Role_Resource_RelationBusiness(); #endregion #region 页面初始化 // GET: /设置角色资源/ public ActionResult SetRoleResource(string RoleID) { ViewData.Add("RoleID", RoleID); int strcount=0; if (!string.IsNullOrWhiteSpace(RoleID)) { strcount = roleResourceReationBusiness.GetResourceReationByRoleID(Guid.Parse(Request["RoleID"])).Count(); } if (strcount > 0) { ViewData.Add("Type", "Edit");//如果初始时角色资源关系表有值表示是编辑 } else { ViewData.Add("Type", "Add"); } return View(); } #endregion #region 保存选中的资源树 /// <summary> /// 保存选中的资源树 /// </summary> /// <returns></returns> [HttpPost] [ValidateInput(false)] public JsonResult SavaCheckedResourceNode() { string Message = string.Empty; string EditType = Request["EditType"]; try { if (!string.IsNullOrWhiteSpace(Request["RoleID"])) { string CheckedData = Request["CheckedData[]"]; if (!string.IsNullOrWhiteSpace(CheckedData)) { using (Role_Resource_RelationBusiness roleResourceBusiness = new Role_Resource_RelationBusiness()) { roleResourceBusiness.InsertRoleResource_Relation(CheckedData, Request["RoleID"], EditType, out Message); } } } } catch (Exception ex) { Message = ex.Message; } var result = new { state = "success", Msg = Message }; return Json(result, JsonRequestBehavior.AllowGet); } #endregion #region 给树返回Json格式数据 /// <summary> /// 返回Json格式数据 /// </summary> /// <returns></returns> [HttpPost] public JsonResult GetTreeJson() { var roleResouces = new List<Role_Resource_Relation>(); if(!string.IsNullOrWhiteSpace(Request["RoleID"])) { roleResouces = roleResourceReationBusiness.GetResourceReationByRoleID(Guid.Parse(Request["RoleID"])); } var list = SResource.GetSysResourceInfo(); //转换成TreeNode实体 var resultList = new List<TreeNode>(list.Select(s => new TreeNode { id = s.ResourceId, pid = s.ParentId, sortLevel = s.SortLevel, resourceCode = s.ResourceCode, resourceUrl = s.ResourceUrl, createTime = s.CreateTime.ToString(), creator = s.Creator, nodeId = s.ResourceId, parentId = s.ParentId, text = s.ResourceName //nodes = new List<TreeNode>() })); for (int i = resultList.Count() - 1; i > -1; i--) { var node = resultList[i]; node.state.@checked = roleResouces.Any(a => a.ResourceId == node.nodeId); if (node.parentId == null || string.IsNullOrWhiteSpace(node.parentId.ToString())) //加载的时候如果角色资源关系表有数据,默认选中 continue; //var NoChildNode = resultList.FirstOrDefault(f => f.parentId == node.nodeId);//获取没有子集的节点 //if (NoChildNode == null) // node.state.expanded = false; var parentNode = resultList.FirstOrDefault(f => f.nodeId == node.parentId);//获取父节点 if (parentNode != null) { if (parentNode.nodes == null) parentNode.nodes = new List<TreeNode>(); parentNode.nodes.Add(node); } //resultList.RemoveAt(i); } resultList.RemoveAll(i => i.parentId != null); return Json(resultList, JsonRequestBehavior.AllowGet); } #endregion } }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
@using H3C.RD.RDOP.OnlineProblem.Models.WebDp @{ Layout = null; } <!DOCTYPE html> <link href="~/Scripts/bootstrap/bootstrap.min.css" rel="stylesheet" /> <link href="~/Content/bootstrap-treeview.css" rel="stylesheet" /> <link href="~/Scripts/bootstrap/bootstrap-treeview/bootstrap-treeview.min.css" rel="stylesheet" /> <link href="~/Content/css/framework-ui.css" rel="stylesheet" /> <script src="~/Scripts/jquery/jquery-2.1.4.min.js"></script> <script src="~/Scripts/bootstrap/bootstrap.min.js"></script> <script src="~/Scripts/bootstrap/bootstrap-treeview.js"></script> <script src="~/Scripts/bootstrap/bootstrap-dialog/bootstrap-dialog.min.js"></script> @*<script src="~/Scripts/bootstrap/bootstrap-treeview/bootstrap-treeview.js"></script>*@ @Scripts.Render("~/Scripts/OnlineProblem/UserMge/RoleResourceRelation/SetRoleResource.js?v=" + DateTime.Today.ToString("yyyy-MM-dd") + "" + new Random().Next(0, 100).ToString() + "") <script type="text/javascript"> var RoleID = [@Html.Raw(JsonConvert.SerializeObject(ViewData["RoleID"]))][0]; var MyType = [@Html.Raw(JsonConvert.SerializeObject(ViewData["Type"]))][0]; </script> <html> <head> <meta name="viewport" content="width=device-width" /> <title></title> </head> <body> <div class="panel-body right_centent" style="height:540px;width:100%;overflow:auto;"> <div id="tree"></div> </div> <div class="panel-body right_centent" style="text-align:right;margin:5px;"> <button type="button" id="btn_submit" onclick="submit_Click()" class="btn btn-primary" style=" width: 60px; height: 30px;">保存</button> </div> </body> </html>
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
$(function () { TreeOnLoad(); }) //页面加载函数 function TreeOnLoad() { var param = { RoleID: RoleID }; $.ajax({ type: "Post", data: param, url: "/RoleResourceRelation/GetTreeJson", dataType: "json", success: function (result) { $('#tree').treeview({ data: result, // 数据源 emptyIcon: '', collapseAll:true, //nodeIcon: 'glyphicon glyphicon-globe',//节点上的图标 //onNodeChecked:nodeChecked , //节点选中 //onNodeUnchecked: nodeUnchecked,//取消节点选中 showCheckbox: true,//是否显示复选框 onNodeChecked: function (event, data) { //节点选中 nodeChecked(event, data); //alert(data.id); }, onNodeUnchecked: function (event, data) { //取消节点选中 nodeUnchecked(event, data); //alert(data.id); }, onNodeSelected: function (event, data) { var pid = data.pid; } //, //onMouseDown: function (event, data) { // if(event.which===3) // alert("你按下了右键!") //} }); }, error: function () { alert("树形结构加载失败!") } }); //节点选中函数 var nodeCheckedSilent = false; function nodeChecked(event, node) { if (nodeCheckedSilent) { return; } nodeCheckedSilent = true; checkAllParent(node); checkAllSon(node); nodeCheckedSilent = false; } //取消节点选中函数 var nodeUncheckedSilent = false; function nodeUnchecked(event, node) { if (nodeUncheckedSilent) return; nodeUncheckedSilent = true; uncheckAllParent(node); uncheckAllSon(node); nodeUncheckedSilent = false; } //选中全部父节点 function checkAllParent(node) { $('#tree').treeview('checkNode', node.nodeId, { silent: true }); var parentNode = $('#tree').treeview('getParent', node.nodeId); if (!("id" in parentNode)) { return; } else { checkAllParent(parentNode); } } //取消全部父节点 function uncheckAllParent(node) { $('#tree').treeview('uncheckNode', node.nodeId, { silent: true }); var siblings = $('#tree').treeview('getSiblings', node.nodeId); var parentNode = $('#tree').treeview('getParent', node.nodeId); if (!("id" in parentNode)) { return; } var isAllUnchecked = true; //是否全部没选中 for (var i in siblings) { if (siblings[i].state.checked) { isAllUnchecked = false; break; } } if (isAllUnchecked) { uncheckAllParent(parentNode); } } //级联选中所有子节点 function checkAllSon(node) { $('#tree').treeview('checkNode', node.nodeId, { silent: true }); if (node.nodes != null && node.nodes.length > 0) { for (var i in node.nodes) { checkAllSon(node.nodes[i]); } } } //级联取消所有子节点 function uncheckAllSon(node) { $('#tree').treeview('uncheckNode', node.nodeId, { silent: true }); if (node.nodes != null && node.nodes.length > 0) { for (var i in node.nodes) { uncheckAllSon(node.nodes[i]); } } } } function submit_Click() { var jsonData = GetCheckedData(); if (jsonData.length<=0) { alert("请选择该角色需要添加的资源!"); } else { var param = { EditType:MyType, CheckedData: jsonData, RoleID: RoleID }; $.ajax({ type: 'POST', data: param, url: "/RoleResourceRelation/SavaCheckedResourceNode", dataType: 'json', async: false, success: function (msg) { alert(msg.Msg); $("#btn_submit").attr("disabled", "disabled"); }, error: function (XMLHttpRequest, textStatus, errorThrown) {//请求失败处理函数 alert("请求失败,请重新尝试!"); } }); } } function GetCheckedData() { var json = []; var getCheckedData = $("#tree").treeview('getChecked'); for (var i = 0; i < getCheckedData.length; i++) { json.push(getCheckedData[i].id); } return json; }
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using H3C.RD.RDOP.OnlineProblem.Models.WebDp; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace H3C.RD.RDOP.OnlineProblem.Business { public partial class Role_Resource_RelationBusiness { #region 根据RoleID查询该角色关联的资源信息 /// <summary> /// 根据RoleID查询该角色关联的资源信息 /// </summary> /// <returns></returns> public List<Role_Resource_Relation> GetResourceReationByRoleID(Guid RoleID) { return this.CurrentDao.GetResourceReationByRoleID(RoleID); } #endregion #region 根据ResourceID查询有没有角色和其关联 /// <summary> /// 根据资源ID查询有没有角色和其关联 /// </summary> /// <returns></returns> public int GetCountResourceReationByResourceID(Guid ResourceID) { return this.GetAll().Where(f => f.ResourceId == ResourceID).Count(); } #endregion #region 添加/编辑角色资源关系 /// <summary> /// 添加角色资源关系 /// </summary> /// <param name="model"></param> /// <param name="isEdit">是否编辑 1是 0 不是</param> /// <returns></returns> public void InsertRoleResource_Relation(string checkedData,string roleID, string ISEdit, out string Message) { try { Message = ""; string[] strCheckedData = checkedData.Split(','); List<Role_Resource_Relation> lstAdd = new List<Role_Resource_Relation>(); if(ISEdit=="Edit") this.CurrentDao.DeleteResourceByRoleID(Guid.Parse(roleID)); foreach (var item in strCheckedData) { Role_Resource_Relation model = new Role_Resource_Relation(); model.ResourceId = Guid.Parse(item); model.Rid = Guid.Parse(roleID); model.DeleteFlag = 0; model.Id = Guid.NewGuid(); model.Creator = "admin"; model.CreateTime = DateTime.Now; //model.Modifier = "admin"; //model.ModifyTime = DateTime.Now; lstAdd.Add(model); } if (lstAdd.Count() > 0) { this.Add(lstAdd); } Message = "操作成功"; } catch (Exception ex) { Message = ex.Message; } } #endregion } }
TreeNode实体类:
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace H3C.RD.RDOP.OnlineProblem.Common { /// <summary> /// TreeNodeState对象 /// </summary> public class TreeNodeState { public bool @checked { get; set; } public bool disabled { get; set; } public bool expanded { get; set; } public bool selected { get; set; } } /// <summary> /// TreeNode类 /// </summary> public class TreeNode { public TreeNodeState state { get; set; } public TreeNode() { state = new TreeNodeState(); } public TreeNode(Guid Id, Guid PId, int SortLevel, string ResourceUrl, string ResourceCode, string CreateTime, string Creator, Guid NodeId, Guid ParentId, string str, List<TreeNode> node) { id = Id; pid = PId; sortLevel = SortLevel; resourceUrl = ResourceUrl; resourceCode = ResourceCode; createTime = CreateTime; creator = Creator; nodeId = NodeId; parentId = ParentId; text = str; nodes = node; } public Guid? id; public Guid? pid; public int? sortLevel; public string resourceUrl; public string resourceCode; public string createTime; public string creator; //nodeId text nodes是前端树必须传的参数 public Guid? nodeId; //树的节点Id,区别于数据库中保存的数据Id。若要存储数据库数据的Id,添加新的Id属性;若想为节点设置路径,类中添加Path属性 public Guid? parentId; public string text; //节点名称 public List<TreeNode> nodes; //子节点,可以用递归的方法读取 } }