资源树(BootStrap)

 

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

    }
}
View Code

 

@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>
View Code
$(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;
}
View Code
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

    }
}
View Code

 TreeNode实体类:

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;    //子节点,可以用递归的方法读取
    }



}
View Code

 

posted @ 2017-05-31 16:41  安之&若素  阅读(952)  评论(0编辑  收藏  举报