#region
|
|
using System;
|
using System.Collections.Generic;
|
using System.Data;
|
using System.Linq;
|
using System.Text;
|
using System.Windows.Forms;
|
using CSFrameworkV5.Business;
|
using CSFrameworkV5.Business.BLL_Permission;
|
using CSFrameworkV5.Common;
|
using CSFrameworkV5.Core;
|
using CSFrameworkV5.Interfaces;
|
using CSFrameworkV5.Interfaces.InterfaceModels;
|
using CSFrameworkV5.Library.CommonClass;
|
using CSFrameworkV5.Models;
|
using DevExpress.XtraEditors;
|
using DevExpress.XtraEditors.Controls;
|
using DevExpress.XtraGrid.Views.Base;
|
using ItemCheckEventArgs = DevExpress.XtraEditors.Controls.ItemCheckEventArgs;
|
|
#endregion
|
|
namespace CSFrameworkV5.Library
|
{
|
public partial class frmGroupOrganization_DataRightsConfig : XtraForm
|
{
|
private List<GridPermissionItem> _AllGrids =
|
new List<GridPermissionItem>();
|
|
private IDictionary<string, List<DbTableModel>> _cache =
|
new Dictionary<string, List<DbTableModel>>();
|
|
private NodeModel _nodeModel;
|
|
private frmGroupOrganization_DataRightsConfig()
|
{
|
InitializeComponent();
|
}
|
|
private void btnAddConfig_Click(object sender, EventArgs e)
|
{
|
if (txtTables.Text == "")
|
{
|
txtTables.Focus();
|
return;
|
}
|
|
var o = txtTables.Properties.GetDataSourceRowByKeyValue(txtTables
|
.EditValue);
|
var m = o as DbTableModel;
|
|
var dtConfig = gcMain.DataSource as DataTable;
|
var rows = dtConfig.Select(
|
$"DataType='{_nodeModel.Type}' AND DataId='{_nodeModel.DataID}' AND DBName='{m.DBName}' AND TableName='{m.TableName}'");
|
if (rows.Length > 0)
|
{
|
Msg.Warning("当前用户已经存此表格的配置,不可重复!");
|
return;
|
}
|
|
var R = dtConfig.Rows.Add();
|
|
R[sys_DataPermission.RowID] = Guid.NewGuid().ToStringEx().ToLower();
|
R[sys_DataPermission.DataSetID] = Loginer.CurrentUser.DBID;
|
R[sys_DataPermission.DataType] = _nodeModel.Type;
|
R[sys_DataPermission.DataID] = _nodeModel.DataID;
|
R[sys_DataPermission.DBName] = m.DBName;
|
R[sys_DataPermission.TableName] = m.TableName;
|
R[sys_DataPermission.AllowColumns] = "";
|
R[sys_DataPermission.ColumnCount] = 0;
|
R[sys_DataPermission.CreateTime] = DateTime.Now;
|
R["DisplayText"] = _nodeModel.Text; //lookup字段
|
R["FlagChild"] = "N"; //lookup字段
|
|
//刷新表格,定位新增的记录
|
gcMain.RefreshDataSource();
|
gvMain.FocusedRowHandle =
|
gvMain.GetRowHandle(dtConfig.Rows.IndexOf(R));
|
if (gvMain.RowCount == 1)
|
gvMain_FocusedRowChanged(gvMain,
|
new FocusedRowChangedEventArgs(0, 0));
|
|
txtTables.EditValue = null;
|
}
|
|
private void btnCancel_Click(object sender, EventArgs e)
|
{
|
Close();
|
}
|
|
private void btnCheckAll_Click(object sender, EventArgs e)
|
{
|
listColumns.CheckAll();
|
}
|
|
private void btnOk_Click(object sender, EventArgs e)
|
{
|
DoSave();
|
}
|
|
private void btnUnCheck_Click(object sender, EventArgs e)
|
{
|
listColumns.UnCheckAll();
|
}
|
|
private void DoSave()
|
{
|
try
|
{
|
frmWaitingEx.ShowMe(this);
|
|
SetAllColumns();
|
|
var data = (gcMain.DataSource as DataTable).GetChanges();
|
if (data == null) return; //没有修改数据
|
|
var ok = new bllPermission().SaveDataPermission(data);
|
|
if (ok)
|
{
|
(gcMain.DataSource as DataTable).AcceptChanges();
|
Msg.ShowInformation("保存成功!");
|
}
|
else
|
{
|
Msg.Warning("保存失败!");
|
}
|
}
|
finally
|
{
|
frmWaitingEx.HideMe(this);
|
}
|
}
|
|
/// <summary>
|
/// </summary>
|
/// <param name="dataType">数据类型:Group/User</param>
|
/// <param name="dataID">组编号GroupCode/用户账号Account</param>
|
public static void Execute(NodeModel m)
|
{
|
var form = new frmGroupOrganization_DataRightsConfig();
|
form._nodeModel = m;
|
form.ShowDialog();
|
}
|
|
private void frmGridPermissionConfig_FormClosing(object sender,
|
FormClosingEventArgs e)
|
{
|
if (gcMain.DataSource != null &&
|
(gcMain.DataSource as DataTable).GetChanges() != null)
|
e.Cancel = !Msg.AskQuestion("您配置了表格权限数据没有保存,确定要退出吗?");
|
}
|
|
private void frmGridPermissionConfig_Load(object sender, EventArgs e)
|
{
|
DataBinderTools.BoundCheckEdit(chk);
|
|
txtTables.Properties.DropDownRows = 25;
|
txtTables.Properties.PopupWidth = 400;
|
|
LoadTablesLookup();
|
LoadConfig();
|
}
|
|
private void gvMain_FocusedRowChanged(object sender,
|
FocusedRowChangedEventArgs e)
|
{
|
var R = gvMain.GetFocusedDataRow();
|
if (R != null)
|
ShowConfig(R);
|
else
|
listColumns.Items.Clear();
|
}
|
|
private void listColumns_ItemCheck(object sender, ItemCheckEventArgs e)
|
{
|
UpdateRow();
|
}
|
|
private void LoadConfig()
|
{
|
if (_nodeModel.Type.ToUpper() == "USER")
|
{
|
var data =
|
new bllPermission().GetDataPermissionConfigByUser(_nodeModel
|
.DataID);
|
gcMain.DataSource = data;
|
|
picCurrent.Image = picUser.Image;
|
lblCurrent.Text =
|
_nodeModel.Text + "(" + _nodeModel.DataID + ")";
|
}
|
|
if (_nodeModel.Type.ToUpper() == "GROUP")
|
{
|
var data =
|
new bllPermission().GetDataPermissionConfigByGroup(
|
_nodeModel.DataID);
|
gcMain.DataSource = data;
|
|
picCurrent.Image = picDept.Image;
|
lblCurrent.Text =
|
_nodeModel.Text + "(" + _nodeModel.DataID + ")";
|
}
|
}
|
|
/// <summary>
|
/// 加载表格列表
|
/// </summary>
|
private void LoadTablesLookup()
|
{
|
var data = CommonData.GetDbTables();
|
txtTables.Properties.DisplayMember = "TableName";
|
txtTables.Properties.ValueMember = "TableName";
|
txtTables.Properties.DataSource = data;
|
}
|
|
private void SetAllColumns()
|
{
|
var R = gvMain.GetFocusedDataRow();
|
|
var sb = new StringBuilder();
|
|
foreach (CheckedListBoxItem item in listColumns.Items)
|
sb.Append((item.Value as ColumnItem).FieldName + ",");
|
|
R["AllFields"] = sb.ToStringEx();
|
}
|
|
/// <summary>
|
/// 显示当前配置的详细资料。
|
/// </summary>
|
/// <param name="R"></param>
|
private void ShowConfig(DataRow R)
|
{
|
var allowFields =
|
ConvertEx.ToString(
|
R[sys_DataPermission.AllowColumns]); //已配置的数据权限
|
var key = ConvertEx.ToString(R[sys_DataPermission.RowID]);
|
var dbname = ConvertEx.ToString(R[sys_DataPermission.DBName]);
|
var tableName = ConvertEx.ToString(R[sys_DataPermission.TableName]);
|
var flagChild = ConvertEx.ToString(R["FlagChild"]);
|
|
var allowColumns = allowFields.Split(new[] { ',' },
|
StringSplitOptions.RemoveEmptyEntries);
|
|
var allFields = new List<DbTableModel>();
|
|
if (_cache.ContainsKey(key))
|
{
|
allFields = _cache[key];
|
}
|
else
|
{
|
allFields = CommonData.GetDbTableFields(dbname, tableName);
|
_cache[key] = allFields;
|
}
|
|
listColumns.Items.Clear();
|
foreach (var m in allFields)
|
{
|
var isCheck =
|
allowColumns
|
.Where(e => m.FieldName.ToLower() == e.ToLower())
|
.FirstOrDefault() != null;
|
listColumns.Items.Add(
|
new ColumnItem(m.FieldName, m.DisplayName), isCheck);
|
}
|
|
//子级组不可配置
|
listColumns.Enabled = flagChild == "N";
|
lblTip.Visible = flagChild == "Y";
|
}
|
|
private void UpdateRow()
|
{
|
var R = gvMain.GetFocusedDataRow();
|
if (R == null) return;
|
|
var sb = new StringBuilder();
|
|
foreach (var item in listColumns.CheckedItems)
|
{
|
var cdata = (item as CheckedListBoxItem).Value as ColumnItem;
|
sb.Append(cdata.FieldName + ",");
|
}
|
|
R[sys_DataPermission.AllowColumns] = sb.ToStringEx();
|
R[sys_DataPermission.ColumnCount] = listColumns.CheckedItems.Count;
|
}
|
|
private void 全部不勾选ToolStripMenuItem_Click(object sender, EventArgs e)
|
{
|
listColumns.UnCheckAll();
|
}
|
|
private void 全部勾选ToolStripMenuItem_Click(object sender, EventArgs e)
|
{
|
listColumns.CheckAll();
|
}
|
}
|
|
public class ColumnItem
|
{
|
public ColumnItem(string fieldName, string caption)
|
{
|
FieldName = fieldName;
|
Caption = caption;
|
}
|
|
public string Caption { get; set; }
|
|
public string FieldName { get; set; }
|
|
public override string ToString()
|
{
|
return Caption;
|
}
|
}
|
|
public class UserItem
|
{
|
public UserItem(string userId, string name)
|
{
|
Account = userId;
|
UserName = name;
|
}
|
|
public string Account { get; set; }
|
|
public int ImageIndex { get; set; } = 0;
|
|
public string UserName { get; set; }
|
|
public override string ToString()
|
{
|
return UserName;
|
}
|
}
|
}
|