From 5d8b95b69c1bf800f2a2ebee62c6f7181c0bd7c8 Mon Sep 17 00:00:00 2001
From: duheng <2784771470@qq.com>
Date: 星期三, 27 十一月 2024 16:35:46 +0800
Subject: [PATCH] 冲突

---
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.Designer.cs                                      |    9 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs                                         |   26 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.resx                           |  123 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsHelper.cs                              |   68 
 Desktop/HStation.Desktop.PBS.Core/MainForm.cs                                                                       |  142 -
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.Designer.cs                               |    1 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.resx                                                           |    6 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.Designer.cs                    |   92 +
 Desktop/HStation.Desktop.PBS.Core/HStation.Desktop.PBS.Core.csproj                                                  |    3 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Resources/pump_shut_32.png                                                          |    0 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.cs                                              |   64 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user                                          |    3 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.cs                             |   42 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.Designer.cs                                     |  126 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs                     |   65 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.resx        |  120 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user                                                  |    9 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.Designer.cs |  354 ++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.Designer.cs                               |    7 
 Desktop/HStation.Desktop.PBS.Core/MainForm - 复制(2).Designer.cs                                                      |  447 +++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.resx                                            |  153 +
 Desktop/HStation.Desktop.PBS.Core/MainForm - 复制(2).cs                                                               |  874 ++++++++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleViewModel.cs                                  |    5 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.cs                                         |   22 
 Desktop/HStation.Desktop.PBS.Core/MainForm.Designer.cs                                                              |  128 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpRunViewModel.datasource                 |   10 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.resx                                    |  120 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.cs                                      |  118 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroEnergyStatisticsItemViewModel.datasource    |   10 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsItemViewModel.cs                       |   23 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.cs          |  109 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/eEnergyType.cs                                              |   39 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.Designer.cs  |   94 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/XhsProjectSimulationMgrPage.cs                                    |   36 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.Designer.cs                                |   82 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/05-working/SimulationWorkingHelper.cs                     |   34 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.Designer.cs                                                    |   20 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj                                               |    3 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleHelper.cs                                     |   82 +
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunViewModel.cs                                             |   72 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.Designer.cs                             |  177 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs                     |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Resources/pump_run_32.png                                                           |    0 
 WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs                                               |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.cs                                        |    4 
 Desktop/HStation.Desktop.PBS.Core/MainForm.resx                                                                     |    9 
 Desktop/HStation.Desktop.PBS.Core/MainForm - 复制(2).resx                                                             |  699 ++++++++
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.cs           |   21 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.resx         |  120 +
 49 files changed, 4,516 insertions(+), 259 deletions(-)

diff --git a/Desktop/HStation.Desktop.PBS.Core/HStation.Desktop.PBS.Core.csproj b/Desktop/HStation.Desktop.PBS.Core/HStation.Desktop.PBS.Core.csproj
index 34fbfe5..99cd335 100644
--- a/Desktop/HStation.Desktop.PBS.Core/HStation.Desktop.PBS.Core.csproj
+++ b/Desktop/HStation.Desktop.PBS.Core/HStation.Desktop.PBS.Core.csproj
@@ -11,11 +11,14 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <Compile Remove="MainForm - 澶嶅埗%282%29.cs" />
+    <Compile Remove="MainForm - 澶嶅埗%282%29.Designer.cs" />
     <Compile Remove="MainForm - 澶嶅埗.cs" />
     <Compile Remove="MainForm - 澶嶅埗.Designer.cs" />
   </ItemGroup>
 
   <ItemGroup>
+    <EmbeddedResource Remove="MainForm - 澶嶅埗%282%29.resx" />
     <EmbeddedResource Remove="MainForm - 澶嶅埗.resx" />
   </ItemGroup>
 
