334 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
		
		
			
		
	
	
			334 lines
		
	
	
		
			12 KiB
		
	
	
	
		
			C#
		
	
	
	
|  | using System; | |||
|  | using System.Collections.Generic; | |||
|  | using System.Data; | |||
|  | using System.Data.SqlClient; | |||
|  | using System.Linq; | |||
|  | using BLL; | |||
|  | 
 | |||
|  | namespace FineUIPro.Web.SysManage | |||
|  | { | |||
|  |     public partial class Register : PageBase | |||
|  |     { | |||
|  |         /// <summary> | |||
|  |         ///  | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void Page_Load(object sender, EventArgs e) | |||
|  |         { | |||
|  |             if (!IsPostBack) | |||
|  |             {  ////权限按钮方法 | |||
|  |                 this.GetButtonPower(); | |||
|  |                 // 绑定表格 | |||
|  |                 this.BindGrid(); | |||
|  |                 ConstValue.InitConstValueCheckBoxList(this.ckMenuType, this.rbMenuType.SelectedValue); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         #region 角色下拉框绑定数据 | |||
|  |         /// <summary> | |||
|  |         /// 绑定数据 | |||
|  |         /// </summary> | |||
|  |         private void BindGrid() | |||
|  |         { | |||
|  |             string strSql = @"SELECT Roles.RoleId,Roles.RoleName,Roles.RoleCode,Roles.Def,Roles.IsSystemBuilt" | |||
|  |                           + @" FROM dbo.Sys_Role AS Roles "  | |||
|  |                           + @" WHERE 1=1 "; | |||
|  |             if (!string.IsNullOrEmpty(strSql)) | |||
|  |             { | |||
|  |                 List<SqlParameter> listStr = new List<SqlParameter>(); | |||
|  |                 if (!string.IsNullOrEmpty(this.txtRoleName.Text.Trim())) | |||
|  |                 { | |||
|  |                     strSql += " AND RoleName LIKE @RoleName"; | |||
|  |                     listStr.Add(new SqlParameter("@RoleName", "%" + this.txtRoleName.Text.Trim() + "%")); | |||
|  |                 } | |||
|  |                 if (this.rbIsOfficce.SelectedValue == "1") | |||
|  |                 { | |||
|  |                     strSql += " AND IsOffice = '1'"; | |||
|  |                 } | |||
|  |                 else | |||
|  |                 { | |||
|  |                     strSql += " AND (IsOffice = '0' or IsOffice is null)"; | |||
|  |                 } | |||
|  |                 SqlParameter[] parameter = listStr.ToArray(); | |||
|  |                 DataTable tb = SQLHelper.GetDataTableRunText(strSql, parameter); | |||
|  | 
 | |||
|  |                 Grid1.RecordCount = tb.Rows.Count; | |||
|  |                 var table = this.GetPagedDataTable(Grid1, tb); | |||
|  |                 Grid1.DataSource = table; | |||
|  |                 Grid1.DataBind(); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 Grid1.DataSource = null; | |||
|  |                 Grid1.DataBind(); | |||
|  |             } | |||
|  |         } | |||
|  |         #endregion | |||
|  | 
 | |||
|  |         #region 角色下拉框查询 | |||
|  |         /// <summary> | |||
|  |         /// 下拉框查询 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void TextBox_TextChanged(object sender, EventArgs e) | |||
|  |         { | |||
|  |             this.BindGrid(); | |||
|  |         } | |||
|  |         #endregion  | |||
|  | 
 | |||
|  |         #region 下拉框选择 | |||
|  |         /// <summary> | |||
|  |         ///  角色下拉框选择 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void drpRoleId_TextChanged(object sender, EventArgs e) | |||
|  |         { | |||
|  |             this.SelectedIndexChanged(); | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         ///  菜单类型选择 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void ckMenuType_OnSelectedIndexChanged(object sender, EventArgs e) | |||
|  |         { | |||
|  |             this.SelectedIndexChanged(); | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// 选择变化事件 | |||
|  |         /// </summary> | |||
|  |         private void SelectedIndexChanged() | |||
|  |         { | |||
|  |             this.InitMenuTree(this.drpRole.Value, String.Join(", ", this.ckMenuType.SelectedValueArray));                   | |||
|  |         } | |||
|  |         #endregion | |||
|  | 
 | |||
|  |         #region 初始化树 | |||
|  |         /// <summary> | |||
|  |         /// 初始化树 | |||
|  |         /// </summary> | |||
|  |         /// <param name="menuList">菜单集合</param> | |||
|  |         private void InitMenuTree(string roleId, string menuType) | |||
|  |         { | |||
|  |             this.tvMenu.Nodes.Clear(); | |||
|  |             var menus = BLL.SysMenuService.GetIsUsedMenuListByMenuType(menuType); | |||
|  |             if (menus.Count() > 0) | |||
|  |             { | |||
|  |                 TreeNode rootNode = new TreeNode | |||
|  |                 { | |||
|  |                     Text = "菜单", | |||
|  |                     NodeID = "0", | |||
|  |                     EnableCheckBox = true, | |||
|  |                     EnableCheckEvent = true, | |||
|  |                     Expanded = true | |||
|  |                 }; | |||
|  |                 this.tvMenu.Nodes.Add(rootNode); | |||
|  |                 this.BoundTree(rootNode.Nodes, menus, rootNode.NodeID, roleId); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// 遍历增加子节点 | |||
|  |         /// </summary> | |||
|  |         /// <param name="nodes"></param> | |||
|  |         /// <param name="menuId"></param> | |||
|  |         private void BoundTree(TreeNodeCollection nodes, List<Model.Sys_Menu> sysMenus, string superMenuId, string roleId) | |||
|  |         { | |||
|  |             var menus = sysMenus.Where(x => x.SuperMenu == superMenuId).Distinct().OrderBy(x => x.SortIndex); | |||
|  |             if (menus.Count() > 0) | |||
|  |             { | |||
|  |                 foreach (var item in menus) | |||
|  |                 { | |||
|  |                     TreeNode chidNode = new TreeNode | |||
|  |                     { | |||
|  |                         Text = item.MenuName, | |||
|  |                         NodeID = item.MenuId, | |||
|  |                         EnableCheckBox = true, | |||
|  |                         EnableCheckEvent = true | |||
|  |                     }; | |||
|  |                     if (BLL.RolePowerService.IsHavePowerByRoleIdMenuId(roleId, chidNode.NodeID)) | |||
|  |                     { | |||
|  |                         chidNode.Checked = true; | |||
|  |                         chidNode.Expanded = true; | |||
|  |                         chidNode.Selectable = true; | |||
|  |                     } | |||
|  |                     nodes.Add(chidNode); | |||
|  | 
 | |||
|  |                     if (item.IsEnd == true) | |||
|  |                     { | |||
|  |                         var buttons = BLL.ButtonToMenuService.GetButtonToMenuListByMenuId(item.MenuId); | |||
|  |                         if (buttons.Count() > 0) | |||
|  |                         {       ///该菜单、角色下按钮集合 | |||
|  |                             string[] buttonList = BLL.ButtonPowerService.GetButtonPowerList(this.drpRole.Value, item.MenuId); | |||
|  |                             foreach (var itemButton in buttons) | |||
|  |                             { | |||
|  |                                 TreeNode chidButtonNode = new TreeNode | |||
|  |                                 { | |||
|  |                                     Text = itemButton.ButtonName, | |||
|  |                                     NodeID = itemButton.ButtonToMenuId, | |||
|  |                                     EnableCheckBox = true, | |||
|  |                                     EnableCheckEvent = true | |||
|  |                                 }; | |||
|  | 
 | |||
|  |                                 if (buttonList != null && buttonList.Contains(chidButtonNode.Text)) | |||
|  |                                 { | |||
|  |                                     chidButtonNode.Checked = true; | |||
|  |                                     chidButtonNode.Expanded = true; | |||
|  |                                 } | |||
|  |                                 chidNode.Nodes.Add(chidButtonNode); | |||
|  |                             } | |||
|  |                         } | |||
|  |                     } | |||
|  |                     else | |||
|  |                     { | |||
|  |                         this.BoundTree(chidNode.Nodes, sysMenus, item.MenuId, roleId); | |||
|  |                     } | |||
|  |                 } | |||
|  |             } | |||
|  |         } | |||
|  |         #endregion | |||
|  | 
 | |||
|  |         #region 全选、全不选 | |||
|  |         /// <summary> | |||
|  |         /// 全选、全不选 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         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); | |||
|  |             } | |||
|  |         } | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// 选中父节点 | |||
|  |         /// </summary> | |||
|  |         /// <param name="node"></param> | |||
|  |         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 获取按钮权限 | |||
|  |         /// <summary> | |||
|  |         /// 获取按钮权限 | |||
|  |         /// </summary> | |||
|  |         /// <param name="button"></param> | |||
|  |         /// <returns></returns> | |||
|  |         private void GetButtonPower() | |||
|  |         { | |||
|  |             var buttonList = BLL.CommonService.GetAllButtonList(this.CurrUser.LoginProjectId, this.CurrUser.UserId, BLL.Const.RolePowerMenuId); | |||
|  |             if (buttonList.Count() > 0) | |||
|  |             { | |||
|  |                 if (buttonList.Contains(BLL.Const.BtnSave)) | |||
|  |                 { | |||
|  |                     this.btnSave.Hidden = false; | |||
|  |                     this.btnCancel.Hidden = false; | |||
|  |                 } | |||
|  |             } | |||
|  |             if (this.CurrUser.UserId == BLL.Const.sysglyId) | |||
|  |             { | |||
|  |                 this.btnSave.Hidden = false; | |||
|  |                 this.btnCancel.Hidden = false; | |||
|  |             } | |||
|  |         } | |||
|  |         #endregion | |||
|  | 
 | |||
|  |         #region 保存按钮事件 | |||
|  |         /// <summary> | |||
|  |         /// 保存按钮事件 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void btnSave_Click(object sender, EventArgs e) | |||
|  |         { | |||
|  |             string roleId = this.drpRole.Value; | |||
|  |             string menuTyp = String.Join(", ", this.ckMenuType.SelectedValueArray); | |||
|  |             if (!String.IsNullOrEmpty(roleId)) | |||
|  |             { | |||
|  |                 BLL.ButtonPowerService.DeleteButtonPowerByRoleIdMenuType(roleId,menuTyp); | |||
|  |                 BLL.RolePowerService.DeleteRolePowerByRoleIdMenuType(roleId,menuTyp); | |||
|  |                 TreeNode[] nodes = this.tvMenu.GetCheckedNodes(); | |||
|  |                 if (nodes.Length > 0) | |||
|  |                 { | |||
|  |                     foreach (TreeNode tn in nodes) | |||
|  |                     { | |||
|  |                         if (tn.NodeID != "0") | |||
|  |                         { | |||
|  |                             if (BLL.RolePowerService.IsExistMenu(tn.NodeID)) | |||
|  |                             { | |||
|  |                                 Model.Sys_RolePower newPower = new Model.Sys_RolePower | |||
|  |                                 { | |||
|  |                                     RoleId = roleId, | |||
|  |                                     MenuId = tn.NodeID, | |||
|  |                                     MenuType = menuTyp, | |||
|  |                                     IsOffice =false, | |||
|  |                                 }; | |||
|  |                                 if (this.rbMenuType.SelectedValue == "MenuType_S") | |||
|  |                                 { | |||
|  |                                     newPower.IsOffice = true; | |||
|  |                                 } | |||
|  |                                 BLL.RolePowerService.SaveRolePower(newPower); | |||
|  |                             } | |||
|  | 
 | |||
|  |                             if (BLL.ButtonPowerService.isExistButtonToMenu(tn.NodeID)) | |||
|  |                             { | |||
|  |                                 Model.Sys_ButtonPower btn = new Model.Sys_ButtonPower | |||
|  |                                 { | |||
|  |                                     RoleId = roleId, | |||
|  |                                     MenuId = tn.ParentNode.NodeID,                                     | |||
|  |                                     ButtonToMenuId = tn.NodeID | |||
|  |                                 }; | |||
|  |                                 BLL.ButtonPowerService.SaveButtonPower(btn); | |||
|  |                             } | |||
|  |                         } | |||
|  |                     } | |||
|  |                 } | |||
|  |                  | |||
|  |                 BLL.LogService.AddSys_Log(this.CurrUser, string.Empty, string.Empty, BLL.Const.RolePowerMenuId, Const.BtnModify); | |||
|  |                 ShowNotify("保存成功!", MessageBoxIcon.Success); | |||
|  |             } | |||
|  |             else | |||
|  |             { | |||
|  |                 ShowNotify("请选择角色!", MessageBoxIcon.Warning); | |||
|  |             } | |||
|  |         } | |||
|  |         #endregion | |||
|  | 
 | |||
|  |         /// <summary> | |||
|  |         /// 取消按钮事件 | |||
|  |         /// </summary> | |||
|  |         /// <param name="sender"></param> | |||
|  |         /// <param name="e"></param> | |||
|  |         protected void btnCancel_Click(object sender, EventArgs e) | |||
|  |         { | |||
|  |             this.SelectedIndexChanged(); | |||
|  |         } | |||
|  | 
 | |||
|  |         protected void rbMenuType_SelectedIndexChanged(object sender, EventArgs e) | |||
|  |         { | |||
|  |             ConstValue.InitConstValueCheckBoxList(this.ckMenuType, this.rbMenuType.SelectedValue); | |||
|  |             this.SelectedIndexChanged(); | |||
|  |         } | |||
|  |     } | |||
|  | } |