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 SecurityFunctionEnquiryPage : AbstractPage
{
private SecurityFunctionEntity[] securityFunctions = null!;
private SecurityFunctionSearchCriteria searchCriteria = null!;
private BindingContextAttributeProvider provider;
private SecurityFunctionRequest securityFunctionRequest;
private SecurityMessagePolicy securityMessagePolicy;
//初始化Page,注入容器内,不要在此做任何事情
public SecurityFunctionEnquiryPage()
{
InitializeComponent();
}
///
/// 第一次加载时执行,只执行一次
///
public override void FunctionLoaded()
{
try
{
base.FunctionLoaded();
//初始化容器-------------------------------------
securityFunctionRequest = ServiceHelper.GetTypeService();
securityMessagePolicy = ServiceHelper.GetTypeService()!;
//界面初始化
InitGui();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
///
/// 每次从别的界面进入时执行,不包括下面的界面切换,发生在FunctionLoaded之后
/// 这个是有参数传入,常用于查询界面进入到操作界面发生
///
///
public override void FunctionActivated(object param)
{
base.FunctionActivated(param);
functionNameTxt.Focus();
}
///
/// 弹出界面调用,发生在FunctionLoaded()之后
///
public override void InitInputData(object param, GuiDisplayMode mode)
{
base.InitInputData(param, mode);
if (param == null) return;
SecurityFunctionSearchCriteria criteria = param as SecurityFunctionSearchCriteria;
functionNameTxt.Text = criteria.FunctionName;
functionLocalNameTxt.Text = criteria.FunctionLocalName;
if (!string.IsNullOrEmpty(criteria.FunctionIndc))
functionIndcCombo.SelectedValue = criteria.FunctionIndc;
if (criteria.FunctionIndcEnable != null && criteria.FunctionIndcEnable == false) guiOperateHelper.EnableControls(false, functionIndcCombo);
Search();
}
///
/// 当Page被选中时执行,用于Tab导航的切换,没有参数变化,跟FunctionActivated有区别
///
public override void FunctionSelected()
{
this.ParentAbstractForm.AcceptButton = this.searchBut;
if (!IsDialog)
this.ParentAbstractForm.CancelButton = this.resetBut;
else
this.ParentAbstractForm.CancelButton = this.cancelBut;
functionNameTxt.Focus();
}
///
/// 控件的初始化
///
private void InitGui()
{
//DataGridView初始化不要自动生成列,且允许重排列名操作
dataGv.InitColumn(true, true);
InitCombo();
//初始化绑定设置
InitBindingContext();
//设置显示模式
SetDisplayMode(true);
InitGridViewPagination();
}
///
/// DataGridView分页控件初始化
///
private void InitGridViewPagination()
{
searchCriteria = new SecurityFunctionSearchCriteria();
gridViewPagination.SetLimit(searchCriteria.limit);
gridViewPagination.OnPaginationChanged += Search;
gridViewPagination.OnPrint += Print;
}
private void InitCombo()
{
functionIndcCombo.SetDataSource(YesNoPolicy.GetInstance().GetComposeMessages(), true);
}
///
/// 打印当前查询结果
///
private void Print()
{
//設置查詢條件
List searCriteria = new List();
if (!string.IsNullOrEmpty(functionNameTxt.Text))
searCriteria.Add(searchFunctionNameLabel.Text + functionNameTxt.Text);
//設置每列的格式
TemplateHeader[] headers = dataGv.GetTemplateHeaders();
//打印Excel
new DataToExcelHelper(null).PrintExcel(this.Parent.Text, this.Parent.Text, searCriteria, headers, securityFunctions);
}
///
/// 有特殊要求的UI控件初始化设置,使用guiOperateHelper管理
///
private void InitBindingContext()
{
InitPermission();
guiOperateHelper = new GuiOperateHelper();
}
private void InitPermission()
{
viewBut.Set(SecurityPermissionPolicy.SecurityGroup, Operate.Find);
createBut.Set(SecurityPermissionPolicy.SecurityGroup, Operate.Insert);
amendBut.Set(SecurityPermissionPolicy.SecurityGroup, Operate.Update);
deleteBut.Set(SecurityPermissionPolicy.SecurityGroup, Operate.Delete);
}
private void SetDisplayMode(bool enable)
{
guiOperateHelper.EnableControls(true, this.searchPanel, this.bottomPanel);
guiOperateHelper.EnableControls(false, dataGv);
if (securityFunctions != null)
guiOperateHelper.EnableControls(enable, viewBut, amendBut, deleteBut);
else
guiOperateHelper.EnableControls(false, viewBut, amendBut, deleteBut);
//如果是弹出的窗口,不显示
createBut.Visible = !IsDialog;
dialogPanel.Visible = IsDialog;
operationPanel.Visible = !IsDialog;
this.functionNameTxt.Focus();
}
private void searchBut_Click(object sender, EventArgs e)
{
try
{
Search();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
///
/// 与Web同步写法
///
///
private SecurityFunctionSearchCriteria PackSearchCriteria()
{
searchCriteria = new SecurityFunctionSearchCriteria();
searchCriteria.limit = gridViewPagination.Limit;
searchCriteria.page = gridViewPagination.CurrentPage;
List filters = new List();
SearchFilter filter = new SearchFilter();
filter.Column = SecurityFunctionEntity.DB_FUNCTION_NAME;
filter.Type = SearchFilterTypePolicy.TEXT;
filter.Operator = SearchFilterOperatorPolicy.CONTAIN;
filter.Value = functionNameTxt.GetValue();
filters.Add(filter);
filter = new SearchFilter();
filter.Column = SecurityFunctionEntity.DB_FUNCTION_LOCAL_NAME;
filter.Type = SearchFilterTypePolicy.TEXT;
filter.Operator = SearchFilterOperatorPolicy.CN_CONTAIN;
filter.Value = functionLocalNameTxt.GetValue();
filters.Add(filter);
filter = new SearchFilter();
filter.Column = SecurityFunctionEntity.DB_FUNCTION_INDC;
filter.Type = SearchFilterTypePolicy.TEXT;
filter.Operator = SearchFilterOperatorPolicy.SINGLE;
filter.Value = (string)functionIndcCombo.GetValue();
filters.Add(filter);
searchCriteria.Filter = filters.ToArray();
return searchCriteria;
}
private void Search()
{
try
{
var data = securityFunctionRequest.FindBySearchCriteria(PackSearchCriteria());
if (data != null) securityFunctions = data.SecurityFunctionDisplayDatas;
gridViewPagination.SetTotal(data.Total);
if (securityFunctions == null || securityFunctions.Length == 0)
{
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND));
guiOperateHelper.ResetControls(this.dataGv);
return;
}
dataGv.SetDataSource(securityFunctions);
SetDisplayMode(true);
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void resetBut_Click(object sender, EventArgs e)
{
guiOperateHelper.ResetControls(this.mainPanel);
//Reset时默认会设置limit为AbstractSearchCriteria.limit,如果不同时,需要重新设置
gridViewPagination.SetLimit(searchCriteria.limit);
SetDisplayMode(false);
}
private void createBut_Click(object sender, EventArgs e)
{
DisplayPage(GuiDisplayMode.Create, null);
}
private void DisplayPage(GuiDisplayMode mode, string functionName)
{
SecurityFunctionOperationLinkup linkupData = new SecurityFunctionOperationLinkup();
linkupData.DisplayMode = Convert.ToInt32(mode);
linkupData.FunctionName = functionName;
this.DisplayAbstractPage(typeof(SecurityFunctionOperationPage).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;
}
SecurityFunctionEntity data = dataGv.GetRowData(dataGv.SelectedCells[0].RowIndex);
DisplayPage(GuiDisplayMode.View, data.FunctionName);
}
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;
}
SecurityFunctionEntity data = dataGv.GetRowData(dataGv.SelectedCells[0].RowIndex);
DisplayPage(GuiDisplayMode.Amend, data.FunctionName);
}
private void deleteBut_Click(object sender, EventArgs e)
{
try
{
Delete();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
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;
SecurityFunctionEntity[] datas = dataGv.GetSelectedCellsData();
securityFunctionRequest.Deletes(datas.Select(x => x.FunctionName).ToArray());
ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_DELETED_NULL));
Search();
}
private void okBut_Click(object sender, EventArgs e)
{
try
{
if (dataGv.RowCount <= 0 || dataGv.SelectedCells.Count <= 0) return;
SecurityFunctionEntity[] datas = dataGv.GetSelectedCellsData();
this.ParentAbstractForm.OutputData = datas;
this.ParentAbstractForm.DialogResult = DialogResult.OK;
this.ParentAbstractForm.Close();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void cancelBut_Click(object sender, EventArgs e)
{
try
{
this.ParentAbstractForm.DialogResult = DialogResult.Cancel;
this.ParentAbstractForm.Close();
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
private void dataGv_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
try
{
if (IsDialog)
okBut_Click(null, null);
else
viewBut_Click(null, null);
}
catch (ValidatedException ex)
{
ShowMessageBox.ShowInfo(ex.Message);
}
catch (ServiceErrorException ex)
{
ShowMessageBox.ShowError(ex.Message);
}
catch (Exception ex)
{
ShowMessageBox.ShowError(ex.Message);
}
}
}
}