diff --git "a/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.Designer.cs" "b/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.Designer.cs"
new file mode 100644
index 0000000..f0df9c6
--- /dev/null
+++ "b/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.Designer.cs"
@@ -0,0 +1,447 @@
+锘縩amespace HStation.Desktop
+{
+    partial class MainForm
+    {
+        /// <summary>
+        ///  Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        ///  Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        ///  Required method for Designer support - do not modify
+        ///  the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new System.ComponentModel.Container();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(MainForm));
+            tileNavPane = new DevExpress.XtraBars.Navigation.TileNavPane();
+            nbTitle = new DevExpress.XtraBars.Navigation.NavButton();
+            navButton3 = new DevExpress.XtraBars.Navigation.NavButton();
+            nbBasicData = new DevExpress.XtraBars.Navigation.NavButton();
+            nbRapidModeling = new DevExpress.XtraBars.Navigation.NavButton();
+            nbModelAnalysis = new DevExpress.XtraBars.Navigation.NavButton();
+            nbModelEvaluation = new DevExpress.XtraBars.Navigation.NavButton();
+            nbSmartHardware = new DevExpress.XtraBars.Navigation.NavButton();
+            navButton2 = new DevExpress.XtraBars.Navigation.NavButton();
+            nbMin = new DevExpress.XtraBars.Navigation.NavButton();
+            nbNormal = new DevExpress.XtraBars.Navigation.NavButton();
+            nbClose = new DevExpress.XtraBars.Navigation.NavButton();
+            documentManager1 = new DevExpress.XtraBars.Docking2010.DocumentManager(components);
+            tabbedView1 = new DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView(components);
+            dockManager1 = new DevExpress.XtraBars.Docking.DockManager(components);
+            flyoutPanel1 = new DevExpress.Utils.FlyoutPanel();
+            flyoutPanelControl1 = new DevExpress.Utils.FlyoutPanelControl();
+            svgImgItem32 = new DevExpress.Utils.SvgImageCollection(components);
+            accordionControlFunction = new DevExpress.XtraBars.Navigation.AccordionControl();
+            toolboxItem3 = new DevExpress.XtraToolbox.ToolboxItem();
+            toolboxItem5 = new DevExpress.XtraToolbox.ToolboxItem();
+            svgImgGroup32 = new DevExpress.Utils.SvgImageCollection(components);
+            propertyGridControl1 = new DevExpress.XtraVerticalGrid.PropertyGridControl();
+            ((System.ComponentModel.ISupportInitialize)tileNavPane).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)documentManager1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)tabbedView1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)dockManager1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)flyoutPanel1).BeginInit();
+            flyoutPanel1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)flyoutPanelControl1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)svgImgItem32).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)accordionControlFunction).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)svgImgGroup32).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)propertyGridControl1).BeginInit();
+            SuspendLayout();
+            // 
+            // tileNavPane
+            // 
+            tileNavPane.AllowGlyphSkinning = true;
+            tileNavPane.Appearance.BackColor = Color.White;
+            tileNavPane.Appearance.BorderColor = Color.White;
+            tileNavPane.Appearance.ForeColor = Color.Black;
+            tileNavPane.Appearance.Options.UseBackColor = true;
+            tileNavPane.Appearance.Options.UseBorderColor = true;
+            tileNavPane.Appearance.Options.UseForeColor = true;
+            tileNavPane.AppearanceDisabled.BackColor = Color.White;
+            tileNavPane.AppearanceDisabled.BorderColor = Color.White;
+            tileNavPane.AppearanceDisabled.ForeColor = Color.Black;
+            tileNavPane.AppearanceDisabled.Options.UseBackColor = true;
+            tileNavPane.AppearanceDisabled.Options.UseBorderColor = true;
+            tileNavPane.AppearanceDisabled.Options.UseForeColor = true;
+            tileNavPane.AppearanceHovered.BackColor = Color.FromArgb(50, 121, 197);
+            tileNavPane.AppearanceHovered.BorderColor = Color.FromArgb(50, 121, 197);
+            tileNavPane.AppearanceHovered.ForeColor = Color.White;
+            tileNavPane.AppearanceHovered.Options.UseBackColor = true;
+            tileNavPane.AppearanceHovered.Options.UseBorderColor = true;
+            tileNavPane.AppearanceHovered.Options.UseForeColor = true;
+            tileNavPane.AppearanceSelected.BackColor = Color.FromArgb(50, 121, 197);
+            tileNavPane.AppearanceSelected.BorderColor = Color.FromArgb(50, 121, 197);
+            tileNavPane.AppearanceSelected.ForeColor = Color.White;
+            tileNavPane.AppearanceSelected.Options.UseBackColor = true;
+            tileNavPane.AppearanceSelected.Options.UseBorderColor = true;
+            tileNavPane.AppearanceSelected.Options.UseForeColor = true;
+            tileNavPane.BackColor = Color.White;
+            tileNavPane.ButtonPadding = new Padding(10);
+            tileNavPane.Buttons.Add(nbTitle);
+            tileNavPane.Buttons.Add(navButton3);
+            tileNavPane.Buttons.Add(nbBasicData);
+            tileNavPane.Buttons.Add(nbRapidModeling);
+            tileNavPane.Buttons.Add(nbModelAnalysis);
+            tileNavPane.Buttons.Add(nbModelEvaluation);
+            tileNavPane.Buttons.Add(nbSmartHardware);
+            tileNavPane.Buttons.Add(navButton2);
+            tileNavPane.Buttons.Add(nbMin);
+            tileNavPane.Buttons.Add(nbNormal);
+            tileNavPane.Buttons.Add(nbClose);
+            // 
+            // tileNavCategory1
+            // 
+            tileNavPane.DefaultCategory.Name = "tileNavCategory1";
+            // 
+            // 
+            // 
+            tileNavPane.DefaultCategory.Tile.AllowSelectAnimation = true;
+            tileNavPane.DefaultCategory.Tile.DropDownOptions.BeakColor = Color.Empty;
+            tileNavPane.Dock = DockStyle.Top;
+            tileNavPane.Location = new Point(0, 0);
+            tileNavPane.Margin = new Padding(0);
+            tileNavPane.Name = "tileNavPane";
+            tileNavPane.Size = new Size(2087, 70);
+            tileNavPane.TabIndex = 0;
+            tileNavPane.Text = "tileNavPane1";
+            tileNavPane.ElementClick += tileNavPane_ElementClick;
+            tileNavPane.MouseDown += tileNavPane_MouseDown;
+            // 
+            // nbTitle
+            // 
+            nbTitle.Appearance.BackColor = Color.White;
+            nbTitle.Appearance.BorderColor = Color.White;
+            nbTitle.Appearance.FontSizeDelta = 2;
+            nbTitle.Appearance.ForeColor = Color.FromArgb(1, 96, 188);
+            nbTitle.Appearance.Options.UseBackColor = true;
+            nbTitle.Appearance.Options.UseBorderColor = true;
+            nbTitle.Appearance.Options.UseFont = true;
+            nbTitle.Appearance.Options.UseForeColor = true;
+            nbTitle.AppearanceDisabled.BackColor = Color.White;
+            nbTitle.AppearanceDisabled.BorderColor = Color.White;
+            nbTitle.AppearanceDisabled.FontSizeDelta = 2;
+            nbTitle.AppearanceDisabled.ForeColor = Color.FromArgb(1, 96, 188);
+            nbTitle.AppearanceDisabled.Options.UseBackColor = true;
+            nbTitle.AppearanceDisabled.Options.UseBorderColor = true;
+            nbTitle.AppearanceDisabled.Options.UseFont = true;
+            nbTitle.AppearanceDisabled.Options.UseForeColor = true;
+            nbTitle.AppearanceHovered.BackColor = Color.White;
+            nbTitle.AppearanceHovered.BorderColor = Color.White;
+            nbTitle.AppearanceHovered.FontSizeDelta = 2;
+            nbTitle.AppearanceHovered.ForeColor = Color.FromArgb(1, 96, 188);
+            nbTitle.AppearanceHovered.Options.UseBackColor = true;
+            nbTitle.AppearanceHovered.Options.UseBorderColor = true;
+            nbTitle.AppearanceHovered.Options.UseFont = true;
+            nbTitle.AppearanceHovered.Options.UseForeColor = true;
+            nbTitle.AppearanceSelected.BackColor = Color.White;
+            nbTitle.AppearanceSelected.BorderColor = Color.White;
+            nbTitle.AppearanceSelected.FontSizeDelta = 2;
+            nbTitle.AppearanceSelected.ForeColor = Color.FromArgb(1, 96, 188);
+            nbTitle.AppearanceSelected.Options.UseBackColor = true;
+            nbTitle.AppearanceSelected.Options.UseBorderColor = true;
+            nbTitle.AppearanceSelected.Options.UseFont = true;
+            nbTitle.AppearanceSelected.Options.UseForeColor = true;
+            nbTitle.Caption = "浜屼緵鎴愬绯荤粺";
+            nbTitle.Enabled = false;
+            nbTitle.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
+            nbTitle.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbTitle.ImageOptions.SvgImage");
+            nbTitle.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbTitle.Name = "nbTitle";
+            nbTitle.ElementClick += nbTitle_ElementClick;
+            // 
+            // navButton3
+            // 
+            navButton3.Appearance.BackColor = Color.White;
+            navButton3.Appearance.BorderColor = Color.White;
+            navButton3.Appearance.Options.UseBackColor = true;
+            navButton3.Appearance.Options.UseBorderColor = true;
+            navButton3.Caption = " ";
+            navButton3.Enabled = false;
+            navButton3.Name = "navButton3";
+            // 
+            // nbBasicData
+            // 
+            nbBasicData.Caption = "鍩虹鏁版嵁";
+            nbBasicData.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbBasicData.ImageOptions.SvgImage");
+            nbBasicData.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbBasicData.Name = "nbBasicData";
+            nbBasicData.Tag = "BasicData";
+            // 
+            // nbRapidModeling
+            // 
+            nbRapidModeling.Caption = "蹇�熷缓妯�";
+            nbRapidModeling.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbRapidModeling.ImageOptions.SvgImage");
+            nbRapidModeling.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbRapidModeling.Name = "nbRapidModeling";
+            nbRapidModeling.Tag = "RapidModeling";
+            // 
+            // nbModelAnalysis
+            // 
+            nbModelAnalysis.Caption = "妯″瀷鍒嗘瀽";
+            nbModelAnalysis.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbModelAnalysis.ImageOptions.SvgImage");
+            nbModelAnalysis.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbModelAnalysis.Name = "nbModelAnalysis";
+            nbModelAnalysis.Tag = "ModelAnalysis";
+            // 
+            // nbModelEvaluation
+            // 
+            nbModelEvaluation.Caption = "妯″瀷璇勪环";
+            nbModelEvaluation.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbModelEvaluation.ImageOptions.SvgImage");
+            nbModelEvaluation.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbModelEvaluation.Name = "nbModelEvaluation";
+            nbModelEvaluation.Tag = "ModelEvaluation";
+            // 
+            // nbSmartHardware
+            // 
+            nbSmartHardware.Caption = "鏅鸿兘纭欢";
+            nbSmartHardware.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbSmartHardware.ImageOptions.SvgImage");
+            nbSmartHardware.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbSmartHardware.Name = "nbSmartHardware";
+            nbSmartHardware.Tag = "SmartHardware";
+            // 
+            // navButton2
+            // 
+            navButton2.Appearance.BackColor = Color.White;
+            navButton2.Appearance.BorderColor = Color.White;
+            navButton2.Appearance.Options.UseBackColor = true;
+            navButton2.Appearance.Options.UseBorderColor = true;
+            navButton2.AppearanceDisabled.BackColor = Color.White;
+            navButton2.AppearanceDisabled.BorderColor = Color.White;
+            navButton2.AppearanceDisabled.Options.UseBackColor = true;
+            navButton2.AppearanceDisabled.Options.UseBorderColor = true;
+            navButton2.AppearanceHovered.BackColor = Color.White;
+            navButton2.AppearanceHovered.BorderColor = Color.White;
+            navButton2.AppearanceHovered.Options.UseBackColor = true;
+            navButton2.AppearanceHovered.Options.UseBorderColor = true;
+            navButton2.AppearanceSelected.BackColor = Color.White;
+            navButton2.AppearanceSelected.BorderColor = Color.White;
+            navButton2.AppearanceSelected.Options.UseBackColor = true;
+            navButton2.AppearanceSelected.Options.UseBorderColor = true;
+            navButton2.Caption = "     ";
+            navButton2.Enabled = false;
+            navButton2.Name = "navButton2";
+            // 
+            // nbMin
+            // 
+            nbMin.Alignment = DevExpress.XtraBars.Navigation.NavButtonAlignment.Right;
+            nbMin.Caption = null;
+            nbMin.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
+            nbMin.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbMin.ImageOptions.SvgImage");
+            nbMin.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbMin.Name = "nbMin";
+            nbMin.ElementClick += nbMin_ElementClick;
+            // 
+            // nbNormal
+            // 
+            nbNormal.Alignment = DevExpress.XtraBars.Navigation.NavButtonAlignment.Right;
+            nbNormal.Caption = null;
+            nbNormal.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
+            nbNormal.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbNormal.ImageOptions.SvgImage");
+            nbNormal.ImageOptions.SvgImageSize = new Size(22, 22);
+            nbNormal.Name = "nbNormal";
+            nbNormal.ElementClick += nbNormal_ElementClick;
+            // 
+            // nbClose
+            // 
+            nbClose.Alignment = DevExpress.XtraBars.Navigation.NavButtonAlignment.Right;
+            nbClose.Caption = null;
+            nbClose.ImageOptions.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
+            nbClose.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbClose.ImageOptions.SvgImage");
+            nbClose.ImageOptions.SvgImageSize = new Size(24, 24);
+            nbClose.Name = "nbClose";
+            nbClose.ElementClick += nabClose_ElementClick;
+            // 
+            // documentManager1
+            // 
+            documentManager1.ContainerControl = this;
+            documentManager1.View = tabbedView1;
+            documentManager1.ViewCollection.AddRange(new DevExpress.XtraBars.Docking2010.Views.BaseView[] { tabbedView1 });
+            // 
+            // tabbedView1
+            // 
+            tabbedView1.DocumentGroupProperties.AllowHtmlDraw = true;
+            tabbedView1.DocumentGroupProperties.ClosePageButtonShowMode = DevExpress.XtraTab.ClosePageButtonShowMode.InActiveTabPageHeader;
+            tabbedView1.DocumentGroupProperties.PinPageButtonShowMode = DevExpress.XtraTab.PinPageButtonShowMode.InActiveTabPageHeader;
+            tabbedView1.DocumentProperties.AllowPin = true;
+            tabbedView1.Style = DevExpress.XtraBars.Docking2010.Views.DockingViewStyle.Light;
+            tabbedView1.DocumentSelected += tabbedView1_DocumentSelected;
+            tabbedView1.DocumentAdded += tabbedView1_DocumentAdded;
+            tabbedView1.DocumentActivated += tabbedView1_DocumentActivated;
+            tabbedView1.DocumentClosed += tabbedView1_DocumentClosed;
+            // 
+            // dockManager1
+            // 
+            dockManager1.Form = this;
+            dockManager1.TopZIndexControls.AddRange(new string[] { "DevExpress.XtraBars.BarDockControl", "DevExpress.XtraBars.StandaloneBarDockControl", "System.Windows.Forms.MenuStrip", "System.Windows.Forms.StatusStrip", "System.Windows.Forms.StatusBar", "DevExpress.XtraBars.Ribbon.RibbonStatusBar", "DevExpress.XtraBars.Ribbon.RibbonControl", "DevExpress.XtraBars.Navigation.OfficeNavigationBar", "DevExpress.XtraBars.Navigation.TileNavPane", "DevExpress.XtraBars.TabFormControl", "DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormControl", "DevExpress.XtraBars.ToolbarForm.ToolbarFormControl" });
+            // 
+            // flyoutPanel1
+            // 
+            flyoutPanel1.AnimationRate = 100;
+            flyoutPanel1.Controls.Add(flyoutPanelControl1);
+            flyoutPanel1.Location = new Point(706, 209);
+            flyoutPanel1.Margin = new Padding(4, 5, 4, 5);
+            flyoutPanel1.Name = "flyoutPanel1";
+            flyoutPanel1.Options.CloseOnOuterClick = true;
+            flyoutPanel1.OptionsBeakPanel.BeakLocation = DevExpress.Utils.BeakPanelBeakLocation.Top;
+            flyoutPanel1.OptionsButtonPanel.ButtonPanelHeight = 47;
+            flyoutPanel1.ParentForm = this;
+            flyoutPanel1.Size = new Size(286, 157);
+            flyoutPanel1.TabIndex = 5;
+            // 
+            // flyoutPanelControl1
+            // 
+            flyoutPanelControl1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+            flyoutPanelControl1.Dock = DockStyle.Fill;
+            flyoutPanelControl1.FlyoutPanel = flyoutPanel1;
+            flyoutPanelControl1.Location = new Point(0, 0);
+            flyoutPanelControl1.Margin = new Padding(4, 5, 4, 5);
+            flyoutPanelControl1.Name = "flyoutPanelControl1";
+            flyoutPanelControl1.Size = new Size(286, 157);
+            flyoutPanelControl1.TabIndex = 0;
+            // 
+            // svgImgItem32
+            // 
+            svgImgItem32.ImageSize = new Size(32, 32);
+            svgImgItem32.Add("MapPin.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.MapPin.svg"));
+            svgImgItem32.Add("BuildingEnergy.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.BuildingEnergy.svg"));
+            svgImgItem32.Add("CityNext.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.CityNext.svg"));
+            svgImgItem32.Add("MapLayers.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.MapLayers.svg"));
+            svgImgItem32.Add("font-icon61846.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.font-icon61846.svg"));
+            svgImgItem32.Add("Ruler.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.Ruler.svg"));
+            svgImgItem32.Add("PostUpdate.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.PostUpdate.svg"));
+            svgImgItem32.Add("Pump", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.Pump"));
+            svgImgItem32.Add("Kit", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.Kit"));
+            svgImgItem32.Add("Puzzle.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.Puzzle.svg"));
+            svgImgItem32.Add("GroupList.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.GroupList.svg"));
+            svgImgItem32.Add("CommandPrompt.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.CommandPrompt.svg"));
+            svgImgItem32.Add("Dictionary.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.Dictionary.svg"));
+            svgImgItem32.Add("PersonalFolder.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.PersonalFolder.svg"));
+            svgImgItem32.Add("GuestUser.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.GuestUser.svg"));
+            svgImgItem32.Add("PassiveAuthentication.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgItem32.PassiveAuthentication.svg"));
+            // 
+            // accordionControlFunction
+            // 
+            accordionControlFunction.Appearance.AccordionControl.BackColor = Color.White;
+            accordionControlFunction.Appearance.AccordionControl.BorderColor = Color.White;
+            accordionControlFunction.Appearance.AccordionControl.ForeColor = Color.Black;
+            accordionControlFunction.Appearance.AccordionControl.Options.UseBackColor = true;
+            accordionControlFunction.Appearance.AccordionControl.Options.UseBorderColor = true;
+            accordionControlFunction.Appearance.AccordionControl.Options.UseForeColor = true;
+            accordionControlFunction.Appearance.Item.Default.ForeColor = Color.Black;
+            accordionControlFunction.Appearance.Item.Default.Options.UseForeColor = true;
+            accordionControlFunction.Dock = DockStyle.Left;
+            accordionControlFunction.Location = new Point(0, 70);
+            accordionControlFunction.Name = "accordionControlFunction";
+            accordionControlFunction.ScrollBarMode = DevExpress.XtraBars.Navigation.ScrollBarMode.Fluent;
+            accordionControlFunction.Size = new Size(211, 1061);
+            accordionControlFunction.TabIndex = 17;
+            accordionControlFunction.ViewType = DevExpress.XtraBars.Navigation.AccordionControlViewType.HamburgerMenu;
+            // 
+            // toolboxItem3
+            // 
+            toolboxItem3.Caption = "12";
+            toolboxItem3.Name = "toolboxItem3";
+            // 
+            // toolboxItem5
+            // 
+            toolboxItem5.Caption = "ToolboxItem";
+            toolboxItem5.Name = "toolboxItem5";
+            // 
+            // svgImgGroup32
+            // 
+            svgImgGroup32.ImageSize = new Size(32, 32);
+            svgImgGroup32.Add("EMI.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgGroup32.EMI.svg"));
+            svgImgGroup32.Add("CC.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgGroup32.CC.svg"));
+            svgImgGroup32.Add("Manage.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgGroup32.Manage.svg"));
+            svgImgGroup32.Add("ExploitProtectionSettings.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgGroup32.ExploitProtectionSettings.svg"));
+            svgImgGroup32.Add("Admin.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgGroup32.Admin.svg"));
+            // 
+            // propertyGridControl1
+            // 
+            propertyGridControl1.Dock = DockStyle.Right;
+            propertyGridControl1.Location = new Point(1487, 70);
+            propertyGridControl1.Name = "propertyGridControl1";
+            propertyGridControl1.OptionsView.AllowReadOnlyRowAppearance = DevExpress.Utils.DefaultBoolean.True;
+            propertyGridControl1.SelectedObject = tabbedView1;
+            propertyGridControl1.Size = new Size(600, 1061);
+            propertyGridControl1.TabIndex = 18;
+            // 
+            // MainForm
+            // 
+            Appearance.BackColor = Color.White;
+            Appearance.Options.UseBackColor = true;
+            AutoScaleDimensions = new SizeF(10F, 22F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(2087, 1131);
+            Controls.Add(propertyGridControl1);
+            Controls.Add(accordionControlFunction);
+            Controls.Add(tileNavPane);
+            Controls.Add(flyoutPanel1);
+            Margin = new Padding(4, 3, 4, 3);
+            Name = "MainForm";
+            Text = "Form1";
+            WindowState = FormWindowState.Maximized;
+            FormClosing += MainForm_FormClosing;
+            FormClosed += MainForm_FormClosed;
+            Load += MainForm_Load;
+            Shown += MainForm_Shown;
+            Resize += MainForm_Resize;
+            ((System.ComponentModel.ISupportInitialize)tileNavPane).EndInit();
+            ((System.ComponentModel.ISupportInitialize)documentManager1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)tabbedView1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)dockManager1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)flyoutPanel1).EndInit();
+            flyoutPanel1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)flyoutPanelControl1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)svgImgItem32).EndInit();
+            ((System.ComponentModel.ISupportInitialize)accordionControlFunction).EndInit();
+            ((System.ComponentModel.ISupportInitialize)svgImgGroup32).EndInit();
+            ((System.ComponentModel.ISupportInitialize)propertyGridControl1).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraBars.Navigation.TileNavPane tileNavPane;
+        private DevExpress.XtraBars.Navigation.NavButton nbTitle;
+        private DevExpress.XtraBars.Docking2010.DocumentManager documentManager1;
+        private DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView tabbedView1;
+        private DevExpress.XtraBars.Navigation.NavButton nbMin;
+        private DevExpress.XtraBars.Navigation.NavButton nbNormal;
+        private DevExpress.XtraBars.Navigation.NavButton nbClose;
+        private DevExpress.XtraBars.Navigation.NavButton nbBasicData;
+        private DevExpress.XtraBars.Navigation.NavButton nbRapidModeling;
+        private DevExpress.Utils.FlyoutPanel flyoutPanel1;
+        private DevExpress.Utils.FlyoutPanelControl flyoutPanelControl1;
+        private DevExpress.Utils.SvgImageCollection svgImgItem32;
+        private DevExpress.XtraBars.Navigation.NavButton nbModelAnalysis;
+        private DevExpress.XtraBars.Navigation.NavButton nbModelEvaluation;
+        private DevExpress.XtraBars.Navigation.NavButton nbSmartHardware;
+        private DevExpress.XtraBars.Docking.DockManager dockManager1;
+        private DevExpress.XtraToolbox.ToolboxItem toolboxItem3;
+        private DevExpress.XtraToolbox.ToolboxItem toolboxItem5;
+        private DevExpress.XtraBars.Navigation.AccordionControl accordionControlFunction;
+        private DevExpress.Utils.SvgImageCollection svgImgGroup32;
+        private DevExpress.XtraBars.Navigation.NavButton navButton2;
+        private DevExpress.XtraBars.Navigation.NavButton navButton3;
+        private DevExpress.XtraVerticalGrid.PropertyGridControl propertyGridControl1;
+    }
+}
diff --git "a/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.cs" "b/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.cs"
new file mode 100644
index 0000000..edd2099
--- /dev/null
+++ "b/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.cs"
@@ -0,0 +1,874 @@
+using DevExpress.Utils.Svg;
+using DevExpress.XtraBars.Docking;
+using DevExpress.XtraBars.Docking2010.Views;
+using DevExpress.XtraBars.Navigation;
+using DevExpress.XtraBars.Ribbon;
+using DevExpress.XtraEditors;
+using HStation.WinFrmUI.Xhs.PumpProduct;
+using System.Drawing.Drawing2D;
+using System.IO;
+using Yw.WinFrmUI;
+using Yw.WinFrmUI.Page;
+
+namespace HStation.Desktop
+{
+    public partial class MainForm : RibbonForm
+    {
+        public MainForm()
+        {
+            InitializeComponent();
+
+            this.accordionControlFunction.GroupHeight = 50;
+            this.accordionControlFunction.ItemHeight = 35;
+            this.accordionControlFunction.Appearance.Group.Default.Font = new Font("微软雅黑", 10.5f);
+            this.accordionControlFunction.Appearance.Item.Default.Font = new Font("微软雅黑", 9.5f);
+            this.accordionControlFunction.AllowItemSelection = true;
+
+            this.accordionControlFunction.Appearance.AccordionControl.BackColor = Color.White;
+            this.accordionControlFunction.Appearance.AccordionControl.BorderColor = Color.White;
+            //this.accordionControlFunction.ResizeMode = AccordionControlResizeMode.None;
+            this.accordionControlFunction.AllowHtmlText = true;
+            this.accordionControlFunction.HtmlTemplates.HamburgerHeaderPanel.Template = @"<div class='hamburger-header-background'></div>";
+            this.accordionControlFunction.HtmlTemplates.HamburgerHeaderPanel.Styles = @".hamburger-header-background {background-color: #ffffff; height: 100%;width: 100%;}";
+
+            this.tabbedView1.Style = DockingViewStyle.Classic;
+            this.tabbedView1.Appearance.BackColor = Color.White;
+            //this.tabbedView1.AppearancePage.Header.BackColor = Color.White;
+            this.tabbedView1.AppearancePage.HeaderSelected.Font = new Font("微软雅黑", 10f, FontStyle.Bold);
+
+           // this.tabbedView1.CustomDrawTabHeader += TabbedView1_CustomDrawTabHeader;
+
+
+        } 
+
+        HatchBrush myHatchBrush1 = new HatchBrush(HatchStyle.BackwardDiagonal, Color.LightGray, Color.AliceBlue);
+        private void TabbedView1_CustomDrawTabHeader(object sender, DevExpress.XtraTab.TabHeaderCustomDrawEventArgs e)
+        {
+            e.Cache.FillRectangle(myHatchBrush1, e.Bounds);
+            e.DefaultDrawText();
+            e.DefaultDrawImage();
+            e.DefaultDrawButtons();
+            e.Handled = true;
+        }
+
+        #region TileNavPane 相关处理
+
+        //移动窗体
+        private void tileNavPane_MouseDown(object sender, MouseEventArgs e)
+        {
+            if (e.Clicks >= 2)
+            {
+                if (this.WindowState == FormWindowState.Maximized)
+                {
+                    this.WindowState = FormWindowState.Normal;
+                }
+                else
+                {
+                    this.WindowState = FormWindowState.Maximized;
+                }
+            }
+            else
+            {
+                var hit_info = this.tileNavPane.CalcHitInfo(e.Location);
+                if (hit_info.InButton)
+                {
+                    return;
+                }
+                this.DragMove();
+            }
+        }
+
+        //标题点击
+        private void nbTitle_ElementClick(object sender, NavElementEventArgs e)
+        {
+        }
+
+        //最大化最小化窗体
+        private void nbNormal_ElementClick(object sender, NavElementEventArgs e)
+        {
+            if (this.WindowState == FormWindowState.Maximized)
+            {
+                this.WindowState = FormWindowState.Normal;
+            }
+            else
+            {
+                this.WindowState = FormWindowState.Maximized;
+            }
+        }
+
+        //最小化窗体
+        private void nbMin_ElementClick(object sender, NavElementEventArgs e)
+        {
+            this.WindowState = FormWindowState.Minimized;
+        }
+
+        //关闭窗体
+        private void nabClose_ElementClick(object sender, NavElementEventArgs e)
+        {
+            this.Close();
+        }
+
+        //功能点击事件
+        private void tileNavPane_ElementClick(object sender, NavElementEventArgs e)
+        {
+            if (e.Element is not NavButton btn)
+                return;
+            if (!btn.Enabled)
+                return;
+            if (btn.Tag is not string tag)
+                return;
+            PageGuid pguid = null;
+            if (this.tabbedView1.ActiveDocument != null)
+            {
+                pguid = this.tabbedView1.ActiveDocument.Tag as PageGuid;
+            }
+            SelectModular(tag, pguid);
+        }
+
+        #endregion TileNavPane 相关处理
+
+        #region 窗体事件
+
+        //界面记载事件
+        private void MainForm_Load(object sender, EventArgs e)
+        {
+        }
+
+        //界面显示事件
+        private void MainForm_Shown(object sender, EventArgs e)
+        {
+            //var guid = new PageGuid()
+            //{
+            //    Modular = "PBS",
+            //    MoudingType = eMoudingType.Tab,
+            //    Function = "Home"
+            //};
+            //if (!IsExistPage(guid, true))
+            //{
+            //}
+
+            SelectModular("BasicData");
+        }
+
+        //界面正在退出时确认
+        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
+        {
+            if (e.CloseReason == CloseReason.UserClosing)
+            {
+                if (XtraMessageBox.Show("是否关闭程序?", "提示", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) != DialogResult.Yes)
+                {
+                    e.Cancel = true;
+                    return;
+                }
+            }
+        }
+
+        //界面退出
+        private void MainForm_FormClosed(object sender, FormClosedEventArgs e)
+        {
+        }
+
+        //窗体尺寸改变
+        private void MainForm_Resize(object sender, EventArgs e)
+        {
+            if (this.WindowState == FormWindowState.Maximized)
+            {
+            }
+            else
+            {
+            }
+        }
+
+        #endregion 窗体事件
+
+        #region TabbedView 相关事件处理程序
+
+        //选中
+        private void tabbedView1_DocumentSelected(object sender, DocumentEventArgs e)
+        {
+            if (e.Document == null)
+                return;
+            var pguid = e.Document.Tag as PageGuid;
+            if (pguid == null)
+                return;
+            SelectModular(pguid.Modular, pguid);
+        }
+
+        //添加
+        private void tabbedView1_DocumentAdded(object sender, DocumentEventArgs e)
+        {
+            if (this.tabbedView1.Documents.Count > 1)
+            {
+                if (!this.tabbedView1.DocumentGroupProperties.ShowTabHeader)
+                {
+                }
+            }
+        }
+
+        //激活
+        private void tabbedView1_DocumentActivated(object sender, DocumentEventArgs e)
+        {
+            var page = e.Document.Control as DocumentPage;
+            if (page == null)
+            {
+                return;
+            }
+        }
+
+        //关闭 此时控件已经为空
+        private void tabbedView1_DocumentClosed(object sender, DocumentEventArgs e)
+        {
+        }
+
+        #endregion TabbedView 相关事件处理程序
+
+        #region Page
+
+        //是否存在Page
+        private bool IsExistPage(PageGuid pguid, bool isActivePage)
+        {
+            if (pguid == null)
+            {
+                return false;
+            }
+            if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
+            {
+                foreach (DockPanel panel in this.dockManager1.Panels)
+                {
+                    if (panel.Tag != null)
+                    {
+                        if (panel.Tag is PageGuid)
+                        {
+                            if ((panel.Tag as PageGuid).ToString() == pguid.ToString())
+                            {
+                                if (isActivePage)
+                                {
+                                    panel.Show();
+                                }
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+
+            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            {
+                foreach (BaseDocument doc in this.tabbedView1.Documents)
+                {
+                    if (doc.Tag != null)
+                    {
+                        if (doc.Tag is PageGuid)
+                        {
+                            if ((doc.Tag as PageGuid).ToString() == pguid.ToString())
+                            {
+                                if (isActivePage)
+                                {
+                                    this.tabbedView1.Controller.Activate(doc);
+                                }
+                                return true;
+                            }
+                        }
+                    }
+                }
+            }
+
+            return false;
+        }
+
+        //更新数据
+        private void RefreshPageData(PageGuid pguid)
+        {
+            if (pguid == null)
+            {
+                return;
+            }
+            if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
+            {
+                var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                if (panel != null)
+                {
+                    if (panel.ControlContainer.Controls.Count > 0)
+                    {
+                        var page = panel.ControlContainer.Controls[0] as DocumentPage;
+                        if (page != null)
+                        {
+                            page.RefreshData();
+                        }
+                    }
+                    return;
+                }
+            }
+
+            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            {
+                var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                if (doc != null)
+                {
+                    var page = doc.Control as DocumentPage;
+                    if (page != null)
+                    {
+                        page.RefreshData();
+                    }
+                    return;
+                }
+            }
+        }
+
+        //更新PageTitle
+        private void UpdatePageTitle(PageGuid pguid, PageTitle title)
+        {
+            if (pguid == null || title == null)
+                return;
+
+            if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
+            {
+                var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                if (panel != null)
+                {
+                    panel.Text = title.Caption;
+                    panel.ImageOptions.Image = title.HeaderImage;
+                    panel.ImageOptions.SvgImage = title.HeaderSvgImage;
+                    panel.ImageOptions.SvgImageSize = title.SvgImageSize;
+                    if (panel.ControlContainer.Controls.Count > 0)
+                    {
+                        var page = panel.ControlContainer.Controls[0] as DocumentPage;
+                        if (page != null)
+                        {
+                            page.PageTitle = title;
+                        }
+                    }
+                    return;
+                }
+            }
+
+            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            {
+                var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                if (doc != null)
+                {
+                    doc.Caption = title.Caption;
+                    doc.ImageOptions.Image = title.HeaderImage;
+                    doc.ImageOptions.SvgImage = title.HeaderSvgImage;
+                    doc.ImageOptions.SvgImageSize = title.SvgImageSize;
+                    var page = doc.Control as DocumentPage;
+                    if (page != null)
+                    {
+                        page.PageTitle = title;
+                    }
+                    return;
+                }
+            }
+        }
+
+        //创建Page
+        private bool CreatePage(DocumentPage page, PageGuid pguid)
+        {
+            if (page == null || pguid == null)
+            {
+                return false;
+            }
+            page.PageGuid = pguid;
+            page.Dock = DockStyle.Fill;
+            page.IsExistPageEvent += IsExistPage;
+            page.CreatePageEvent += CreatePage;
+            page.RefreshPageDataEvent += RefreshPageData;
+            page.UpdatePageTitleEvent += UpdatePageTitle;
+            page.ClosePageEvent += ClosePage;
+            page.RegistEvents();
+            switch (pguid.MoudingType)
+            {
+                case eMoudingType.Dock:
+                    {
+                        this.dockManager1.BeginUpdate();
+                        DockPanel docPnl = null;
+                        if (pguid.DockType == eDockType.Left)
+                        {
+                            docPnl = this.dockManager1.AddPanel(DockingStyle.Left);
+                        }
+                        else if (pguid.DockType == eDockType.Right)
+                        {
+                            docPnl = this.dockManager1.AddPanel(DockingStyle.Right);
+                        }
+
+                        docPnl.Footer = Directory.GetCurrentDirectory();
+                        if (page.PageTitle != null)
+                        {
+                            docPnl.Text = page.PageTitle.Caption;
+                            docPnl.ImageOptions.Image = page.PageTitle.HeaderImage;
+                            docPnl.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage;
+                            docPnl.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize;
+                            docPnl.Options.ShowCloseButton = page.PageTitle.AllowClose;
+                        }
+                        docPnl.ControlContainer.Controls.Add(page);
+                        docPnl.Tag = pguid;
+                        this.dockManager1.EndUpdate();
+                        docPnl.Show();
+                    }
+                    break;
+
+                case eMoudingType.Tab:
+                    {
+                        this.tabbedView1.BeginUpdate();
+                        var doc = this.tabbedView1.AddDocument(page);
+                        doc.Footer = Directory.GetCurrentDirectory();
+                        if (page.PageTitle != null)
+                        {
+                            doc.Caption = page.PageTitle.Caption;
+                            doc.ImageOptions.Image = page.PageTitle.HeaderImage;
+                            doc.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage;
+                            doc.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize;
+                            doc.Properties.AllowClose = page.PageTitle.AllowClose ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
+                        }
+                        doc.Tag = pguid;
+                        this.tabbedView1.EndUpdate();
+                        this.tabbedView1.Controller.Activate(doc);
+                    }
+                    break;
+
+                default: break;
+            }
+            page.InitialDataSource();
+            return true;
+        }
+
+        //关闭Page
+        private void ClosePage(PageGuid pguid)
+        {
+            switch (pguid.MoudingType)
+            {
+                case eMoudingType.Dock:
+                    {
+                        if (this.dockManager1.Panels != null && this.dockManager1.Panels.Count > 0)
+                        {
+                            var panel = this.dockManager1.Panels.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                            if (panel != null)
+                            {
+                                if (panel.Visibility != DockVisibility.Hidden)
+                                    panel.Close();//会触发正在关闭和关闭事件
+                                                  //this.dockManager1.RemovePanel(panel);//不会触发正在关闭和关闭事件
+                            }
+                        }
+                    }
+                    break;
+
+                case eMoudingType.Tab:
+                    {
+                        if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+                        {
+                            var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                            if (doc != null)
+                            {
+                                this.tabbedView1.Controller.Close(doc);//会触发正在关闭和关闭事件
+                            }
+                        }
+                    }
+                    break;
+
+                default: break;
+            }
+        }
+
+        #endregion Page
+
+        #region Modular
+
+        private string _sel_modular = string.Empty;
+
+        //选择模块
+        private void SelectModular(string modular, PageGuid pguid = null)
+        {
+            if (_sel_modular != modular)
+            {
+                foreach (NavButton btn in this.tileNavPane.Buttons)
+                {
+                    if (btn.Tag == null)
+                        continue;
+                    if (btn.Tag is string tag)
+                    {
+                        if (tag == modular)
+                        {
+                            btn.Appearance.BackColor = Color.FromArgb(50, 121, 197);
+                            btn.Appearance.ForeColor = Color.White;
+                        }
+                        else
+                        {
+                            btn.Appearance.BackColor = Color.White;
+                            btn.Appearance.ForeColor = Color.Black;
+                        }
+                    }
+                }
+
+                //初始功能列表
+                this.accordionControlFunction.Elements.Clear();
+                var list = GetAccordionElementList(modular);
+                if (list != null && list.Count > 0)
+                {
+                    foreach (var element in list)
+                    {
+                        var accEle = GetAccordionControlElement(element);
+                        this.accordionControlFunction.Elements.Add(accEle);
+                    }
+                }
+                _sel_modular = modular;
+            }
+
+            //选择功能
+            if (pguid != null)
+            {
+                foreach (var item in this.accordionControlFunction.Elements)
+                {
+                    if (SelectAccordionControlElement(item, pguid))
+                        break;
+                }
+            }
+        }
+
+        //获取模块元素
+        private DevExpress.XtraBars.Navigation.AccordionControlElement GetAccordionControlElement(AccordionElement ele)
+        {
+            var dev_ele = new DevExpress.XtraBars.Navigation.AccordionControlElement();
+            dev_ele.Name = ele.Id;
+            dev_ele.Text = ele.Caption;
+            dev_ele.Image = ele.Image;
+            dev_ele.ImageOptions.SvgImage = ele.SvgImage;
+            dev_ele.ImageOptions.SvgImageSize = ele.SvgImageSize;
+            dev_ele.AllowGlyphSkinning = ele.AllowGlyphSkinning ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
+            dev_ele.Tag = ele;
+            dev_ele.Style = DevExpress.XtraBars.Navigation.ElementStyle.Item;
+            dev_ele.Click += delegate { ele.Click?.Invoke(); };
+            if (ele.Elements != null && ele.Elements.Count > 0)
+            {
+                dev_ele.Style = DevExpress.XtraBars.Navigation.ElementStyle.Group;
+                foreach (var item in ele.Elements)
+                {
+                    dev_ele.Elements.Add(GetAccordionControlElement(item));
+                }
+            }
+            return dev_ele;
+        }
+
+        //选择功能元素
+        private bool SelectAccordionControlElement(DevExpress.XtraBars.Navigation.AccordionControlElement ctrl_ele, PageGuid pguid)
+        {
+            if (ctrl_ele == null)
+                return false;
+            if (pguid == null)
+                return false;
+            if (ctrl_ele.Tag is AccordionElement ele)
+            {
+                if (ele.PageGuid != null && ele.PageGuid.ToString() == pguid.ToString())
+                {
+                    this.accordionControlFunction.SelectedElement = ctrl_ele;
+                    if (ctrl_ele.OwnerElement != null)
+                    {
+                        ctrl_ele.OwnerElement.Expanded = true;
+                        this.accordionControlFunction.Refresh();
+                    }
+                    return true;
+                }
+                else
+                {
+                    if (ctrl_ele.Elements != null && ctrl_ele.Elements.Count > 0)
+                    {
+                        foreach (var item in ctrl_ele.Elements)
+                        {
+                            SelectAccordionControlElement(item, pguid);
+                        }
+                    }
+                }
+            }
+
+            return false;
+        }
+ 
+
+        //获取
+        private List<AccordionElement> GetAccordionElementList(string modular)
+        {
+            var list = new List<AccordionElement>();
+            if (modular == "BasicData")
+            {
+                var place_mgr_ele = new AccordionElement()
+                {
+                    Id = "place",
+                    Caption = "场所管理",
+                    SvgImage = svgImgGroup32[0],
+                    SvgImageSize = new Size(24, 24),
+                    AllowGlyphSkinning = true,
+                    Elements = new List<AccordionElement>()
+                    {
+                        Get("行政区域",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "DistrictMgr",
+                        }, svgImgItem32[0], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                                var page = new DocumentPage();
+                                page.PageGuid = guid;
+                                page.PageTitle.Caption = caption;
+                                page.PageTitle.HeaderSvgImage = svg;
+                                page.PageTitle.SvgImageSize = size;
+                                CreatePage(page, guid);
+                            }
+                        }),
+                        Get("场所建筑",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "PlaceMgr",
+                        }, svgImgItem32[1], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                                var page = new DocumentPage();
+                                page.PageGuid = guid;
+                                page.PageTitle.Caption = caption;
+                                page.PageTitle.HeaderSvgImage = svg;
+                                page.PageTitle.SvgImageSize = size;
+                                CreatePage(page, guid);
+                            }
+                        }),
+                        Get("场所设施", new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "FacilityMgr",
+                        }, svgImgItem32[2], new Size(18, 18), (caption, guid, svg, size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                                var page = new DocumentPage();
+                                page.PageGuid = guid;
+                                page.PageTitle.Caption = caption;
+                                page.PageTitle.HeaderSvgImage = svg;
+                                page.PageTitle.SvgImageSize = size;
+                                CreatePage(page, guid);
+                            }
+                        })
+                    }
+                };
+
+                var we_mgr_ele = new AccordionElement()
+                {
+                    Id = "we",
+                    Caption = "当量管理",
+                    SvgImage = svgImgGroup32[1],
+                    SvgImageSize = new Size(24, 24),
+                    AllowGlyphSkinning = true,
+                    Elements = new List<AccordionElement>() {
+                        Get("用水器具",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "WaterUtensilMgr",
+                        }, svgImgItem32[4], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        }),
+                        Get("用水当量",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "WaterWEMgr",
+                        }, svgImgItem32[5], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        })
+                    }
+                };
+
+                var asset_mgr_ele = new AccordionElement()
+                {
+                    Id = "asset",
+                    Caption = "产品管理",
+                    SvgImage = svgImgGroup32[2],
+                    SvgImageSize = new Size(24, 24),
+                    AllowGlyphSkinning = true,
+                    Elements = new List<AccordionElement>() {
+                        Get("厂商管理",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "AssetsManufacturerMgr",
+                        }, svgImgItem32[6], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {   
+                                var page = new DocumentPage();
+                                page.PageGuid = guid;
+                                page.PageTitle.Caption = caption;
+                                page.PageTitle.HeaderSvgImage = svg;
+                                page.PageTitle.SvgImageSize = size;
+                                CreatePage(page, guid);
+                            }
+                        }),
+                        Get("水泵管理",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "AssetsPumpMgr",
+                        }, svgImgItem32[7], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                                var page=new PumpProductMainPage();
+                                page.PageGuid = guid;
+                                page.PageTitle.Caption = caption;
+                                page.PageTitle.HeaderSvgImage = svg;
+                                page.PageTitle.SvgImageSize = size;
+                                CreatePage(page,guid);
+                            }
+                        }),
+                        Get("成套设备",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "AssetsKitMgr",
+                        }, svgImgItem32[8], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        })
+                    }
+                };
+
+                var system_config_ele = new AccordionElement()
+                {
+                    Id = "asset",
+                    Caption = "系统配置",
+                    SvgImage = svgImgGroup32[3],
+                    SvgImageSize = new Size(24, 24),
+                    AllowGlyphSkinning = true,
+                    Elements = new List<AccordionElement>() {
+                        Get("类型管理",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "SystemTypeMgr",
+                        }, svgImgItem32[9], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        }),
+                        Get("分类管理",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "SystemCatalogMgr",
+                        }, svgImgItem32[10], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        }),
+                        Get("属性管理",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "SystemPropMgr",
+                        }, svgImgItem32[11], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        }),
+                        Get("字典类型",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "SystemDictMgr",
+                        }, svgImgItem32[12], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        }),
+                     }
+                };
+
+                var auth_config_ele = new AccordionElement()
+                {
+                    Id = "asset",
+                    Caption = "权限配置",
+                    SvgImage = svgImgGroup32[4],
+                    SvgImageSize = new Size(24, 24),
+                    AllowGlyphSkinning = true,
+                    Elements = new List<AccordionElement>() {
+                        Get("角色管理",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "RoleMgr",
+                        }, svgImgItem32[13], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        }),
+                        Get("用户管理",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "UserMgr",
+                        }, svgImgItem32[14], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        }),
+                        Get("菜单管理",new PageGuid()
+                        {
+                            Modular = "BasicData",
+                            MoudingType = eMoudingType.Tab,
+                            Function = "MenuMgr",
+                        }, svgImgItem32[15], new Size(18, 18), (caption,guid,svg,size) =>
+                        {
+                            if (!IsExistPage(guid, true))
+                            {
+                            }
+                        }),
+                    }
+                };
+
+                list.Add(place_mgr_ele);
+                list.Add(we_mgr_ele);
+                list.Add(asset_mgr_ele);
+                list.Add(system_config_ele);
+                list.Add(auth_config_ele);
+            }
+            return list;
+        }
+
+        private AccordionElement Get(string caption, PageGuid guid, SvgImage svg_img, Size size, Action<string, PageGuid, SvgImage, Size> action, bool glyph_skinning = true)
+        {
+            var ele = new AccordionElement();
+            if (guid == null)
+            {
+                ele.Id = Guid.NewGuid().ToString();
+            }
+            else
+            {
+                ele.Id = guid.ToString();
+                ele.Click = delegate { action(caption, guid, svg_img, size); };
+            }
+            ele.PageGuid = guid;
+            ele.Caption = caption;
+            ele.SvgImage = svg_img;
+            ele.SvgImageSize = size;
+            ele.AllowGlyphSkinning = glyph_skinning;
+            return ele;
+        }
+
+        #endregion Modular
+    }
+}
\ No newline at end of file
diff --git "a/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.resx" "b/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.resx"
new file mode 100644
index 0000000..a2c415f
--- /dev/null
+++ "b/Desktop/HStation.Desktop.PBS.Core/MainForm - \345\244\215\345\210\266\0502\051.resx"
@@ -0,0 +1,699 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
+  <data name="nbTitle.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7rCVPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="nbBasicData.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qCtPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="nbRapidModeling.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7q6dPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="nbModelAnalysis.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qWjPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="nbModelEvaluation.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qWMPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="nbSmartHardware.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qWkPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="nbMin.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAFICAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
+        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
+        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IlJlbW92ZSI+DQogICAgPHBhdGggZD0iTTI3LDE4SDVj
+        LTAuNiwwLTEtMC41LTEtMXYtMmMwLTAuNiwwLjQtMSwxLTFoMjJjMC41LDAsMSwwLjQsMSwxdjJDMjgs
+        MTcuNSwyNy41LDE4LDI3LDE4eiIgY2xhc3M9IlJlZCIgLz4NCiAgPC9nPg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="nbNormal.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAIkCAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5CbGFja3tmaWxsOiM3MjcyNzI7fQoJLkdyZWVue2ZpbGw6IzAz
+        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9Cgkuc3Qwe29wYWNpdHk6MC43NTt9Cgkuc3Qxe29wYWNp
+        dHk6MC41O30KPC9zdHlsZT4NCiAgPGcgaWQ9IldpbmRvdyI+DQogICAgPHBhdGggZD0iTTMwLDEwVjVj
+        MC0wLjUtMC41LTEtMS0xSDNDMi41LDQsMiw0LjUsMiw1djVIMzB6IiBjbGFzcz0iQmx1ZSIgLz4NCiAg
+        ICA8cGF0aCBkPSJNMjgsMTB2MTZINFYxMEgydjE3YzAsMC41LDAuNSwxLDEsMWgyNmMwLjUsMCwxLTAu
+        NSwxLTFWMTBIMjh6IiBjbGFzcz0iQmxhY2siIC8+DQogIDwvZz4NCjwvc3ZnPgs=
+</value>
+  </data>
+  <data name="nbClose.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAD0DAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJs
+        YWNre2ZpbGw6IzcyNzI3Mjt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLkdyZWVue2ZpbGw6IzAzOUMy
+        Mzt9CgkuWWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQo8L3N0eWxlPg0KICA8ZyBpZD0iRGVsZXRlIj4N
+        CiAgICA8Zz4NCiAgICAgIDxwYXRoIGQ9Ik0xOC44LDE2bDYuOS02LjljMC40LTAuNCwwLjQtMSwwLTEu
+        NGwtMS40LTEuNGMtMC40LTAuNC0xLTAuNC0xLjQsMEwxNiwxMy4yTDkuMSw2LjNjLTAuNC0wLjQtMS0w
+        LjQtMS40LDAgICAgTDYuMyw3LjdjLTAuNCwwLjQtMC40LDEsMCwxLjRsNi45LDYuOWwtNi45LDYuOWMt
+        MC40LDAuNC0wLjQsMSwwLDEuNGwxLjQsMS40YzAuNCwwLjQsMSwwLjQsMS40LDBsNi45LTYuOWw2Ljks
+        Ni45ICAgIGMwLjQsMC40LDEsMC40LDEuNCwwbDEuNC0xLjRjMC40LTAuNCwwLjQtMSwwLTEuNEwxOC44
+        LDE2eiIgY2xhc3M9IlJlZCIgLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPgs=
+</value>
+  </data>
+  <metadata name="documentManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <metadata name="dockManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>259, 17</value>
+  </metadata>
+  <metadata name="svgImgItem32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>659, 17</value>
+  </metadata>
+  <data name="svgImgItem32.MapPin.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7pyHPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.BuildingEnergy.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7rCLPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.CityNext.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7rCGPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.MapLayers.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qCePC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.font-icon61846.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+74aWPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.Ruler.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7rWePC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.PostUpdate.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qOzPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.Pump" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAFgIAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgd2lkdGg9IjMycHgiIGhl
+        aWdodD0iMzJweCIgdmlld0JveD0iMCAwIDEwMjQgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0
+        cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5
+        L3hsaW5rIiBjbGFzcz0iaWNvbiI+DQogIDxwYXRoIGQ9Ik0xMDI0LjUxMiA3Ni44aC01MTJjLTU4LjU5
+        MzI4IDAuMDUxMi0xMTUuNDQ1NzYgMTEuNTYwOTYtMTY4Ljk5MDcyIDM0LjIxMTg0LTUxLjgyNDY0IDIx
+        LjkyMzg0LTk4LjM2NTQ0IDUzLjI5OTItMTM4LjMyMTkyIDkzLjI1NTY4cy03MS4zMzE4NCA4Ni40OTcy
+        OC05My4yNTU2OCAxMzguMzIxOTJDODkuMjQxNiAzOTYuMjY3NTIgNzcuNzMxODQgNDUzLjI2MzM2IDc3
+        LjczMTg0IDUxMnMxMS41MDk3NiAxMTUuNzQyNzIgMzQuMjExODQgMTY5LjQxMDU2YTQzMi43ODg0OCA0
+        MzIuNzg4NDggMCAwIDAgMjMuOTkyMzIgNDguMTg5NDRIMFY5NDcuMmg1MTJ2LTAuMDEwMjRjMC4zMDcy
+        IDAuMDEwMjQgMC42MjQ2NCAwLjAxMDI0IDAuOTMxODQgMC4wMTAyNCA1OC43MzM1NjggMCAxMTUuNzMy
+        NDgtMTEuNTA5NzYgMTY5LjQwODUxMi0zNC4yMTE4NCA1MS44MjQ2NC0yMS45MjM4NCA5OC4zNjg1MTIt
+        NTMuMjk5MiAxMzguMzIxOTItOTMuMjU0NjU2Qzg2MC42MjA4IDc3OS43NzYgODkxLjk5NjE2IDczMy4y
+        MzUyIDkxMy45MiA2ODEuNDEwNTZjMjIuNzAyMDgtNTMuNjY3ODQgMzQuMjExODQtMTEwLjY3MzkyIDM0
+        LjIxMTg0LTE2OS40MTA1NiAwLTc3LjM3MzQ0LTE5Ljk4OTUwNC0xNTEuNzA1Ni01OC4xOTM5Mi0yMTcu
+        NmgxMzQuNTc0MDhWNzYuOHogbS01NjMuNzEyIDgxOS4yaC00MDkuNlY3ODAuOGgxODcuNzYwNjRhMzg2
+        LjAwNjAxNiAzODYuMDA2MDE2IDAgMCAxLTQyLjI3MDcyLTUxLjJjLTQyLjcyMTI4LTYxLjg5MDU2LTY3
+        Ljc1ODA4LTEzNi44NzgwOC02Ny43NTgwOC0yMTcuNiAwLTIxMS43MzI0OCAxNzIuMjU3MjgtMzg0IDM4
+        NC0zODRoNDYwLjM4MDE2djExNS4ySDc5MS43ODc1MmwzMC4xNjcwNCA0MC44MTY2NGM0OS4wNDY1Mjgg
+        NjYuMzY1NDQgNzQuOTc3MjggMTQ1LjIwMzIgNzQuOTc3MjggMjI3Ljk4MzM2IDAgMjExLjc0MjcyLTE3
+        Mi4yNTcyOCAzODQtMzg0IDM4NC0wLjMwNzIgMC0wLjYyNDY0IDAtMC45MzE4NC0wLjAxMDI0IiBmaWxs
+        PSIjMDQwMDAwIiAvPg0KICA8cGF0aCBkPSJNNDMwLjM0MDA5NiA1MTEuMTY5NTM2Yy0wLjQ3MTA0IDQ1
+        LjI0MzM5MiAzNi45MTUyIDgyLjI5NjgzMiA4My41MTUzOTIgODIuNzQ5NDQgNDQuNjU4Njg4LTIuMTUy
+        NDQ4IDc5Ljg2NTg1Ni0zNy43MTM5MiA4MC4zMTY0MTYtODEuMTMxNTIgMC40NTk3NzYtNDMuNDIwNjcy
+        LTMzLjk5NDc1Mi03OS42NjgyMjQtNzguNjA0Mjg4LTgyLjcwMzM2LTQ2LjU5NjA5Ni0wLjQ2Mzg3Mi04
+        NC43NTM0MDggMzUuODQ0MDk2LTg1LjIyNzUyIDgxLjA4NTQ0eiIgZmlsbD0iIzA0MDAwMCIgLz4NCiAg
+        PHBhdGggZD0iTTUxMi4yNTYgNzQxLjM3NmMtNjEuMjY4OTkyIDAtMTE4Ljg2ODk5Mi0yMy44NTkyLTE2
+        Mi4xOTM0MDgtNjcuMTgyNTkyQzMwNi43MzkyIDYzMC44NzAwMTYgMjgyLjg4IDU3My4yNjc5NjggMjgy
+        Ljg4IDUxMmMwLTYxLjI2ODk5MiAyMy44NTkyLTExOC44NzAwMTYgNjcuMTgyNTkyLTE2Mi4xOTM0MDhD
+        MzkzLjM4NTk4NCAzMDYuNDgzMiA0NTAuOTg3MDA4IDI4Mi42MjQgNTEyLjI1NiAyODIuNjI0YzYxLjI2
+        Nzk2OCAwIDExOC44NzAwMTYgMjMuODU5MiAxNjIuMTkzNDA4IDY3LjE4MjU5MkM3MTcuNzcyOCAzOTMu
+        MTI5OTg0IDc0MS42MzIgNDUwLjczMTAwOCA3NDEuNjMyIDUxMmMwIDYxLjI2Nzk2OC0yMy44NTkyIDEx
+        OC44NzAwMTYtNjcuMTgyNTkyIDE2Mi4xOTM0MDhDNjMxLjEyNjAxNiA3MTcuNTE2OCA1NzMuNTIzOTY4
+        IDc0MS4zNzYgNTEyLjI1NiA3NDEuMzc2eiBtMC00MDcuNTUyYy05OC4yNDY2NTYgMC0xNzguMTc2IDc5
+        LjkyOTM0NC0xNzguMTc2IDE3OC4xNzZzNzkuOTI5MzQ0IDE3OC4xNzYgMTc4LjE3NiAxNzguMTc2IDE3
+        OC4xNzYtNzkuOTI5MzQ0IDE3OC4xNzYtMTc4LjE3Ni03OS45MjkzNDQtMTc4LjE3Ni0xNzguMTc2LTE3
+        OC4xNzZ6IiBmaWxsPSIjMDQwMDAwIiAvPg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.Kit" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANcTAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgd2lkdGg9IjMyLjAzMTI1
+        cHgiIGhlaWdodD0iMzJweCIgdmlld0JveD0iMCAwIDEwMjUgMTAyNCIgdmVyc2lvbj0iMS4xIiB4bWxu
+        cz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9y
+        Zy8xOTk5L3hsaW5rIiBjbGFzcz0iaWNvbiI+DQogIDxwYXRoIGQ9Ik04MjQuNTk2NDggMjA4LjgzNDU2
+        VjYxLjU0MjRIMzc5LjIyODE2Yy01MC45NjQ0OCAwLjA0MDk2LTEwMC40MjM2OCAxMC4wNTU2OC0xNDYu
+        OTk1MiAyOS43NTc0NC00NS4wODY3MiAxOS4wNjY4OC04NS41NjU0NCA0Ni4zNTY0OC0xMjAuMzMwMjQg
+        ODEuMTIxMjgtMzQuNzU0NTYgMzQuNzU0NTYtNjIuMDQ0MTYgNzUuMjMzMjgtODEuMTExMDQgMTIwLjMy
+        QzExLjAzODcyIDMzOS40MjUyOCAxLjAyNCAzODkuMDA3MzYgMS4wMjQgNDQwLjEwNDk2czEwLjAxNDcy
+        IDEwMC42Njk0NCAyOS43Njc2OCAxNDcuMzYzODRjMTkuMDY2ODggNDUuMDc2NDggNDYuMzU2NDggODUu
+        NTU1MiA4MS4xMTEwNCAxMjAuMzIgMTcuMzI2MDggMTcuMzI2MDggMzYuMDg1NzYgMzIuNzk4NzIgNTYu
+        MTA0OTYgNDYuMzI1NzZhMzc4LjIyODczNiAzNzguMjI4NzM2IDAgMCAwIDY0LjIyNTI4IDM0Ljc5NDQ5
+        NmMwLjc4ODQ4IDAuMzM3OTIgMS41ODcyIDAuNjY1NiAyLjM3NTY4IDAuOTgzMDQgMTIuOTYzODQgNS4z
+        ODYyNCAyNi4xMzI0OCAxMC4wMTQ3MiAzOS41MDU5MiAxMy44ODY0NjQgNi4zODk3NiAxLjg2MjY1NiA2
+        LjY4NjcyIDMuNTQzMDQgMTMuMTY4NjQgNS4wNDgzMmEzMzEuODA2NzIgMzMxLjgwNjcyIDAgMCAxLTI0
+        LjI4OTI4LTUzLjQ3MzI4Yy0xOC42MjY1Ni02LjUzNDE0NC0zMC4zNjE2LTE0LjY5NTQyNC00Ny4zMjky
+        OC0yNC4yOTAzMDQtNS4yMTIxNi0yLjk0OTEyLTEwLjM0MjQtNi4wMzEzNi0xNS4zODA0OC05LjI0NTY5
+        NmEzMzYuNjY4NjcyIDMzNi42Njg2NzIgMCAwIDEtODEuOTcxMi03My44MzE0MjRDNzIuNzk2MTYgNTkw
+        Ljg5OTIgNDUuNTY4IDUxOC42MTUwNCA0NS41NjggNDQwLjEwNDk2YzAtMTg0LjE4Njg4IDE0OS44NDE5
+        Mi0zMzQuMDI4OCAzMzQuMDI4OC0zMzQuMDI4OGg0MDAuNDY0ODk2djEwMC4yMDg2NEg2MjIuMTYxOTJs
+        MS42MTc5MiAyLjE5MTM2IDIwMC44MTY2NCAwLjM1ODR6IiBmaWxsPSIjMDQwMDAwIiAvPg0KICA8cGF0
+        aCBkPSJNODM3LjE4MjQ2NCA0MTEuMDg0OGgtMTAuMjE5NTJsMTguNTEzOTIgMjUuMDQ3MDRhMzcwLjA4
+        Mzg0IDM3MC4wODM4NCAwIDAgMC04LjI5NDQtMjUuMDQ3MDR6IG0tMTAxLjU5MjA2NC0xMDAuMjA4NjRo
+        MTkxLjQwNjA4VjE2My45NDI0SDQ4MS42MjgxNmMtNTAuOTY0NDggMC4wNDA5Ni0xMDAuNDIzNjggMTAu
+        MDU1NjgtMTQ2Ljk5NTIgMjkuNzU3NDQtNDUuMDg2NzIgMTkuMDY2ODgtODUuNTY1NDQgNDYuMzU2NDgt
+        MTIwLjMzMDI0IDgxLjEyMTI4LTM0Ljc1NDU2IDM0Ljc1NDU2LTYyLjA0NDE2IDc1LjIzMzI4LTgxLjEx
+        MTA0IDEyMC4zMkMxMTMuNDM4NzIgNDQxLjgyNTI4IDEwMy40MjQgNDkxLjQwNzM2IDEwMy40MjQgNTQy
+        LjUwNDk2YzAgMzYuMDc0NDk2IDQuOTk3MTIgNzEuNDAyNDk2IDE0Ljg4ODk2IDEwNS40ODIyNCA0LjEx
+        NjQ4IDE0LjE4MzQyNCA5LjA3MjY0IDI4LjE2IDE0Ljg3ODcyIDQxLjg4MTZhMzc3LjQxMTU4NCAzNzcu
+        NDExNTg0IDAgMCAwIDM0LjgxNiA2NC4yNDU3NmMxMy41MTY4IDIwLjAxOTIgMjguOTc5MiAzOC43NDgx
+        NiA0Ni4yOTUwNCA1Ni4wNzQyNCAxNy4zMjYwOCAxNy4zMjYwOCAzNi4wODU3NiAzMi43OTg3MiA1Ni4x
+        MDQ5NiA0Ni4zMjU3NmEzNzguMjI4NzM2IDM3OC4yMjg3MzYgMCAwIDAgNjQuMjI1MjggMzQuNzk0NDk2
+        YzEzLjcyMTYgNS44MDYwOCAxNi40MzUyIDEwLjc2MjI0IDMwLjYxNzYgMTQuODY5NTA0LTI4Ljg4NzA0
+        LTIzLjAxOTUyLTUyLjg1ODg4LTUwLjcyODk2LTcyLjgwNjQtODEuOTYwOTYtOS44OTE4NC02LjMxODA4
+        LTkuMTg1MjgtMTMuMTM3OTItMTguMzI5Ni0yMC40MzkwNGEzMzYuNzE3ODI0IDMzNi43MTc4MjQgMCAw
+        IDEtNTMuNDAxNi01My4zOTIzODQgMzM1LjczNDc4NCAzMzUuNzM0Nzg0IDAgMCAxLTIwLjQyODgtMjgu
+        NTY4NTc2Yy0zMy4xMTYxNi01MS44MzQ4OC01Mi4zMTYxNi0xMTMuMzc4MzA0LTUyLjMxNjE2LTE3OS4z
+        MTI2NCAwLTE4NC4xODY4OCAxNDkuODQxOTItMzM0LjAyODggMzM0LjAyODgtMzM0LjAyODhoNDAwLjQ2
+        NDg5NnYxMDAuMjA4NjRINzI0LjU2MTkybDEuNjE3OTIgMi4xOTEzNmg5LjQxMDU2eiIgZmlsbD0iIzA0
+        MDAwMCIgLz4NCiAgPHBhdGggZD0iTTEwMjUuMDI0IDI2Ni4zNDI0SDU3OS42NTU2OGMtNTAuOTY1NTA0
+        IDAuMDQwOTYtMTAwLjQyMzY4IDEwLjA1NTY4LTE0Ni45OTUyIDI5Ljc1NzQ0LTQ1LjA4NjcyIDE5LjA2
+        Njg4LTg1LjU2NTQ0IDQ2LjM1NjQ4LTEyMC4zMzAyNCA4MS4xMjEyOC0zNC43NTQ1NiAzNC43NTQ1Ni02
+        Mi4wNDQxNiA3NS4yMzMyOC04MS4xMTEwNCAxMjAuMzItMTkuNzUyOTYgNDYuNjg0MTYtMjkuNzY3Njgg
+        OTYuMjY2MjQtMjkuNzY3NjggMTQ3LjM2Mzg0IDAgMjkuMzA2ODggMy4yOTcyOCA1OC4xMTIgOS44NDA2
+        NCA4Ni4xNTkzNiAxLjUwNTI4IDYuNDgxOTIgMy4xODQ2NCAxMi45MjI4OCA1LjA0ODMyIDE5LjMyMjg4
+        YTM3My42MjI3ODQgMzczLjYyMjc4NCAwIDAgMCAxMy44OTU2OCAzOS41MDU5MmMwLjMxNzQ0IDAuNzg5
+        NTA0IDAuNjQ1MTIgMS41ODcyIDAuOTgzMDQgMi4zNzU2OGEzNzcuNDExNTg0IDM3Ny40MTE1ODQgMCAw
+        IDAgMzQuODE2IDY0LjI0NTc2YzEzLjUxNjggMjAuMDE5MiAyOC45NzkyIDM4Ljc0ODE2IDQ2LjI5NTA0
+        IDU2LjA3NDI0IDM0Ljc2NDggMzQuNzUzNTM2IDc1LjI0MzUyIDYyLjA1NDQgMTIwLjMzMDI0IDgxLjEy
+        MTI4IDQ2LjY4NDE2IDE5Ljc0MjcyIDk2LjI2NjI0IDI5Ljc1ODQ2NCAxNDcuMzYzODQgMjkuNzU4NDY0
+        IDUxLjA5NzYgMCAxMDAuNjcwNDY0LTEwLjAxNDcyIDE0Ny4zNTM2LTI5Ljc1ODQ2NCA0NS4wODY3Mi0x
+        OS4wNjY4OCA4NS41NjU0NC00Ni4zNjY3MiAxMjAuMzMwMjQtODEuMTIxMjggMzQuNzU0NTYtMzQuNzY0
+        OCA2Mi4wNTU0MjQtNzUuMjQzNTIgODEuMTIxMjgtMTIwLjMzMDI0IDE5Ljc0MjcyLTQ2LjY4NTE4NCAy
+        OS43NTg0NjQtOTYuMjU2IDI5Ljc1ODQ2NC0xNDcuMzUzNiAwLTY3LjI5NzI4LTE3LjM5Nzc2LTEzMS45
+        NjI4OC01MC42MjY1Ni0xODkuMjg2NEgxMDI1LjAyNFYyNjYuMzQyNHogbS00NC41MzM3NiAxNDQuNzQy
+        NGgtMTU3LjkwMDhsMTguNTEzOTIgMjUuMDQ3MDQgNy43MjA5NiAxMC40NTUwNGM0Mi42NzAwOCA1Ny43
+        MzMxMiA2NS4yMTg1NiAxMjYuMzEwNCA2NS4yMTg1NiAxOTguMzE4MDggMCAxODQuMTc2NjQtMTQ5Ljg0
+        MTkyIDMzNC4wMjg4LTMzNC4wMTg1NiAzMzQuMDI4OC03OC41MTAwOCAwLTE1MC44MDQ0OC0yNy4yMzk0
+        MjQtMjA3Ljg4MjI0LTcyLjc1NTJhMzM2LjQzMTEwNCAzMzYuNDMxMTA0IDAgMCAxLTczLjgzMDQtODEu
+        OTYwOTYgMzMzLjMzMjQ4IDMzMy4zMzI0OCAwIDAgMS05LjI1Njk2LTE1LjM5MDcyIDMzMS44MDY3MiAz
+        MzEuODA2NzIgMCAwIDEtMjQuMjg5MjgtNTMuNDczMjhjLTEyLjE1NDg4LTM0LjU4MTUwNC0xOC43Njk5
+        Mi03MS43NjE5Mi0xOC43Njk5Mi0xMTAuNDQ4NjQgMC0xODQuMTg2ODggMTQ5Ljg0MTkyLTMzNC4wMjg4
+        IDMzNC4wMjg4LTMzNC4wMjg4aDQwMC40NjU5MnYxMDAuMjA4NjR6IG0tMjUwLjA4MTI4LTEwMi40QTM3
+        My40MzUzOTIgMzczLjQzNTM5MiAwIDAgMCA3MTEuNjggMjY2LjM0MjRoLTUxLjEwNzg0YTMzMi4wMTg2
+        ODggMzMyLjAxODY4OCAwIDAgMSAyMi44MTQ3MiA0NC41MzM3NmgzOC40MjA0OGwtMS42MTc5Mi0yLjE5
+        MTM2aDEwLjIxOTUyeiIgZmlsbD0iIzA0MDAwMCIgLz4NCiAgPHBhdGggZD0iTTU5OS4zODcxMzYgNDI5
+        LjQyNjY4OGMtMTQyLjAyMDYwOC0xLjcwMzkzNi0xNzYuNjU0MzM2IDc3LjAxNzA4OC0xNzYuNjU0MzM2
+        IDc3LjAxNzA4OGw4Mi4wNTEwNzIgODEuODE3NmExMDMuODM0NjI0IDEwMy44MzQ2MjQgMCAwIDAtMjIu
+        NjI0MjU2IDU0LjcwMjA4bC0xMjEuNTY2MjA4LTEuMzk1NzEyYy0xLjYyNzEzNiAxNDEuOTQyNzg0IDc3
+        LjA5Mjg2NCAxNzYuNDI0OTYgNzcuMDkyODY0IDE3Ni40MjQ5Nmw4My4yMTUzNi04My4zNzEwMDhjMTQu
+        NDg4NTc2IDExLjU0NDU3NiAzMi4xNTQ2MjQgMTkuMzcxMDA4IDUxLjYwMDM4NCAyMS42OTU0ODhsLTEu
+        NDcxNDg4IDEyMy45Njc0ODhjMTQxLjg2NzAwOCAxLjYyODE2IDE3Ni40OTk3MTItNzcuMDE0MDE2IDE3
+        Ni40OTk3MTItNzcuMDE0MDE2bC04Mi45MDUwODgtODIuOTA0MDY0YzEyLjE2NTEyLTE0LjQxMTc3NiAy
+        MC4zNzg2MjQtMzIuMjMxNDI0IDIzLjE2OTAyNC01MS44MzI4MzJsMTIzLjgxMDgxNiAxLjM5NTcxMmMx
+        LjYyNjExMi0xNDEuODY5MDU2LTc3LjE2OTY2NC0xNzYuNTAyNzg0LTc3LjE2OTY2NC0xNzYuNTAyNzg0
+        bC04MS41MDkzNzYgODEuNTg1MTUyYTEwMi4yMjU5MiAxMDIuMjI1OTIgMCAwIDAtNTQuOTMzNTA0LTI0
+        LjI1MDM2OGwxLjM5NDY4OC0xMjEuMzM0Nzg0eiBtNDkuMzU2OCAyMjYuMTY1NzZjLTAuMzg2MDQ4IDM0
+        LjY2MzQyNC0yOC43OTU5MDQgNjIuNDQ5NjY0LTYzLjQ1NzI4IDYyLjA2MzYxNi0zNC42NjEzNzYtMC4z
+        ODcwNzItNjIuNDQ2NTkyLTI4Ljc5NjkyOC02Mi4wNjE1NjgtNjMuNDU4MzA0czI4Ljc5NTkwNC02Mi40
+        NDQ1NDQgNjMuNDU3MjgtNjIuMDYyNTkyYzM0LjY1OTMyOCAwLjM4NzA3MiA2Mi40NDU1NjggMjguNzk3
+        OTUyIDYyLjA2MTU2OCA2My40NTcyOHoiIGZpbGw9IiMwNDAwMDAiIC8+DQogIDxwYXRoIGQ9Ik01NDUu
+        NDAxODU2IDY1NC40MjkxODRjLTAuMjM0NDk2IDIzLjE0ODU0NCAxOC4zMzk4NCA0Mi4xMDg5MjggNDEu
+        NDkyNDggNDIuMzQyNCAyMi4xODkwNTYtMS4xMDE4MjQgMzkuNjc3OTUyLTE5LjI5NjI1NiAzOS45MDQy
+        NTYtNDEuNTE1MDA4IDAuMjI4MzUyLTIyLjIxMzYzMi0xNi44ODk4NTYtNDAuNzYyMzY4LTM5LjA1MzMx
+        Mi00Mi4zMTU3NzYtMjMuMTUwNTkyLTAuMjM4NTkyLTQyLjEwNjg4IDE4LjMzOTg0LTQyLjM0MzQyNCA0
+        MS40ODgzODR6IiBmaWxsPSIjMDQwMDAwIiAvPg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.Puzzle.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qqGPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.GroupList.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+74WoPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.CommandPrompt.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7p2WPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.Dictionary.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qCtPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.PersonalFolder.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7rClPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.GuestUser.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7rmXPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgItem32.PassiveAuthentication.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+74yqPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <metadata name="svgImgGroup32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>455, 17</value>
+  </metadata>
+  <data name="svgImgGroup32.EMI.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7pyxPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgGroup32.CC.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7p+wPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgGroup32.Manage.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7qSSPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgGroup32.ExploitProtectionSettings.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+74mZPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <data name="svgImgGroup32.Admin.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALABAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXIxIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAz
+        MiAzMiI+DQogIDxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+CgkJLkJsYWNrCgkJewoJCQlmaWxsOiM3Mjcy
+        NzI7IAoJCQlmb250LWZhbWlseTonZHgtZm9udC1pY29ucyc7IAoJCQlmb250LXNpemU6MzJweDsKCQl9
+        Cgk8L3N0eWxlPg0KICA8dGV4dCB4PSIwcHgiIHk9IjMycHgiIGNsYXNzPSJCbGFjayI+7p+vPC90ZXh0
+        Pg0KPC9zdmc+Cw==
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/Desktop/HStation.Desktop.PBS.Core/MainForm.Designer.cs b/Desktop/HStation.Desktop.PBS.Core/MainForm.Designer.cs
index 02aa44f..89da19b 100644
--- a/Desktop/HStation.Desktop.PBS.Core/MainForm.Designer.cs
+++ b/Desktop/HStation.Desktop.PBS.Core/MainForm.Designer.cs
@@ -42,26 +42,19 @@
             nbMin = new DevExpress.XtraBars.Navigation.NavButton();
             nbNormal = new DevExpress.XtraBars.Navigation.NavButton();
             nbClose = new DevExpress.XtraBars.Navigation.NavButton();
