using System; using System.Collections.Generic; using System.Linq; using System.Data; using System.Data.SqlClient; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using BLL; namespace FineUIPro.Web.common.ProjectSet { public partial class ProjectRolePower : PageBase { /// /// 角色主键 /// public string RoleId { get { return (string)ViewState["RoleId"]; } set { ViewState["RoleId"] = value; } } /// /// 项目主键 /// public string ProjectId { get { return (string)ViewState["ProjectId"]; } set { ViewState["ProjectId"] = value; } } /// /// 菜单模块 /// 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.InitTreeProjectSystem(); this.InitMenuTree(); } } #region 加载项目系统树 /// /// 加载项目系统树 /// private void InitTreeProjectSystem() { this.tvProjectSystem.Nodes.Clear(); TreeNode rootNode = new TreeNode(); rootNode.Text = "项目系统"; rootNode.NodeID = "0"; rootNode.Expanded = true; this.tvProjectSystem.Nodes.Add(rootNode); BoundProjectSystemTree(rootNode.Nodes); } /// /// 添加项目 /// /// /// /// private void BoundProjectSystemTree(TreeNodeCollection nodes) { List projectLists = (from x in Funs.DB.Base_Project select x).ToList(); if (projectLists.Count() > 0) { TreeNode tn = null; foreach (var q in projectLists) { tn = new TreeNode(); tn.Text = q.ProjectName; tn.NodeID = q.ProjectId; nodes.Add(tn); var systems = BLL.CommonService.GetIsMoreProjectSystemList(); TreeNode s = null; foreach (var sys in systems) { s = new TreeNode(); s.Text = sys.Text; s.NodeID = sys.Value + "|" + q.ProjectId; s.EnableClickEvent = true; tn.Nodes.Add(s); } } } } #endregion #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 #region 遍历节点方法(系统功能) /// /// 加载菜单树:动态加载 /// 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); } /// /// 遍历节点方法 /// /// 节点集合 /// 父节点 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; lbRoleName.Text = "角色:" + this.tvRole.SelectedNode.Text.Trim(); if (MenuModuleId != null && MenuModuleId.Length < 3) { MenuBindDataBySystem(MenuModuleId); this.SetPowerToMenu(); } } protected void tvProjectSystem_NodeCommand(object sender, FineUIPro.TreeCommandEventArgs e) { string pro = this.tvProjectSystem.SelectedNode.NodeID; MenuModuleId = pro.Split('|')[0]; ProjectId = this.tvProjectSystem.SelectedNode.ParentNode.NodeID; lbSystemName.Text = "项目系统:" + this.tvProjectSystem.SelectedNode.ParentNode.Text.Trim() + "《" + this.tvProjectSystem.SelectedNode.Text.Trim() + "》"; if (MenuModuleId.Length < 3 && RoleId != null) { 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.ProjectRolePowerMenuId, BLL.Const.BtnSave)) { if (!String.IsNullOrEmpty(this.RoleId) && !string.IsNullOrEmpty(this.ProjectId) && MenuModuleId != "0" && MenuModuleId.Length<3) { BLL.Project_RoleButtonPowerService.DeleteProject_RoleButtonPower(this.RoleId, MenuModuleId, this.ProjectId); BLL.Project_RolePowerService.DeleteRolePower(RoleId, MenuModuleId, this.ProjectId); foreach (TreeNode tn in this.tvMenu.GetCheckedNodes()) { if (tn.NodeID != "0") { if (BLL.CommonService.IsExistMenu(tn.NodeID)) { Model.Project_RolePower newPower = new Model.Project_RolePower(); newPower.RoleId = this.RoleId; newPower.ProjectId = this.ProjectId; newPower.MenuId = tn.NodeID; BLL.Project_RolePowerService.SaveProject_RolePower(newPower); } if (BLL.CommonService.isExistButtonToMenu(tn.NodeID)) { Model.Project_RoleButtonPower btn = new Model.Project_RoleButtonPower(); btn.ProjectId = this.ProjectId; btn.RoleId = this.RoleId; btn.MenuId = tn.ParentNode.NodeID; btn.ButtonToMenuId = tn.NodeID; BLL.Project_RoleButtonPowerService.SaveProject_RoleButtonPower(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.Project_RolePowerService.GetProject_RolePowerMenuIdByRoleId(RoleId, this.ProjectId); if (powerToMenuId != null) { GetCheckedNodes(this.tvMenu.Nodes[0].Nodes, powerToMenuId); } } } #region 设置角色对应菜单权限 /// /// 设置角色对应菜单权限 /// protected void SetPowerToMenu() { if (!String.IsNullOrEmpty(RoleId)) { string[] powerToMenuId = BLL.Project_RolePowerService.GetProject_RolePowerMenuIdByRoleId(RoleId, ProjectId); 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.Project_RoleButtonPower where x.RoleId == RoleId && x.ProjectId == this.ProjectId && 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 } }