using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace FineUIPro.Web.common.SysManage { public partial class RolePower : PageBase { /// /// 角色主键 /// public string RoleId { get { return (string)ViewState["RoleId"]; } set { ViewState["RoleId"] = value; } } /// /// MenuModule /// public string MenuModuleId { get { return (string)ViewState["MenuModuleId"]; } set { ViewState["MenuModuleId"] = value; } } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ////加载角色树 this.InitRoleTree(); ///加载菜单树 this.InitSystemTree(); this.InitMenuTree(); } } #region 初始化角色树 /// /// 初始化树 /// private void InitRoleTree() { this.tvRole.Nodes.Clear(); TreeNode rootNode = new TreeNode();//定义根节点 rootNode.Text = "角色"; rootNode.NodeID = "0"; rootNode.Expanded = true; this.tvRole.Nodes.Add(rootNode); var role = from x in BLL.Funs.DB.Sys_Role orderby x.RoleName select x; foreach (var q in role) { TreeNode roleNode = new TreeNode(); roleNode.Text = q.RoleName; roleNode.NodeID = q.RoleId; roleNode.Expanded = true; roleNode.EnableClickEvent = true; rootNode.Nodes.Add(roleNode); } } #endregion /// /// 加载系统树:动态加载 /// private void InitSystemTree() { this.tvSystem.Nodes.Clear(); TreeNode rootNode = new TreeNode();//定义根节点 rootNode.Text = "综合平台"; rootNode.NodeID = "100"; rootNode.Expanded = true; this.tvSystem.Nodes.Add(rootNode); this.GetSystemTreeNodes(rootNode.Nodes, BLL.Const.SystemType_0); TreeNode rootNode1 = new TreeNode();//定义根节点 rootNode1.Text = "项目现场施工管理"; rootNode1.NodeID = "101"; rootNode1.Expanded = true; this.tvSystem.Nodes.Add(rootNode1); this.GetSystemTreeNodes(rootNode1.Nodes, BLL.Const.SystemType_1); //TreeNode rootNode2 = new TreeNode();//定义根节点 //rootNode2.Text = "施工综合管理"; //rootNode2.NodeID = "102"; //rootNode2.Expanded = true; //this.tvSystem.Nodes.Add(rootNode2); //this.GetSystemTreeNodes(rootNode2.Nodes, BLL.Const.SystemType_2); } #region 遍历节点方法(施工综合管理) /// /// 遍历节点方法 /// /// 节点集合 /// 父节点 private void GetSystemTreeNodes(TreeNodeCollection nodes, string systemType) { var system = from x in BLL.Funs.DB.Sys_System where x.SystemType == systemType && x.IsEnable == true orderby x.SorIndex select x; foreach (var q in system) { TreeNode newNode = new TreeNode(); newNode.Text = q.SystemName; newNode.NodeID = q.SystemId; newNode.Expanded = true; newNode.EnableClickEvent = true; nodes.Add(newNode); } } #endregion /// /// 加载菜单树:动态加载 /// private void InitMenuTree() { this.tvMenu.Nodes.Clear(); TreeNode rootNode = new TreeNode();//定义根节点 rootNode.Text = "系统功能"; rootNode.NodeID = "0"; rootNode.Expanded = true; rootNode.EnableCheckBox = true; this.tvMenu.Nodes.Add(rootNode); // this.GetNodes(rootNode.ChildNodes, null); } /// /// 加载菜单树:动态加载 /// private void MenuBindDataBySystem(string systemId) { this.tvMenu.Nodes.Clear(); TreeNode rootNode = new TreeNode();//定义根节点 rootNode.Text = "系统功能"; rootNode.NodeID = "0"; rootNode.Expanded = true; rootNode.EnableCheckBox = true; rootNode.EnableCheckEvent = true; this.tvMenu.Nodes.Add(rootNode); this.GetNodes(rootNode.Nodes, null, systemId); } #region 遍历节点方法(系统功能) /// /// 遍历节点方法 /// /// 节点集合 /// 父节点 private void GetNodes(TreeNodeCollection nodes, string parentId, string systemId) { List menu = null; if (parentId == null) { menu = (from x in BLL.Funs.DB.Sys_Menu where x.SuperMenu == "0" && x.MenuModule == systemId orderby x.SortIndex select x).ToList(); } else { menu = (from x in BLL.Funs.DB.Sys_Menu where x.SuperMenu == parentId orderby x.SortIndex select x).ToList(); } foreach (var q in menu) { TreeNode newNode = new TreeNode(); newNode.Text = q.MenuName; newNode.NodeID = q.MenuId; newNode.EnableCheckEvent = true; newNode.EnableCheckBox = true; newNode.Selectable = true; nodes.Add(newNode); if (q.SuperMenu != "0") { var buttons = (from x in BLL.Funs.DB.ButtonToMenu where x.MenuId == q.MenuId orderby x.SortIndex select x).ToList(); foreach (var b in buttons) { TreeNode bt = new TreeNode(); bt.Text = b.ButtonName; bt.NodeID = b.ButtonToMenuId; bt.EnableCheckEvent = true; bt.EnableCheckBox = true; bt.Selectable = true; newNode.Nodes.Add(bt); } } } for (int i = 0; i < nodes.Count; i++) { GetNodes(nodes[i].Nodes, nodes[i].NodeID, systemId); } } #endregion #region 全选、全不选 /// /// 全选、全不选 /// /// /// protected void tvMenu_NodeCheck(object sender, FineUIPro.TreeCheckEventArgs e) { if (e.Checked) { this.tvMenu.CheckAllNodes(e.Node.Nodes); SetCheckParentNode(e.Node); } else { this.tvMenu.UncheckAllNodes(e.Node.Nodes); } } /// /// 选中父节点 /// /// private void SetCheckParentNode(TreeNode node) { if (node.ParentNode != null && node.ParentNode.NodeID != "0") { node.ParentNode.Checked = true; if (node.ParentNode.ParentNode.NodeID != "0") { SetCheckParentNode(node.ParentNode); } } } #endregion #region 角色树节点选择 /// /// 树节点选择 /// /// /// protected void tvRole_NodeCommand(object sender, FineUIPro.TreeCommandEventArgs e) { RoleId = this.tvRole.SelectedNode.NodeID; this.lbRoleId.Text = this.tvRole.SelectedNode.NodeID; lbRoleName.Text = "角色:"+this.tvRole.SelectedNode.Text.Trim(); if (MenuModuleId != null && MenuModuleId.Length<3) { MenuBindDataBySystem(MenuModuleId); this.SetPowerToMenu(); } } protected void tvSystem_NodeCommand(object sender, FineUIPro.TreeCommandEventArgs e) { MenuModuleId = this.tvSystem.SelectedNode.NodeID; lbSystemName.Text =" 系统:"+ this.tvSystem.SelectedNode.Text.Trim(); if (MenuModuleId == BLL.Const.System_4) { lbSystemName.Text += "(暂未开放!)"; } if (this.tvSystem.SelectedNode.NodeID.Length < 3) { MenuBindDataBySystem(MenuModuleId); SetPowerToMenu(); } } #endregion #region 提交按钮事件 /// /// 提交按钮事件 /// /// /// protected void btnSave_Click(object sender, EventArgs e) { if (BLL.CommonService.GetAllButtonPowerList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.RolePowerMenuId, BLL.Const.BtnSave)) { string systemValue = this.tvSystem.SelectedNode.NodeID; if (!String.IsNullOrEmpty(RoleId) && !string.IsNullOrEmpty(systemValue)) { BLL.Sys_ButtonPowerService.DeleteButtonPower(RoleId, systemValue); BLL.Sys_RolePowerService.DeleteRolePower(RoleId, systemValue); foreach (TreeNode tn in this.tvMenu.GetCheckedNodes()) { if (tn.NodeID != "0") { if (BLL.CommonService.IsExistMenu(tn.NodeID)) { Model.Sys_RolePower newPower = new Model.Sys_RolePower(); newPower.RoleId = RoleId; newPower.MenuId = tn.NodeID; BLL.Sys_RolePowerService.SaveRolePower(newPower); } if (BLL.CommonService.isExistButtonToMenu(tn.NodeID)) { Model.Sys_ButtonPower btn = new Model.Sys_ButtonPower(); btn.RoleId = RoleId; btn.MenuId = tn.ParentNode.NodeID; btn.ButtonToMenuId = tn.NodeID; BLL.Sys_ButtonPowerService.SaveButtonPower(btn); } } } BLL.Sys_LogService.AddLog(BLL.Const.System_1, this.CurrUser.LoginProjectId, this.CurrUser.UserId, "提交角色菜单授权"); ShowNotify("提交成功!"); } else { ShowNotify("请选择角色和系统!"); } } else { ShowNotify("您没有这个权限,请与管理员联系!"); } } #endregion /// /// 取消按钮事件 /// /// /// protected void btnCancel_Click(object sender, EventArgs e) { if (!String.IsNullOrEmpty(RoleId)) { string[] powerToMenuId = BLL.Sys_RolePowerService.GetMenuIdByRoleId(RoleId); if (powerToMenuId != null) { GetCheckedNodes(this.tvMenu.Nodes[0].Nodes, powerToMenuId); } } } #region 设置角色对应菜单权限 /// /// 设置角色对应菜单权限 /// protected void SetPowerToMenu() { if (!String.IsNullOrEmpty(RoleId)) { string[] powerToMenuId = BLL.Sys_RolePowerService.GetMenuIdByRoleId(RoleId); if (powerToMenuId != null) { GetCheckedNodes(this.tvMenu.Nodes[0].Nodes, powerToMenuId); } } } /// /// 遍历获取有权限的节点 /// /// 节点集合 /// 权限集合 private void GetCheckedNodes(TreeNodeCollection nodes, string[] powerToMenuId) { foreach (TreeNode tn in nodes) { tn.Checked = false; tn.Expanded = false; if (powerToMenuId.Contains(tn.NodeID)) { tn.Checked = true; tn.Expanded = true; } if (tn.ParentNode.NodeID != "0") { if (powerToMenuId.Contains(tn.ParentNode.NodeID)) { var btpower = from x in BLL.Funs.DB.Sys_ButtonPower where x.RoleId == RoleId && x.MenuId == tn.ParentNode.NodeID select x.ButtonToMenuId; if (btpower.Contains(tn.NodeID)) { tn.Checked = true; } } } } for (int i = 0; i < nodes.Count; i++) { GetCheckedNodes(nodes[i].Nodes, powerToMenuId); } } #endregion } }