-            documentManager1 = new DevExpress.XtraBars.Docking2010.DocumentManager(components);
-            tabbedView1 = new DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView(components);
             dockManager1 = new DevExpress.XtraBars.Docking.DockManager(components);
-            flyoutPanel1 = new DevExpress.Utils.FlyoutPanel();
-            flyoutPanelControl1 = new DevExpress.Utils.FlyoutPanelControl();
             svgImgItem32 = new DevExpress.Utils.SvgImageCollection(components);
             accordionControlFunction = new DevExpress.XtraBars.Navigation.AccordionControl();
             toolboxItem3 = new DevExpress.XtraToolbox.ToolboxItem();
             toolboxItem5 = new DevExpress.XtraToolbox.ToolboxItem();
             svgImgGroup32 = new DevExpress.Utils.SvgImageCollection(components);
+            xtraTabContrl = new DevExpress.XtraTab.XtraTabControl();
             ((System.ComponentModel.ISupportInitialize)tileNavPane).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)documentManager1).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)tabbedView1).BeginInit();
             ((System.ComponentModel.ISupportInitialize)dockManager1).BeginInit();
-            ((System.ComponentModel.ISupportInitialize)flyoutPanel1).BeginInit();
-            flyoutPanel1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)flyoutPanelControl1).BeginInit();
             ((System.ComponentModel.ISupportInitialize)svgImgItem32).BeginInit();
             ((System.ComponentModel.ISupportInitialize)accordionControlFunction).BeginInit();
             ((System.ComponentModel.ISupportInitialize)svgImgGroup32).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)xtraTabContrl).BeginInit();
             SuspendLayout();
             // 
             // tileNavPane
