ningshuxia
2025-03-24 7b8ae93d47186c442ff890a1a83d108f115924c7
WinFrmUI/PBS.WinFrmUI.Hydro/02-quick-modeling/01-core/QuickModelingPage.cs
@@ -1,4 +1,5 @@
using DevExpress.XtraLayout.Utils;
using DevExpress.XtraRichEdit.Import.Html;
using Mapster;
namespace PBS.WinFrmUI.Hydro
@@ -8,44 +9,44 @@
        public QuickModelingPage()
        {
            InitializeComponent();
            this.layoutControl1.SetupLayoutControl();
            //this.ClosePageEvent += CreateXhsSchemeDlg_FormClosing;
            this.layoutControl1.SetupLayoutControl();
        }
        /// <summary>
        /// 重载数据
        /// </summary>
        //public event Action<XhsSchemeVmo> ReloadDataEvent;
        private QuickModelingViewModel _vm = null;//视图
        private QuickModelingManager _wizard = null;//管理器
        private List<IWizardPageAsync<QuickModelingViewModel>> _allPageList = null;//所有页面列表
        private List<IWizardPageAsync<QuickModelingViewModel>> _bindingPageList = null;//绑定页面列表
        /// <summary>
        /// 绑定数据
        /// 初始化数据源
        /// </summary>
        public void SetBindingData
            (
            )
        public override async void InitialDataSource()
        {
            if (project == null)
            {
                return;
            }
            if (projectSite == null)
            {
                return;
            }
            if (hydroInfo == null)
            {
                return;
            }
            var hydroInfoRhs = hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
            _vm = new QuickModelingViewModel(project, projectSite, hydroInfoRhs, allSchemeList);
            base.InitialDataSource();
            _vm = new QuickModelingViewModel();
            _vm.Place = new();
            _vm.Facility = new();
            _vm.Place.Name = "嘉定场所";
            _vm.Facility.Name = "嘉定设施";
            _vm.Facility.WaterSupply = eWaterSupply.Low;
            _vm.Facility.SupplyMode = eSupplyMode.Municipal;
            _vm.Facility.Floor = 7;
            _vm.Facility.FloorHeight = 3;
            _vm.Facility.Households = 40;
            _vm.Facility.MaxWaterDemand = 44;
            _vm.Facility.ConstantPressure = 22.5;
            _vm.Facility.TerminalPressure = 15;
            _vm.Facility.MaxHeight = 40;
            _vm.AssetsPackageList = await BLLFactory<HStation.BLL.AssetsPackageMain>.Instance.GetAll();
            InitialManager();
        }
        //初始化管理器
        private void InitialManager()
