lixiaojun
2025-01-03 d672ca82c49f01dae2c5c955202b5857ef680a71
WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/04-scheme/00-core/CreateXhsSchemeDlg.cs
@@ -1,5 +1,6 @@
using DevExpress.XtraLayout.Utils;
using Mapster;
using NPOI.OpenXmlFormats.Spreadsheet;
namespace HStation.WinFrmUI
{
@@ -9,119 +10,570 @@
        {
            InitializeComponent();
            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
            this.layoutControl1.SetupLayoutControl();
            this.FormClosing += CreateXhsSchemeDlg_FormClosing;
        }
        private readonly CreateXhsSchemeViewModel _vm = new();
        private CreateXhsSchemeManager _wizard=null;
        private bool _initial_wizard_manager = false;//运行下一步
        private List<string> _change_type_list = null;
        /// <summary>
        ///
        /// 重载数据
        /// </summary>
        public CreateXhsSchemeViewModel ViewModel
        {
            get { return _vm; }
        }
        public event Action<XhsSchemeVmo> ReloadDataEvent;
        private CreateXhsSchemeViewModel _vm = null;//视图
        private CreateXhsSchemeManager _wizard = null;//管理器
        private List<IWizardPageAsync<CreateXhsSchemeViewModel>> _allPageList = null;//所有页面列表
        private List<IWizardPageAsync<CreateXhsSchemeViewModel>> _bindingPageList = null;//绑定页面列表
        /// <summary>
        ///
        /// 绑定数据
        /// </summary>
        public int SelectedPageIndex
        {
            get
            {
                return this.navigationFrameMain.SelectedPageIndex;
            }
            set
            {
                if (value == 0)
                {
                    _initial_wizard_manager = false;
                    InitialButtonStatus(_change_type_list);
                }
                else
                {
                    _initial_wizard_manager = true;
                    InitialWizardManager(_change_type_list);
                }
                this.navigationFrameMain.SelectedPageIndex = value;
            }
        }
        /// <summary>
        ///
        /// </summary>
        public event Action<HStation.Vmo.XhsSchemeVmo> ReloadDataEvent;
        /// <summary>
        ///
        /// </summary>
        public async void SetBindingData
             (
                HStation.Vmo.XhsProjectVmo project,
                HStation.Vmo.XhsProjectSiteVmo project_site,
                Yw.Model.HydroModelInfo hydro_info
        public void SetBindingData
            (
                XhsProjectVmo project,
                XhsProjectSiteVmo projectSite,
                Yw.Model.HydroModelInfo hydroInfo,
                List<XhsSchemeVmo> allSchemeList
            )
        {
            this.itemForNext.Visibility = LayoutVisibility.Never;
            this.itemForPrev.Visibility = LayoutVisibility.Never;
            this.itemForComplete.Visibility = LayoutVisibility.Always;
            this.itemForCancel.Visibility = LayoutVisibility.Always;
            if (project == null)
            {
                return;
            _vm.Project = project;
            _vm.ProjectSite = project_site;
            _vm.HydroInfo = hydro_info.Adapt<Yw.Model.HydroModelInfo>();
            _vm.ProjectSite ??= await BLLFactory<HStation.BLL.XhsProjectSite>.Instance.GetDefaultByProjectID(_vm.Project.ID);
            if (_vm.HydroInfo == null)
            {
                var hydroRelation = await BLLFactory<Yw.BLL.HydroModelRelation>.Instance
                    .GetDefaultByObjectTypeAndObjectIDOfPurpose(HStation.Xhs.DataType.XhsProjectSite, _vm.ProjectSite.ID, HStation.Xhs.Purpose.Simulation);
                _vm.HydroInfo = await BLLFactory<Yw.BLL.HydroModelInfo>.Instance.GetByID(hydroRelation.ModelID);
            }
            _vm.AllSchemeList = await BLLFactory<HStation.BLL.XhsScheme>.Instance.GetBySiteID(_vm.ProjectSite.ID);
            this.createXhsSchemeInfoPage1.InitialPage(_vm);
            this.createXhsSchemeInfoPage1.ChangeTypeChangedEvent += (List<string> change_type_list) =>
            if (projectSite == null)
            {
                _initial_wizard_manager = false;
                _change_type_list = change_type_list;
                InitialButtonStatus(change_type_list);
            };
                return;
            }
            if (hydroInfo == null)
            {
                return;
            }
            var hydroInfoRhs = hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
            _vm = new CreateXhsSchemeViewModel(project, projectSite, hydroInfoRhs, allSchemeList);
            InitialManager();
        }
            this.FormClosing += (s, e) =>
        //初始化管理器
        private void InitialManager()
        {
            if (_vm == null)
            {
                if (_wizard != null)
                return;
            }
            InitialPages();
            InitialSteps();
            _wizard = new CreateXhsSchemeManager(_vm);
            _wizard.SelectedPageChangedEvent += _wizard_SelectedPageChangedEvent;
            _wizard.SelectedPageStateChangedEvent += _wizard_SelectedPageStateChangedEvent;
            _wizard.InitialManager(_bindingPageList?.ToArray());
        }
        //初始化页面
        private void InitialPages()
        {
            if (_vm == null)
            {
                return;
            }
            _bindingPageList = new List<IWizardPageAsync<CreateXhsSchemeViewModel>>();
            if (_allPageList == null)
            {
                _allPageList = new List<IWizardPageAsync<CreateXhsSchemeViewModel>>();
            }
            this.navigationFrame.Pages.Clear();
            //基础信息
            var pageInfo = _allPageList.Find(x => x is CreateXhsSchemeInfoPage) as CreateXhsSchemeInfoPage;
            if (pageInfo == null)
            {
                pageInfo = new CreateXhsSchemeInfoPage();
                pageInfo.Dock = DockStyle.Fill;
                _allPageList.Add(pageInfo);
            }
            _bindingPageList.Add(pageInfo);
            this.navigationFrame.AddPage(pageInfo);
            if (_vm.Scheme != null && _vm.Scheme.ChangeTypes != null && _vm.Scheme.ChangeTypes.Count > 0)
            {
                //水池
                if (_vm.Scheme.ChangeTypes.Contains(Yw.Hydro.ParterCatalog.Tank))
                {
                    if (this.DialogResult == DialogResult.OK)
                    var pageTank = _allPageList.Find(x => x is CreateXhsSchemeTankChangePage) as CreateXhsSchemeTankChangePage;
                    if (pageTank == null)
                    {
                        if (!_wizard.Complete())
                        {
                            e.Cancel = true;
                        }
                        pageTank = new CreateXhsSchemeTankChangePage();
                        pageTank.Dock = DockStyle.Fill;
                        _allPageList.Add(pageTank);
                    }
                    else if (this.DialogResult == DialogResult.Cancel)
                    _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)
                    {
                        //if (!_wizard.Cancel())
                        //{
                        //    e.Cancel = true;
                        //}
                        pageWaterbox = new CreateXhsSchemeWaterboxChangePage();
                        pageWaterbox.Dock = DockStyle.Fill;
                        _allPageList.Add(pageWaterbox);
                    }
                    else
                    _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);
                }
            }
            //生成
            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);
            //变更记录
            var pageComplete = _allPageList.Find(x => x is CreateXhsSchemeChangeRecordPage) as CreateXhsSchemeChangeRecordPage;
            if (pageComplete == null)
            {
                pageComplete = new CreateXhsSchemeChangeRecordPage();
                pageComplete.Dock = DockStyle.Fill;
                _allPageList.Add(pageComplete);
            }
            _bindingPageList.Add(pageComplete);
            this.navigationFrame.AddPage(pageComplete);
        }
        //初始化步骤
        private void InitialSteps()
        {
            this.stepProgressBar1.Items.Clear();
            if (_bindingPageList != null && _bindingPageList.Count > 0)
            {
                foreach (var page in _bindingPageList)
                {
                    if (page is CreateXhsSchemeInfoPage)
                    {
                        AddStepItem("方案信息");
                    }
                    else if (page is CreateXhsSchemeTankChangePage)
                    {
                        var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Tank);
                        AddStepItem(caption);
                    }
                    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);
                    }
                }
            }
        }
        //选择页面改变
        private void _wizard_SelectedPageChangedEvent(IWizardPageAsync<CreateXhsSchemeViewModel> page, int index)
        {
            this.itemForPrev.Visibility = page.AllowPrev ? LayoutVisibility.Always : LayoutVisibility.Never;
            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.navigationFrame.SelectedPageIndex = index;
            this.stepProgressBar1.SelectedItemIndex = index;
            this.itemForTitle.Visibility = index > 0 ? LayoutVisibility.Always : LayoutVisibility.Never;
        }
        //选择页面状态改变
        private void _wizard_SelectedPageStateChangedEvent(IWizardPageAsync<CreateXhsSchemeViewModel> page, int index)
        {
            this.itemForPrev.Visibility = page.AllowPrev ? LayoutVisibility.Always : LayoutVisibility.Never;
            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;
        }
        //上一步
        private async void btnPrev_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                await _wizard.Prev();
            }
        }
        //下一步
        private async void btnNext_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                if (_wizard.SelectedIndex == 0)
                {
                    var page = _wizard.SelectedPage;
                    if (await page.CanNext())
                    {
                        InitialManager();
                    }
                }
                await _wizard.Next();
            }
        }
        //取消
        private async void btnCancel_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                if (await _wizard.Cancel())
                {
                    this.DialogResult = DialogResult.Cancel;
                    this.Close();
                }
            }
        }
        //完成
        private async void btnComplete_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                if (await _wizard.Complete())
                {
                    this.ReloadDataEvent?.Invoke(_vm.Scheme);
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
            }
        }
        //正在关闭
        private async void CreateXhsSchemeDlg_FormClosing(object sender, FormClosingEventArgs e)
        {
            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;
                }
            }
        }
        //添加步骤项
        private void AddStepProgressBarItem(string caption)
        private void AddStepItem(string caption)
        {
            this.stepProgressBar1.BeginInit();
            var item = new StepProgressBarItem();
@@ -131,170 +583,10 @@
            item.Options.Indicator.InactiveStateImageOptions.SvgImage = null;
            item.State = StepProgressBarItemState.Inactive;
            this.stepProgressBar1.Items.Add(item);
            this.stepProgressBar1.EndInit();
            this.stepProgressBar1.EndInit();
        }
        //初始化按钮状态
        private void InitialButtonStatus(List<string> change_type_list)
        {
            if (change_type_list == null || !change_type_list.Any())
            {
                this.itemForNext.Visibility = LayoutVisibility.Never;
                this.itemForComplete.Visibility = LayoutVisibility.Always;
            }
            else
            {
                this.itemForPrev.Visibility = LayoutVisibility.Never;
                this.itemForNext.Visibility = LayoutVisibility.Always;
                this.itemForComplete.Visibility = LayoutVisibility.Never;
                this.itemForCancel.Visibility = LayoutVisibility.Always;
            }
        }
        //初始化步骤管理器
        private void InitialWizardManager(List<string> change_type_list)
        {
            if (change_type_list == null || !change_type_list.Any())
                return;
            var overlay = this.ShowOverlay();
            this.stepProgressBar1.Items.Clear();
            this.navigationFrameStep.Pages.Clear();
            var page_list = new List<IWizardPage<CreateXhsSchemeViewModel>>();
            if (change_type_list.Contains(Yw.Hydro.ParterCatalog.Pipe))
            {
                var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe);
                AddStepProgressBarItem(caption);
                page_list.Add(new CreateXhsSchemePipeChangePage());
            }
            if (change_type_list.Contains(Yw.Hydro.ParterCatalog.Pump))
            {
                var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pump);
                AddStepProgressBarItem(caption);
                page_list.Add(new CreateXhsSchemePumpChangePage());
            }
            if (change_type_list.Contains(Yw.Hydro.ParterCatalog.Valve))
            {
                var caption = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve);
                AddStepProgressBarItem(caption);
                page_list.Add(new CreateXhsSchemeValveChangePage());
            }
            AddStepProgressBarItem("变更记录");
            page_list.Add(new CreateXhsSchemeChangeRecordPage());
            foreach (var item in page_list)
            {
                var ctrl = item as XtraUserControl;
                ctrl.Dock = DockStyle.Fill;
                this.navigationFrameStep.AddPage(ctrl);
            }
            _wizard = new CreateXhsSchemeManager(_vm);
            _wizard.SelectedPageChangedEvent += _wizard_SelectedPageChangedEvent;
            _wizard.SelectedPageStateChangedEvent += _wizard_SelectedPageStateChangedEvent;
            _wizard.InitialManager(page_list.ToArray());
            overlay.Close();
        }
        //选择页面改变
        private void _wizard_SelectedPageChangedEvent(IWizardPage<CreateXhsSchemeViewModel> page, int index)
        {
            this.itemForPrev.Visibility = page.AllowPrev ? LayoutVisibility.Always : LayoutVisibility.Never;
            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.navigationFrameStep.SelectedPageIndex = index;
            this.stepProgressBar1.SelectedItemIndex = index;
        }
        //选择页面状态改变
        private void _wizard_SelectedPageStateChangedEvent(IWizardPage<CreateXhsSchemeViewModel> page, int index)
        {
            this.itemForPrev.Visibility = page.AllowPrev ? LayoutVisibility.Always : LayoutVisibility.Never;
            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;
        }
        //上一步
        private void btnPrev_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                if (_wizard.SelectedIndex == 0)
                {
                    this.SelectedPageIndex = 0;
                }
                else
                {
                    _wizard.Prev();
                }
            }
        }
        //下一步
        private void btnNext_Click(object sender, EventArgs e)
        {
            if (!_initial_wizard_manager)
            {
                if (this.createXhsSchemeInfoPage1.CanNext())
                {
                    this.SelectedPageIndex = 1;
                }
            }
            else
            {
                if (_wizard != null)
                {
                    _wizard.Next();
                }
            }
        }
        //取消
        private void btnCancel_Click(object sender, EventArgs e)
        {
            if (_wizard != null)
            {
                var bol = _wizard.Cancel();
                if (bol)
                {
                    this.DialogResult = DialogResult.Cancel;
                    this.Close();
                }
            }
        }
        //完成
        private void btnComplete_Click(object sender, EventArgs e)
        {
            if (this.SelectedPageIndex == 0)
            {
                if (this.createXhsSchemeInfoPage1.CanComplete())
                {
                    this.ReloadDataEvent?.Invoke(_vm.Scheme);
                    this.DialogResult = DialogResult.OK;
                    this.Close();
                }
            }
            else
            {
                if (_wizard != null)
                {
                    var bol = _wizard.Complete();
                    if (bol)
                    {
                        this.ReloadDataEvent?.Invoke(_vm.Scheme);
                        this.DialogResult = DialogResult.OK;
                        this.Close();
                    }
                }
            }
        }
    }
}