@@ -79,14 +72,14 @@
             tileNavPane.AppearanceDisabled.Options.UseBackColor = true;
             tileNavPane.AppearanceDisabled.Options.UseBorderColor = true;
             tileNavPane.AppearanceDisabled.Options.UseForeColor = true;
-            tileNavPane.AppearanceHovered.BackColor = Color.FromArgb(1, 96, 188);
-            tileNavPane.AppearanceHovered.BorderColor = Color.FromArgb(1, 96, 188);
+            tileNavPane.AppearanceHovered.BackColor = Color.FromArgb(50, 121, 197);
+            tileNavPane.AppearanceHovered.BorderColor = Color.FromArgb(50, 121, 197);
             tileNavPane.AppearanceHovered.ForeColor = Color.White;
             tileNavPane.AppearanceHovered.Options.UseBackColor = true;
             tileNavPane.AppearanceHovered.Options.UseBorderColor = true;
             tileNavPane.AppearanceHovered.Options.UseForeColor = true;
-            tileNavPane.AppearanceSelected.BackColor = Color.FromArgb(1, 96, 188);
-            tileNavPane.AppearanceSelected.BorderColor = Color.FromArgb(1, 96, 188);
+            tileNavPane.AppearanceSelected.BackColor = Color.FromArgb(50, 121, 197);
+            tileNavPane.AppearanceSelected.BorderColor = Color.FromArgb(50, 121, 197);
             tileNavPane.AppearanceSelected.ForeColor = Color.White;
             tileNavPane.AppearanceSelected.Options.UseBackColor = true;
             tileNavPane.AppearanceSelected.Options.UseBorderColor = true;
@@ -185,10 +178,6 @@
             // 
             // nbRapidModeling
             // 
-            nbRapidModeling.AppearanceHovered.BackColor = Color.FromArgb(1, 96, 188);
-            nbRapidModeling.AppearanceHovered.BorderColor = Color.FromArgb(1, 96, 188);
-            nbRapidModeling.AppearanceHovered.Options.UseBackColor = true;
-            nbRapidModeling.AppearanceHovered.Options.UseBorderColor = true;
             nbRapidModeling.Caption = "蹇�熷缓妯�";
             nbRapidModeling.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("nbRapidModeling.ImageOptions.SvgImage");
             nbRapidModeling.ImageOptions.SvgImageSize = new Size(24, 24);
@@ -271,50 +260,10 @@
             nbClose.Name = "nbClose";
             nbClose.ElementClick += nabClose_ElementClick;
             // 
-            // documentManager1
-            // 
-            documentManager1.ContainerControl = this;
-            documentManager1.View = tabbedView1;
-            documentManager1.ViewCollection.AddRange(new DevExpress.XtraBars.Docking2010.Views.BaseView[] { tabbedView1 });
-            // 
-            // tabbedView1
-            // 
-            tabbedView1.DocumentProperties.AllowPin = true;
-            tabbedView1.Style = DevExpress.XtraBars.Docking2010.Views.DockingViewStyle.Light;
-            tabbedView1.DocumentSelected += tabbedView1_DocumentSelected;
-            tabbedView1.DocumentAdded += tabbedView1_DocumentAdded;
-            tabbedView1.DocumentActivated += tabbedView1_DocumentActivated;
-            tabbedView1.DocumentClosed += tabbedView1_DocumentClosed;
-            // 
             // dockManager1
             // 
             dockManager1.Form = this;
             dockManager1.TopZIndexControls.AddRange(new string[] { "DevExpress.XtraBars.BarDockControl", "DevExpress.XtraBars.StandaloneBarDockControl", "System.Windows.Forms.MenuStrip", "System.Windows.Forms.StatusStrip", "System.Windows.Forms.StatusBar", "DevExpress.XtraBars.Ribbon.RibbonStatusBar", "DevExpress.XtraBars.Ribbon.RibbonControl", "DevExpress.XtraBars.Navigation.OfficeNavigationBar", "DevExpress.XtraBars.Navigation.TileNavPane", "DevExpress.XtraBars.TabFormControl", "DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormControl", "DevExpress.XtraBars.ToolbarForm.ToolbarFormControl" });
-            // 
-            // flyoutPanel1
-            // 
-            flyoutPanel1.AnimationRate = 100;
-            flyoutPanel1.Controls.Add(flyoutPanelControl1);
-            flyoutPanel1.Location = new Point(706, 209);
-            flyoutPanel1.Margin = new Padding(4, 5, 4, 5);
-            flyoutPanel1.Name = "flyoutPanel1";
-            flyoutPanel1.Options.CloseOnOuterClick = true;
-            flyoutPanel1.OptionsBeakPanel.BeakLocation = DevExpress.Utils.BeakPanelBeakLocation.Top;
-            flyoutPanel1.OptionsButtonPanel.ButtonPanelHeight = 47;
-            flyoutPanel1.ParentForm = this;
-            flyoutPanel1.Size = new Size(286, 157);
-            flyoutPanel1.TabIndex = 5;
-            // 
-            // flyoutPanelControl1
-            // 
-            flyoutPanelControl1.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
-            flyoutPanelControl1.Dock = DockStyle.Fill;
-            flyoutPanelControl1.FlyoutPanel = flyoutPanel1;
-            flyoutPanelControl1.Location = new Point(0, 0);
-            flyoutPanelControl1.Margin = new Padding(4, 5, 4, 5);
-            flyoutPanelControl1.Name = "flyoutPanelControl1";
-            flyoutPanelControl1.Size = new Size(286, 157);
-            flyoutPanelControl1.TabIndex = 0;
             // 
             // svgImgItem32
             // 
@@ -373,6 +322,58 @@
             svgImgGroup32.Add("ExploitProtectionSettings.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgGroup32.ExploitProtectionSettings.svg"));
             svgImgGroup32.Add("Admin.svg", (DevExpress.Utils.Svg.SvgImage)resources.GetObject("svgImgGroup32.Admin.svg"));
             // 
+            // xtraTabContrl
+            // 
+            xtraTabContrl.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
+            xtraTabContrl.Appearance.BackColor = Color.White;
+            xtraTabContrl.Appearance.BorderColor = Color.White;
+            xtraTabContrl.Appearance.ForeColor = Color.Black;
+            xtraTabContrl.Appearance.Options.UseBackColor = true;
+            xtraTabContrl.Appearance.Options.UseBorderColor = true;
+            xtraTabContrl.Appearance.Options.UseForeColor = true;
+            xtraTabContrl.AppearancePage.Header.BackColor = Color.White;
+            xtraTabContrl.AppearancePage.Header.BorderColor = Color.White;
+            xtraTabContrl.AppearancePage.Header.ForeColor = Color.Black;
+            xtraTabContrl.AppearancePage.Header.Options.UseBackColor = true;
+            xtraTabContrl.AppearancePage.Header.Options.UseBorderColor = true;
+            xtraTabContrl.AppearancePage.Header.Options.UseForeColor = true;
+            xtraTabContrl.AppearancePage.HeaderActive.BackColor = Color.White;
+            xtraTabContrl.AppearancePage.HeaderActive.BorderColor = Color.White;
+            xtraTabContrl.AppearancePage.HeaderActive.ForeColor = Color.Black;
+            xtraTabContrl.AppearancePage.HeaderActive.Options.UseBackColor = true;
+            xtraTabContrl.AppearancePage.HeaderActive.Options.UseBorderColor = true;
+            xtraTabContrl.AppearancePage.HeaderActive.Options.UseForeColor = true;
+            xtraTabContrl.AppearancePage.HeaderDisabled.BackColor = Color.White;
+            xtraTabContrl.AppearancePage.HeaderDisabled.BorderColor = Color.White;
+            xtraTabContrl.AppearancePage.HeaderDisabled.ForeColor = Color.Black;
+            xtraTabContrl.AppearancePage.HeaderDisabled.Options.UseBackColor = true;
+            xtraTabContrl.AppearancePage.HeaderDisabled.Options.UseBorderColor = true;
+            xtraTabContrl.AppearancePage.HeaderDisabled.Options.UseForeColor = true;
+            xtraTabContrl.AppearancePage.HeaderHotTracked.BackColor = Color.White;
+            xtraTabContrl.AppearancePage.HeaderHotTracked.BorderColor = Color.White;
+            xtraTabContrl.AppearancePage.HeaderHotTracked.ForeColor = Color.Black;
+            xtraTabContrl.AppearancePage.HeaderHotTracked.Options.UseBackColor = true;
+            xtraTabContrl.AppearancePage.HeaderHotTracked.Options.UseBorderColor = true;
+            xtraTabContrl.AppearancePage.HeaderHotTracked.Options.UseForeColor = true;
+            xtraTabContrl.AppearancePage.PageClient.BackColor = Color.White;
+            xtraTabContrl.AppearancePage.PageClient.BorderColor = Color.White;
+            xtraTabContrl.AppearancePage.PageClient.ForeColor = Color.Black;
+            xtraTabContrl.AppearancePage.PageClient.Options.UseBackColor = true;
+            xtraTabContrl.AppearancePage.PageClient.Options.UseBorderColor = true;
+            xtraTabContrl.AppearancePage.PageClient.Options.UseForeColor = true;
+            xtraTabContrl.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+            xtraTabContrl.BorderStylePage = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+            xtraTabContrl.ClosePageButtonShowMode = DevExpress.XtraTab.ClosePageButtonShowMode.InActiveTabPageHeader;
+            xtraTabContrl.Dock = DockStyle.Fill;
+            xtraTabContrl.Location = new Point(211, 70);
+            xtraTabContrl.LookAndFeel.SkinMaskColor = Color.White;
+            xtraTabContrl.LookAndFeel.UseDefaultLookAndFeel = false;
+            xtraTabContrl.Name = "xtraTabContrl";
+            xtraTabContrl.Size = new Size(1876, 1061);
+            xtraTabContrl.TabIndex = 19;
+            xtraTabContrl.SelectedPageChanged += xtraTabContrl_SelectedPageChanged;
+            xtraTabContrl.CloseButtonClick += xtraTabContrl_CloseButtonClick;
+            // 
             // MainForm
             // 
             Appearance.BackColor = Color.White;
@@ -380,9 +381,9 @@
             AutoScaleDimensions = new SizeF(10F, 22F);
             AutoScaleMode = AutoScaleMode.Font;
             ClientSize = new Size(2087, 1131);
+            Controls.Add(xtraTabContrl);
             Controls.Add(accordionControlFunction);
             Controls.Add(tileNavPane);
-            Controls.Add(flyoutPanel1);
             Margin = new Padding(4, 3, 4, 3);
             Name = "MainForm";
             Text = "Form1";
@@ -393,15 +394,11 @@
             Shown += MainForm_Shown;
             Resize += MainForm_Resize;
             ((System.ComponentModel.ISupportInitialize)tileNavPane).EndInit();
-            ((System.ComponentModel.ISupportInitialize)documentManager1).EndInit();
-            ((System.ComponentModel.ISupportInitialize)tabbedView1).EndInit();
             ((System.ComponentModel.ISupportInitialize)dockManager1).EndInit();
-            ((System.ComponentModel.ISupportInitialize)flyoutPanel1).EndInit();
-            flyoutPanel1.ResumeLayout(false);
-            ((System.ComponentModel.ISupportInitialize)flyoutPanelControl1).EndInit();
             ((System.ComponentModel.ISupportInitialize)svgImgItem32).EndInit();
             ((System.ComponentModel.ISupportInitialize)accordionControlFunction).EndInit();
             ((System.ComponentModel.ISupportInitialize)svgImgGroup32).EndInit();
+            ((System.ComponentModel.ISupportInitialize)xtraTabContrl).EndInit();
             ResumeLayout(false);
         }
 
@@ -409,15 +406,11 @@
 
         private DevExpress.XtraBars.Navigation.TileNavPane tileNavPane;
         private DevExpress.XtraBars.Navigation.NavButton nbTitle;
-        private DevExpress.XtraBars.Docking2010.DocumentManager documentManager1;
-        private DevExpress.XtraBars.Docking2010.Views.Tabbed.TabbedView tabbedView1;
         private DevExpress.XtraBars.Navigation.NavButton nbMin;
         private DevExpress.XtraBars.Navigation.NavButton nbNormal;
         private DevExpress.XtraBars.Navigation.NavButton nbClose;
         private DevExpress.XtraBars.Navigation.NavButton nbBasicData;
         private DevExpress.XtraBars.Navigation.NavButton nbRapidModeling;
-        private DevExpress.Utils.FlyoutPanel flyoutPanel1;
-        private DevExpress.Utils.FlyoutPanelControl flyoutPanelControl1;
         private DevExpress.Utils.SvgImageCollection svgImgItem32;
         private DevExpress.XtraBars.Navigation.NavButton nbModelAnalysis;
         private DevExpress.XtraBars.Navigation.NavButton nbModelEvaluation;
@@ -429,5 +422,6 @@
         private DevExpress.Utils.SvgImageCollection svgImgGroup32;
         private DevExpress.XtraBars.Navigation.NavButton navButton2;
         private DevExpress.XtraBars.Navigation.NavButton navButton3;
+        private DevExpress.XtraTab.XtraTabControl xtraTabContrl;
     }
 }
diff --git a/Desktop/HStation.Desktop.PBS.Core/MainForm.cs b/Desktop/HStation.Desktop.PBS.Core/MainForm.cs
index 3cead9d..e379baa 100644
--- a/Desktop/HStation.Desktop.PBS.Core/MainForm.cs
+++ b/Desktop/HStation.Desktop.PBS.Core/MainForm.cs
@@ -4,12 +4,10 @@
 using DevExpress.XtraBars.Navigation;
 using DevExpress.XtraBars.Ribbon;
 using DevExpress.XtraEditors;
-using HStation.WinFrmUI;
-using HStation.WinFrmUI.Assets;
-using HStation.WinFrmUI.Basic;
-using HStation.WinFrmUI.PBS;
-using HStation.WinFrmUI.WE;
+using DevExpress.XtraTab;
+using DevExpress.XtraTab.ViewInfo;
 using HStation.WinFrmUI.Xhs.PumpProduct;