@@ -77,276 +78,42 @@
            this.navigationFrame.Pages.Clear();
            //基础信息
            var pageInfo = _allPageList.Find(x => x is CreateXhsSchemeInfoPage) as CreateXhsSchemeInfoPage;
            if (pageInfo == null)
            var pagePlace = _allPageList.Find(x => x is QuickModelingPlaceWizardPage) as QuickModelingPlaceWizardPage;
            if (pagePlace == null)
            {
                pageInfo = new CreateXhsSchemeInfoPage();
                pageInfo.Dock = DockStyle.Fill;
                _allPageList.Add(pageInfo);
                pagePlace = new QuickModelingPlaceWizardPage();
                pagePlace.Dock = DockStyle.Fill;
                _allPageList.Add(pagePlace);
            }
            _bindingPageList.Add(pageInfo);
            this.navigationFrame.AddPage(pageInfo);
            _bindingPageList.Add(pagePlace);
            this.navigationFrame.AddPage(pagePlace);
            if (_vm.Scheme != null && _vm.Scheme.ChangeTypes != null && _vm.Scheme.ChangeTypes.Count > 0)
            var pageFacility = _allPageList.Find(x => x is QuickModelingFacilityWizardPage) as QuickModelingFacilityWizardPage;
            if (pageFacility == null )
            {
                //水池
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Tank))
                {
                    var pageTank = _allPageList.Find(x => x is CreateXhsSchemeTankChangePage) as CreateXhsSchemeTankChangePage;
                    if (pageTank == null)
                    {
                        pageTank = new CreateXhsSchemeTankChangePage();
                        pageTank.Dock = DockStyle.Fill;
                        _allPageList.Add(pageTank);
                    }
                    _bindingPageList.Add(pageTank);
                    this.navigationFrame.AddPage(pageTank);
                }
                //水箱
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Waterbox))
                {
                    var pageWaterbox = _allPageList.Find(x => x is CreateXhsSchemeWaterboxChangePage) as CreateXhsSchemeWaterboxChangePage;
                    if (pageWaterbox == null)
                    {
                        pageWaterbox = new CreateXhsSchemeWaterboxChangePage();
                        pageWaterbox.Dock = DockStyle.Fill;
                        _allPageList.Add(pageWaterbox);
                    }
                    _bindingPageList.Add(pageWaterbox);
                    this.navigationFrame.AddPage(pageWaterbox);
                }
                //闷头
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Blunthead))
                {
                    var pageBlunthead = _allPageList.Find(x => x is CreateXhsSchemeBluntheadChangePage) as CreateXhsSchemeBluntheadChangePage;
                    if (pageBlunthead == null)
                    {
                        pageBlunthead = new CreateXhsSchemeBluntheadChangePage();
                        pageBlunthead.Dock = DockStyle.Fill;
                        _allPageList.Add(pageBlunthead);
                    }
                    _bindingPageList.Add(pageBlunthead);
                    this.navigationFrame.AddPage(pageBlunthead);
                }
                //弯头
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Elbow))
                {
                    var pageElbow = _allPageList.Find(x => x is CreateXhsSchemeElbowChangePage) as CreateXhsSchemeElbowChangePage;
                    if (pageElbow == null)
                    {
                        pageElbow = new CreateXhsSchemeElbowChangePage();
                        pageElbow.Dock = DockStyle.Fill;
                        _allPageList.Add(pageElbow);
                    }
                    _bindingPageList.Add(pageElbow);
                    this.navigationFrame.AddPage(pageElbow);
                }
                //三通
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Threelink))
                {
                    var pageThreelink = _allPageList.Find(x => x is CreateXhsSchemeThreelinkChangePage) as CreateXhsSchemeThreelinkChangePage;
                    if (pageThreelink == null)
                    {
                        pageThreelink = new CreateXhsSchemeThreelinkChangePage();
                        pageThreelink.Dock = DockStyle.Fill;
                        _allPageList.Add(pageThreelink);
                    }
                    _bindingPageList.Add(pageThreelink);
                    this.navigationFrame.AddPage(pageThreelink);
                }
                //四通
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Fourlink))
                {
                    var pageFourlink = _allPageList.Find(x => x is CreateXhsSchemeFourlinkChangePage) as CreateXhsSchemeFourlinkChangePage;
                    if (pageFourlink == null)
                    {
                        pageFourlink = new CreateXhsSchemeFourlinkChangePage();
                        pageFourlink.Dock = DockStyle.Fill;
                        _allPageList.Add(pageFourlink);
                    }
                    _bindingPageList.Add(pageFourlink);
                    this.navigationFrame.AddPage(pageFourlink);
                }
                //水表
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Meter))
                {
                    var pageMeter = _allPageList.Find(x => x is CreateXhsSchemeMeterChangePage) as CreateXhsSchemeMeterChangePage;
                    if (pageMeter == null)
                    {
                        pageMeter = new CreateXhsSchemeMeterChangePage();
                        pageMeter.Dock = DockStyle.Fill;
                        _allPageList.Add(pageMeter);
                    }
                    _bindingPageList.Add(pageMeter);
                    this.navigationFrame.AddPage(pageMeter);
                }
                //流量计
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Flowmeter))
                {
                    var pageFlowmeter = _allPageList.Find(x => x is CreateXhsSchemeFlowmeterChangePage) as CreateXhsSchemeFlowmeterChangePage;
                    if (pageFlowmeter == null)
                    {
                        pageFlowmeter = new CreateXhsSchemeFlowmeterChangePage();
                        pageFlowmeter.Dock = DockStyle.Fill;
                        _allPageList.Add(pageFlowmeter);
                    }
                    _bindingPageList.Add(pageFlowmeter);
                    this.navigationFrame.AddPage(pageFlowmeter);
                }
                //压力表
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pressmeter))
                {
                    var pagePressmeter = _allPageList.Find(x => x is CreateXhsSchemePressmeterChangePage) as CreateXhsSchemePressmeterChangePage;
                    if (pagePressmeter == null)
                    {
                        pagePressmeter = new CreateXhsSchemePressmeterChangePage();
                        pagePressmeter.Dock = DockStyle.Fill;
                        _allPageList.Add(pagePressmeter);
                    }
                    _bindingPageList.Add(pagePressmeter);
                    this.navigationFrame.AddPage(pagePressmeter);
                }
                //消火栓
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Hydrant))
                {
                    var pageHydrant = _allPageList.Find(x => x is CreateXhsSchemeHydrantChangePage) as CreateXhsSchemeHydrantChangePage;
                    if (pageHydrant == null)
                    {
                        pageHydrant = new CreateXhsSchemeHydrantChangePage();
                        pageHydrant.Dock = DockStyle.Fill;
                        _allPageList.Add(pageHydrant);
                    }
                    _bindingPageList.Add(pageHydrant);
                    this.navigationFrame.AddPage(pageHydrant);
                }
                //喷嘴
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Nozzle))
                {
                    var pageNozzle = _allPageList.Find(x => x is CreateXhsSchemeNozzleChangePage) as CreateXhsSchemeNozzleChangePage;
                    if (pageNozzle == null)
                    {
                        pageNozzle = new CreateXhsSchemeNozzleChangePage();
                        pageNozzle.Dock = DockStyle.Fill;
                        _allPageList.Add(pageNozzle);
                    }
                    _bindingPageList.Add(pageNozzle);
                    this.navigationFrame.AddPage(pageNozzle);
                }
                //冷却塔
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Cooling))
                {
                    var pageCooling = _allPageList.Find(x => x is CreateXhsSchemeCoolingChangePage) as CreateXhsSchemeCoolingChangePage;
                    if (pageCooling == null)
                    {
                        pageCooling = new CreateXhsSchemeCoolingChangePage();
                        pageCooling.Dock = DockStyle.Fill;
                        _allPageList.Add(pageCooling);
                    }
                    _bindingPageList.Add(pageCooling);
                    this.navigationFrame.AddPage(pageCooling);
                }
                //管道
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pipe))
                {
                    var pagePipe = _allPageList.Find(x => x is CreateXhsSchemePipeChangePage) as CreateXhsSchemePipeChangePage;
                    if (pagePipe == null)
                    {
                        pagePipe = new CreateXhsSchemePipeChangePage();
                        pagePipe.Dock = DockStyle.Fill;
                        _allPageList.Add(pagePipe);
                    }
                    _bindingPageList.Add(pagePipe);
                    this.navigationFrame.AddPage(pagePipe);
                }
                //过渡件
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Translation))
                {
                    var pageTranslation = _allPageList.Find(x => x is CreateXhsSchemeTranslationChangePage) as CreateXhsSchemeTranslationChangePage;
                    if (pageTranslation == null)
                    {
                        pageTranslation = new CreateXhsSchemeTranslationChangePage();
                        pageTranslation.Dock = DockStyle.Fill;
                        _allPageList.Add(pageTranslation);
                    }
                    _bindingPageList.Add(pageTranslation);
                    this.navigationFrame.AddPage(pageTranslation);
                }
                //水泵
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Pump))
                {
                    var pagePump = _allPageList.Find(x => x is CreateXhsSchemePumpChangePage) as CreateXhsSchemePumpChangePage;
                    if (pagePump == null)
                    {
                        pagePump = new CreateXhsSchemePumpChangePage();
                        pagePump.Dock = DockStyle.Fill;
                        _allPageList.Add(pagePump);
                    }
                    _bindingPageList.Add(pagePump);
                    this.navigationFrame.AddPage(pagePump);
                }
                //阀门
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Valve))
                {
                    var pageValve = _allPageList.Find(x => x is CreateXhsSchemeValveChangePage) as CreateXhsSchemeValveChangePage;
                    if (pageValve == null)
                    {
                        pageValve = new CreateXhsSchemeValveChangePage();
                        pageValve.Dock = DockStyle.Fill;
                        _allPageList.Add(pageValve);
                    }
                    _bindingPageList.Add(pageValve);
                    this.navigationFrame.AddPage(pageValve);
                }
                //换热器
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Exchanger))
                {
                    var pageExchanger = _allPageList.Find(x => x is CreateXhsSchemeExchangerChangePage) as CreateXhsSchemeExchangerChangePage;
                    if (pageExchanger == null)
                    {
                        pageExchanger = new CreateXhsSchemeExchangerChangePage();
                        pageExchanger.Dock = DockStyle.Fill;
                        _allPageList.Add(pageExchanger);
                    }
                    _bindingPageList.Add(pageExchanger);
                    this.navigationFrame.AddPage(pageExchanger);
                }
                //压缩机
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Compressor))
                {
                    var pageCompressor = _allPageList.Find(x => x is CreateXhsSchemeCompressorChangePage) as CreateXhsSchemeCompressorChangePage;
                    if (pageCompressor == null)
                    {
                        pageCompressor = new CreateXhsSchemeCompressorChangePage();
                        pageCompressor.Dock = DockStyle.Fill;
                        _allPageList.Add(pageCompressor);
                    }
                    _bindingPageList.Add(pageCompressor);
                    this.navigationFrame.AddPage(pageCompressor);
                }
                pageFacility = new QuickModelingFacilityWizardPage();
                pageFacility.Dock = DockStyle.Fill;
                _allPageList.Add(pageFacility);
            }
            //生成
            var pageGenerate = _allPageList.Find(x => x is CreateXhsSchemeGeneralWizardPage) as CreateXhsSchemeGeneralWizardPage;
            if (pageGenerate == null)
            {
                pageGenerate = new CreateXhsSchemeGeneralWizardPage();
                pageGenerate.Dock = DockStyle.Fill;
                _allPageList.Add(pageGenerate);
            }
            _bindingPageList.Add(pageGenerate);
            this.navigationFrame.AddPage(pageGenerate);
            _bindingPageList.Add(pageFacility);
            this.navigationFrame.AddPage(pageFacility);
            //变更记录
            var pageComplete = _allPageList.Find(x => x is CreateXhsSchemeChangeRecordPage) as CreateXhsSchemeChangeRecordPage;
            if (pageComplete == null)
            var pageModelEdit = _allPageList.Find(x => x is QuickModelingModelDrawWizardPage) as QuickModelingModelDrawWizardPage;
            if (pageModelEdit == null)
            {
                pageComplete = new CreateXhsSchemeChangeRecordPage();
                pageComplete.Dock = DockStyle.Fill;
                _allPageList.Add(pageComplete);
                pageModelEdit = new QuickModelingModelDrawWizardPage();
                pageModelEdit.Dock = DockStyle.Fill;
                _allPageList.Add(pageModelEdit);
            }
            _bindingPageList.Add(pageComplete);
            this.navigationFrame.AddPage(pageComplete);
            _bindingPageList.Add(pageModelEdit);
            this.navigationFrame.AddPage(pageModelEdit);
        }
        //初始化步骤
