using DevExpress.XtraEditors.Repository; using DevExpress.XtraGrid.Columns; using Lskj.Business.Impl; using Lskj.Control; using Lskj.Core; using Lskj.Util; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Data.SqlClient; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace Lskj.PubUserTomodule { public partial class PersonnelInformation : UserControl { //是否初始化完成 public bool _isInitFinish = false; //角色选中id public string id = string.Empty; /// /// 全部的模块菜单 /// public DataTable AllMenu = new DataTable(); /// /// 顶部表格控件 /// public GridControlEx roleControlEx { get { return this.RoleControlEx; } } /// /// 点击删除事件,刷新主页面的权限 /// public event EventHandler onClickDeleteButton; public PersonnelInformation() { InitializeComponent(); InitControls(); //personnelControlEx.GridView.FocusedRowObjectChanged += GridView_FocusedRowObjectChanged;//人员的点击加载全部信息 personnelControlEx.GridView.RowClick += GridView_FocusedRowObjectChanged;//人员的点击加载全部信息 splitMain.SplitterMoved += new System.EventHandler(this.OnTopSplitterMoved); RoleControlEx.GridView.RowClick += GridView_RowClick;//角色点击加载对应模块权限 } /// /// 生成页面 /// public void InitControls() { //获取全部模块菜单 AllMenu = PowerImpl.GetAllModulesDataSpecial(); //不可编辑 this.MenuControlEx.GridView.OptionsBehavior.Editable = false; this.RoleControlEx.GridView.OptionsBehavior.Editable = false; this.personnelControlEx.GridView.OptionsBehavior.Editable = false; //this.AllModules.GridView.OptionsView.ColumnAutoWidth = true; DataTable employeetable = PowerImpl.GetWorkEmployee(); this.personnelControlEx.GridControl.DataSource = employeetable; GridColumn treeListColumnName = new GridColumn(); treeListColumnName.Caption = "主模块"; treeListColumnName.FieldName = "主模块"; treeListColumnName.MinWidth = 38; treeListColumnName.Visible = true; treeListColumnName.VisibleIndex = 0; treeListColumnName.Width = 150; GridColumn treeListColumnMenuId = new GridColumn(); treeListColumnMenuId.Caption = "菜单名字"; treeListColumnMenuId.FieldName = "菜单名字"; treeListColumnMenuId.Visible = true; treeListColumnMenuId.VisibleIndex = 1; treeListColumnMenuId.Width = 220; RepositoryItemCheckEdit checkEdit = new RepositoryItemCheckEdit(); checkEdit.ValueChecked = "1"; checkEdit.ValueUnchecked = "0"; checkEdit.ValueGrayed = 3; checkEdit.CheckedChanged += CheckEdit_CheckedChanged; GridColumn treeListColumnReadflag = new GridColumn(); treeListColumnReadflag.ColumnEdit = checkEdit; treeListColumnReadflag.Caption = "只读权限"; treeListColumnReadflag.FieldName = "Readflag"; treeListColumnReadflag.Name = "treeListColumnReadflagValue"; treeListColumnReadflag.Visible = true; treeListColumnReadflag.VisibleIndex = 3; GridColumn treeListColumnEditflag = new GridColumn(); treeListColumnEditflag.ColumnEdit = checkEdit; treeListColumnEditflag.Caption = "操作权限"; treeListColumnEditflag.FieldName = "Editflag"; treeListColumnEditflag.Name = "treeListColumnEditflagValue"; treeListColumnEditflag.Visible = true; treeListColumnEditflag.VisibleIndex = 2; this.MenuControlEx.GridView.Columns.AddRange(new GridColumn[] { treeListColumnMenuId, treeListColumnName, treeListColumnReadflag, treeListColumnEditflag }); GridColumn RoleIdColumn = new GridColumn(); RoleIdColumn.Caption = "编号"; RoleIdColumn.FieldName = "id"; RoleIdColumn.VisibleIndex = 1; GridColumn RoleRolenameColumn = new GridColumn(); RoleRolenameColumn.Caption = "角色"; RoleRolenameColumn.FieldName = "roleName"; RoleRolenameColumn.VisibleIndex = 2; RoleRolenameColumn.Width = 220; this.RoleControlEx.GridView.Columns.AddRange(new GridColumn[] { RoleIdColumn, RoleRolenameColumn, }); } private void CheckEdit_CheckedChanged(object sender, EventArgs e) { DataRow mSelectRow = this.MenuControlEx.GridView.GetFocusedDataRow(); if (mSelectRow["Readflag"] + "" == "1") mSelectRow["Readflag"] = "0"; if (mSelectRow["Editflag"] + "" == "1") mSelectRow["Editflag"] = "0"; MenuControlEx.gridControl.RefreshDataSource(); } /// /// 人员单击事件 /// /// /// public void GridView_FocusedRowObjectChanged(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e)//(object sender, DevExpress.XtraGrid.Views.Base.FocusedRowObjectChangedEventArgs e) { try { this.btn_unfold.Enabled = this.btn_Delete.Enabled = false; id = string.Empty; DataRow dr = this.personnelControlEx.GridView.GetFocusedDataRow(); if (dr != null) { string UserId = dr["员工ID"] + ""; if (string.IsNullOrWhiteSpace(UserId)) { MessageUtil.Show("员工ID获取错误,查询失败"); } string msg = string.Empty; //角色 DataTable RoleTable = GetPeopleData("0", UserId, out msg); this.RoleControlEx.gridControl.DataSource = RoleTable; //菜单 //DataTable MenuTable = GetPeopleData("1", UserId, out msg); //this.MenuControlEx.gridControl.DataSource = MenuTable; string tipMsg = string.Empty; DataSet ds = BaseImpl.getAuthorityByEmpid(1, UserId, "", "", out tipMsg); string editPurview = ds.Tables.Count > 0 ? ds.Tables[0].Rows[0]["pid"] + "" : string.Empty; string[] EditPurview = editPurview.Trim().TrimEnd(',').Split(','); DataSet ds2 = BaseImpl.getAuthorityByEmpid(2, UserId, "", "", out tipMsg); string readPurview = ds2.Tables.Count > 0 ? ds2.Tables[0].Rows[0]["pid"] + "" : string.Empty; string[] ReadPurview = readPurview.Trim().TrimEnd(',').Split(','); GetNodeCheckedID(ReadPurview, EditPurview); } else { this.RoleControlEx.gridControl.DataSource = null; this.MenuControlEx.gridControl.DataSource = null; } } catch (Exception ex) { MessageUtil.Show(ex.Message); } } /// /// 角色表单击事件 /// /// /// private void GridView_RowClick(object sender, DevExpress.XtraGrid.Views.Grid.RowClickEventArgs e) { DataRow mSelectRow = this.RoleControlEx.GridView.GetFocusedDataRow(); if (mSelectRow != null) { this.btn_unfold.Enabled = this.btn_Delete.Enabled = true; id = mSelectRow["id"] + ""; DataRow DR = PowerImpl.GetRoleRow(id); if (DR == null) return; string[] ReadPurview = DR["ReadPurview"].ToString().Trim().TrimEnd(',').Split(','); string[] EditPurview = DR["EditPurview"].ToString().Trim().TrimEnd(',').Split(','); GetNodeCheckedID(ReadPurview, EditPurview); } } /// /// 获取选择状态有权限的节点集合 /// /// 父级节点 private void GetNodeCheckedID(string[] ReadPurview, string[] EditPurview) { List rows = new List(); foreach (DataRow item in AllMenu.Rows) { if (EditPurview.Contains(item["MenuId"] + "") || ReadPurview.Contains(item["MenuId"] + "")) { if (ReadPurview.Contains(item["MenuId"] + "")) { item["Readflag"] = "1"; } if (EditPurview.Contains(item["MenuId"] + "")) { item["editflag"] = "1"; } if (!EditPurview.Contains(item["MenuId"] + "")) { item["editflag"] = "0"; } if (!ReadPurview.Contains(item["MenuId"] + "")) { item["Readflag"] = "0"; } rows.Add(item); } } if (rows.Count > 0) { this.MenuControlEx.gridControl.DataSource = rows.CopyToDataTable(); } else { this.MenuControlEx.gridControl.DataSource = AllMenu.Clone(); } } /// /// 根据人员id获取对应角色和菜单 /// /// 查询类型 0角色 1菜单 /// 员工编号 /// /// public static DataTable GetPeopleData(string typetig, string UserId, out string tipMsg) { SqlParameter pMsg = new SqlParameter("@msg", SqlDbType.VarChar, 2000); pMsg.Direction = ParameterDirection.InputOutput; SqlParameter returnValue = new SqlParameter("@return", SqlDbType.Int, 4); returnValue.Direction = ParameterDirection.ReturnValue; SqlParameter[] p = { new SqlParameter("@typetig",SqlDbType.Int), new SqlParameter("@employeeid",SqlDbType.Int), pMsg, returnValue, }; p[0].Value = typetig; p[1].Value = UserId; p[2].Value = ""; DataTable dataTable= SqlHelper.ExecuteDataSet(CommandType.StoredProcedure, "p_SystemSetUserPurview_print", "temp", p).Tables[0]; tipMsg = pMsg.Value.ToString(); int result = Convert.ToInt32(returnValue.Value + ""); if (result == -1) { MessageUtil.Show("查询失败,原因:" + tipMsg); return new DataTable(); } return dataTable; } /// /// 说明:初始化分割条位置 /// 创建人:龚宇超 /// 创建日期:2017-01-24 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// public void InitializeSplitterPosition() { try { string splitterPosition = IniHelper.Read("PersonnelInformation"); if (!string.IsNullOrEmpty(splitterPosition)) { this.splitMain.SplitterPosition = Convert.ToInt32(splitterPosition); } else { this.splitMain.SplitterPosition = this.Height * 2; } } catch (Exception e) { } finally { _isInitFinish = true; } } /// /// 说明:分割条移动保存位置 /// 创建人:龚宇超 /// 创建日期:2018-03-06 /// 修改人: /// 修改日期: /// 修改备注: /// 版本:1.0 /// /// The source of the event. /// The instance containing the event data. private void OnTopSplitterMoved(object sender, EventArgs e) { if (this._isInitFinish)// 是否为初始化创建 { IniHelper.Write("PersonnelInformation", this.splitMain.SplitterPosition + ""); } } /// /// 点击删除,删除选中人员的指定角色 /// /// /// private void btn_Delete_Click(object sender, EventArgs e) { //人员 DataRow dr = this.personnelControlEx.GridView.GetFocusedDataRow(); if (dr != null && !string.IsNullOrWhiteSpace(id)) { PowerImpl.deletRoleDate(dr["员工ID"] + "", id); savedata(int.Parse(dr["员工ID"] + "")); GridView_FocusedRowObjectChanged(null, null); if (onClickDeleteButton != null) onClickDeleteButton(null, null); } else { MessageUtil.Show("请选择需要删除的角色"); } } /// /// 执行保存时候的存储过程 /// /// /// /// /// public int savedata(int operatorid) { SqlParameter pMsg = new SqlParameter("@msg", SqlDbType.VarChar, 2000); pMsg.Direction = ParameterDirection.Output; SqlParameter returnValue = new SqlParameter("@return", SqlDbType.Int, 4); returnValue.Direction = ParameterDirection.ReturnValue; SqlParameter[] param = { new SqlParameter("@operatorid",SqlDbType.VarChar,20), pMsg, returnValue }; param[0].Value = operatorid; BaseImpl.ExecProcedure("[p_SystemSetUserPurview]", param); return Convert.ToInt32(returnValue.Value.ToString()); } /// /// 添加选中人员的角色权限 /// public void AddRolePermissions(string RoleId) { DataRow dr = this.personnelControlEx.GridView.GetFocusedDataRow(); if (dr != null && !string.IsNullOrWhiteSpace(RoleId)) { PowerImpl.DropDate(int.Parse(dr["员工ID"] + ""), dr["员工工号"] + "", dr["员工姓名"] + "", dr.Table.Columns.Contains("所属部门") ? dr["所属部门"] + "" : "", RoleId); int rValue = saveRoledata(int.Parse(RoleId)); } } /// /// 设置选中角色权限 /// /// /// private void btn_unfold_Click(object sender, EventArgs e) { if (!string.IsNullOrWhiteSpace(id)) { DataRow DR = PowerImpl.GetRoleRow(id); string ReadPurview = DR["ReadPurview"].ToString(); string EditPurview = DR["EditPurview"].ToString(); FrmPermissionSetting form = new FrmPermissionSetting(EditPurview, ReadPurview); form.onClickTheOKButton += new FrmPermissionSetting.ClickTheOKButton(UpdatePermissionModule); DialogResult result = form.ShowDialog(); } else { MessageUtil.Show("请选择角色"); } } /// /// 模块权限设置框点击确定时,返回更新后的权限。 /// /// /// private void UpdatePermissionModule(List EditPurview, List ReadPurview) { GetNodeCheckedID(ReadPurview.ToArray(), EditPurview.ToArray()); string Readdate = string.Empty; string Editdate = string.Empty; //获取菜单表 DataTable masterdt = MenuControlEx.gridControl.DataSource as DataTable; //菜单表中所有的模块按权限分类 for (int i = 0; i < masterdt.Rows.Count; i++) { if (masterdt.Rows[i]["ID"].ToString().Length > 4 && masterdt.Rows[i]["Editflag"] + "" == "1") { Editdate = Editdate + masterdt.Rows[i]["MenuId"] + ","; } else if (masterdt.Rows[i]["ID"].ToString().Length > 4 && masterdt.Rows[i]["Readflag"] + "" == "1") { Readdate = Readdate + masterdt.Rows[i]["MenuId"] + ","; } } if (PowerImpl.SaveRoleDate(id, Readdate, Editdate)) { int rValue = saveRoledata(int.Parse(id)); if (rValue == 0) { MessageUtil.Show("同步人员权限成功!"); } else { MessageUtil.Show("同步人员权限失败!"); return; } } } /// /// 执行保存角色权限时候的存储过程 /// /// /// /// /// public int saveRoledata(int roleid) { SqlParameter pMsg = new SqlParameter("@msg", SqlDbType.VarChar, 2000); pMsg.Direction = ParameterDirection.Output; SqlParameter returnValue = new SqlParameter("@return", SqlDbType.Int, 4); returnValue.Direction = ParameterDirection.ReturnValue; SqlParameter[] param = { new SqlParameter("@roleid ",SqlDbType.VarChar,20), pMsg, returnValue }; param[0].Value = roleid; BaseImpl.ExecProcedure("p_SystemSetRoleUserPurview", param); return Convert.ToInt32(returnValue.Value.ToString()); } //复制当前人员权限 private void CopyPermissions_Click(object sender, EventArgs e) { DataRow dr = this.personnelControlEx.GridView.GetFocusedDataRow(); if (dr != null) { FrmCopyStaffPermission frm = new FrmCopyStaffPermission(dr["员工ID"] + ""); if (frm.ShowDialog() == DialogResult.OK) { GridView_FocusedRowObjectChanged(null, null); if (onClickDeleteButton != null) onClickDeleteButton(null, null); } } } } }