+using System.Drawing.Drawing2D;
 using System.IO;
 using Yw.WinFrmUI;
 using Yw.WinFrmUI.Page;
@@ -30,29 +28,21 @@
 
             this.accordionControlFunction.Appearance.AccordionControl.BackColor = Color.White;
             this.accordionControlFunction.Appearance.AccordionControl.BorderColor = Color.White;
-            //this.accordionControlFunction.ResizeMode = AccordionControlResizeMode.None;
             this.accordionControlFunction.AllowHtmlText = true;
             this.accordionControlFunction.HtmlTemplates.HamburgerHeaderPanel.Template = @"<div class='hamburger-header-background'></div>";
             this.accordionControlFunction.HtmlTemplates.HamburgerHeaderPanel.Styles = @".hamburger-header-background {background-color: #ffffff; height: 100%;width: 100%;}";
 
-            this.tabbedView1.Style = DockingViewStyle.Classic;
-            this.tabbedView1.Appearance.BackColor = Color.White;
-            this.tabbedView1.AppearancePage.Header.BackColor = Color.White;
-            this.tabbedView1.AppearancePage.HeaderSelected.Font = new Font("微软雅黑", 10f, FontStyle.Bold);
+            this.xtraTabContrl.AllowGlyphSkinning = DevExpress.Utils.DefaultBoolean.True;
         }
 
+        HatchBrush myHatchBrush1 = new HatchBrush(HatchStyle.BackwardDiagonal, Color.LightGray, Color.AliceBlue);
         private void TabbedView1_CustomDrawTabHeader(object sender, DevExpress.XtraTab.TabHeaderCustomDrawEventArgs e)
         {
-            // 阻止默认绘制
-            e.Handled = true;
-
-            // 设置圆角为0,去除圆角效果
-            //e.Cache.RoundRect = false;
-
-            // 使用默认绘制方法绘制其他元素,如背景、文本和按钮
-            e.DefaultDrawBackground();
+            e.Cache.FillRectangle(myHatchBrush1, e.Bounds);
             e.DefaultDrawText();
+            e.DefaultDrawImage();
             e.DefaultDrawButtons();
+            e.Handled = true;
         }
 
         #region TileNavPane 相关处理
@@ -122,9 +112,9 @@
             if (btn.Tag is not string tag)
                 return;
             PageGuid pguid = null;
-            if (this.tabbedView1.ActiveDocument != null)
+            if (this.xtraTabContrl.SelectedTabPage != null)
             {
-                pguid = this.tabbedView1.ActiveDocument.Tag as PageGuid;
+                pguid = this.xtraTabContrl.SelectedTabPage.Tag as PageGuid;
             }
             SelectModular(tag, pguid);
         }
@@ -188,40 +178,26 @@
         #region TabbedView 相关事件处理程序
 
         //选中
-        private void tabbedView1_DocumentSelected(object sender, DocumentEventArgs e)
+        private void xtraTabContrl_SelectedPageChanged(object sender, TabPageChangedEventArgs e)
         {
-            if (e.Document == null)
+            if (e.Page == null)
                 return;
-            var pguid = e.Document.Tag as PageGuid;
+            var pguid = e.Page.Tag as PageGuid;
             if (pguid == null)
                 return;
             SelectModular(pguid.Modular, pguid);
         }
 
-        //添加
-        private void tabbedView1_DocumentAdded(object sender, DocumentEventArgs e)
+        //关闭
+        private void xtraTabContrl_CloseButtonClick(object sender, EventArgs e)
         {
-            if (this.tabbedView1.Documents.Count > 1)
+            var arg = e as ClosePageButtonEventArgs;
+            var last_index = this.xtraTabContrl.SelectedTabPageIndex - 1;
+            this.xtraTabContrl.TabPages.Remove(arg.Page as XtraTabPage);
+            if (last_index > 0)
             {
-                if (!this.tabbedView1.DocumentGroupProperties.ShowTabHeader)
-                {
-                }
+                this.xtraTabContrl.SelectedTabPageIndex = last_index;
             }
-        }
-
-        //激活
-        private void tabbedView1_DocumentActivated(object sender, DocumentEventArgs e)
-        {
-            var page = e.Document.Control as DocumentPage;
-            if (page == null)
-            {
-                return;
-            }
-        }
-
-        //关闭 此时控件已经为空
-        private void tabbedView1_DocumentClosed(object sender, DocumentEventArgs e)
-        {
         }
 
         #endregion TabbedView 相关事件处理程序
@@ -256,9 +232,9 @@
                 }
             }
 
-            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            if (this.xtraTabContrl.TabPages != null && this.xtraTabContrl.TabPages.Count > 0)
             {
-                foreach (BaseDocument doc in this.tabbedView1.Documents)
+                foreach (XtraTabPage doc in this.xtraTabContrl.TabPages)
                 {
                     if (doc.Tag != null)
                     {
@@ -268,7 +244,7 @@
                             {
                                 if (isActivePage)
                                 {
-                                    this.tabbedView1.Controller.Activate(doc);
+                                    this.xtraTabContrl.SelectedTabPage = doc;
                                 }
                                 return true;
                             }
@@ -304,12 +280,12 @@
                 }
             }
 
-            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            if (this.xtraTabContrl.TabPages != null && this.xtraTabContrl.TabPages.Count > 0)
             {
-                var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                var doc = this.xtraTabContrl.TabPages.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
                 if (doc != null)
                 {
-                    var page = doc.Control as DocumentPage;
+                    var page = doc.Controls[0] as DocumentPage;
                     if (page != null)
                     {
                         page.RefreshData();
@@ -346,16 +322,16 @@
                 }
             }
 
-            if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+            if (this.xtraTabContrl.TabPages != null && this.xtraTabContrl.TabPages.Count > 0)
             {
-                var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                var doc = this.xtraTabContrl.TabPages.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
                 if (doc != null)
                 {
-                    doc.Caption = title.Caption;
+                    doc.Text = title.Caption;
                     doc.ImageOptions.Image = title.HeaderImage;
                     doc.ImageOptions.SvgImage = title.HeaderSvgImage;
                     doc.ImageOptions.SvgImageSize = title.SvgImageSize;
-                    var page = doc.Control as DocumentPage;
+                    var page = doc.Controls[0] as DocumentPage;
                     if (page != null)
                     {
                         page.PageTitle = title;
@@ -413,20 +389,20 @@
 
                 case eMoudingType.Tab:
                     {
-                        this.tabbedView1.BeginUpdate();
-                        var doc = this.tabbedView1.AddDocument(page);
-                        doc.Footer = Directory.GetCurrentDirectory();
+                        var sel_page = new XtraTabPage();
+                        page.Dock = DockStyle.Fill;
+                        sel_page.Controls.Add(page);
+                        this.xtraTabContrl.TabPages.Add(sel_page);
                         if (page.PageTitle != null)
                         {
-                            doc.Caption = page.PageTitle.Caption;
-                            doc.ImageOptions.Image = page.PageTitle.HeaderImage;
-                            doc.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage;
-                            doc.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize;
-                            doc.Properties.AllowClose = page.PageTitle.AllowClose ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
+                            sel_page.Text = page.PageTitle.Caption;
+                            sel_page.ImageOptions.Image = page.PageTitle.HeaderImage;
+                            sel_page.ImageOptions.SvgImage = page.PageTitle.HeaderSvgImage;
+                            sel_page.ImageOptions.SvgImageSize = page.PageTitle.SvgImageSize;
+                            //doc.Properties.AllowClose = page.PageTitle.AllowClose ? DevExpress.Utils.DefaultBoolean.True : DevExpress.Utils.DefaultBoolean.False;
                         }
-                        doc.Tag = pguid;
-                        this.tabbedView1.EndUpdate();
-                        this.tabbedView1.Controller.Activate(doc);
+                        sel_page.Tag = pguid;
+                        this.xtraTabContrl.SelectedTabPage = sel_page;
                     }
                     break;
 
@@ -458,12 +434,12 @@
 
                 case eMoudingType.Tab:
                     {
-                        if (this.tabbedView1.Documents != null && this.tabbedView1.Documents.Count > 0)
+                        if (this.xtraTabContrl.TabPages != null && this.xtraTabContrl.TabPages.Count > 0)
                         {
-                            var doc = this.tabbedView1.Documents.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
+                            var doc = this.xtraTabContrl.TabPages.ToList().Find(x => x.Tag != null && x.Tag is PageGuid && (x.Tag as PageGuid).ToString() == pguid.ToString());
                             if (doc != null)
                             {
-                                this.tabbedView1.Controller.Close(doc);//会触发正在关闭和关闭事件
+                                this.xtraTabContrl.TabPages.Remove(doc);
                             }
                         }
                     }
@@ -492,7 +468,7 @@
                     {
                         if (tag == modular)
                         {
-                            btn.Appearance.BackColor = Color.FromArgb(1, 96, 188);
+                            btn.Appearance.BackColor = Color.FromArgb(50, 121, 197);
                             btn.Appearance.ForeColor = Color.White;
                         }
                         else
@@ -586,6 +562,7 @@
             return false;
         }
 
+
         //获取
         private List<AccordionElement> GetAccordionElementList(string modular)
         {
@@ -672,8 +649,6 @@
                         {
                             if (!IsExistPage(guid, true))
                             {
-                                var page = new WaterUtensilMainPage();
-                                 CreatePage(page, guid);
                             }
                         }),
                         Get("用水当量",new PageGuid()
@@ -707,8 +682,12 @@
                         {
                             if (!IsExistPage(guid, true))
                             {
-                                var page = new AssetsManufacturerMainPage();
-                                 CreatePage(page, guid);
+                                var page = new DocumentPage();
+                                page.PageGuid = guid;
+                                page.PageTitle.Caption = caption;
+                                page.PageTitle.HeaderSvgImage = svg;
+                                page.PageTitle.SvgImageSize = size;
+                                CreatePage(page, guid);
                             }
                         }),
                         Get("水泵管理",new PageGuid()
@@ -737,9 +716,7 @@
                         {
                             if (!IsExistPage(guid, true))
                             {
-                                var page = new PackageManageMainPage();
-                                 CreatePage(page, guid);
-                             }
+                            }
                         })
                     }
                 };
@@ -761,9 +738,7 @@
                         {
                             if (!IsExistPage(guid, true))
                             {
-                                  var page=new SysTypeManageMainPanel();
-                                  CreatePage(page,guid);
-                             }
+                            }
                         }),
                         Get("分类管理",new PageGuid()
                         {
@@ -774,8 +749,6 @@
                         {
                             if (!IsExistPage(guid, true))
                             {
-                                 var page=new SysCatalogManageMainPanel();
-                                 CreatePage(page,guid);
                             }
                         }),
                         Get("属性管理",new PageGuid()
@@ -787,8 +760,6 @@
                         {
                             if (!IsExistPage(guid, true))
                             {
-                                    var page=new SysPropManageMainPanel();
-                                    CreatePage(page,guid);
                             }
                         }),
                         Get("字典类型",new PageGuid()
@@ -800,8 +771,6 @@
                         {
                             if (!IsExistPage(guid, true))
                             {
-                               var page=new HStation.WinFrmUI.Dict.DictManageMainPanel();
-                               CreatePage(page,guid);
                             }
                         }),
                      }
@@ -881,5 +850,8 @@
         }
 
         #endregion Modular
+
+
+
     }
 }
\ No newline at end of file
diff --git a/Desktop/HStation.Desktop.PBS.Core/MainForm.resx b/Desktop/HStation.Desktop.PBS.Core/MainForm.resx
index a2c415f..b33e916 100644
--- a/Desktop/HStation.Desktop.PBS.Core/MainForm.resx
+++ b/Desktop/HStation.Desktop.PBS.Core/MainForm.resx
@@ -264,14 +264,11 @@
         LDE2eiIgY2xhc3M9IlJlZCIgLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPgs=
 </value>
   </data>
-  <metadata name="documentManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+  <metadata name="dockManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
-  <metadata name="dockManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>259, 17</value>
-  </metadata>
   <metadata name="svgImgItem32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>659, 17</value>
+    <value>417, 17</value>
   </metadata>
   <data name="svgImgItem32.MapPin.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
@@ -619,7 +616,7 @@
 </value>
   </data>
   <metadata name="svgImgGroup32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>455, 17</value>
+    <value>213, 17</value>
   </metadata>
   <data name="svgImgGroup32.EMI.svg" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.Designer.cs
index 879d8b1..b02c353 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.Designer.cs
@@ -182,10 +182,11 @@
             // 
             // dockManager1
             // 
+            dockManager1.AllowGlyphSkinning = true;
             dockManager1.DockingOptions.ShowCloseButton = false;
             dockManager1.Form = this;
             dockManager1.RootPanels.AddRange(new DevExpress.XtraBars.Docking.DockPanel[] { dockPanel1 });
-            dockManager1.Style = DevExpress.XtraBars.Docking2010.Views.DockingViewStyle.Light;
+            dockManager1.Style = DevExpress.XtraBars.Docking2010.Views.DockingViewStyle.Classic;
             dockManager1.TopZIndexControls.AddRange(new string[] { "DevExpress.XtraBars.BarDockControl", "DevExpress.XtraBars.StandaloneBarDockControl", "System.Windows.Forms.MenuStrip", "System.Windows.Forms.StatusStrip", "System.Windows.Forms.StatusBar", "DevExpress.XtraBars.Ribbon.RibbonStatusBar", "DevExpress.XtraBars.Ribbon.RibbonControl", "DevExpress.XtraBars.Navigation.OfficeNavigationBar", "DevExpress.XtraBars.Navigation.TileNavPane", "DevExpress.XtraBars.TabFormControl", "DevExpress.XtraBars.FluentDesignSystem.FluentDesignFormControl", "DevExpress.XtraBars.ToolbarForm.ToolbarFormControl" });
             // 
             // dockPanel1
@@ -204,10 +205,10 @@
             // dockPanel1_Container
             // 
             dockPanel1_Container.Controls.Add(AssetsPumpSeriesTreeListCtrl1);
-            dockPanel1_Container.Location = new Point(0, 34);
+            dockPanel1_Container.Location = new Point(4, 38);
             dockPanel1_Container.Margin = new Padding(4, 5, 4, 5);
             dockPanel1_Container.Name = "dockPanel1_Container";
-            dockPanel1_Container.Size = new Size(201, 793);
+            dockPanel1_Container.Size = new Size(191, 785);
             dockPanel1_Container.TabIndex = 0;
             // 
             // AssetsPumpSeriesTreeListCtrl1
@@ -218,7 +219,7 @@
             AssetsPumpSeriesTreeListCtrl1.Location = new Point(0, 0);
             AssetsPumpSeriesTreeListCtrl1.Margin = new Padding(6, 8, 6, 8);
             AssetsPumpSeriesTreeListCtrl1.Name = "AssetsPumpSeriesTreeListCtrl1";
-            AssetsPumpSeriesTreeListCtrl1.Size = new Size(201, 793);
+            AssetsPumpSeriesTreeListCtrl1.Size = new Size(191, 785);
             AssetsPumpSeriesTreeListCtrl1.TabIndex = 0;
             // 
             // gridControl1
diff --git a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs
index e8c6307..b2a0c2d 100644
--- a/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Assets.Core/01-pump/PumpProductMainPage.cs
@@ -15,6 +15,8 @@
             this.gridView1.RegistCustomDrawRowIndicator();
             this.AssetsPumpSeriesTreeListCtrl1.FocusedChangedEvent += AssetsPumpSeriesTreeListCtrl1_FocusedChangedEvent;
             this.AssetsPumpSeriesTreeListCtrl1.AddAssetsPumpMain += BtnAdd_ItemClickAsync;
+            this.dockManager1.Style = DevExpress.XtraBars.Docking2010.Views.DockingViewStyle.Light;
+        
         }
 
         private readonly List<AssetsPumpMainViewModel> _allBindingList = new();
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/05-working/SimulationWorkingHelper.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/05-working/SimulationWorkingHelper.cs
index b3bb3ab..b9eb1fb 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/05-working/SimulationWorkingHelper.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/00-core/05-working/SimulationWorkingHelper.cs
@@ -13,12 +13,22 @@
         public SimulationWorkingHelper() { }
 
         /// <summary>
+        /// 姘村姏淇℃伅
+        /// </summary>
+        public Yw.Model.HydroModelInfo HydroInfo
+        {
+            get { return _hydroInfo; }
+            private set { _hydroInfo = value; }
+        }
+        private Yw.Model.HydroModelInfo _hydroInfo = null;
+
+        /// <summary>
         /// 宸ュ喌
         /// </summary>
         public HydroWorkingVmo Working
         {
             get { return _working; }
-            set { _working = value; }
+            private set { _working = value; }
         }
         private HydroWorkingVmo _working = null;
 
@@ -28,7 +38,7 @@
         public HydroCheckResult CheckResult
         {
             get { return _checkResult; }
-            set { _checkResult = value; }
+            private set { _checkResult = value; }
         }
         private HydroCheckResult _checkResult = null;
 
@@ -38,19 +48,35 @@
         public HydroCalcuResult CalcuResult
         {
             get { return _calcuResult; }
-            set { _calcuResult = value; }
+            private set { _calcuResult = value; }
         }
         private HydroCalcuResult _calcuResult = null;
 
         /// <summary>
         /// 鍒濆鍖栨暟鎹�
         /// </summary>
-        public void InitialData(HydroWorkingVmo working, HydroCheckResult checkResult, HydroCalcuResult calcuResult)
+        public void InitialData
+            (
+                Yw.Model.HydroModelInfo hydroInfo,
+                HydroWorkingVmo working,
+                HydroCheckResult checkResult,
+                HydroCalcuResult calcuResult
+            )
         {
+            this.HydroInfo = hydroInfo;
             this.Working = working;
             this.CheckResult = checkResult;
             this.CalcuResult = calcuResult;
         }
 
+        /// <summary>
+        /// 閲嶇疆宸ュ喌
+        /// </summary>
+        public void ResetWorking(HydroWorkingVmo working)
+        {
+            this.Working = working;
+        }
+
+
     }
 }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
index f97b87c..64cf438 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/06-simulation/XhsProjectSimulationCorePage.cs
@@ -1,7 +1,9 @@
 锘縰sing DevExpress.Diagram.Core.Native;
 using DevExpress.Mvvm.Native;
+using DevExpress.Utils.MVVM;
 using DevExpress.XtraMap;
 using HStation.WinFrmUI.PhartRelation;
+using Mapster;
 using NPOI.SS.Formula.Functions;
 using System.Diagnostics;
 using Yw.Hydro;
@@ -2079,6 +2081,8 @@
                 _hydroInfo.UpdateWorkingInfo(vm.WorkingInfo);
                 allMonitorValueList.UpdateMonitorValue(vm.MonitorInfo);
 
+                var hydroInfo = _hydroInfo.Adapt<Yw.Model.HydroModelInfo>();
+
                 var working = new HydroWorkingVmo();
                 working.ModelID = _hydroInfo.ID;
                 working.Name = working.Name;
@@ -2088,14 +2092,12 @@
                 working.Description = working.Description;
 
                 var workingHelper = GetWorkingHelper();
-
-
                 //鏍¢獙
                 var checkResult = _hydroInfo.Check();
                 if (!checkResult.Succeed)
                 {
                     ShowCheckCtrl(checkResult);
-                    workingHelper.InitialData(working, checkResult, null);
+                    workingHelper.InitialData(hydroInfo, working, checkResult, null);
                     TipFormHelper.ShowError("鏍¢獙澶辫触锛岃妫�鏌ュ悗閲嶈瘯");
                     return;
                 }
@@ -2104,7 +2106,7 @@
                 //await Task.Delay(3000);
                 var calcuResult = _hydroInfo.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
                 WaitFormHelper.HideWaitForm();
-                workingHelper.InitialData(working, checkResult, calcuResult);
+                workingHelper.InitialData(hydroInfo, working, checkResult, calcuResult);
                 if (calcuResult.Succeed)
                 {
                     if (calcuResult.WainingList != null && calcuResult.WainingList.Count > 0)
@@ -2206,7 +2208,8 @@
             dlg.SetBindingData(workingHelper.Working);
             dlg.ReloadDataEvent += (rhs) =>
             {
-                workingHelper.Working = rhs;
+                this.barBtnAddWorking.Enabled = false;
+                workingHelper.ResetWorking(rhs);
                 this.AppendWorkingEvent?.Invoke(rhs);
             };
             dlg.ShowDialog();
@@ -2405,7 +2408,10 @@
 
         private void barBtnWorkingPower_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
-            XtraMessageBox.Show("姝e湪寮�鍙戜腑锛屾暚璇锋湡寰咃紒");
+            var workingHelper = GetWorkingHelper();
+            var dlg = new SimulationSingleWorkingEnergyDlg();
+            dlg.SetBindingData(workingHelper.HydroInfo, workingHelper.CalcuResult);
+            dlg.ShowDialog();
         }
 
         #endregion
@@ -2414,25 +2420,25 @@
 
         private void barBtnWorkingLossCurve_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
-            //if (_visual == null)
-            //{
-            //    XtraMessageBox.Show("璇烽�夋嫨鑺傜偣鍚庨噸璇曪紒");
-            //    return;
-            //}
-            //if (!(_visual is Yw.Model.HydroNodeInfo))
-            //{
-            //    XtraMessageBox.Show("璇烽�夋嫨鑺傜偣鍚庨噸璇曪紒");
-            //    return;
-            //}
-            //var network = _hydroInfo.ToNetwork();
-            //var calcuResult = network.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
-            //var allNodeList = network.GetAllNodes();
-            //var node = allNodeList.Find(x => x.Id == _visual.Code);
-            //var allPathList = network.AnalyzeDownstreamPath(node, calcuResult);
-            //var allEpaLossList = network.GetChartNodeByPathLinks(allPathList, calcuResult);
-            //var allLossList = allEpaLossList?.Select(x => new HydroNodeLossViewModel(x)).ToList();
+            if (_visual == null)
+            {
+                XtraMessageBox.Show("璇烽�夋嫨鑺傜偣鍚庨噸璇曪紒");
+                return;
+            }
+            if (!(_visual is Yw.Model.HydroNodeInfo))
+            {
+                XtraMessageBox.Show("璇烽�夋嫨鑺傜偣鍚庨噸璇曪紒");
+                return;
+            }
+            var network = _hydroInfo.ToNetwork();
+            var calcuResult = network.Calcu(Yw.EPAnet.CalcuMode.Simple);
+            var allNodeList = network.GetAllNodes();
+            var node = allNodeList.Find(x => x.Id == _visual.Code);
+            var allPathList = network.AnalyzeDownstreamPath(node, calcuResult);
+            var allEpaLossList = network.GetChartNodeByPathLinks(allPathList, calcuResult);
+            var allLossList = allEpaLossList?.Select(x => new HydroNodeLossViewModel(x)).ToList();
             var dlg = new HydroSingleLossCurveDlg();
-            dlg.SetBindingData(null);
+            dlg.SetBindingData(allLossList);
             dlg.ShowDialog();
         }
 
@@ -2442,8 +2448,17 @@
 
         private void barBtnWorkingLossScale_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
+            var workingHelper = GetWorkingHelper();
+            if (workingHelper.Working == null)
+            {
+                TipFormHelper.ShowWarn("璇疯绠楀悗閲嶈瘯锛�");
+                return;
+            }
+            var network = workingHelper.HydroInfo.ToNetwork();
+            var calcuResult = network.Calcu(Yw.EPAnet.CalcuMode.MinorLoss);
+            var allEnergyPointList = network.AnalyzeEnergy(calcuResult);
             var dlg = new HydroSingleLossScaleDlg();