@@ -357,111 +124,18 @@
            {
                foreach (var page in _bindingPageList)
                {
                    if (page is CreateXhsSchemeInfoPage)
                    if (page is QuickModelingPlaceWizardPage)
                    {
                        AddStepItem("方案信息");
                        AddStepItem("场所");
                    }
                    else if (page is CreateXhsSchemeTankChangePage)
                    else if (page is QuickModelingFacilityWizardPage)
                    {
                        AddStepItem("设施");
                    }
                    else if (page is QuickModelingModelDrawWizardPage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Tank);
                        AddStepItem(caption);
                        AddStepItem("模型");
                    }
                    else if (page is CreateXhsSchemeWaterboxChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Waterbox);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeBluntheadChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Blunthead);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeElbowChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Elbow);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeThreelinkChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Threelink);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeFourlinkChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Fourlink);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeMeterChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Meter);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeFlowmeterChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Flowmeter);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemePressmeterChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pressmeter);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeHydrantChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Hydrant);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeNozzleChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Nozzle);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeCoolingChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Cooling);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemePipeChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeTranslationChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Translation);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemePumpChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeValveChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeExchangerChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Exchanger);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeCompressorChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Compressor);
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeGeneralWizardPage)
                    {
                        var caption = "创建";
                        AddStepItem(caption);
                    }
                    else if (page is CreateXhsSchemeChangeRecordPage)
                    {
                        var caption = "变更记录";
                        AddStepItem(caption);
                    }
                }
            }
