CloudBuilder/CloudBuilder.Security.Gui/SecurityUserEnquiryPage.cs
owenchen 1c0c83af5f ow
2026-05-12 10:09:31 +08:00

349 lines
13 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

using ClosedXML.Excel;
using CloudBuilder.Core.DependencyInjection.Form;
using CloudBuilder.Core.Report;
using CloudBuilder.Core.Service;
using CloudBuilder.Gui;
using CloudBuilder.Gui.DependencyInjection;
using CloudBuilder.Request.Security;
using CloudBuilder.Security.Data;
using CloudBuilder.Security.Entity;
using CloudBuilder.Security.Linkup;
using CloudBuilder.Security.Policy;
using CloudBuilder.Security.SearchCriteria;
using DocumentFormat.OpenXml.Spreadsheet;
using Krypton.Toolkit;
using Microsoft.AspNetCore.Authorization;
using Microsoft.AspNetCore.Http.Extensions;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.IdentityModel.Tokens;
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace CloudBuilder.Security.Gui
{
public partial class SecurityUserEnquiryPage : AbstractPage
{
private SecurityUserEntity[] securityUsers = null!;
private SecurityUserSearchCriteria searchCriteria = null!;
private BindingContextAttributeProvider provider;
private SecurityUserRequest securityUserRequest;
private SecurityMessagePolicy securityMessagePolicy;
//初始化Page注入容器内不要在此做任何事情
public SecurityUserEnquiryPage()
{
InitializeComponent();
}
/// <summary>
/// 第一次加载时执行,只执行一次
/// </summary>
public override void FunctionLoaded()
{
HandleException(() => onFunctionLoaded());
}
private void onFunctionLoaded()
{
base.FunctionLoaded();
//初始化容器-------------------------------------
securityUserRequest = ServiceHelper.GetTypeService<SecurityUserRequest>();
securityMessagePolicy = ServiceHelper.GetTypeService<SecurityMessagePolicy>()!;
//界面初始化
InitGui();
}
/// <summary>
/// 每次从别的界面进入时执行不包括下面的界面切换发生在FunctionLoaded之后
/// 这个是有参数传入,常用于查询界面进入到操作界面发生
/// </summary>
/// <param name="param"></param>
public override void FunctionActivated(object param)
{
base.FunctionActivated(param);
userNameTxt.Focus();
}
/// <summary>
/// 当Page被选中时执行,用于Tab导航的切换没有参数变化跟FunctionActivated有区别
/// </summary>
public override void FunctionSelected()
{
this.ParentAbstractForm.AcceptButton = this.searchBut;
if (!IsDialog)
this.ParentAbstractForm.CancelButton = this.resetBut;
else
this.ParentAbstractForm.CancelButton = this.cancelBut;
userNameTxt.Focus();
}
/// <summary>
/// 控件的初始化
/// </summary>
private void InitGui()
{
//DataGridView初始化不要自动生成列且允许重排列名操作
dataGv.InitColumn(true, true);
//绑定ComboBox数据源
InitCombo();
//设置userIsValidIndcCombo默认值
userIsValidIndcCombo.SelectedValue = YesNoPolicy.YES;
//初始化绑定设置
InitBindingContext();
//设置显示模式
SetDisplayMode(true);
InitGridViewPagination();
}
/// <summary>
/// DataGridView分页控件初始化
/// </summary>
private void InitGridViewPagination()
{
searchCriteria = new SecurityUserSearchCriteria();
gridViewPagination.SetLimit(searchCriteria.limit);
gridViewPagination.OnPaginationChanged += Search;
gridViewPagination.OnPrint += Print;
}
/// <summary>
/// 打印当前查询结果
/// </summary>
private void Print()
{
//設置Value與description的映射另一方式是dataValeOperation传入函数
Dictionary<string, Dictionary<string, object>> mappings = new Dictionary<string, Dictionary<string, object>>();
Dictionary<string, object> validDic = YesNoPolicy.GetInstance().GetDictionary();
mappings.Add(SecurityUserEntity.USER_IS_VALID_INDC, validDic);
//設置查詢條件
List<string> searCriteria = new List<string>();
if (!string.IsNullOrEmpty(userNameTxt.Text))
searCriteria.Add(userNameLabel.Text + userNameTxt.Text);
if (!string.IsNullOrEmpty(userIsValidIndcCombo.Text))
searCriteria.Add(deleteLabel.Text + userIsValidIndcCombo.Text);
//設置每列的格式
TemplateHeader[] headers = dataGv.GetTemplateHeaders();
headers.Where(x => x.BindingName == SecurityUserEntity.USER_IS_VALID_INDC).FirstOrDefault().CellTypeFormatName = SecurityUserEntity.USER_IS_VALID_INDC;
//打印Excel
new DataToExcelHelper<SecurityUserEntity>(null).PrintExcel(this.Parent.Text, this.Parent.Text, searCriteria, headers, securityUsers, mappings, null, CellTypeFormatOperation, null);
}
public void CellTypeFormatOperation(IXLWorksheet xLWorksheet, string functionName, object cellValue, int rowIndex, int ColIndex, SecurityUserEntity[] datas)
{
SecurityUserEntity entity = (SecurityUserEntity)cellValue;
if (entity.UserIsValidIndc == YesNoPolicy.NO)
{
xLWorksheet.Range(rowIndex, ColIndex, rowIndex, ColIndex).Style.Fill.PatternType = XLFillPatternValues.Solid;
xLWorksheet.Range(rowIndex, ColIndex, rowIndex, ColIndex).Style.Fill.SetBackgroundColor(XLColor.Red);
}
}
private void InitCombo()
{
userIsValidIndcCombo.SetDataSource(YesNoPolicy.GetInstance().GetComposeMessages(), true);
}
/// <summary>
/// 有特殊要求的UI控件初始化设置使用guiOperateHelper管理
/// </summary>
private void InitBindingContext()
{
InitPermission();
guiOperateHelper = new GuiOperateHelper();
}
private void InitPermission()
{
viewBut.Set(SecurityPermissionPolicy.SecurityUser, Operate.Find);
createBut.Set(SecurityPermissionPolicy.SecurityUser, Operate.Insert);
amendBut.Set(SecurityPermissionPolicy.SecurityUser, Operate.Update);
deleteBut.Set(SecurityPermissionPolicy.SecurityUser, Operate.Delete);
}
private void SetDisplayMode(bool enable)
{
guiOperateHelper.EnableControls(true, this.searchPanel, this.bottomPanel);
guiOperateHelper.EnableControls(false, dataGv);
if (securityUsers != null)
guiOperateHelper.EnableControls(enable, viewBut, amendBut, deleteBut);
else
guiOperateHelper.EnableControls(false, viewBut, amendBut, deleteBut);
//如果是弹出的窗口,不显示
createBut.Visible = !IsDialog;
dialogPanel.Visible = IsDialog;
operationPanel.Visible = !IsDialog;
this.userNameTxt.Focus();
}
private void searchBut_Click(object sender, EventArgs e)
{
HandleException(() => Search());
}
/// <summary>
/// 与Web同步写法
/// </summary>
/// <returns></returns>
private SecurityUserSearchCriteria PackSearchCriteria()
{
searchCriteria = new SecurityUserSearchCriteria();
searchCriteria.limit = gridViewPagination.Limit;
searchCriteria.page = gridViewPagination.CurrentPage;
List<SearchFilter> filters = new List<SearchFilter>();
SearchFilter filter = new SearchFilter();
filter.Column = SecurityUserEntity.DB_USER_NAME;
filter.Type = SearchFilterTypePolicy.TEXT;
filter.Operator = SearchFilterOperatorPolicy.CONTAIN;
filter.Value = userNameTxt.GetValue();
filters.Add(filter);
filter = new SearchFilter();
filter.Column = SecurityUserEntity.DB_USER_IS_VALID_INDC;
filter.Type = SearchFilterTypePolicy.TEXT;
filter.Operator = SearchFilterOperatorPolicy.SINGLE;
filter.Value = (string)userIsValidIndcCombo.GetValue();
filters.Add(filter);
searchCriteria.Filter = filters.ToArray();
return searchCriteria;
}
private void Search()
{
var data = securityUserRequest.FindBySearchCriteria(PackSearchCriteria());
if (data != null) securityUsers = data.Datas;
gridViewPagination.SetTotal(data.Total);
if (securityUsers == null || securityUsers.Length == 0)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
guiOperateHelper.ResetControls(this.dataGv);
return;
}
dataGv.SetDataSource(securityUsers);
SetDisplayMode(true);
}
private void resetBut_Click(object sender, EventArgs e)
{
guiOperateHelper.ResetControls(this.mainPanel);
SetDisplayMode(false);
userIsValidIndcCombo.SelectedValue = YesNoPolicy.YES;
}
private void createBut_Click(object sender, EventArgs e)
{
DisplayPage(GuiDisplayMode.Create, null);
}
private void DisplayPage(GuiDisplayMode mode, string userName)
{
SecurityUserOperationLinkup linkupData = new SecurityUserOperationLinkup();
linkupData.DisplayMode = Convert.ToInt32(mode);
linkupData.UserName = userName;
this.DisplayAbstractPage(typeof(SecurityUserOperationPage).Name, linkupData);
}
private void viewBut_Click(object sender, EventArgs e)
{
if (dataGv.RowCount <= 0 || dataGv.SelectedCells.Count <= 0)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
return;
}
SecurityUserEntity data = dataGv.GetRowData<SecurityUserEntity>(dataGv.SelectedCells[0].RowIndex);
DisplayPage(GuiDisplayMode.View, data.UserName);
}
private void amendBut_Click(object sender, EventArgs e)
{
if (dataGv.RowCount <= 0 || dataGv.SelectedCells.Count <= 0)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
return;
}
SecurityUserEntity data = dataGv.GetRowData<SecurityUserEntity>(dataGv.SelectedCells[0].RowIndex);
DisplayPage(GuiDisplayMode.Amend, data.UserName);
}
private void deleteBut_Click(object sender, EventArgs e)
{
HandleException(() => Delete());
}
private void Delete()
{
if (dataGv.RowCount <= 0 || dataGv.SelectedCells.Count <= 0)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
return;
}
if (DialogResult.Yes != ShowMessageBox.ShowOption(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM_DEL_NULL), securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_DELETE))) return;
SecurityUserEntity[] datas = dataGv.GetSelectedCellsData<SecurityUserEntity>();
securityUserRequest.Deletes(datas.Select(x => x.UserName).ToArray());
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_DELETED_NULL));
Search();
}
private void okBut_Click(object sender, EventArgs e)
{
if (dataGv.RowCount <= 0 || dataGv.SelectedCells.Count <= 0) return;
//SecurityUserEntity data = dataGv.GetRowData<SecurityUserEntity>(dataGv.SelectedCells[0].RowIndex);
SecurityUserEntity[] datas = dataGv.GetSelectedCellsData<SecurityUserEntity>();
this.ParentAbstractForm.OutputData = datas;
this.ParentAbstractForm.DialogResult = DialogResult.OK;
this.ParentAbstractForm.Close();
}
private void cancelBut_Click(object sender, EventArgs e)
{
this.ParentAbstractForm.DialogResult = DialogResult.Cancel;
this.ParentAbstractForm.Close();
}
private void dataGv_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
if (IsDialog)
okBut_Click(null, null);
else
viewBut_Click(null, null);
}
}
}