-            dlg.SetBindingData();
+            dlg.SetBindingData(workingHelper.HydroInfo, allEnergyPointList);
             dlg.ShowDialog();
         }
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
index e234b70..9c9ac6a 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/08-working/XhsProjectSimulationWorkingPage.cs
@@ -1553,7 +1553,7 @@
             dlg.SetBindingData(workingHelper.Working);
             dlg.ReloadDataEvent += (rhs) =>
             {
-                workingHelper.Working = rhs;
+                workingHelper.ResetWorking(rhs);
             };
             dlg.ShowDialog();
         }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.Designer.cs
new file mode 100644
index 0000000..316b787
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.Designer.cs
@@ -0,0 +1,354 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class SimulationSingleWorkingEnergyCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            panelControl1 = new PanelControl();
+            singlePumpCalcCtrl1 = new Xhs.SinglePumpCalcCtrl();
+            txtE = new TextEdit();
+            txtP = new TextEdit();
+            txtH = new TextEdit();
+            txtQ = new TextEdit();
+            hydroPumpRunStatusListCtrl1 = new HydroPumpRunListCtrl();
+            hydroEnergyTotalViewCtrl1 = new HydroEnergyTotalViewCtrl();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            splitterItem1 = new DevExpress.XtraLayout.SplitterItem();
+            layoutControlGroup2 = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            groupForSinglePumpInfo = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
+            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)panelControl1).BeginInit();
+            panelControl1.SuspendLayout();
+            ((ISupportInitialize)txtE.Properties).BeginInit();
+            ((ISupportInitialize)txtP.Properties).BeginInit();
+            ((ISupportInitialize)txtH.Properties).BeginInit();
+            ((ISupportInitialize)txtQ.Properties).BeginInit();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)splitterItem1).BeginInit();
+            ((ISupportInitialize)layoutControlGroup2).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)groupForSinglePumpInfo).BeginInit();
+            ((ISupportInitialize)layoutControlItem4).BeginInit();
+            ((ISupportInitialize)layoutControlItem5).BeginInit();
+            ((ISupportInitialize)layoutControlItem6).BeginInit();
+            ((ISupportInitialize)layoutControlItem7).BeginInit();
+            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            ((ISupportInitialize)layoutControlGroup1).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(panelControl1);
+            layoutControl1.Controls.Add(txtE);
+            layoutControl1.Controls.Add(txtP);
+            layoutControl1.Controls.Add(txtH);
+            layoutControl1.Controls.Add(txtQ);
+            layoutControl1.Controls.Add(hydroPumpRunStatusListCtrl1);
+            layoutControl1.Controls.Add(hydroEnergyTotalViewCtrl1);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(1056, 309, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(1012, 603);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // panelControl1
+            // 
+            panelControl1.BorderStyle = BorderStyles.Simple;
+            panelControl1.Controls.Add(singlePumpCalcCtrl1);
+            panelControl1.Location = new Point(232, 71);
+            panelControl1.Name = "panelControl1";
+            panelControl1.Padding = new Padding(1);
+            panelControl1.Size = new Size(778, 530);
+            panelControl1.TabIndex = 11;
+            // 
+            // singlePumpCalcCtrl1
+            // 
+            singlePumpCalcCtrl1.Dock = DockStyle.Fill;
+            singlePumpCalcCtrl1.Location = new Point(3, 3);
+            singlePumpCalcCtrl1.Margin = new Padding(2, 2, 2, 2);
+            singlePumpCalcCtrl1.Name = "singlePumpCalcCtrl1";
+            singlePumpCalcCtrl1.Size = new Size(772, 524);
+            singlePumpCalcCtrl1.TabIndex = 0;
+            // 
+            // txtE
+            // 
+            txtE.Location = new Point(734, 35);
+            txtE.Name = "txtE";
+            txtE.Properties.ReadOnly = true;
+            txtE.Properties.UseReadOnlyAppearance = false;
+            txtE.Size = new Size(106, 20);
+            txtE.StyleController = layoutControl1;
+            txtE.TabIndex = 5;
+            // 
+            // txtP
+            // 
+            txtP.Location = new Point(584, 35);
+            txtP.Name = "txtP";
+            txtP.Properties.ReadOnly = true;
+            txtP.Properties.UseReadOnlyAppearance = false;
+            txtP.Size = new Size(106, 20);
+            txtP.StyleController = layoutControl1;
+            txtP.TabIndex = 4;
+            // 
+            // txtH
+            // 
+            txtH.Location = new Point(434, 35);
+            txtH.Name = "txtH";
+            txtH.Properties.ReadOnly = true;
+            txtH.Properties.UseReadOnlyAppearance = false;
+            txtH.Size = new Size(106, 20);
+            txtH.StyleController = layoutControl1;
+            txtH.TabIndex = 3;
+            // 
+            // txtQ
+            // 
+            txtQ.Location = new Point(284, 35);
+            txtQ.Name = "txtQ";
+            txtQ.Properties.ReadOnly = true;
+            txtQ.Properties.UseReadOnlyAppearance = false;
+            txtQ.Size = new Size(106, 20);
+            txtQ.StyleController = layoutControl1;
+            txtQ.TabIndex = 2;
+            // 
+            // hydroPumpRunStatusListCtrl1
+            // 
+            hydroPumpRunStatusListCtrl1.Location = new Point(5, 148);
+            hydroPumpRunStatusListCtrl1.Name = "hydroPumpRunStatusListCtrl1";
+            hydroPumpRunStatusListCtrl1.Size = new Size(210, 450);
+            hydroPumpRunStatusListCtrl1.TabIndex = 6;
+            // 
+            // hydroEnergyTotalViewCtrl1
+            // 
+            hydroEnergyTotalViewCtrl1.Location = new Point(14, 35);
+            hydroEnergyTotalViewCtrl1.Name = "hydroEnergyTotalViewCtrl1";
+            hydroEnergyTotalViewCtrl1.Size = new Size(192, 73);
+            hydroEnergyTotalViewCtrl1.TabIndex = 0;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { splitterItem1, layoutControlGroup2, groupForSinglePumpInfo, layoutControlGroup1, layoutControlItem3 });
+            Root.Name = "Root";
+            Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            Root.Size = new Size(1012, 603);
+            Root.TextVisible = false;
+            // 
+            // splitterItem1
+            // 
+            splitterItem1.AllowHotTrack = true;
+            splitterItem1.Location = new Point(220, 0);
+            splitterItem1.Name = "splitterItem1";
+            splitterItem1.Size = new Size(10, 603);
+            // 
+            // layoutControlGroup2
+            // 
+            layoutControlGroup2.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem2 });
+            layoutControlGroup2.Location = new Point(0, 122);
+            layoutControlGroup2.Name = "layoutControlGroup2";
+            layoutControlGroup2.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup2.Size = new Size(220, 481);
+            layoutControlGroup2.Text = "姘存车鍒楄〃";
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = hydroPumpRunStatusListCtrl1;
+            layoutControlItem2.Location = new Point(0, 0);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(214, 454);
+            layoutControlItem2.TextSize = new Size(0, 0);
+            layoutControlItem2.TextVisible = false;
+            // 
+            // groupForSinglePumpInfo
+            // 
+            groupForSinglePumpInfo.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem4, layoutControlItem5, layoutControlItem6, layoutControlItem7, emptySpaceItem1 });
+            groupForSinglePumpInfo.Location = new Point(230, 0);
+            groupForSinglePumpInfo.Name = "groupForSinglePumpInfo";
+            groupForSinglePumpInfo.Size = new Size(782, 69);
+            groupForSinglePumpInfo.Text = "姘存车";
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem4.Control = txtQ;
+            layoutControlItem4.Location = new Point(0, 0);
+            layoutControlItem4.MaxSize = new Size(150, 24);
+            layoutControlItem4.MinSize = new Size(150, 24);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(150, 24);
+            layoutControlItem4.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem4.Text = "娴侀噺:";
+            layoutControlItem4.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem5
+            // 
+            layoutControlItem5.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem5.Control = txtH;
+            layoutControlItem5.Location = new Point(150, 0);
+            layoutControlItem5.MaxSize = new Size(150, 24);
+            layoutControlItem5.MinSize = new Size(150, 24);
+            layoutControlItem5.Name = "layoutControlItem5";
+            layoutControlItem5.Size = new Size(150, 24);
+            layoutControlItem5.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem5.Text = "鎵▼:";
+            layoutControlItem5.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem6
+            // 
+            layoutControlItem6.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem6.Control = txtP;
+            layoutControlItem6.Location = new Point(300, 0);
+            layoutControlItem6.MaxSize = new Size(150, 24);
+            layoutControlItem6.MinSize = new Size(150, 24);
+            layoutControlItem6.Name = "layoutControlItem6";
+            layoutControlItem6.Size = new Size(150, 24);
+            layoutControlItem6.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem6.Text = "鍔熺巼:";
+            layoutControlItem6.TextSize = new Size(28, 14);
+            // 
+            // layoutControlItem7
+            // 
+            layoutControlItem7.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem7.Control = txtE;
+            layoutControlItem7.Location = new Point(450, 0);
+            layoutControlItem7.MaxSize = new Size(150, 24);
+            layoutControlItem7.MinSize = new Size(150, 24);
+            layoutControlItem7.Name = "layoutControlItem7";
+            layoutControlItem7.Size = new Size(150, 24);
+            layoutControlItem7.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem7.Text = "鏁堢巼:";
+            layoutControlItem7.TextSize = new Size(28, 14);
+            // 
+            // emptySpaceItem1
+            // 
+            emptySpaceItem1.AllowHotTrack = false;
+            emptySpaceItem1.Location = new Point(600, 0);
+            emptySpaceItem1.Name = "emptySpaceItem1";
+            emptySpaceItem1.Size = new Size(158, 24);
+            emptySpaceItem1.TextSize = new Size(0, 0);
+            // 
+            // layoutControlGroup1
+            // 
+            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1 });
+            layoutControlGroup1.Location = new Point(0, 0);
+            layoutControlGroup1.Name = "layoutControlGroup1";
+            layoutControlGroup1.Size = new Size(220, 122);
+            layoutControlGroup1.Text = "鎬昏兘鑰�";
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = hydroEnergyTotalViewCtrl1;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.MinSize = new Size(110, 77);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(196, 77);
+            layoutControlItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem1.TextSize = new Size(0, 0);
+            layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = panelControl1;
+            layoutControlItem3.Location = new Point(230, 69);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(782, 534);
+            layoutControlItem3.TextSize = new Size(0, 0);
+            layoutControlItem3.TextVisible = false;
+            // 
+            // SimulationSingleWorkingEnergyCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(layoutControl1);
+            Name = "SimulationSingleWorkingEnergyCtrl";
+            Size = new Size(1012, 603);
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)panelControl1).EndInit();
+            panelControl1.ResumeLayout(false);
+            ((ISupportInitialize)txtE.Properties).EndInit();
+            ((ISupportInitialize)txtP.Properties).EndInit();
+            ((ISupportInitialize)txtH.Properties).EndInit();
+            ((ISupportInitialize)txtQ.Properties).EndInit();
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)splitterItem1).EndInit();
+            ((ISupportInitialize)layoutControlGroup2).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)groupForSinglePumpInfo).EndInit();
+            ((ISupportInitialize)layoutControlItem4).EndInit();
+            ((ISupportInitialize)layoutControlItem5).EndInit();
+            ((ISupportInitialize)layoutControlItem6).EndInit();
+            ((ISupportInitialize)layoutControlItem7).EndInit();
+            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ((ISupportInitialize)layoutControlGroup1).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private TextEdit txtE;
+        private TextEdit txtP;
+        private TextEdit txtH;
+        private TextEdit txtQ;
+        private HydroPumpRunListCtrl hydroPumpRunStatusListCtrl1;
+        private HydroEnergyTotalViewCtrl hydroEnergyTotalViewCtrl1;
+        private DevExpress.XtraLayout.SplitterItem splitterItem1;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlGroup groupForSinglePumpInfo;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private PanelControl panelControl1;
+        private Xhs.SinglePumpCalcCtrl singlePumpCalcCtrl1;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.cs
new file mode 100644
index 0000000..834e2b2
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.cs
@@ -0,0 +1,109 @@
+锘縰sing DevExpress.XtraEditors;
+using NPOI.OpenXmlFormats.Dml;
+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;
+using Yw.EPAnet;
+
+namespace HStation.WinFrmUI
+{
+    public partial class SimulationSingleWorkingEnergyCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public SimulationSingleWorkingEnergyCtrl()
+        {
+            InitializeComponent();
+            this.layoutControl1.SetupLayoutControl();
+            this.hydroPumpRunStatusListCtrl1.SelectedChangedEvent += HydroPumpRunStatusListCtrl1_SelectedChangedEvent;
+        }
+
+        private Yw.Model.HydroModelInfo _hydroInfo = null;//姘村姏淇℃伅
+        private Dictionary<string, HydroCalcuVisualResult> _allCalcuResultVisualDict = null;//鎵�鏈夎绠楃粨鏋滃彲瑙佸瓧鍏�
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, HydroCalcuResult calcuResult)
+        {
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            if (calcuResult == null)
+            {
+                return;
+            }
+            if (!calcuResult.Succeed)
+            {
+                return;
+            }
+            var allCalcuResultVisualDict = calcuResult.GetVisualDict();
+            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        {
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            if (allCalcuResultVisualDict == null || allCalcuResultVisualDict.Count < 1)
+            {
+                return;
+            }
+            _hydroInfo = hydroInfo;
+            _allCalcuResultVisualDict = allCalcuResultVisualDict;
+            this.hydroEnergyTotalViewCtrl1.SetBindingData(hydroInfo, allCalcuResultVisualDict);
+            this.hydroPumpRunStatusListCtrl1.SetBindingData(hydroInfo);
+        }
+
+        //娉甸�夋嫨鏀瑰彉
+        private void HydroPumpRunStatusListCtrl1_SelectedChangedEvent(Yw.Model.HydroPumpInfo pump)
+        {
+            if (_hydroInfo == null)
+            {
+                return;
+            }
+            if (_allCalcuResultVisualDict == null || _allCalcuResultVisualDict.Count < 1)
+            {
+                return;
+            }
+            if (pump == null)
+            {
+                return;
+            }
+            this.groupForSinglePumpInfo.Text = pump.Name;
+            this.txtQ.EditValue = null;
+            this.txtH.EditValue = null;
+            this.txtP.EditValue = null;
+            this.txtE.EditValue = null;
+            if (_allCalcuResultVisualDict.ContainsKey(pump.Code))
+            {
+                var calcuResult = _allCalcuResultVisualDict[pump.Code] as HydroCalcuPumpResult;
+                if (calcuResult != null)
+                {
+                    if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open)
+                    {
+                        this.txtQ.EditValue = calcuResult.CalcuQ.HasValue ? $"{Math.Round(calcuResult.CalcuQ.Value, 1)}m鲁/h" : null;
+                        this.txtH.EditValue = calcuResult.CalcuH.HasValue ? $"{Math.Round(calcuResult.CalcuH.Value, 2)}m" : null;
+                        this.txtP.EditValue = calcuResult.CalcuP.HasValue ? $"{Math.Round(calcuResult.CalcuP.Value, 1)}kW" : null;
+                        this.txtE.EditValue = calcuResult.CalcuE.HasValue ? $"{Math.Round(calcuResult.CalcuE.Value, 1)}%" : null;
+                    }
+                    var matching = AssetsMatchingParasHelper.Create(_hydroInfo, pump, _allCalcuResultVisualDict.Values.ToList());
+                    this.singlePumpCalcCtrl1.SetBindindData(matching);
+                }
+            }
+
+
+        }
+
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyCtrl.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.Designer.cs
new file mode 100644
index 0000000..4678e50
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.Designer.cs
@@ -0,0 +1,94 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class SimulationSingleWorkingEnergyDlg
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form Designer generated code
+
+        /// <summary>
+        /// Required method for Designer support - do not modify
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            ribbon = new DevExpress.XtraBars.Ribbon.RibbonControl();
+            ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
+            ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
+            simulationSingleWorkingEnergyCtrl1 = new SimulationSingleWorkingEnergyCtrl();
+            ((ISupportInitialize)ribbon).BeginInit();
+            SuspendLayout();
+            // 
+            // ribbon
+            // 
+            ribbon.ExpandCollapseItem.Id = 0;
+            ribbon.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbon.ExpandCollapseItem });
+            ribbon.Location = new Point(0, 0);
+            ribbon.MaxItemId = 1;
+            ribbon.Name = "ribbon";
+            ribbon.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
+            ribbon.RibbonCaptionAlignment = DevExpress.XtraBars.Ribbon.RibbonCaptionAlignment.Left;
+            ribbon.ShowDisplayOptionsMenuButton = DevExpress.Utils.DefaultBoolean.False;
+            ribbon.Size = new Size(1039, 32);
+            // 
+            // ribbonPage1
+            // 
+            ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1 });
+            ribbonPage1.Name = "ribbonPage1";
+            ribbonPage1.Text = "ribbonPage1";
+            // 
+            // ribbonPageGroup1
+            // 
+            ribbonPageGroup1.Name = "ribbonPageGroup1";
+            ribbonPageGroup1.Text = "ribbonPageGroup1";
+            // 
+            // simulationSingleWorkingEnergyCtrl1
+            // 
+            simulationSingleWorkingEnergyCtrl1.Dock = DockStyle.Fill;
+            simulationSingleWorkingEnergyCtrl1.Location = new Point(0, 32);
+            simulationSingleWorkingEnergyCtrl1.Name = "simulationSingleWorkingEnergyCtrl1";
+            simulationSingleWorkingEnergyCtrl1.Size = new Size(1039, 631);
+            simulationSingleWorkingEnergyCtrl1.TabIndex = 3;
+            // 
+            // SimulationSingleWorkingEnergyDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(1039, 663);
+            Controls.Add(simulationSingleWorkingEnergyCtrl1);
+            Controls.Add(ribbon);
+            FormBorderStyle = FormBorderStyle.SizableToolWindow;
+            Name = "SimulationSingleWorkingEnergyDlg";
+            Ribbon = ribbon;
+            RibbonVisibility = DevExpress.XtraBars.Ribbon.RibbonVisibility.Hidden;
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "鑳借�楀垎鏋�";
+            ((ISupportInitialize)ribbon).EndInit();
+            ResumeLayout(false);
+            PerformLayout();
+        }
+
+        #endregion
+
+        private DevExpress.XtraBars.Ribbon.RibbonControl ribbon;
+        private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
+        private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
+        private SimulationSingleWorkingEnergyCtrl simulationSingleWorkingEnergyCtrl1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.cs
new file mode 100644
index 0000000..7ea1ccf
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.cs
@@ -0,0 +1,21 @@
+锘縩amespace HStation.WinFrmUI
+{
+    public partial class SimulationSingleWorkingEnergyDlg : DevExpress.XtraBars.Ribbon.RibbonForm
+    {
+        public SimulationSingleWorkingEnergyDlg()
+        {
+            InitializeComponent();
+            this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, HydroCalcuResult calcuResult)
+        {
+            this.simulationSingleWorkingEnergyCtrl1.SetBindingData(hydroInfo, calcuResult);
+        }
+
+
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/09-energy/01-single/SimulationSingleWorkingEnergyDlg.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/XhsProjectSimulationMgrPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/XhsProjectSimulationMgrPage.cs
index 93e9243..1a7adbf 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/XhsProjectSimulationMgrPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/XhsProjectSimulationMgrPage.cs
@@ -17,6 +17,7 @@
             this.xhsProjectSimulationFunctionMgrCtrl1.ShowProjectSiteSimulationEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteSimulationEvent;
             this.xhsProjectSimulationFunctionMgrCtrl1.ShowProjectSiteWorkingEvent += XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSiteWorkingEvent;
             this.xhsProjectSimulationFunctionMgrCtrl1.ProjectSiteWorkingCheckedEvent += XhsProjectSimulationFunctionMgrCtrl1_ProjectSiteWorkingCheckedEvent;
+            this.xhsProjectSimulationFunctionMgrCtrl1.CreateProjectSiteSchemeEvent += XhsProjectSimulationFunctionMgrCtrl1_CreateProjectSiteSchemeEvent;
         }
 
         private XhsProjectVmo _project = null;//椤圭洰
@@ -156,45 +157,18 @@
             ctrl.UpdateWorkingCheckedList(working, hasChecked);
         }
 
-
-
-        //鍒涘缓椤圭洰鏂规浜嬩欢
-        private void XhsProjectSimulationFunctionMgrCtrl1_CreateProjectSchemeEvent(DevExpress.Utils.Svg.SvgImage svgImage)
+        //椤圭洰绔欐柟妗堝垱寤轰簨浠�
+        private async void XhsProjectSimulationFunctionMgrCtrl1_CreateProjectSiteSchemeEvent
+            (XhsProjectVmo project, XhsProjectSiteVmo projectSite, DevExpress.Utils.Svg.SvgImage svgImage)
         {
-            //if (_projectSite == null)
-            //{
-            //    return;
-            //}
-            //var dlg = new AddXhsProjectSimulationSchemeDlg();
-            //await dlg.SetBindingData(_projectSite.ID);
-            //dlg.ReloadDataEvent += (scheme) =>
-            //{
-            //    this.xhsProjectSimulationFunctionMgrCtrl1.AppendScheme(scheme);
-            //};
-            //dlg.ShowDialog();
-
             var dlg = new AddXhsSchemeDlg();
-            // await dlg.SetBindingData(_project, _projectSite, _hydroInfo);
+            await dlg.SetBindingData(project, projectSite, null);
             dlg.ShowDialog();
         }
 
-        //鏄剧ず椤圭洰鏂规浜嬩欢
-        private void XhsProjectSimulationFunctionMgrCtrl1_ShowProjectSchemeEvent(XhsSchemeVmo arg1, DevExpress.Utils.Svg.SvgImage arg2)
-        {
 
-        }
 
-        //姣旇緝椤圭洰宸ュ喌浜嬩欢
-        private void XhsProjectSimulationFunctionMgrCtrl1_CompareProjectWorkingEvent(DevExpress.Utils.Svg.SvgImage obj)
-        {
 
-        }
-
-        //鏄剧ず椤圭洰宸ュ喌浜嬩欢
-        private void XhsProjectSimulationFunctionMgrCtrl1_ShowProjectWorkingEvent(HydroWorkingVmo arg1, DevExpress.Utils.Svg.SvgImage arg2)
-        {
-
-        }
 
         #endregion
 
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
index 9746e64..f486a6b 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj
@@ -195,6 +195,9 @@
     <Compile Update="04-pump\03-calc\SinglePumpCalcCtrl.cs">
       <SubType>Form</SubType>
     </Compile>
+    <Compile Update="03-simulation\09-energy\01-single\SimulationSingleWorkingEnergyDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="Properties\Resources.Designer.cs">
       <DesignTime>True</DesignTime>
       <AutoGen>True</AutoGen>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
index 588c20c..c30bcef 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/HStation.WinFrmUI.Xhs.Core.csproj.user
@@ -226,6 +226,9 @@
     <Compile Update="03-simulation\07-l3d\XhsProjectSimulationL3dCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="03-simulation\09-energy\01-single\SimulationSingleWorkingEnergyCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Update="03-simulation\XhsProjectSimulationMgrPage.cs">
       <SubType>UserControl</SubType>
     </Compile>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.Designer.cs
index 61e3a69..fa5f770 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveCtrl.Designer.cs
@@ -60,6 +60,7 @@
             // chartControl1
             // 
             xyDiagram1.AxisX.GridLines.Visible = true;