@@ -476,7 +150,7 @@
            this.itemForComplete.Visibility = page.AllowComplete ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.navigationFrame.SelectedPageIndex = index;
            this.stepProgressBar1.SelectedItemIndex = index;
            this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
            //this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
        }
        //选择页面状态改变
@@ -486,7 +160,7 @@
            this.itemForNext.Visibility = page.AllowNext ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForCancel.Visibility = page.AllowCancel ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForComplete.Visibility = page.AllowComplete ? LayoutVisibility.Always : LayoutVisibility.Never;
            this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
            //this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
        }
        //上一步
@@ -503,14 +177,6 @@
        {
            if (_wizard != null)
            {
                if (_wizard.SelectedIndex == 0)
                {
                    var page = _wizard.SelectedPage;
                    if (await page.CanNext())
                    {
                        InitialManager();
                    }
                }
                await _wizard.Next();
            }
        }
@@ -535,38 +201,24 @@
            {
                if (await _wizard.Complete())
                {
                    this.ReloadDataEvent?.Invoke(_vm.Scheme);
                    //this.ReloadDataEvent?.Invoke(_vm.Scheme);
                    //this.DialogResult = DialogResult.OK;
                    this.Close();
                    TipFormHelper.ShowInfo("快速建模成功,页面自动关闭!");
                    this.ClosePage(this.PageGuid);
                }
            }
        }
        //正在关闭
        private async void CreateXhsSchemeDlg_FormClosing(object sender, FormClosingEventArgs e)
        /// <summary>
        /// 是否可以关闭
        /// </summary>
        public override bool CanClose()
        {
            if (_wizard != null)
            {
                //if (this.DialogResult == DialogResult.OK)
                //{
                //    /*  if (!_wizard.Complete())
                //      {
                //          e.Cancel = true;
                //      }*/
                //}
                //else if (this.DialogResult == DialogResult.Cancel)
                //{
                //    if (!await _wizard.Cancel())
                //    {
                //        e.Cancel = true;
                //    }
                //}
                //else
                //{
                //    e.Cancel = true;
                //}
            }
            return true;
        }
        //添加步骤项
        private void AddStepItem(string caption)