using CloudBuilder.Core.Service; using CloudBuilder.Gui; 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.Wordprocessing; using Krypton.Toolkit; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http.Extensions; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace CloudBuilder.Security.Gui { public partial class SecurityFunctionOperationPage : AbstractPage { private SecurityMessagePolicy securityMessagePolicy; private SecurityFunctionRequest securityFunctionRequest; private SecurityFunctionDisplayData securityFunctionEntity; private SecurityFunctionData data; public SecurityFunctionOperationPage() { InitializeComponent(); } /// /// 第一次加载时执行,只执行一次 /// public override void FunctionLoaded() { try { base.FunctionLoaded(); //初始化容器------------------------------------- securityMessagePolicy = ServiceHelper.GetTypeService()!; securityFunctionRequest = ServiceHelper.GetTypeService(); //界面初始化 InitGui(); } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } private void InitGui() { InitBindingContext(); InitComBox(); InitDisplayMode(); this.ParentAbstractForm.AcceptButton = this.searchBut; this.ParentAbstractForm.CancelButton = this.resetBut; } /// /// 有特殊要求的UI控件初始化设置,Init与Add配对后,使用guiOperateHelper管理 /// private void InitBindingContext() { //需要绑定数据 guiBindingContext = new GuiBindingContext(); InitPermission(); functionNameTxt.Set(SecurityFunctionEntity.FUNCTION_NAME, functionNameLabel.Text, EnumEditModeColor.Required); functionEngNameTxt.Set(SecurityFunctionEntity.FUNCTION_ENG_NAME, functionEngNameLabel.Text, EnumEditModeColor.Required); functionLocalNameTxt.Set(SecurityFunctionEntity.FUNCTION_LOCAL_NAME, functionLocalNameLabel.Text, EnumEditModeColor.Required); pageNameTxt.Set(SecurityFunctionEntity.PAGE_NAME); apiRouteTxt.Set(SecurityFunctionEntity.API_ROUTE); pageUrlTxt.Set(SecurityFunctionEntity.PAGE_URL); iconTxt.Set(SecurityFunctionEntity.ICON); functionIndcCombo.Set(SecurityFunctionEntity.FUNCTION_INDC, functionIndcLabel.Text, EnumEditModeColor.Required); permissionNameTxt.Set(SecurityFunctionDisplayData.PERMISSION_NAME); dataGv.InitColumn(false, true); dataSonGv.InitColumn(false, true); guiOperateHelper = new GuiOperateHelper(); } private void InitComBox() { functionIndcCombo.SetDataSource(YesNoPolicy.GetInstance().GetComposeMessages(), true); } private void InitPermission() { createBut.Set(SecurityPermissionPolicy.SecurityFunction, Operate.Insert); amendBut.Set(SecurityPermissionPolicy.SecurityFunction, Operate.Update); deleteBut.Set(SecurityPermissionPolicy.SecurityFunction, Operate.Delete); } /// /// 每次从别的界面进入时执行,发生在FunctionLoaded之后 /// /// public override void FunctionActivated(object param) { try { if (param == null) { functionNameSearchTxt.Focus(); return; } InitDisplayMode(); SecurityFunctionOperationLinkup linkup = null; if (param is SecurityFunctionOperationLinkup) { linkup = (SecurityFunctionOperationLinkup)param; } this.DisplayMode = (GuiDisplayMode)linkup.DisplayMode; functionNameSearchTxt.Text = linkup.FunctionName; if (this.DisplayMode == GuiDisplayMode.View) { Search(); } else if (this.DisplayMode == GuiDisplayMode.Create) { Create(); } else if (this.DisplayMode == GuiDisplayMode.Amend) { Search(); Amend(); } functionNameSearchTxt.Focus(); } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } public override void FunctionSelected() { this.ParentAbstractForm.AcceptButton = this.searchBut; if (!IsDialog) this.ParentAbstractForm.CancelButton = this.resetBut; else this.ParentAbstractForm.CancelButton = this.cancelBut; functionNameSearchTxt.Focus(); } public override bool FunctionDeactivating() { if (this.DisplayMode == GuiDisplayMode.View) { return true; } else { return CancelEditing(); } } private bool CancelEditing() { DialogResult result = ShowMessageBox.ShowOption(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM_CANCEL), securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM)); //从外部跳转(非mainKryptonNavigator),result第一次不生效?,所以再执行一次生效 if (result == DialogResult.Cancel) { result = ShowMessageBox.ShowOption(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM_CANCEL), securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_CONFIRM)); } if (result == DialogResult.No) { return false; } Cancel(); return true; } private void InitDisplayMode() { this.DisplayMode = GuiDisplayMode.View; SetDisplayMode(); } private void SetDisplayMode() { if (this.DisplayMode == GuiDisplayMode.View) { savePanel.Visible = false; operationPanel.Visible = true; guiOperateHelper.EnableControls(true, topPanel); guiOperateHelper.EnableControls(false, contentPanel); //查詢有記錄時,修改等控件有效 if (securityFunctionEntity != null) guiOperateHelper.EnableControls(true, bottomPanel); else guiOperateHelper.EnableControls(false, bottomPanel); } else if (this.DisplayMode == GuiDisplayMode.Amend || this.DisplayMode == GuiDisplayMode.Create) { savePanel.Visible = true; operationPanel.Visible = false; guiOperateHelper.EnableControls(false, topPanel); guiOperateHelper.EnableControls(true, bottomPanel, contentPanel); if (this.DisplayMode == GuiDisplayMode.Amend) guiOperateHelper.EnableControls(false, functionNameTxt); guiOperateHelper.EnableControls(false, dataGv); functionLocalNameSonCol.ReadOnly = true; functionLocalNameSonCol.DefaultCellStyle.BackColor = System.Drawing.Color.Silver; functionNameSonCol.ReadOnly = true; functionNameSonCol.DefaultCellStyle.BackColor = System.Drawing.Color.Silver; dataGv.DefaultCellStyle.BackColor = System.Drawing.Color.Silver; } } private void PackUIToEntity() { guiBindingContext.DataPack(); SecurityFunctionMapViewEntity[] securityFunctionMapParents = dataGv.GetAllRows(); if (securityFunctionMapParents == null || securityFunctionMapParents.Length == 0) data.SecurityFunctionMapParents = null; else data.SecurityFunctionMapParents = securityFunctionMapParents.Select(x => new SecurityFunctionMapViewEntity() { ParentFunctionName = x.ParentFunctionName, SonFunctionName = functionNameTxt.Text }).ToArray(); SecurityFunctionMapViewEntity[] securityFunctionMapSons = dataSonGv.GetAllRows(); if (securityFunctionMapSons == null || securityFunctionMapSons.Length == 0) data.SecurityFunctionMapSons = null; else data.SecurityFunctionMapSons = securityFunctionMapSons.Select(x => new SecurityFunctionMapViewEntity() { ParentFunctionName = functionNameTxt.Text, SonFunctionName = x.SonFunctionName, Orderby = x.Orderby }).ToArray(); } private bool SaveValidate() { if (!guiOperateHelper.CheckValidate(this.mainPanel)) return false; return true; } private void Search() { try { if (string.IsNullOrEmpty(functionNameSearchTxt.Text)) return; Reset(); data = securityFunctionRequest.FindByKey(functionNameSearchTxt.Text); if (data == null || data.SecurityFunction == null) { ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND)); } else { securityFunctionEntity = data.SecurityFunction; PackEntityToUI(); SetDisplayMode(); } } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } private void Create() { this.DisplayMode = GuiDisplayMode.Create; guiOperateHelper.ResetControls(this.mainPanel); SetDisplayMode(); data = new SecurityFunctionData(); securityFunctionEntity = new SecurityFunctionDisplayData() { CreatedBy = string.Empty, UpdatedBy = string.Empty, CreatedDatetime = DateTime.Now, UpdatedDatetime = DateTime.Now, }; data.SecurityFunction = securityFunctionEntity; PackEntityToUI(); functionNameTxt.Focus(); } private void Amend() { this.DisplayMode = GuiDisplayMode.Amend; SetDisplayMode(); } private void PackEntityToUI() { guiBindingContext.DataBind(data.SecurityFunction, this); dataGv.SetDataSource(data.SecurityFunctionMapParents); dataSonGv.SetDataSource(data.SecurityFunctionMapSons); } private void Reset() { this.DisplayMode = GuiDisplayMode.View; securityFunctionEntity = null; guiOperateHelper.ResetControls(this.contentPanel); SetDisplayMode(); functionNameSearchTxt.Focus(); } public void Cancel() { if (!string.IsNullOrEmpty(functionNameSearchTxt.Text)) Search(); else Reset(); } private void functionNameSearchBut_Click(object sender, EventArgs e) { try { AbstractForm dialog = GetAbstractDialog(typeof(SecurityFunctionEnquiryPage).Name); if (DialogResult.OK != dialog.ShowDialog()) return; functionNameSearchTxt.Text = ((SecurityFunctionEntity[])dialog.OutputData)[0].FunctionName; Search(); } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } private void permissionSearchBut_Click(object sender, EventArgs e) { try { AbstractForm dialog = GetAbstractDialog(typeof(SecurityPermissionEnquiryPage).Name); if (DialogResult.OK != dialog.ShowDialog()) return; permissionNameTxt.Text = ((SecurityPermissionEntity[])dialog.OutputData)[0].PermissionName; } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } private void searchBut_Click(object sender, EventArgs e) { try { if (string.IsNullOrEmpty(functionNameSearchTxt.Text)) { ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_VALID_INPUT, GuiOperateHelper.GetLabelText(functionNameSearchLabel.Text))); this.functionNameSearchTxt.Focus(); return; } this.DisplayMode = GuiDisplayMode.View; Search(); } 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) { try { guiOperateHelper.ResetControls(this.topPanel); Reset(); } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } private void createBut_Click(object sender, EventArgs e) { HandleException(() => Create()); } private void amendBut_Click(object sender, EventArgs e) { HandleException(() => Amend()); } private void deleteBut_Click(object sender, EventArgs e) { try { if (securityFunctionEntity == null) { 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; securityFunctionRequest.Delete(securityFunctionEntity.FunctionName); ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_DELETED_NULL)); Reset(); } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } private void saveBut_Click(object sender, EventArgs e) { try { if (!SaveValidate()) return; PackUIToEntity(); if (this.DisplayMode == GuiDisplayMode.Create) securityFunctionRequest.Insert(data); else securityFunctionRequest.Update(data); ShowMessageBox.ShowInfo((this.DisplayMode == GuiDisplayMode.Create) ? securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_CREATED_NULL) : securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_SUCCEED_UPDATED_NULL)); functionNameSearchTxt.Text = securityFunctionEntity.FunctionName; Search(); } 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) { HandleException(() => CancelEditing()); } private void addBut_Click(object sender, EventArgs e) { try { AbstractForm dialog = GetAbstractDialog(typeof(SecurityFunctionEnquiryPage).Name); SecurityFunctionSearchCriteria criteria = new SecurityFunctionSearchCriteria(); criteria.FunctionIndc = YesNoPolicy.NO; criteria.FunctionIndcEnable = false; if (DialogResult.OK != dialog.ShowViewDialog(null, criteria)) return; SecurityFunctionEntity[] securityFunctions = (SecurityFunctionEntity[])dialog.OutputData; SecurityFunctionMapViewEntity map; List l = new List(); List parentFunctionNames = new List(); int maxOrder = 1; if (dataSonGv.Rows.Count > 1) { maxOrder = dataSonGv.GetAllRows().Max(x => x.Orderby) + 1; parentFunctionNames = dataSonGv.GetAllRows().Select(x => x.ParentFunctionName).ToList(); } foreach (SecurityFunctionEntity securityFunction in securityFunctions) { if (parentFunctionNames.Contains(securityFunction.FunctionName)) continue; parentFunctionNames.Add(securityFunction.FunctionName); map = new SecurityFunctionMapViewEntity(); map.ParentFunctionName = securityFunction.FunctionName; map.ParentFunctionLocalName = securityFunction.FunctionLocalName; map.Orderby = maxOrder++; l.Add(map); } dataGv.AddRow(l); } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } private void delBut_Click(object sender, EventArgs e) { if (dataGv.RowCount <= 0 || dataGv.SelectedCells.Count <= 0) { ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND)); return; } dataGv.DeleteRows(dataGv.SelectedCells); } private void addSonBut_Click(object sender, EventArgs e) { try { if (functionIndcCombo.GetValue() != YesNoPolicy.NO) { ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_VALID_SELECT, GuiOperateHelper.GetLabelText(functionIndcLabel.Text))); functionIndcCombo.Focus(); return; } AbstractForm dialog = GetAbstractDialog(typeof(SecurityFunctionEnquiryPage).Name); SecurityFunctionSearchCriteria criteria = new SecurityFunctionSearchCriteria(); criteria.FunctionIndc = YesNoPolicy.YES; criteria.FunctionIndcEnable = false; if (DialogResult.OK != dialog.ShowViewDialog(null, criteria)) return; SecurityFunctionEntity[] securityFunctions = (SecurityFunctionEntity[])dialog.OutputData; SecurityFunctionMapViewEntity map; List l = new List(); List sonFunctionNames = new List(); int maxOrder = 1; if (dataSonGv.Rows.Count > 1) { maxOrder = dataSonGv.GetAllRows().Max(x => x.Orderby) + 1; sonFunctionNames = dataSonGv.GetAllRows().Select(x => x.SonFunctionName).ToList(); } foreach (SecurityFunctionEntity securityFunction in securityFunctions) { if (sonFunctionNames.Contains(securityFunction.FunctionName)) continue; sonFunctionNames.Add(securityFunction.FunctionName); map = new SecurityFunctionMapViewEntity(); map.SonFunctionName = securityFunction.FunctionName; map.SonFunctionLocalName = securityFunction.FunctionLocalName; map.Orderby = maxOrder++; l.Add(map); } dataSonGv.AddRow(l); } catch (ValidatedException ex) { ShowMessageBox.ShowInfo(ex.Message); } catch (ServiceErrorException ex) { ShowMessageBox.ShowError(ex.Message); } catch (Exception ex) { ShowMessageBox.ShowError(ex.Message); } } private void delSonBut_Click(object sender, EventArgs e) { if (dataSonGv.RowCount <= 0 || dataSonGv.SelectedCells.Count <= 0) { ShowMessageBox.ShowInfo(securityMessagePolicy.ComposeMessage(SecurityMessagePolicy.GUI_WS_RECORD_NOT_FOUND)); return; } dataSonGv.DeleteRows(dataSonGv.SelectedCells); } } }