+            xyDiagram1.AxisX.MinorCount = 1;
             xyDiagram1.AxisX.NumericScaleOptions.AutoGrid = false;
             xyDiagram1.AxisX.Tickmarks.MinorVisible = false;
             xyDiagram1.AxisX.Title.Text = "璺濈";
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs
index 8eee264..c8dfcc3 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/01-curve/HydroSingleLossCurveDlg.cs
@@ -13,19 +13,19 @@
         /// </summary>
         public void SetBindingData(List<HydroNodeLossViewModel> allNodeLossList)
         {
-            allNodeLossList = new List<HydroNodeLossViewModel>()
-            {
-                new HydroNodeLossViewModel(){ Code="1",Elev=10,StartHead=666,EndHead=623,Distance=10},
-                new HydroNodeLossViewModel(){ Code="2",Elev=20,StartHead=600,EndHead=567,Distance=30},
-                new HydroNodeLossViewModel(){ Code="3",Elev=25,StartHead=544,EndHead=521,Distance=100},
-                new HydroNodeLossViewModel(){ Code="4",Elev=19,StartHead=500,EndHead=789,Distance=110},
-                new HydroNodeLossViewModel(){ Code="5",Elev=23,StartHead=700,EndHead=677,Distance=150},
-                new HydroNodeLossViewModel(){ Code="6",Elev=22,StartHead=632,EndHead=600,Distance=200},
-                new HydroNodeLossViewModel(){ Code="7",Elev=13,StartHead=550,EndHead=510,Distance=300},
-                new HydroNodeLossViewModel(){ Code="8",Elev=13,StartHead=500,EndHead=345,Distance=500},
-                new HydroNodeLossViewModel(){ Code="9",Elev=11,StartHead=300,EndHead=289,Distance=700},
-                new HydroNodeLossViewModel(){ Code="10",Elev=10,StartHead=260,EndHead=150,Distance=820},
-            };
+            //allNodeLossList = new List<HydroNodeLossViewModel>()
+            //{
+            //    new HydroNodeLossViewModel(){ Code="1",Elev=10,StartHead=666,EndHead=623,Distance=10},
+            //    new HydroNodeLossViewModel(){ Code="2",Elev=20,StartHead=600,EndHead=567,Distance=30},
+            //    new HydroNodeLossViewModel(){ Code="3",Elev=25,StartHead=544,EndHead=521,Distance=100},
+            //    new HydroNodeLossViewModel(){ Code="4",Elev=19,StartHead=500,EndHead=789,Distance=110},
+            //    new HydroNodeLossViewModel(){ Code="5",Elev=23,StartHead=700,EndHead=677,Distance=150},
+            //    new HydroNodeLossViewModel(){ Code="6",Elev=22,StartHead=632,EndHead=600,Distance=200},
+            //    new HydroNodeLossViewModel(){ Code="7",Elev=13,StartHead=550,EndHead=510,Distance=300},
+            //    new HydroNodeLossViewModel(){ Code="8",Elev=13,StartHead=500,EndHead=345,Distance=500},
+            //    new HydroNodeLossViewModel(){ Code="9",Elev=11,StartHead=300,EndHead=289,Distance=700},
+            //    new HydroNodeLossViewModel(){ Code="10",Elev=10,StartHead=260,EndHead=150,Distance=820},
+            //};
             this.hydroSingleLossCurveCtrl1.SetBindingData(allNodeLossList);
         }
 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleHelper.cs
new file mode 100644
index 0000000..d6320de
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleHelper.cs
@@ -0,0 +1,82 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public static class HydroCatalogLossScaleHelper
+    {
+        /// <summary>
+        /// 鑾峰彇鍒嗙被鎹熷け姣斾緥鍒楄〃
+        /// </summary>
+        public static List<HydroCatalogLossScaleViewModel> GetAllCatalogLossScaleList(this Yw.Model.HydroModelInfo hydroInfo, List<Yw.EPAnet.EnergyPoint> allEnergyList)
+        {
+            if (hydroInfo == null)
+            {
+                return default;
+            }
+            var allScaleList = new List<HydroCatalogLossScaleViewModel>();
+            if (allEnergyList != null && allEnergyList.Count > 0)
+            {
+                if (hydroInfo.Pipes != null && hydroInfo.Pipes.Count > 0)
+                {
+                    var allVisualIds = hydroInfo.Pipes.Select(x => x.Code).Distinct().ToList();
+                    var allVisualEnergyList = allEnergyList.Where(x => allVisualIds.Contains(x.Id)).ToList();
+                    var visualLossScale = new HydroCatalogLossScaleViewModel();
+                    visualLossScale.Catalog = Yw.Hydro.ParterCatalog.Pipe;
+                    visualLossScale.CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Pipe);
+                    visualLossScale.Loss = allVisualEnergyList.Count > 0 ? allVisualEnergyList.Sum(x => x.EnergyPower) : 0;
+                    allScaleList.Add(visualLossScale);
+                }
+                if (hydroInfo.Translations != null && hydroInfo.Translations.Count > 0)
+                {
+                    var allVisualIds = hydroInfo.Translations.Select(x => x.Code).Distinct().ToList();
+                    var allVisualEnergyList = allEnergyList.Where(x => allVisualIds.Contains(x.Id)).ToList();
+                    var visualLossScale = new HydroCatalogLossScaleViewModel();
+                    visualLossScale.Catalog = Yw.Hydro.ParterCatalog.Translation;
+                    visualLossScale.CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Translation);
+                    visualLossScale.Loss = allVisualEnergyList.Count > 0 ? allVisualEnergyList.Sum(x => x.EnergyPower) : 0;
+                    allScaleList.Add(visualLossScale);
+                }
+                if (hydroInfo.Valves != null && hydroInfo.Valves.Count > 0)
+                {
+                    var allVisualIds = hydroInfo.Valves.Select(x => x.Code).Distinct().ToList();
+                    var allVisualEnergyList = allEnergyList.Where(x => allVisualIds.Contains(x.Id)).ToList();
+                    var visualLossScale = new HydroCatalogLossScaleViewModel();
+                    visualLossScale.Catalog = Yw.Hydro.ParterCatalog.Valve;
+                    visualLossScale.CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Valve);
+                    visualLossScale.Loss = allVisualEnergyList.Count > 0 ? allVisualEnergyList.Sum(x => x.EnergyPower) : 0;
+                    allScaleList.Add(visualLossScale);
+                }
+                if (hydroInfo.Elbows != null && hydroInfo.Elbows.Count > 0)
+                {
+                    var allVisualIds = hydroInfo.Elbows.Select(x => x.Code).Distinct().ToList();
+                    var allVisualEnergyList = allEnergyList.Where(x => allVisualIds.Contains(x.Id)).ToList();
+                    var visualLossScale = new HydroCatalogLossScaleViewModel();
+                    visualLossScale.Catalog = Yw.Hydro.ParterCatalog.Elbow;
+                    visualLossScale.CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Elbow);
+                    visualLossScale.Loss = allVisualEnergyList.Count > 0 ? allVisualEnergyList.Sum(x => x.EnergyPower) : 0;
+                    allScaleList.Add(visualLossScale);
+                }
+                if (hydroInfo.Threelinks != null && hydroInfo.Threelinks.Count > 0)
+                {
+                    var allVisualIds = hydroInfo.Threelinks.Select(x => x.Code).Distinct().ToList();
+                    var allVisualEnergyList = allEnergyList.Where(x => allVisualIds.Contains(x.Id)).ToList();
+                    var visualLossScale = new HydroCatalogLossScaleViewModel();
+                    visualLossScale.Catalog = Yw.Hydro.ParterCatalog.Threelink;
+                    visualLossScale.CatalogName = HydroParterCatalogHelper.GetName(Yw.Hydro.ParterCatalog.Threelink);
+                    visualLossScale.Loss = allVisualEnergyList.Count > 0 ? allVisualEnergyList.Sum(x => x.EnergyPower) : 0;
+                    allScaleList.Add(visualLossScale);
+                }
+            }
+            return allScaleList;
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleViewModel.cs
index 8483aaa..897c5ab 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroCatalogLossScaleViewModel.cs
@@ -11,6 +11,11 @@
         public string Catalog { get; set; }
 
         /// <summary>
+        /// 鍒嗙被鍚嶇О
+        /// </summary>
+        public string CatalogName { get; set; }
+
+        /// <summary>
         /// 鎹熷け
         /// </summary>
         public double Loss { get; set; }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.Designer.cs
index 9787baf..4221342 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.Designer.cs
@@ -49,12 +49,12 @@
             // 
             chartControl1.Dock = DockStyle.Fill;
             chartControl1.Legend.LegendID = -1;
-            chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
+            chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.True;
             chartControl1.Location = new Point(0, 0);
             chartControl1.Name = "chartControl1";
-            series1.ArgumentDataMember = "Catalog";
+            series1.ArgumentDataMember = "CatalogName";
             series1.DataSource = bindingSource1;
-            doughnutSeriesLabel1.TextPattern = "{A}: {VP:P2}";
+            doughnutSeriesLabel1.TextPattern = "{A}({V:N2}):{VP:P2}";
             series1.Label = doughnutSeriesLabel1;
             series1.Name = "Series 1";
             series1.SeriesID = 1;
@@ -68,7 +68,6 @@
     };
             chartControl1.Size = new Size(884, 602);
             chartControl1.TabIndex = 0;
-            chartControl1.Click += chartControl1_Click;
             // 
             // HydroSingleLossScaleCtrl
             // 
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.cs
index c6243e0..58a4be9 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleCtrl.cs
@@ -15,9 +15,5 @@
             this.bindingSource1.DataSource = allCatalogLossList;
         }
 
-        private void chartControl1_Click(object sender, EventArgs e)
-        {
-
-        }
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.Designer.cs
index f467062..47fd3f2 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.Designer.cs
@@ -32,7 +32,17 @@
             ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
             ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             hydroSingleLossScaleCtrl1 = new HydroSingleLossScaleCtrl();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            hydroEnergyStatisticsBarCtrl1 = new HydroEnergyStatisticsBarCtrl();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)ribbon).BeginInit();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
             SuspendLayout();
             // 
             // ribbon
@@ -45,7 +55,7 @@
             ribbon.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
             ribbon.RibbonCaptionAlignment = DevExpress.XtraBars.Ribbon.RibbonCaptionAlignment.Left;
             ribbon.ShowDisplayOptionsMenuButton = DevExpress.Utils.DefaultBoolean.False;
-            ribbon.Size = new Size(886, 32);
+            ribbon.Size = new Size(997, 32);
             // 
             // ribbonPage1
             // 
@@ -60,18 +70,66 @@
             // 
             // hydroSingleLossScaleCtrl1
             // 
-            hydroSingleLossScaleCtrl1.Dock = DockStyle.Fill;
-            hydroSingleLossScaleCtrl1.Location = new Point(0, 32);
+            hydroSingleLossScaleCtrl1.Location = new Point(2, 19);
             hydroSingleLossScaleCtrl1.Name = "hydroSingleLossScaleCtrl1";
-            hydroSingleLossScaleCtrl1.Size = new Size(886, 555);
-            hydroSingleLossScaleCtrl1.TabIndex = 6;
+            hydroSingleLossScaleCtrl1.Size = new Size(993, 374);
+            hydroSingleLossScaleCtrl1.TabIndex = 0;
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(hydroEnergyStatisticsBarCtrl1);
+            layoutControl1.Controls.Add(hydroSingleLossScaleCtrl1);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 32);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(997, 591);
+            layoutControl1.TabIndex = 8;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem2, layoutControlItem1 });
+            Root.Name = "Root";
+            Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            Root.Size = new Size(997, 591);
+            Root.TextVisible = false;
+            // 
+            // hydroEnergyStatisticsBarCtrl1
+            // 
+            hydroEnergyStatisticsBarCtrl1.Location = new Point(2, 414);
+            hydroEnergyStatisticsBarCtrl1.Name = "hydroEnergyStatisticsBarCtrl1";
+            hydroEnergyStatisticsBarCtrl1.Size = new Size(993, 175);
+            hydroEnergyStatisticsBarCtrl1.TabIndex = 2;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = hydroEnergyStatisticsBarCtrl1;
+            layoutControlItem2.Location = new Point(0, 395);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(997, 196);
+            layoutControlItem2.Text = "鑳介噺缁熻";
+            layoutControlItem2.TextLocation = DevExpress.Utils.Locations.Top;
+            layoutControlItem2.TextSize = new Size(48, 14);
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = hydroSingleLossScaleCtrl1;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(997, 395);
+            layoutControlItem1.Text = "鍒嗙被缁熻";
+            layoutControlItem1.TextLocation = DevExpress.Utils.Locations.Top;
+            layoutControlItem1.TextSize = new Size(48, 14);
             // 
             // HydroSingleLossScaleDlg
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
-            ClientSize = new Size(886, 587);
-            Controls.Add(hydroSingleLossScaleCtrl1);
+            ClientSize = new Size(997, 623);
+            Controls.Add(layoutControl1);
             Controls.Add(ribbon);
             FormBorderStyle = FormBorderStyle.SizableToolWindow;
             Name = "HydroSingleLossScaleDlg";
@@ -80,6 +138,11 @@
             StartPosition = FormStartPosition.CenterParent;
             Text = "鎹熷け姣斾緥";
             ((ISupportInitialize)ribbon).EndInit();
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
             ResumeLayout(false);
             PerformLayout();
         }
@@ -90,5 +153,10 @@
         private DevExpress.XtraBars.Ribbon.RibbonPage ribbonPage1;
         private DevExpress.XtraBars.Ribbon.RibbonPageGroup ribbonPageGroup1;
         private HydroSingleLossScaleCtrl hydroSingleLossScaleCtrl1;
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private HydroEnergyStatisticsBarCtrl hydroEnergyStatisticsBarCtrl1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.cs
index 8794155..3e1f50c 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/18-loss/02-scale/HydroSingleLossScaleDlg.cs
@@ -1,4 +1,6 @@
-锘縩amespace Yw.WinFrmUI
+锘縰sing DevExpress.Xpo.Helpers;
+
+namespace Yw.WinFrmUI
 {
     public partial class HydroSingleLossScaleDlg : DevExpress.XtraBars.Ribbon.RibbonForm
     {
@@ -6,22 +8,26 @@
         {
             InitializeComponent();
             this.IconOptions.Icon = Yw.WinFrmUI.GlobalParas.AppIcon;
+            this.layoutControl1.SetupLayoutControl();
         }
 
         /// <summary>
         /// 
         /// </summary>
-        public void SetBindingData()
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, List<Yw.EPAnet.EnergyPoint> allEnergyList)
         {
-            var allList = new List<HydroCatalogLossScaleViewModel>()
+            if (hydroInfo == null)
             {
-                new HydroCatalogLossScaleViewModel(){ Catalog="寮ご",Loss=13},
-                new HydroCatalogLossScaleViewModel(){Catalog="闃�闂�",Loss=39},
-                new HydroCatalogLossScaleViewModel(){Catalog="绠¢亾",Loss=123}
-            };
-            this.hydroSingleLossScaleCtrl1.SetBindingData(allList);
+                return;
+            }
+            var allLossList = hydroInfo.GetAllCatalogLossScaleList(allEnergyList);
+            this.hydroSingleLossScaleCtrl1.SetBindingData(allLossList);
+            var allStatisticsList = allEnergyList.GetStatisticsList();
+            this.hydroEnergyStatisticsBarCtrl1.SetBindingData(allStatisticsList);
         }
 
 
+
+
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.Designer.cs
new file mode 100644
index 0000000..02c70b8
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.Designer.cs
@@ -0,0 +1,126 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class HydroPumpRunListCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new Container();
+            DevExpress.XtraEditors.TableLayout.ItemTemplateBase itemTemplateBase1 = new DevExpress.XtraEditors.TableLayout.ItemTemplateBase();
+            DevExpress.XtraEditors.TableLayout.TableColumnDefinition tableColumnDefinition1 = new DevExpress.XtraEditors.TableLayout.TableColumnDefinition();
+            DevExpress.XtraEditors.TableLayout.TableColumnDefinition tableColumnDefinition2 = new DevExpress.XtraEditors.TableLayout.TableColumnDefinition();
+            DevExpress.XtraEditors.TableLayout.TableColumnDefinition tableColumnDefinition3 = new DevExpress.XtraEditors.TableLayout.TableColumnDefinition();
+            DevExpress.XtraEditors.TableLayout.TemplatedItemElement templatedItemElement1 = new DevExpress.XtraEditors.TableLayout.TemplatedItemElement();
+            DevExpress.XtraEditors.TableLayout.TemplatedItemElement templatedItemElement2 = new DevExpress.XtraEditors.TableLayout.TemplatedItemElement();
+            DevExpress.XtraEditors.TableLayout.TemplatedItemElement templatedItemElement3 = new DevExpress.XtraEditors.TableLayout.TemplatedItemElement();
+            DevExpress.XtraEditors.TableLayout.TableRowDefinition tableRowDefinition1 = new DevExpress.XtraEditors.TableLayout.TableRowDefinition();
+            ComponentResourceManager resources = new ComponentResourceManager(typeof(HydroPumpRunListCtrl));
+            imageListBoxControl1 = new DevExpress.XtraEditors.ImageListBoxControl();
+            hydroPumpRunViewModelBindingSource = new BindingSource(components);
+            image32 = new DevExpress.Utils.ImageCollection(components);
+            ((ISupportInitialize)imageListBoxControl1).BeginInit();
+            ((ISupportInitialize)hydroPumpRunViewModelBindingSource).BeginInit();
+            ((ISupportInitialize)image32).BeginInit();
+            SuspendLayout();
+            // 
+            // imageListBoxControl1
+            // 
+            imageListBoxControl1.DataSource = hydroPumpRunViewModelBindingSource;
+            imageListBoxControl1.DisplayMember = "Name";
+            imageListBoxControl1.Dock = DockStyle.Fill;
+            imageListBoxControl1.ImageIndexMember = "ImageIndex";
+            imageListBoxControl1.ImageList = image32;
+            imageListBoxControl1.ImageMember = "ImageIndex";
+            imageListBoxControl1.ItemHeight = 36;
+            imageListBoxControl1.Location = new Point(0, 0);
+            imageListBoxControl1.Name = "imageListBoxControl1";
+            imageListBoxControl1.Size = new Size(285, 624);
+            imageListBoxControl1.TabIndex = 0;
+            tableColumnDefinition1.Length.Value = 40D;
+            tableColumnDefinition2.Length.Value = 171D;
+            tableColumnDefinition3.Length.Value = 70D;
+            itemTemplateBase1.Columns.Add(tableColumnDefinition1);
+            itemTemplateBase1.Columns.Add(tableColumnDefinition2);
+            itemTemplateBase1.Columns.Add(tableColumnDefinition3);
+            templatedItemElement1.ColumnIndex = 1;
+            templatedItemElement1.FieldName = "Name";
+            templatedItemElement1.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
+            templatedItemElement1.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
+            templatedItemElement1.Text = "Name";
+            templatedItemElement1.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleLeft;
+            templatedItemElement2.Appearance.Normal.ForeColor = Color.Silver;
+            templatedItemElement2.Appearance.Normal.Options.UseForeColor = true;
+            templatedItemElement2.ColumnIndex = 2;
+            templatedItemElement2.FieldName = "CurrentHz";
+            templatedItemElement2.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
+            templatedItemElement2.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
+            templatedItemElement2.Text = "CurrentHz";
+            templatedItemElement2.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
+            templatedItemElement3.FieldName = "Image";
+            templatedItemElement3.ImageOptions.ImageAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
+            templatedItemElement3.ImageOptions.ImageScaleMode = DevExpress.XtraEditors.TileItemImageScaleMode.ZoomInside;
+            templatedItemElement3.Text = "Image";
+            templatedItemElement3.TextAlignment = DevExpress.XtraEditors.TileItemContentAlignment.MiddleCenter;
+            itemTemplateBase1.Elements.Add(templatedItemElement1);
+            itemTemplateBase1.Elements.Add(templatedItemElement2);
+            itemTemplateBase1.Elements.Add(templatedItemElement3);
+            itemTemplateBase1.Name = "template1";
+            itemTemplateBase1.Rows.Add(tableRowDefinition1);
+            imageListBoxControl1.Templates.Add(itemTemplateBase1);
+            imageListBoxControl1.ValueMember = "Code";
+            imageListBoxControl1.SelectedValueChanged += imageListBoxControl1_SelectedValueChanged;
+            // 
+            // hydroPumpRunViewModelBindingSource
+            // 
+            hydroPumpRunViewModelBindingSource.DataSource = typeof(HydroPumpRunViewModel);
+            // 
+            // image32
+            // 
+            image32.ImageSize = new Size(32, 32);
+            image32.ImageStream = (DevExpress.Utils.ImageCollectionStreamer)resources.GetObject("image32.ImageStream");
+            image32.Images.SetKeyName(0, "pump-run.png");
+            image32.Images.SetKeyName(1, "pump-shut.png");
+            // 
+            // HydroPumpRunListCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(imageListBoxControl1);
+            Name = "HydroPumpRunListCtrl";
+            Size = new Size(285, 624);
+            ((ISupportInitialize)imageListBoxControl1).EndInit();
+            ((ISupportInitialize)hydroPumpRunViewModelBindingSource).EndInit();
+            ((ISupportInitialize)image32).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.ImageListBoxControl imageListBoxControl1;
+        private DevExpress.Utils.ImageCollection image32;
+        private BindingSource hydroPumpRunViewModelBindingSource;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.cs
new file mode 100644
index 0000000..53a5790
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.cs
@@ -0,0 +1,64 @@
+锘縰sing DevExpress.XtraEditors;
+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 Yw.WinFrmUI
+{
+    public partial class HydroPumpRunListCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroPumpRunListCtrl()
+        {
+            InitializeComponent();
+        }
+
+        /// <summary>
+        /// 閫夋嫨鏀瑰彉浜嬩欢
+        /// </summary>
+        public event Action<Yw.Model.HydroPumpInfo> SelectedChangedEvent;
+
+        private List<HydroPumpRunViewModel> _allBindingList = null;//缁戝畾鍒楄〃
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo)
+        {
+            SetBindingData(hydroInfo.Pumps);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(List<Yw.Model.HydroPumpInfo> pumps)
+        {
+            _allBindingList = new List<HydroPumpRunViewModel>();
+            pumps?.ForEach(x => _allBindingList.Add(new HydroPumpRunViewModel(x)));
+            this.hydroPumpRunViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroPumpRunViewModelBindingSource.ResetBindings(false);
+        }
+
+        //閫夋嫨鏀瑰彉
+        private void imageListBoxControl1_SelectedValueChanged(object sender, EventArgs e)
+        {
+            if (_allBindingList == null || _allBindingList.Count < 1)
+            {
+                return;
+            }
+            var item = this.imageListBoxControl1.SelectedItem;
+            var pump = item as HydroPumpRunViewModel;
+            if (pump == null)
+            {
+                return;
+            }
+            this.SelectedChangedEvent?.Invoke(pump.Vmo);
+        }
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.resx
new file mode 100644
index 0000000..91d6a51
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunListCtrl.resx
@@ -0,0 +1,153 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="hydroPumpRunViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>122, 17</value>
+  </metadata>
+  <metadata name="image32.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+  <assembly alias="DevExpress.Utils.v23.2" name="DevExpress.Utils.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
+  <data name="image32.ImageStream" type="DevExpress.Utils.ImageCollectionStreamer, DevExpress.Utils.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFpEZXZFeHByZXNzLlV0aWxzLnYyMy4yLCBWZXJzaW9uPTIzLjIu
+        NC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRva2VuPWI4OGQxNzU0ZDcwMGU0OWEMAwAAAFFT
+        eXN0ZW0uRHJhd2luZywgVmVyc2lvbj00LjAuMC4wLCBDdWx0dXJlPW5ldXRyYWwsIFB1YmxpY0tleVRv
+        a2VuPWIwM2Y1ZjdmMTFkNTBhM2EFAQAAAChEZXZFeHByZXNzLlV0aWxzLkltYWdlQ29sbGVjdGlvblN0
+        cmVhbWVyAgAAAAlJbWFnZVNpemUERGF0YQQHE1N5c3RlbS5EcmF3aW5nLlNpemUDAAAAAgIAAAAF/P//
+        /xNTeXN0ZW0uRHJhd2luZy5TaXplAgAAAAV3aWR0aAZoZWlnaHQAAAgIAwAAACAAAAAgAAAACQUAAAAP
+        BQAAAJEDAAACvgEAAIlQTkcNChoKAAAADUlIRFIAAAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8
+        YQUAAAF1SURBVFhH7VXbbcMwDDRgF3AzRUfpKB2lf2myREbpKBmlFUVKJi2Sotx++oADEok8nqiHpxMn
+        RrHeXz4uX/Pj9TY/kcvPKNfr8k5yMazX9Q2L6oKjHDIAwZpI5X35Hu1E2AC0WxPgpNAMjO+bCRnorpxI
+        4QKX2/KpxRZ2DcCea4kaKaUBmtC70TUgV+C3lFJUWJ1wDcjVz8885uxtTnKg5bkGuGv4TcNkTDGRbgHE
+        wTyFVuyNw3+assHvOw0JWG2FQsUExrRmQTuLeMB7jYI0JNAaYIVqrsE0TzI2esFbwc2gtlqLlGKjigUM
+        lJbzAj71rgp0t4B/E3JsfPUhA7zA/mT7Ty12xPtohQ4hFqEEuob5Wa6dabkXzvGK0aKnghfemES8wp5g
+        gtTstF834LNngF/ZXuwhA5BD6Q1wG0ps4PAdMmC86XzlXpzAfxhADXn4vC4JHDGQD6j5FsC1DKy84JAB
+        g6H7vsefDKQuQNFwu0+cqJimX0b9nRk3FaMvAAAAAElFTkSuQmCCywEAAIlQTkcNChoKAAAADUlIRFIA
+        AAAgAAAAIAgGAAAAc3p69AAAAARnQU1BAACxjwv8YQUAAAGCSURBVFhH7VXBEcMwCMsoHaWjdISM0E06
+        SkfpKK3kwz5MADvuN7rT5YIFVohDtgsXzmLf9wf4Aj/C7wLvUm4OSLiB3NQrtsJ5AxSbZMs3eLYTcwYg
+        ZLu9Ao0iLcA99TNmxgYoMkkuRd4B8afVGeYGIOA79xIPlJQDsEYTUTeGBvQTpC2VFBdYjzoRG8CifvqP
+        xMJ3W5ISQOPlpQa066eEqzGvGL8C5txE2oCYNf6QpRgQte9dQh0Qj9rKjYoJXKnxzL5KkQwQ8YlKQQl1
+        QNwa0BvV3IhvKRNjJEa8btgMqtiQkhIDolpsaACsLe82Seh2tQNEo1eg/wlnx/CUAb1Bd7Jxn43a0hEw
+        +2lNHUI9/8tniCvHcnbAusK4p94z2j7rA7CoN65kkWzjuCCAdV0zb78Rz3JkwB1qLiBYMRBONqzpv+nU
+        4Vsx4M50xO2wyv9+BER/G8A9a9jDN57/BIUmcYY8oNEsYGz85BUQrxiIOP7eLZD0jwF2gQNort0XLjRs
+        2w9oZulV76wILQAAAABJRU5ErkJgggs=
+</value>
+  </data>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunViewModel.cs
new file mode 100644
index 0000000..54a60ff
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/01-run/HydroPumpRunViewModel.cs
@@ -0,0 +1,72 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroPumpRunViewModel
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public HydroPumpRunViewModel() { }
+
+        /// <summary>
+        /// 
+        /// </summary>
+        public HydroPumpRunViewModel(Yw.Model.HydroPumpInfo pump)
+        {
+            this.Code = pump.Code;
+            this.Name = pump.Name;
+            if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open)
+            {
+                this.Image = Yw.WinFrmUI.Hydro.Core.Properties.Resources.pump_run_32;
+                this.CurrentHz = $"{Math.Round(pump.RatedHz * pump.SpeedRatio, 1)}hz";
+            }
+            else
+            {
+                this.Image = Yw.WinFrmUI.Hydro.Core.Properties.Resources.pump_shut_32;
+            }
+            this.Description = pump.Description;
+
+            this.Vmo = pump;
+        }
+
+        /// <summary>
+        /// 缂栫爜
+        /// </summary>
+        public string Code { get; set; }
+
+        /// <summary>
+        /// 鍚嶇О
+        /// </summary>
+        public string Name { get; set; }
+
+        /// <summary>
+        /// 鍥剧墖
+        /// </summary>
+        public Image Image { get; set; }
+
+        /// <summary>
+        /// 褰撳墠Hz
+        /// </summary>
+        public string CurrentHz { get; set; }
+
+        /// <summary>
+        /// 璇存槑
+        /// </summary>
+        public string Description { get; set; }
+
+        /// <summary>
+        /// vmo
+        /// </summary>
+        public Yw.Model.HydroPumpInfo Vmo { get; set; }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.Designer.cs
new file mode 100644
index 0000000..8e55480
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.Designer.cs
@@ -0,0 +1,92 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class HydroEnergyStatisticsBarCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            components = new Container();
+            DevExpress.XtraCharts.XYDiagram xyDiagram1 = new DevExpress.XtraCharts.XYDiagram();
+            DevExpress.XtraCharts.Series series1 = new DevExpress.XtraCharts.Series();
+            chartControl1 = new DevExpress.XtraCharts.ChartControl();
+            bindingSource1 = new BindingSource(components);
+            ((ISupportInitialize)chartControl1).BeginInit();
+            ((ISupportInitialize)xyDiagram1).BeginInit();
+            ((ISupportInitialize)series1).BeginInit();
+            ((ISupportInitialize)bindingSource1).BeginInit();
+            SuspendLayout();
+            // 
+            // chartControl1
+            // 
+            xyDiagram1.AxisX.VisibleInPanesSerializable = "-1";
+            xyDiagram1.AxisY.VisibleInPanesSerializable = "-1";
+            xyDiagram1.AxisY.WholeRange.AutoSideMargins = false;
+            xyDiagram1.AxisY.WholeRange.EndSideMargin = 0.94000000000000006D;
+            xyDiagram1.AxisY.WholeRange.StartSideMargin = 0D;
+            chartControl1.Diagram = xyDiagram1;
+            chartControl1.Dock = DockStyle.Fill;
+            chartControl1.Legend.AlignmentHorizontal = DevExpress.XtraCharts.LegendAlignmentHorizontal.Center;
+            chartControl1.Legend.LegendID = -1;
+            chartControl1.Legend.Visibility = DevExpress.Utils.DefaultBoolean.False;
+            chartControl1.Location = new Point(0, 0);
+            chartControl1.Name = "chartControl1";
+            series1.ArgumentDataMember = "EnergyName";
+            series1.DataSource = bindingSource1;
+            series1.LabelsVisibility = DevExpress.Utils.DefaultBoolean.True;
+            series1.Name = "Series 1";
+            series1.SeriesID = 0;
+            series1.ValueDataMembersSerializable = "EnergyValue";
+            chartControl1.SeriesSerializable = new DevExpress.XtraCharts.Series[]
+    {
+    series1
+    };
+            chartControl1.Size = new Size(1005, 485);
+            chartControl1.TabIndex = 0;
+            // 
+            // bindingSource1
+            // 
+            bindingSource1.DataSource = typeof(HydroEnergyStatisticsItemViewModel);
+            // 
+            // HydroEnergyStatisticsBarCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(chartControl1);
+            Name = "HydroEnergyStatisticsBarCtrl";
+            Size = new Size(1005, 485);
+            ((ISupportInitialize)xyDiagram1).EndInit();
+            ((ISupportInitialize)series1).EndInit();
+            ((ISupportInitialize)chartControl1).EndInit();
+            ((ISupportInitialize)bindingSource1).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraCharts.ChartControl chartControl1;
+        private BindingSource bindingSource1;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.cs
new file mode 100644
index 0000000..1cf26ba
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.cs
@@ -0,0 +1,42 @@
+锘縰sing DevExpress.Xpo.Helpers;
+using DevExpress.XtraEditors;
+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 Yw.WinFrmUI
+{
+    public partial class HydroEnergyStatisticsBarCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroEnergyStatisticsBarCtrl()
+        {
+            InitializeComponent();
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(List<Yw.EPAnet.EnergyPoint> allEnergyList)
+        {
+            var allStatisticsList = allEnergyList.GetStatisticsList();
+            SetBindingData(allStatisticsList);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(List<HydroEnergyStatisticsItemViewModel> allStatisticsList)
+        {
+            this.bindingSource1.DataSource = allStatisticsList;
+            this.bindingSource1.ResetBindings(false);
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.resx
new file mode 100644
index 0000000..e3e911f
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsBarCtrl.resx
@@ -0,0 +1,123 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <metadata name="bindingSource1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>17, 17</value>
+  </metadata>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsHelper.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsHelper.cs
new file mode 100644
index 0000000..b2f23a2
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsHelper.cs
@@ -0,0 +1,68 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public static class HydroEnergyStatisticsHelper
+    {
+        /// <summary>
+        /// 鑾峰彇缁熻鍒楄〃
+        /// </summary>
+        public static List<HydroEnergyStatisticsItemViewModel> GetStatisticsList(this List<Yw.EPAnet.EnergyPoint> allEnergyList)
+        {
+            var allStatisticsList = new List<HydroEnergyStatisticsItemViewModel>();
+            if (allEnergyList != null && allEnergyList.Count > 0)
+            {
+                var allEnergyGroupList = allEnergyList.GroupBy(x => x.EnergyType).ToList();
+                foreach (var energyGroup in allEnergyGroupList)
+                {
+                    var item = new HydroEnergyStatisticsItemViewModel();
+                    switch (energyGroup.Key)
+                    {
+                        case EPAnet.eEnergyType.Input:
+                            {
+                                item.EnergyType = eEnergyType.Input;
+                                item.EnergyName = eEnergyType.Input.GetDisplayText();
+                            }
+                            break;
+                        case EPAnet.eEnergyType.Output:
+                            {
+                                item.EnergyType = eEnergyType.Output;
+                                item.EnergyName = eEnergyType.Output.GetDisplayText();
+                            }
+                            break;
+                        case EPAnet.eEnergyType.Promote:
+                            {
+                                item.EnergyType = eEnergyType.Promote;
+                                item.EnergyName = eEnergyType.Promote.GetDisplayText();
+                            }
+                            break;
+                        case EPAnet.eEnergyType.MinorLoss:
+                            {
+                                item.EnergyType = eEnergyType.MinorLoss;
+                                item.EnergyName = eEnergyType.MinorLoss.GetDisplayText();
+                            }
+                            break;
+                        case EPAnet.eEnergyType.FrictionalLoss:
+                            {
+                                item.EnergyType = eEnergyType.FrictionalLoss;
+                                item.EnergyName = eEnergyType.FrictionalLoss.GetDisplayText();
+                            }
+                            break;
+                        default: break;
+                    }
+                    item.EnergyValue = Math.Round(energyGroup.Sum(x => x.EnergyPower), 1);
+                    allStatisticsList.Add(item);
+                }
+            }
+            return allStatisticsList.OrderBy(x => x.EnergyType).ToList();
+        }
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsItemViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsItemViewModel.cs
new file mode 100644
index 0000000..24c1c7d
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/HydroEnergyStatisticsItemViewModel.cs
@@ -0,0 +1,23 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HydroEnergyStatisticsItemViewModel
+    {
+        /// <summary>
+        /// 鑳介噺绫诲瀷
+        /// </summary>
+        public eEnergyType EnergyType { get; set; }
+
+        /// <summary>
+        /// 鑳介噺鍚嶇О
+        /// </summary>
+        public string EnergyName { get; set; }
+
+        /// <summary>
+        /// 鑳介噺鍊�
+        /// </summary>
+        public double EnergyValue { get; set; }
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/eEnergyType.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/eEnergyType.cs
new file mode 100644
index 0000000..2561f39
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/01-statistics/eEnergyType.cs
@@ -0,0 +1,39 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 鑳介噺绫诲瀷
+    /// </summary>
+    public enum eEnergyType
+    {
+        /// <summary>
+        /// 閲嶅姏鍔胯兘杈撳叆锛氭按姹犮�佹按搴�
+        /// </summary>
+        [Display(Name = "杈撳叆鑳介噺")]
+        Input,
+
+        /// <summary>
+        /// 姘存车鎻愬崌鑳介噺锛堣緭鍏ョ郴缁熺殑鏈夋晥鍔熺巼锛夛紝涓嶈�冭檻鏁堢巼
+        /// </summary>
+        [Display(Name = "鎻愬崌鑳介噺")]
+        Promote,
+
+        /// <summary>
+        /// 灞�閮ㄦ懇鎿﹂樆鍔涘甫鏉ョ殑鑳介噺鎹熷け锛氶榾闂ㄣ�佽繛鎺ヨ妭鐐广�佺閬撱�佽澶囷紙鎹㈢儹鍣ㄣ�佺┖鍘嬫満锛�
+        /// </summary>
+        [Display(Name = "灞�閮ㄦ崯澶�")]
+        MinorLoss,
+
+        /// <summary>
+        /// 娌跨▼鎽╂摝闃诲姏甯︽潵鐨勮兘閲忔崯澶憋細绠¢亾
+        /// </summary>
+        [Display(Name = "娌跨▼鎹熷け")]
+        FrictionalLoss,
+
+        /// <summary>
+        /// 閲嶅姏鍔胯兘杈撳嚭锛氭按姹犮�佹按搴撱�佹墿鏁e櫒
+        /// </summary>
+        [Display(Name = "杈撳嚭鑳介噺")]
+        Output,
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.Designer.cs
new file mode 100644
index 0000000..5fdc204
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.Designer.cs
@@ -0,0 +1,177 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class HydroEnergyTotalViewCtrl
+    {
+        /// <summary> 
+        /// Required designer variable.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary> 
+        /// Clean up any resources being used.
+        /// </summary>
+        /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Component Designer generated code
+
+        /// <summary> 
+        /// Required method for Designer support - do not modify 
+        /// the contents of this method with the code editor.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            txtE = new DevExpress.XtraEditors.TextEdit();
+            txtP = new DevExpress.XtraEditors.TextEdit();
+            txtQ = new DevExpress.XtraEditors.TextEdit();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)txtE.Properties).BeginInit();
+            ((ISupportInitialize)txtP.Properties).BeginInit();
+            ((ISupportInitialize)txtQ.Properties).BeginInit();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(txtE);
+            layoutControl1.Controls.Add(txtP);
+            layoutControl1.Controls.Add(txtQ);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(238, 78);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // txtE
+            // 
+            txtE.Location = new Point(54, 50);
+            txtE.Name = "txtE";
+            txtE.Properties.ReadOnly = true;
+            txtE.Properties.UseReadOnlyAppearance = false;
+            txtE.Size = new Size(182, 20);
+            txtE.StyleController = layoutControl1;
+            txtE.TabIndex = 6;
+            // 
+            // txtP
+            // 
+            txtP.Location = new Point(54, 26);
+            txtP.Name = "txtP";
+            txtP.Properties.ReadOnly = true;
+            txtP.Properties.UseReadOnlyAppearance = false;
+            txtP.Size = new Size(182, 20);
+            txtP.StyleController = layoutControl1;
+            txtP.TabIndex = 5;
+            // 
+            // txtQ
+            // 
+            txtQ.Location = new Point(54, 2);
+            txtQ.Name = "txtQ";
+            txtQ.Properties.ReadOnly = true;
+            txtQ.Properties.UseReadOnlyAppearance = false;
+            txtQ.Size = new Size(182, 20);
+            txtQ.StyleController = layoutControl1;
+            txtQ.TabIndex = 4;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, emptySpaceItem1, layoutControlItem2, layoutControlItem3 });
+            Root.Name = "Root";
+            Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            Root.Size = new Size(238, 78);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem1.Control = txtQ;
+            layoutControlItem1.Location = new Point(0, 0);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(238, 24);
+            layoutControlItem1.Text = "鎬绘祦閲�:";
+            layoutControlItem1.TextSize = new Size(40, 14);
+            // 
+            // emptySpaceItem1
+            // 
+            emptySpaceItem1.AllowHotTrack = false;
+            emptySpaceItem1.Location = new Point(0, 72);
+            emptySpaceItem1.MinSize = new Size(1, 1);
+            emptySpaceItem1.Name = "emptySpaceItem1";
+            emptySpaceItem1.Size = new Size(238, 6);
+            emptySpaceItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            emptySpaceItem1.TextSize = new Size(0, 0);
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem2.Control = txtP;
+            layoutControlItem2.Location = new Point(0, 24);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(238, 24);
+            layoutControlItem2.Text = "鎬诲姛鐜�:";
+            layoutControlItem2.TextSize = new Size(40, 14);
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.ContentVertAlignment = DevExpress.Utils.VertAlignment.Center;
+            layoutControlItem3.Control = txtE;
+            layoutControlItem3.Location = new Point(0, 48);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(238, 24);
+            layoutControlItem3.Text = "鎬绘晥鐜�:";
+            layoutControlItem3.TextSize = new Size(40, 14);
+            // 
+            // HydroEnergyTotalViewCtrl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(layoutControl1);
+            Name = "HydroEnergyTotalViewCtrl";
+            Size = new Size(238, 78);
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)txtE.Properties).EndInit();
+            ((ISupportInitialize)txtP.Properties).EndInit();
+            ((ISupportInitialize)txtQ.Properties).EndInit();
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.TextEdit txtP;
+        private DevExpress.XtraEditors.TextEdit txtQ;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraEditors.TextEdit txtE;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.cs
new file mode 100644
index 0000000..5ac3545
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.cs
@@ -0,0 +1,118 @@
+锘縰sing DevExpress.Office.Utils;
+using DevExpress.Xpo.Helpers;
+using DevExpress.XtraEditors;
+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;
+using Yw.EPAnet;
+using Yw.WinFrmUI.Q3d;
+
+namespace Yw.WinFrmUI
+{
+    public partial class HydroEnergyTotalViewCtrl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public HydroEnergyTotalViewCtrl()
+        {
+            InitializeComponent();
+            this.layoutControl1.SetupLayoutControl();
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, HydroCalcuResult calcuResult)
+        {
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            if (calcuResult == null)
+            {
+                return;
+            }
+            if (!calcuResult.Succeed)
+            {
+                return;
+            }
+
+            var allCalcuResultVisualDict = calcuResult.GetVisualDict();
+            SetBindingData(hydroInfo, allCalcuResultVisualDict);
+        }
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.HydroModelInfo hydroInfo, Dictionary<string, HydroCalcuVisualResult> allCalcuResultVisualDict)
+        {
+            if (hydroInfo == null)
+            {
+                return;
+            }
+            if (allCalcuResultVisualDict == null || allCalcuResultVisualDict.Count < 1)
+            {
+                return;
+            }
+
+            double? totalQ = null;
+            double? totalP = null;
+            var allEfficiList = new List<double>();
+            if (hydroInfo.Pumps != null && hydroInfo.Pumps.Count > 0)
+            {
+                foreach (var pump in hydroInfo.Pumps)
+                {
+                    if (!allCalcuResultVisualDict.ContainsKey(pump.Code))
+                    {
+                        continue;
+                    }
+                    var calcuResult = allCalcuResultVisualDict[pump.Code] as HydroCalcuPumpResult;
+                    if (calcuResult == null)
+                    {
+                        continue;
+                    }
+                    if (pump.LinkStatus == Yw.Hydro.PumpStatus.Open)
+                    {
+                        if (calcuResult.CalcuQ.HasValue)
+                        {
+                            if (!totalQ.HasValue)
+                            {
+                                totalQ = 0;
+                            }
+                            totalQ += calcuResult.CalcuQ.Value;
+                        }
+                        if (calcuResult.CalcuP.HasValue)
+                        {
+                            if (!totalP.HasValue)
+                            {
+                                totalP = 0;
+                            }
+                            totalP += calcuResult.CalcuP.Value;
+                        }
+                        if (calcuResult.CalcuE.HasValue)
+                        {
+                            allEfficiList.Add(calcuResult.CalcuE.Value);
+                        }
+                    }
+                }
+            }
+            if (totalQ.HasValue)
+            {
+                this.txtQ.EditValue = $"{Math.Round(totalQ.Value, 1)}m鲁/h";
+            }
+            if (totalP.HasValue)
+            {
+                this.txtP.EditValue = $"{Math.Round(totalP.Value, 1)}kW";
+            }
+            if (allEfficiList.Count > 0)
+            {
+                this.txtE.EditValue = $"{Math.Round(allEfficiList.Average(), 1)}%";
+            }
+        }
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.resx
new file mode 100644
index 0000000..af32865
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/20-energy/02-total/HydroEnergyTotalViewCtrl.resx
@@ -0,0 +1,120 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!--
+    Microsoft ResX Schema 
+
+    Version 2.0
+
+    The primary goals of this format is to allow a simple XML format
+    that is mostly human readable. The generation and parsing of the
+    various data types are done through the TypeConverter classes
+    associated with the data types.
+
+    Example:
+
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+
+    There are any number of "resheader" rows that contain simple
+    name/value pairs.
+
+    Each data row contains a name, and value. The row also contains a
+    type or mimetype. Type corresponds to a .NET class that support
+    text/value conversion through the TypeConverter architecture.
+    Classes that don't support this are serialized and stored with the
+    mimetype set.
+
+    The mimetype is used for serialized objects, and tells the
+    ResXResourceReader how to depersist the object. This is currently not
+    extensible. For a given mimetype the value must be set accordingly:
+
+    Note - application/x-microsoft.net.object.binary.base64 is the format
+    that the ResXResourceWriter will generate, however the reader can
+    read any of the formats listed below.
+
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroEnergyStatisticsItemViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroEnergyStatisticsItemViewModel.datasource
new file mode 100644
index 0000000..5a1a33c
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroEnergyStatisticsItemViewModel.datasource
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="HydroEnergyStatisticsItemViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TypeInfo>Yw.WinFrmUI.HydroEnergyStatisticsItemViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpRunViewModel.datasource b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpRunViewModel.datasource
new file mode 100644
index 0000000..19ac6cb
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/DataSources/Yw.WinFrmUI.HydroPumpRunViewModel.datasource
@@ -0,0 +1,10 @@
+锘�<?xml version="1.0" encoding="utf-8"?>
+<!--
+    This file is automatically generated by Visual Studio. It is 
+    used to store generic object data source configuration information.  
+    Renaming the file extension or editing the content of this file may   
+    cause the file to be unrecognizable by the program.
+-->
+<GenericObjectDataSource DisplayName="HydroPumpRunViewModel" Version="1.0" xmlns="urn:schemas-microsoft-com:xml-msdatasource">
+  <TypeInfo>Yw.WinFrmUI.HydroPumpRunViewModel, Yw.WinFrmUI.Hydro.Core, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null</TypeInfo>
+</GenericObjectDataSource>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.Designer.cs
index dad678f..4cc783a 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.Designer.cs
@@ -83,6 +83,26 @@
         /// <summary>
         ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
         /// </summary>
+        internal static System.Drawing.Bitmap pump_run_32 {
+            get {
+                object obj = ResourceManager.GetObject("pump_run_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Bitmap pump_shut_32 {
+            get {
+                object obj = ResourceManager.GetObject("pump_shut_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
         internal static System.Drawing.Bitmap succeed_128 {
             get {
                 object obj = ResourceManager.GetObject("succeed_128", resourceCulture);
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.resx
index 8822bf2..f6cfae6 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Properties/Resources.resx
@@ -124,6 +124,12 @@
   <data name="failed_64" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\failed_64.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
+  <data name="pump_run_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\pump_run_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="pump_shut_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\pump_shut_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
   <data name="succeed_128" type="System.Resources.ResXFileRef, System.Windows.Forms">
     <value>..\Resources\succeed_128.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
   </data>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Resources/pump_run_32.png b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Resources/pump_run_32.png
new file mode 100644
index 0000000..ffb02c0
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Resources/pump_run_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Resources/pump_shut_32.png b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Resources/pump_shut_32.png
new file mode 100644
index 0000000..aab3e02
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Resources/pump_shut_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
index 1d1841b..df21923 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user
@@ -61,6 +61,15 @@
     <Compile Update="18-loss\02-scale\HydroSingleLossScaleCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="19-pump\01-run\HydroPumpRunListCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="20-energy\01-statistics\HydroEnergyStatisticsBarCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
+    <Compile Update="20-energy\02-total\HydroEnergyTotalViewCtrl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Update="99-view\01-q3d\HydroQ3dViewPage.cs">
       <SubType>UserControl</SubType>
     </Compile>

--
Gitblit v1.9.3