From bfd1b73be85fd66ee37031eadcd4d09e7dafb52f Mon Sep 17 00:00:00 2001
From: lixiaojun <1287241240@qq.com>
Date: 星期四, 13 二月 2025 18:51:40 +0800
Subject: [PATCH] 开始增加构件分组功能

---
 WinFrmUI/Yw.WinFrmUI.Core/Resources/error_32.png                                                             |    0 
 WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipFormHelper.cs                                          |   48 +++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.cs                       |   47 ++
 Dto/HStation.Dto.PhartRelation.Core/HStation.Dto.PhartRelation.Core.csproj                                   |    2 
 Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj                                                         |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.resx                   |    0 
 Service/PBS.Service.WE.Core/PBS.Service.WE.Core.csproj                                                       |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.Designer.cs            |    0 
 WinFrmUI/Yw.WinFrmUI.Core/Resources/timeout_32.png                                                           |    0 
 Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj                                                     |    2 
 WinFrmUI/HStation.WinFrmUI.Dict.Core/HStation.WinFrmUI.Dict.Core.csproj                                      |    2 
 WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs |    5 
 Service/HStation.Service.Revit.Core/HStation.Service.Revit.Core.csproj                                       |    2 
 WinFrmUI/Yw.WinFrmUI.Core/Resources/confirm_32.png                                                           |    0 
 Desktop/HStation.Desktop.Xhs.Core/HStation.Desktop.Xhs.Core.csproj                                           |    2 
 Service/HStation.Service.PhartRelation.Core/HStation.Service.PhartRelation.Core.csproj                       |    4 
 Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj                                                 |    4 
 WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.resx                                              |  123 ++++++++
 Service/HStation.Service.TransferFile.Core/HStation.Service.TransferFile.Core.csproj                         |    8 
 WebApi/HStation.WebApi.TransferFile.Core/HStation.WebApi.TransferFile.Core.csproj                            |    2 
 WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.Designer.cs                                                   |   60 ++++
 Component/Yw.DiagramFile.SDK.Core/Yw.DiagramFile.SDK.Core.csproj                                             |    2 
 WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.cs                                                |   78 +++++
 Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user                           |    2 
 WinFrmUI/Yw.WinFrmUI.Map.Core/Yw.WinFrmUI.Map.Core.csproj                                                    |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.cs             |    0 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.Designer.cs              |   83 +++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj.user                                           |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.resx           |    0 
 BLL/Yw.BLL.Division.Core/Yw.BLL.Division.Core.csproj                                                         |    2 
 Desktop/HStation.Desktop.Xhs.Core/Login/SmsLoginCtrl.cs                                                      |    7 
 WinFrmUI/Yw.WinFrmUI.Core/Resources/warning_32.png                                                           |    0 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.cs                     |    0 
 WinFrmUI/HStation.WinFrmUI.Basic.Core/HStation.WinFrmUI.Basic.Core.csproj                                    |    2 
 WinFrmUI/Yw.WinFrmUI.Core/Resources/succeed_32.png                                                           |    0 
 BLL/HStation.BLL.Core/HStation.BLL.Core.csproj                                                               |    2 
 WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionAlertHelper.cs                                            |   58 ++++
 Service/Yw.Service.Division.Core/Yw.Service.Division.Core.csproj                                             |    8 
 WebApi/HStation.WebApi.Xhs.Core/HStation.WebApi.Xhs.Core.csproj                                              |    2 
 WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj                                            |    2 
 WinFrmUI/Hstation.WinFrmUI.Core/Hstation.WinFrmUI.Core.csproj                                                |    2 
 Service/PBS.Service.Core/PBS.Service.Core.csproj                                                             |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListItemExtendViewModel.cs                |    7 
 WinFrmUI/HStation.WinFrmUI.Auth.Core/HStation.WinFrmUI.Auth.Core.csproj                                      |    2 
 WinFrmUI/Yw.WinFrmUI.Core/09-common/13-status/HttpStatusImageHelper.cs                                       |   39 ++
 Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj                                                               |    2 
 Application/HStation.Application.Core/HStation.Application.Core.csproj                                       |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs                               |   21 +
 HStation.Xhs.Core.sln                                                                                        |    5 
 Desktop/HStation.Desktop.Xhs.Core/Program.cs                                                                 |   22 +
 Service/HStation.Service.Assets.Core/HStation.Service.Assets.Core.csproj                                     |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj                                                |   10 
 WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.resx                                                          |   19 +
 WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.Designer.cs                                       |   80 +++++
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListItemExtendViewModel.cs        |    0 
 Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj                                                                     |    2 
 WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj                                                            |    3 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.Designer.cs    |    0 
 Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj                                                               |    2 
 Service/HStation.Service.Xhs.Core/HStation.Service.Xhs.Core.csproj                                           |    2 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs                                   |    2 
 WinFrmUI/Yw.WinFrmUI.Unit.Core/Yw.WinFrmUI.Unit.Core.csproj                                                  |    2 
 WinFrmUI/Yw.WinFrmUI.Core/Resources/prompt_32.png                                                            |    0 
 WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListItemStateViewModel.cs                  |    7 
 64 files changed, 736 insertions(+), 66 deletions(-)

diff --git a/Application/HStation.Application.Core/HStation.Application.Core.csproj b/Application/HStation.Application.Core/HStation.Application.Core.csproj
index 889b134..2ac817f 100644
--- a/Application/HStation.Application.Core/HStation.Application.Core.csproj
+++ b/Application/HStation.Application.Core/HStation.Application.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Application.Core" Version="3.1.5" />
+    <PackageReference Include="Yw.Application.Core" Version="3.1.7" />
   </ItemGroup>
 
 </Project>
diff --git a/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj b/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj
index 520f384..4511760 100644
--- a/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj
+++ b/BLL/HStation.BLL.Core/HStation.BLL.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.BLL.Core" Version="3.1.7" />
+    <PackageReference Include="Yw.BLL.Core" Version="3.1.9" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/BLL/Yw.BLL.Division.Core/Yw.BLL.Division.Core.csproj b/BLL/Yw.BLL.Division.Core/Yw.BLL.Division.Core.csproj
index d4b3acd..fa6d8a9 100644
--- a/BLL/Yw.BLL.Division.Core/Yw.BLL.Division.Core.csproj
+++ b/BLL/Yw.BLL.Division.Core/Yw.BLL.Division.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.BLL.Core" Version="3.1.0" />
+    <PackageReference Include="Yw.BLL.Core" Version="3.1.9" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj b/Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj
index 6daaac4..515633a 100644
--- a/Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj
+++ b/Component/Yw.BIMFace.SDK.Core/Yw.BIMFace.SDK.Core.csproj
@@ -9,7 +9,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.FlurlHttp.Core" Version="3.0.0" />
+    <PackageReference Include="Yw.FlurlHttp.Core" Version="3.0.2" />
     <PackageReference Include="Yw.Newtonsoft.Core" Version="3.0.0" />
   </ItemGroup>
 
diff --git a/Component/Yw.DiagramFile.SDK.Core/Yw.DiagramFile.SDK.Core.csproj b/Component/Yw.DiagramFile.SDK.Core/Yw.DiagramFile.SDK.Core.csproj
index e09a774..db06133 100644
--- a/Component/Yw.DiagramFile.SDK.Core/Yw.DiagramFile.SDK.Core.csproj
+++ b/Component/Yw.DiagramFile.SDK.Core/Yw.DiagramFile.SDK.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Pump.Core" Version="3.1.7" />
+    <PackageReference Include="Yw.Pump.Core" Version="3.2.4" />
     <PackageReference Include="Yw.SkiaSharp.Core" Version="3.0.0" />
   </ItemGroup>
 
diff --git a/Desktop/HStation.Desktop.Xhs.Core/HStation.Desktop.Xhs.Core.csproj b/Desktop/HStation.Desktop.Xhs.Core/HStation.Desktop.Xhs.Core.csproj
index 9b2648c..aa22879 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/HStation.Desktop.Xhs.Core.csproj
+++ b/Desktop/HStation.Desktop.Xhs.Core/HStation.Desktop.Xhs.Core.csproj
@@ -16,7 +16,7 @@
 
   <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
-    <PackageReference Include="Yw.BLL.Auth.Core" Version="3.6.9" />
+    <PackageReference Include="Yw.BLL.Auth.Core" Version="3.7.5" />
     <PackageReference Include="Yw.Update.Core" Version="1.0.2" />
   </ItemGroup>
 
diff --git a/Desktop/HStation.Desktop.Xhs.Core/Login/SmsLoginCtrl.cs b/Desktop/HStation.Desktop.Xhs.Core/Login/SmsLoginCtrl.cs
index 3cf2618..561fea6 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/Login/SmsLoginCtrl.cs
+++ b/Desktop/HStation.Desktop.Xhs.Core/Login/SmsLoginCtrl.cs
@@ -63,10 +63,11 @@
                 this.dxErrorProvider1.SetError(this.txtMobileNumber, "璇疯緭鍏ユ纭墜鏈哄彿鐮�");
                 return;
             }
-            this.labSendCode.Enabled = false;
+
             var bol = await BLLFactory<Yw.BLL.ToolSms>.Instance.SendCode(_template, mobile, _software);
             if (bol)
             {
+                this.labSendCode.Enabled = false;
                 StartCountdown();
             }
             else
@@ -74,6 +75,8 @@
                 this.dxErrorProvider1.SetError(this.txtMobileNumber, "鍙戦�佸け璐�");
                 this.labSendCode.Enabled = true;
             }
+
+
         }
 
         private void StartCountdown()
@@ -124,5 +127,7 @@
             var result = await BLLFactory<Yw.BLL.UserLogin>.Instance.LoginSoftwareStandardBySmsAccount(_template, mobile, _software, validCode, null);
             this.LoginEndEvet?.Invoke(result);
         }
+
+
     }
 }
\ No newline at end of file
diff --git a/Desktop/HStation.Desktop.Xhs.Core/Program.cs b/Desktop/HStation.Desktop.Xhs.Core/Program.cs
index bfb60de..1b11de6 100644
--- a/Desktop/HStation.Desktop.Xhs.Core/Program.cs
+++ b/Desktop/HStation.Desktop.Xhs.Core/Program.cs
@@ -36,6 +36,8 @@
                 Application.ThreadException += Application_ThreadException;
                 //处理非UI线程异常
                 AppDomain.CurrentDomain.UnhandledException += CurrentDomain_UnhandledException;
+                //处理未被观察到的异常
+                TaskScheduler.UnobservedTaskException += TaskScheduler_UnobservedTaskException;
 
                 Application.EnableVisualStyles();
                 Application.SetCompatibleTextRenderingDefault(false);
@@ -103,6 +105,8 @@
             }
         }
 
+
+
         ///<summary>
         ///  这就是我们要在发生未处理异常时处理的方法,我这是写出错详细信息到文本,如出错后弹出一个漂亮的出错提示窗体,给大家做个参考
         ///  做法很多,可以是把出错详细信息记录到文本、数据库,发送出错邮件到作者信箱或出错后重新初始化等等
@@ -113,12 +117,15 @@
         private static void Application_ThreadException(object sender, System.Threading.ThreadExceptionEventArgs e)
         {
             var ex = e.Exception;
-            if (ex is Yw.Vmo.VException internalEx)
+            if (ex is Yw.Vmo.VException vmoEx)
+            {
+                Yw.LogHelper.Error("系统出现内部异常,ERROR:249", vmoEx);
+                VmoExceptionTipFormHelper.Show(vmoEx);
+            }
+            else if (ex is Yw.Dto.InternalException internalEx)
             {
                 Yw.LogHelper.Error("系统出现内部异常,ERROR:249", internalEx);
-                var dlg = new Yw.WinFrmUI.VmoExceptionInfoDlg();
-                dlg.SetBindingData(internalEx);
-                dlg.ShowDialog();
+
             }
             else
             {
@@ -143,5 +150,12 @@
                 MessageBoxHelper.ShowError($"系统出现未知异常,请重启系统!\r\n{ex.Message}");
             }
         }
+
+        //
+        private static void TaskScheduler_UnobservedTaskException(object sender, UnobservedTaskExceptionEventArgs e)
+        {
+            throw new NotImplementedException();
+        }
+
     }
 }
\ No newline at end of file
diff --git a/Dto/HStation.Dto.PhartRelation.Core/HStation.Dto.PhartRelation.Core.csproj b/Dto/HStation.Dto.PhartRelation.Core/HStation.Dto.PhartRelation.Core.csproj
index 5d70de2..7dd2cd1 100644
--- a/Dto/HStation.Dto.PhartRelation.Core/HStation.Dto.PhartRelation.Core.csproj
+++ b/Dto/HStation.Dto.PhartRelation.Core/HStation.Dto.PhartRelation.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Dto.Phart.Core" Version="3.2.7" />
+    <PackageReference Include="Yw.Dto.Phart.Core" Version="3.3.1" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj b/Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj
index 6ee1589..fd9fdb2 100644
--- a/Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj
+++ b/Dto/Hstation.Dto.Core/Hstation.Dto.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Dto.Core" Version="3.1.3" />
+    <PackageReference Include="Yw.Dto.Core" Version="3.1.6" />
   </ItemGroup>
 
 </Project>
diff --git a/Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj b/Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj
index 855a0b6..629a084 100644
--- a/Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj
+++ b/Entry/HStation.Entry.Xhs.Core/HStation.Entry.Xhs.Core.csproj
@@ -17,10 +17,10 @@
 	</ProjectExtensions>
 
 	<ItemGroup>
-	  <PackageReference Include="Yw.Application.Basic.Core" Version="3.3.2" />
+	  <PackageReference Include="Yw.Application.Basic.Core" Version="3.3.3" />
 	  <PackageReference Include="Yw.Application.Bimface.Core" Version="3.2.0" />
 	  <PackageReference Include="Yw.Application.Dict.Core" Version="3.1.3" />
-	  <PackageReference Include="Yw.Application.Hydro.Core" Version="3.8.2" />
+	  <PackageReference Include="Yw.Application.Hydro.Core" Version="3.8.6" />
 	  <PackageReference Include="Yw.Application.Map.Core" Version="3.2.2" />
 	  <PackageReference Include="Yw.Application.Phart.Core" Version="3.3.1" />
 	  <PackageReference Include="Yw.Application.Unit.Core" Version="3.1.8" />
diff --git a/Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user b/Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user
index 0272daf..85d1b6f 100644
--- a/Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user
+++ b/Entry/HStation.Entry.Xhs.Core/Properties/PublishProfiles/FolderProfile.pubxml.user
@@ -5,7 +5,7 @@
 <Project>
   <PropertyGroup>
     <_PublishTargetUrl>D:\WorkData\git\HStation\XHS\Entry\HStation.Entry.Xhs.Core\bin\Release\net6.0\publish\</_PublishTargetUrl>
-    <History>True|2025-02-08T09:31:17.3841999Z;True|2025-02-08T17:27:02.1630402+08:00;True|2025-01-25T12:24:10.7702918+08:00;True|2025-01-24T09:10:22.0248945+08:00;True|2025-01-23T10:54:42.2796686+08:00;True|2025-01-22T07:53:29.9931150+08:00;True|2025-01-21T11:37:36.9296374+08:00;True|2025-01-20T10:42:21.8992153+08:00;True|2025-01-20T10:41:30.8562468+08:00;True|2025-01-20T10:36:54.9849821+08:00;True|2025-01-20T10:31:16.0442319+08:00;True|2025-01-13T15:07:40.9182715+08:00;True|2025-01-13T12:08:58.0115763+08:00;True|2025-01-13T12:08:44.3187386+08:00;True|2025-01-13T12:07:41.4659157+08:00;True|2025-01-13T11:53:47.1828627+08:00;True|2025-01-13T11:38:53.6150404+08:00;True|2025-01-13T11:37:14.9075336+08:00;True|2025-01-13T11:35:23.3939940+08:00;True|2025-01-13T11:33:41.6199459+08:00;True|2025-01-13T11:32:15.2734783+08:00;True|2025-01-13T11:30:39.9296756+08:00;True|2025-01-13T11:25:02.3605923+08:00;True|2025-01-13T11:21:03.0110309+08:00;True|2025-01-13T11:17:46.3662069+08:00;True|2025-01-08T09:44:09.5132234+08:00;True|2024-09-03T11:22:43.3813050+08:00;True|2024-09-03T11:06:18.0799295+08:00;True|2024-09-03T10:52:25.3198740+08:00;True|2024-09-02T09:16:17.5197059+08:00;False|2024-09-02T09:08:02.4504522+08:00;True|2024-06-20T12:16:07.3854116+08:00;True|2024-06-18T09:13:21.8960491+08:00;True|2024-06-12T18:55:43.2697624+08:00;True|2024-06-12T18:54:42.2191664+08:00;True|2024-06-12T18:37:39.2735086+08:00;True|2024-06-12T18:32:59.2340941+08:00;True|2024-06-12T18:18:57.9018714+08:00;True|2024-06-12T18:13:13.4471521+08:00;True|2024-06-12T18:11:38.4803257+08:00;True|2024-06-12T18:10:00.3753638+08:00;True|2024-06-12T18:03:08.9521607+08:00;True|2024-06-12T17:59:46.2755740+08:00;True|2024-06-12T17:58:01.8017051+08:00;True|2024-06-12T17:56:20.6946001+08:00;True|2024-06-12T17:32:53.8291604+08:00;True|2024-06-12T17:32:38.6492118+08:00;False|2024-06-12T17:32:17.0260105+08:00;True|2024-06-12T17:08:59.9367775+08:00;True|2024-06-12T16:32:42.3320305+08:00;True|2024-06-07T13:34:17.3014803+08:00;True|2024-06-07T13:20:33.5124438+08:00;True|2024-06-07T10:24:47.0351087+08:00;True|2024-06-05T17:04:55.4017239+08:00;True|2024-06-05T16:05:35.1432805+08:00;True|2024-06-05T15:18:06.1797165+08:00;True|2024-06-05T13:53:59.9366676+08:00;True|2024-06-05T13:43:45.7009774+08:00;True|2024-06-05T13:38:18.1415782+08:00;True|2024-06-05T12:14:05.4745826+08:00;True|2024-06-05T12:10:02.8443283+08:00;True|2024-06-02T18:41:28.5233205+08:00;True|2024-06-02T18:21:27.5679625+08:00;True|2024-06-02T17:34:02.6234679+08:00;True|2024-06-02T16:58:23.9422671+08:00;True|2024-06-02T16:16:43.6949096+08:00;True|2024-06-02T14:44:06.8963915+08:00;True|2024-06-02T11:10:51.5587482+08:00;True|2024-06-01T11:30:39.5033584+08:00;True|2024-05-30T16:29:38.0730664+08:00;True|2024-05-30T15:16:14.5429969+08:00;True|2024-05-29T17:31:27.5349115+08:00;True|2024-05-29T16:49:44.3085849+08:00;True|2024-05-29T10:46:15.3071701+08:00;True|2024-05-28T16:21:22.2987178+08:00;True|2024-05-28T11:55:02.0680294+08:00;True|2024-05-24T09:27:50.0479340+08:00;True|2024-05-23T14:16:32.3824342+08:00;True|2024-05-23T10:51:43.4383910+08:00;True|2024-05-22T11:19:10.1709647+08:00;True|2024-05-22T11:12:47.8835237+08:00;True|2024-05-22T10:43:34.7720709+08:00;True|2024-05-21T17:25:46.9831973+08:00;True|2024-05-21T12:11:55.2774332+08:00;True|2024-05-13T10:32:18.9951394+08:00;True|2024-05-09T09:53:09.1673089+08:00;True|2024-05-08T17:18:58.3017566+08:00;True|2024-05-08T11:15:08.3734126+08:00;True|2024-05-07T10:59:04.2016283+08:00;True|2024-05-07T10:58:56.6254107+08:00;True|2024-05-07T10:56:03.7274034+08:00;True|2024-05-07T10:55:53.5496684+08:00;True|2024-05-07T10:55:41.1246352+08:00;True|2024-05-07T09:57:18.3908307+08:00;True|2024-05-06T18:17:15.0427456+08:00;True|2024-05-06T17:38:00.0855585+08:00;True|2024-05-06T14:04:15.4665470+08:00;True|2024-05-06T09:38:06.9447096+08:00;False|2024-05-06T09:37:21.4257032+08:00;True|2024-04-30T10:27:11.6268274+08:00;</History>
+    <History>True|2025-02-13T03:00:50.4202223Z;True|2025-02-08T17:31:17.3841999+08:00;True|2025-02-08T17:27:02.1630402+08:00;True|2025-01-25T12:24:10.7702918+08:00;True|2025-01-24T09:10:22.0248945+08:00;True|2025-01-23T10:54:42.2796686+08:00;True|2025-01-22T07:53:29.9931150+08:00;True|2025-01-21T11:37:36.9296374+08:00;True|2025-01-20T10:42:21.8992153+08:00;True|2025-01-20T10:41:30.8562468+08:00;True|2025-01-20T10:36:54.9849821+08:00;True|2025-01-20T10:31:16.0442319+08:00;True|2025-01-13T15:07:40.9182715+08:00;True|2025-01-13T12:08:58.0115763+08:00;True|2025-01-13T12:08:44.3187386+08:00;True|2025-01-13T12:07:41.4659157+08:00;True|2025-01-13T11:53:47.1828627+08:00;True|2025-01-13T11:38:53.6150404+08:00;True|2025-01-13T11:37:14.9075336+08:00;True|2025-01-13T11:35:23.3939940+08:00;True|2025-01-13T11:33:41.6199459+08:00;True|2025-01-13T11:32:15.2734783+08:00;True|2025-01-13T11:30:39.9296756+08:00;True|2025-01-13T11:25:02.3605923+08:00;True|2025-01-13T11:21:03.0110309+08:00;True|2025-01-13T11:17:46.3662069+08:00;True|2025-01-08T09:44:09.5132234+08:00;True|2024-09-03T11:22:43.3813050+08:00;True|2024-09-03T11:06:18.0799295+08:00;True|2024-09-03T10:52:25.3198740+08:00;True|2024-09-02T09:16:17.5197059+08:00;False|2024-09-02T09:08:02.4504522+08:00;True|2024-06-20T12:16:07.3854116+08:00;True|2024-06-18T09:13:21.8960491+08:00;True|2024-06-12T18:55:43.2697624+08:00;True|2024-06-12T18:54:42.2191664+08:00;True|2024-06-12T18:37:39.2735086+08:00;True|2024-06-12T18:32:59.2340941+08:00;True|2024-06-12T18:18:57.9018714+08:00;True|2024-06-12T18:13:13.4471521+08:00;True|2024-06-12T18:11:38.4803257+08:00;True|2024-06-12T18:10:00.3753638+08:00;True|2024-06-12T18:03:08.9521607+08:00;True|2024-06-12T17:59:46.2755740+08:00;True|2024-06-12T17:58:01.8017051+08:00;True|2024-06-12T17:56:20.6946001+08:00;True|2024-06-12T17:32:53.8291604+08:00;True|2024-06-12T17:32:38.6492118+08:00;False|2024-06-12T17:32:17.0260105+08:00;True|2024-06-12T17:08:59.9367775+08:00;True|2024-06-12T16:32:42.3320305+08:00;True|2024-06-07T13:34:17.3014803+08:00;True|2024-06-07T13:20:33.5124438+08:00;True|2024-06-07T10:24:47.0351087+08:00;True|2024-06-05T17:04:55.4017239+08:00;True|2024-06-05T16:05:35.1432805+08:00;True|2024-06-05T15:18:06.1797165+08:00;True|2024-06-05T13:53:59.9366676+08:00;True|2024-06-05T13:43:45.7009774+08:00;True|2024-06-05T13:38:18.1415782+08:00;True|2024-06-05T12:14:05.4745826+08:00;True|2024-06-05T12:10:02.8443283+08:00;True|2024-06-02T18:41:28.5233205+08:00;True|2024-06-02T18:21:27.5679625+08:00;True|2024-06-02T17:34:02.6234679+08:00;True|2024-06-02T16:58:23.9422671+08:00;True|2024-06-02T16:16:43.6949096+08:00;True|2024-06-02T14:44:06.8963915+08:00;True|2024-06-02T11:10:51.5587482+08:00;True|2024-06-01T11:30:39.5033584+08:00;True|2024-05-30T16:29:38.0730664+08:00;True|2024-05-30T15:16:14.5429969+08:00;True|2024-05-29T17:31:27.5349115+08:00;True|2024-05-29T16:49:44.3085849+08:00;True|2024-05-29T10:46:15.3071701+08:00;True|2024-05-28T16:21:22.2987178+08:00;True|2024-05-28T11:55:02.0680294+08:00;True|2024-05-24T09:27:50.0479340+08:00;True|2024-05-23T14:16:32.3824342+08:00;True|2024-05-23T10:51:43.4383910+08:00;True|2024-05-22T11:19:10.1709647+08:00;True|2024-05-22T11:12:47.8835237+08:00;True|2024-05-22T10:43:34.7720709+08:00;True|2024-05-21T17:25:46.9831973+08:00;True|2024-05-21T12:11:55.2774332+08:00;True|2024-05-13T10:32:18.9951394+08:00;True|2024-05-09T09:53:09.1673089+08:00;True|2024-05-08T17:18:58.3017566+08:00;True|2024-05-08T11:15:08.3734126+08:00;True|2024-05-07T10:59:04.2016283+08:00;True|2024-05-07T10:58:56.6254107+08:00;True|2024-05-07T10:56:03.7274034+08:00;True|2024-05-07T10:55:53.5496684+08:00;True|2024-05-07T10:55:41.1246352+08:00;True|2024-05-07T09:57:18.3908307+08:00;True|2024-05-06T18:17:15.0427456+08:00;True|2024-05-06T17:38:00.0855585+08:00;True|2024-05-06T14:04:15.4665470+08:00;True|2024-05-06T09:38:06.9447096+08:00;False|2024-05-06T09:37:21.4257032+08:00;</History>
     <LastFailureDetails />
   </PropertyGroup>
 </Project>
\ No newline at end of file
diff --git a/HStation.Xhs.Core.sln b/HStation.Xhs.Core.sln
index 56f378c..4181560 100644
--- a/HStation.Xhs.Core.sln
+++ b/HStation.Xhs.Core.sln
@@ -169,6 +169,8 @@
 EndProject
 Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Yw", "Yw", "{46F06FE7-18FB-4F0E-9AB1-A9A0A3E5C81A}"
 EndProject
+Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "HStation", "HStation", "{AB800C2A-5367-42B8-B3FF-0E7F4640E9B3}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -1478,7 +1480,7 @@
 		{7EC71161-8EF0-4EC2-B8A2-4BE52E472101} = {CF8E0A6C-9342-430D-BD10-6E1B5DE18571}
 		{2C9756B8-5F56-4271-8404-93AD6DEE7BD6} = {929B3BD5-B817-4EAF-ADA4-3DFBD1580DA6}
 		{B9AA9E07-4D8C-4642-8346-581DF9F6AB16} = {4D3764D7-19DE-4C77-8F75-0EFB19D64B3F}
-		{DC593635-BBCA-47FF-BE7A-F89804AE2FC1} = {4F0A7BA1-6ED6-4F4F-A3B4-B9B3A133D869}
+		{DC593635-BBCA-47FF-BE7A-F89804AE2FC1} = {AB800C2A-5367-42B8-B3FF-0E7F4640E9B3}
 		{7A40BC5F-BD1B-40EE-A8C1-232BF7C14F3C} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
 		{CB331919-7FFB-4D38-B9E0-D47E412A3904} = {9F4F9ECE-9C4C-4796-91A1-69805F823EA5}
 		{5D082C0C-FD9B-4BEE-B57F-6C3D1B9F0BB3} = {4D3764D7-19DE-4C77-8F75-0EFB19D64B3F}
@@ -1537,6 +1539,7 @@
 		{21D4EA4C-3A6A-4B65-9FD8-11A34768872C} = {0469F9DE-F12C-4B83-A871-A77A82DCB4C8}
 		{36AD458B-32A8-4FF9-8548-8FD2CD7ADABF} = {276C57AF-5A9C-4A50-A79E-A5098D322FE9}
 		{46F06FE7-18FB-4F0E-9AB1-A9A0A3E5C81A} = {4F0A7BA1-6ED6-4F4F-A3B4-B9B3A133D869}
+		{AB800C2A-5367-42B8-B3FF-0E7F4640E9B3} = {4F0A7BA1-6ED6-4F4F-A3B4-B9B3A133D869}
 	EndGlobalSection
 	GlobalSection(ExtensibilityGlobals) = postSolution
 		SolutionGuid = {E02989A8-9B6F-43E5-AACA-790328215089}
diff --git a/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj b/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj
index b240368..f7d1c9a 100644
--- a/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj
+++ b/Hydro/HStation.Hydro.Core/HStation.Hydro.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Service.Hydro.Core" Version="5.1.1" />
+    <PackageReference Include="Yw.Service.Hydro.Core" Version="5.1.2" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj b/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj
index b39c17e..4bf9f9d 100644
--- a/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj
+++ b/Hydro/Yw.Hydro.Core/Yw.Hydro.Core.csproj
@@ -8,7 +8,7 @@
 
   <ItemGroup>
     <PackageReference Include="Yw.Geometry.Core" Version="3.3.2" />
-    <PackageReference Include="Yw.Service.Hydro.Core" Version="5.1.1" />
+    <PackageReference Include="Yw.Service.Hydro.Core" Version="5.1.2" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Service/HStation.Service.Assets.Core/HStation.Service.Assets.Core.csproj b/Service/HStation.Service.Assets.Core/HStation.Service.Assets.Core.csproj
index 51e06b2..f73d1fe 100644
--- a/Service/HStation.Service.Assets.Core/HStation.Service.Assets.Core.csproj
+++ b/Service/HStation.Service.Assets.Core/HStation.Service.Assets.Core.csproj
@@ -80,7 +80,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Service.Basic.Core" Version="3.2.8" />
+    <PackageReference Include="Yw.Service.Basic.Core" Version="3.3.6" />
   </ItemGroup>
 
 </Project>
diff --git a/Service/HStation.Service.PhartRelation.Core/HStation.Service.PhartRelation.Core.csproj b/Service/HStation.Service.PhartRelation.Core/HStation.Service.PhartRelation.Core.csproj
index a805c99..0db75b3 100644
--- a/Service/HStation.Service.PhartRelation.Core/HStation.Service.PhartRelation.Core.csproj
+++ b/Service/HStation.Service.PhartRelation.Core/HStation.Service.PhartRelation.Core.csproj
@@ -71,8 +71,8 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Geometry.Core" Version="3.3.0" />
-    <PackageReference Include="Yw.Pump.Core" Version="3.2.0" />
+    <PackageReference Include="Yw.Geometry.Core" Version="3.3.2" />
+    <PackageReference Include="Yw.Pump.Core" Version="3.2.4" />
     <PackageReference Include="Yw.Service.Phart.Core" Version="3.2.9" />
   </ItemGroup>
 
diff --git a/Service/HStation.Service.Revit.Core/HStation.Service.Revit.Core.csproj b/Service/HStation.Service.Revit.Core/HStation.Service.Revit.Core.csproj
index 00758a9..bc52af7 100644
--- a/Service/HStation.Service.Revit.Core/HStation.Service.Revit.Core.csproj
+++ b/Service/HStation.Service.Revit.Core/HStation.Service.Revit.Core.csproj
@@ -8,7 +8,7 @@
 
   <ItemGroup>
     <PackageReference Include="Yw.Pump.Core" Version="3.2.4" />
-    <PackageReference Include="Yw.Untity.Core" Version="3.0.5" />
+    <PackageReference Include="Yw.Untity.Core" Version="3.0.6" />
   </ItemGroup>
 
 </Project>
diff --git a/Service/HStation.Service.TransferFile.Core/HStation.Service.TransferFile.Core.csproj b/Service/HStation.Service.TransferFile.Core/HStation.Service.TransferFile.Core.csproj
index ef55101..ff43d79 100644
--- a/Service/HStation.Service.TransferFile.Core/HStation.Service.TransferFile.Core.csproj
+++ b/Service/HStation.Service.TransferFile.Core/HStation.Service.TransferFile.Core.csproj
@@ -17,10 +17,10 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.DAL.PostgreSql.Core" Version="3.0.9" />
-    <PackageReference Include="Yw.DAL.SQLite.Core" Version="3.0.9" />
-    <PackageReference Include="Yw.DALFactory.Core" Version="3.0.5" />
-    <PackageReference Include="Yw.Service.Core" Version="3.0.8" />
+    <PackageReference Include="Yw.DAL.PostgreSql.Core" Version="3.1.2" />
+    <PackageReference Include="Yw.DAL.SQLite.Core" Version="3.1.2" />
+    <PackageReference Include="Yw.DALFactory.Core" Version="3.0.6" />
+    <PackageReference Include="Yw.Service.Core" Version="3.1.1" />
   </ItemGroup>
 
 </Project>
diff --git a/Service/HStation.Service.Xhs.Core/HStation.Service.Xhs.Core.csproj b/Service/HStation.Service.Xhs.Core/HStation.Service.Xhs.Core.csproj
index aef4fc0..f9d8b2a 100644
--- a/Service/HStation.Service.Xhs.Core/HStation.Service.Xhs.Core.csproj
+++ b/Service/HStation.Service.Xhs.Core/HStation.Service.Xhs.Core.csproj
@@ -23,7 +23,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Service.Basic.Core" Version="3.3.2" />
+    <PackageReference Include="Yw.Service.Basic.Core" Version="3.3.6" />
   </ItemGroup>
 
 </Project>
diff --git a/Service/PBS.Service.Core/PBS.Service.Core.csproj b/Service/PBS.Service.Core/PBS.Service.Core.csproj
index b8052f3..1651c80 100644
--- a/Service/PBS.Service.Core/PBS.Service.Core.csproj
+++ b/Service/PBS.Service.Core/PBS.Service.Core.csproj
@@ -13,7 +13,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Service.Basic.Core" Version="3.3.1" />
+    <PackageReference Include="Yw.Service.Basic.Core" Version="3.3.6" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/Service/PBS.Service.WE.Core/PBS.Service.WE.Core.csproj b/Service/PBS.Service.WE.Core/PBS.Service.WE.Core.csproj
index eed0064..4222225 100644
--- a/Service/PBS.Service.WE.Core/PBS.Service.WE.Core.csproj
+++ b/Service/PBS.Service.WE.Core/PBS.Service.WE.Core.csproj
@@ -11,7 +11,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Service.Basic.Core" Version="3.3.2" />
+    <PackageReference Include="Yw.Service.Basic.Core" Version="3.3.6" />
   </ItemGroup>
 
 </Project>
diff --git a/Service/Yw.Service.Division.Core/Yw.Service.Division.Core.csproj b/Service/Yw.Service.Division.Core/Yw.Service.Division.Core.csproj
index 4078edd..a0a2e57 100644
--- a/Service/Yw.Service.Division.Core/Yw.Service.Division.Core.csproj
+++ b/Service/Yw.Service.Division.Core/Yw.Service.Division.Core.csproj
@@ -7,10 +7,10 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.DAL.PostgreSql.Core" Version="3.0.9" />
-    <PackageReference Include="Yw.DAL.SQLite.Core" Version="3.0.9" />
-    <PackageReference Include="Yw.DALFactory.Core" Version="3.0.5" />
-    <PackageReference Include="Yw.Service.Core" Version="3.0.8" />
+    <PackageReference Include="Yw.DAL.PostgreSql.Core" Version="3.1.2" />
+    <PackageReference Include="Yw.DAL.SQLite.Core" Version="3.1.2" />
+    <PackageReference Include="Yw.DALFactory.Core" Version="3.0.6" />
+    <PackageReference Include="Yw.Service.Core" Version="3.1.1" />
   </ItemGroup>
 
 </Project>
diff --git a/Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj b/Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj
index 8997fd2..3102dae 100644
--- a/Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj
+++ b/Vmo/HStation.Vmo.Core/HStation.Vmo.Core.csproj
@@ -7,7 +7,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.Vmo.Core" Version="3.0.6" />
+    <PackageReference Include="Yw.Vmo.Core" Version="3.1.0" />
   </ItemGroup>
 
 </Project>
diff --git a/WebApi/HStation.WebApi.TransferFile.Core/HStation.WebApi.TransferFile.Core.csproj b/WebApi/HStation.WebApi.TransferFile.Core/HStation.WebApi.TransferFile.Core.csproj
index d3e51f4..1dcd727 100644
--- a/WebApi/HStation.WebApi.TransferFile.Core/HStation.WebApi.TransferFile.Core.csproj
+++ b/WebApi/HStation.WebApi.TransferFile.Core/HStation.WebApi.TransferFile.Core.csproj
@@ -23,7 +23,7 @@
 
   <ItemGroup>
     <PackageReference Include="Yw.Knife4jUI.Core" Version="3.0.0" />
-    <PackageReference Include="Yw.Service.Auth.Core" Version="3.0.2" />
+    <PackageReference Include="Yw.Service.Auth.Core" Version="3.3.1" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/WebApi/HStation.WebApi.Xhs.Core/HStation.WebApi.Xhs.Core.csproj b/WebApi/HStation.WebApi.Xhs.Core/HStation.WebApi.Xhs.Core.csproj
index f668f4d..abba7a1 100644
--- a/WebApi/HStation.WebApi.Xhs.Core/HStation.WebApi.Xhs.Core.csproj
+++ b/WebApi/HStation.WebApi.Xhs.Core/HStation.WebApi.Xhs.Core.csproj
@@ -23,7 +23,7 @@
 
   <ItemGroup>
     <PackageReference Include="Yw.Knife4jUI.Core" Version="3.0.0" />
-    <PackageReference Include="Yw.Service.Auth.Core" Version="3.2.8" />
+    <PackageReference Include="Yw.Service.Auth.Core" Version="3.3.1" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/WinFrmUI/HStation.WinFrmUI.Auth.Core/HStation.WinFrmUI.Auth.Core.csproj b/WinFrmUI/HStation.WinFrmUI.Auth.Core/HStation.WinFrmUI.Auth.Core.csproj
index f870248..4d4284b 100644
--- a/WinFrmUI/HStation.WinFrmUI.Auth.Core/HStation.WinFrmUI.Auth.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Auth.Core/HStation.WinFrmUI.Auth.Core.csproj
@@ -37,7 +37,7 @@
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
     <PackageReference Include="Microsoft.QualityTools.Testing.Fakes" Version="17.5.0-beta.23060.1" />
     <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2535.41" />
-    <PackageReference Include="Yw.BLL.Auth.Core" Version="3.6.9" />
+    <PackageReference Include="Yw.BLL.Auth.Core" Version="3.7.2" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/WinFrmUI/HStation.WinFrmUI.Basic.Core/HStation.WinFrmUI.Basic.Core.csproj b/WinFrmUI/HStation.WinFrmUI.Basic.Core/HStation.WinFrmUI.Basic.Core.csproj
index 551733c..fb94338 100644
--- a/WinFrmUI/HStation.WinFrmUI.Basic.Core/HStation.WinFrmUI.Basic.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Basic.Core/HStation.WinFrmUI.Basic.Core.csproj
@@ -13,7 +13,7 @@
 
   <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
-    <PackageReference Include="Yw.BLL.Basic.Core" Version="3.3.2" />
+    <PackageReference Include="Yw.BLL.Basic.Core" Version="3.3.7" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/WinFrmUI/HStation.WinFrmUI.Dict.Core/HStation.WinFrmUI.Dict.Core.csproj b/WinFrmUI/HStation.WinFrmUI.Dict.Core/HStation.WinFrmUI.Dict.Core.csproj
index e6a6c7a..735d9ad 100644
--- a/WinFrmUI/HStation.WinFrmUI.Dict.Core/HStation.WinFrmUI.Dict.Core.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Dict.Core/HStation.WinFrmUI.Dict.Core.csproj
@@ -8,7 +8,7 @@
 
   <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
-    <PackageReference Include="Yw.BLL.Dict.Core" Version="3.1.1" />
+    <PackageReference Include="Yw.BLL.Dict.Core" Version="3.1.2" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs
index 7e1d723..f7b5151 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Core/03-simulation/11-pump/01-parallel/SimulationPumpParallelCtrl.Designer.cs
@@ -94,7 +94,7 @@
             layoutControl1.Dock = DockStyle.Fill;
             layoutControl1.Location = new Point(1, 0);
             layoutControl1.Name = "layoutControl1";
-            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(1270, 374, 650, 400);
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(604, 372, 650, 400);
             layoutControl1.Root = Root;
             layoutControl1.Size = new Size(464, 663);
             layoutControl1.TabIndex = 0;
@@ -324,6 +324,9 @@
             pumpParallelChart1.Location = new Point(0, 0);
             pumpParallelChart1.Margin = new Padding(2, 2, 2, 2);
             pumpParallelChart1.Name = "pumpParallelChart1";
+            pumpParallelChart1.QEFeatType = Yw.Ahart.eFeatType.Cubic;
+            pumpParallelChart1.QHFeatType = Yw.Ahart.eFeatType.Cubic;
+            pumpParallelChart1.QPFeatType = Yw.Ahart.eFeatType.Cubic;
             pumpParallelChart1.Size = new Size(640, 663);
             pumpParallelChart1.TabIndex = 2;
             // 
diff --git a/WinFrmUI/Hstation.WinFrmUI.Core/Hstation.WinFrmUI.Core.csproj b/WinFrmUI/Hstation.WinFrmUI.Core/Hstation.WinFrmUI.Core.csproj
index 17cb39f..9e81d31 100644
--- a/WinFrmUI/Hstation.WinFrmUI.Core/Hstation.WinFrmUI.Core.csproj
+++ b/WinFrmUI/Hstation.WinFrmUI.Core/Hstation.WinFrmUI.Core.csproj
@@ -23,7 +23,7 @@
 
   <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
-    <PackageReference Include="Yw.BLL.Auth.Core" Version="3.1.6" />
+    <PackageReference Include="Yw.BLL.Auth.Core" Version="3.7.2" />
   </ItemGroup>
 
   <ItemGroup>
diff --git a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
index 7cc3737..652fba9 100644
--- a/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Bimface.Core/Yw.WinFrmUI.Bimface.Core.csproj
@@ -194,7 +194,7 @@
   <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
     <PackageReference Include="Yw.BIMFace.SDK.Core" Version="3.0.5" />
-    <PackageReference Include="Yw.BLL.Bimface.Core" Version="3.0.9" />
+    <PackageReference Include="Yw.BLL.Bimface.Core" Version="3.1.0" />
     <PackageReference Include="Yw.WebBrower.Core" Version="3.0.2" />
     <PackageReference Include="Yw.WebView2.WinFrmUI.Core" Version="3.0.1" />
   </ItemGroup>
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/09-common/13-status/HttpStatusImageHelper.cs b/WinFrmUI/Yw.WinFrmUI.Core/09-common/13-status/HttpStatusImageHelper.cs
new file mode 100644
index 0000000..fcebdb1
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/09-common/13-status/HttpStatusImageHelper.cs
@@ -0,0 +1,39 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public class HttpStatusImageHelper
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public static ImageCollection ImgC
+        {
+            get
+            {
+                if (_imgc == null)
+                {
+                    _imgc = new ImageCollection();
+                    _imgc.ImageSize = new Size(32, 32);
+                    _imgc.Images.Add(Yw.WinFrmUI.Core.Properties.Resources.succeed_32);
+                    _imgc.Images.Add(Yw.WinFrmUI.Core.Properties.Resources.confirm_32);
+                    _imgc.Images.Add(Yw.WinFrmUI.Core.Properties.Resources.prompt_32);
+                    _imgc.Images.Add(Yw.WinFrmUI.Core.Properties.Resources.warning_32);
+                    _imgc.Images.Add(Yw.WinFrmUI.Core.Properties.Resources.error_32);
+                    _imgc.Images.Add(Yw.WinFrmUI.Core.Properties.Resources.timeout_32);
+                }
+                return _imgc;
+            }
+        }
+        private static DevExpress.Utils.ImageCollection _imgc = null;
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionAlertHelper.cs b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionAlertHelper.cs
new file mode 100644
index 0000000..82e93e6
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionAlertHelper.cs
@@ -0,0 +1,58 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading;
+using System.Threading.Tasks;
+
+namespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 
+    /// </summary>
+    public static class VmoExceptionAlertHelper
+    {
+        private static AlertControl Alert
+        {
+            get
+            {
+                if (_alert == null)
+                {
+                    lock (_locker)
+                    {
+                        if (_alert == null)
+                        {
+                            _alert = new AlertControl();
+                            _alert.AutoFormDelay = 3000;
+                            _alert.AutoHeight = false;
+                            _alert.FormMaxCount = 1;
+                        }
+                    }
+                }
+                return _alert;
+            }
+        }
+        private static AlertControl _alert = null;
+        private static object _locker = new();
+
+        /// <summary>
+        /// 鏄剧ず鍙充笅瑙掑脊绐�
+        /// </summary>
+        public static void ShowAlertInfo(this Form owner, Yw.Vmo.VException ex)
+        {
+            var info = new AlertInfo(ex.ErrorCode, ex.ErrorMsg, HttpStatusImageHelper.ImgC.Images[ex.ErrorStatus]);
+            Alert.Show(owner, info);
+        }
+
+        /// <summary>
+        /// 鏄剧ず鍙充笅瑙掑脊绐�
+        /// </summary>
+        public static void ShowAlertInfo(this Control owner, Yw.Vmo.VException ex)
+        {
+            var form = owner.FindForm();
+            form.ShowAlertInfo(ex);
+        }
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.Designer.cs
new file mode 100644
index 0000000..0c67f3e
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.Designer.cs
@@ -0,0 +1,80 @@
+锘縩amespace Yw.WinFrmUI
+{
+    partial class VmoExceptionTipForm
+    {
+        /// <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 Container();
+            labText = new LabelControl();
+            timer1 = new System.Windows.Forms.Timer(components);
+            SuspendLayout();
+            // 
+            // labText
+            // 
+            labText.AllowHtmlString = true;
+            labText.Appearance.BackColor = Color.White;
+            labText.Appearance.FontSizeDelta = 1;
+            labText.Appearance.Options.UseBackColor = true;
+            labText.Appearance.Options.UseFont = true;
+            labText.Appearance.Options.UseTextOptions = true;
+            labText.Appearance.TextOptions.HAlignment = HorzAlignment.Center;
+            labText.Appearance.TextOptions.VAlignment = VertAlignment.Center;
+            labText.AutoSizeMode = LabelAutoSizeMode.None;
+            labText.Dock = DockStyle.Fill;
+            labText.ImageAlignToText = ImageAlignToText.LeftCenter;
+            labText.ImageOptions.ImageIndex = 0;
+            labText.ImageOptions.SvgImageSize = new Size(24, 24);
+            labText.Location = new Point(1, 1);
+            labText.Name = "labText";
+            labText.Size = new Size(298, 78);
+            labText.TabIndex = 0;
+            // 
+            // timer1
+            // 
+            timer1.Interval = 2000;
+            timer1.Tick += timer_Tick;
+            // 
+            // VmoExceptionTipForm
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(300, 80);
+            Controls.Add(labText);
+            FormBorderStyle = FormBorderStyle.None;
+            Name = "VmoExceptionTipForm";
+            Padding = new Padding(1);
+            StartPosition = FormStartPosition.CenterScreen;
+            TopMost = true;
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraEditors.LabelControl labText;
+        private System.Windows.Forms.Timer timer1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.cs b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.cs
new file mode 100644
index 0000000..3c5b4df
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.cs
@@ -0,0 +1,78 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 鎻愮ず绐椾綋
+    /// </summary>
+    public partial class VmoExceptionTipForm : DevExpress.XtraEditors.XtraForm
+    {
+        /// <summary>
+        /// 
+        /// </summary>
+        public VmoExceptionTipForm()
+        {
+            InitializeComponent();
+            this.labText.ImageOptions.Images = HttpStatusImageHelper.ImgC;
+        }
+
+        /// <summary>
+        /// 璁剧疆
+        /// </summary>
+        public void Set(Yw.Vmo.VException ex, int interval = 3000)
+        {
+            var imageIndex = 0;
+            switch (ex.ErrorStatus)
+            {
+                case (int)Yw.Dto.eResultCode.Success: imageIndex = 0; break;
+                case (int)Yw.Dto.eResultCode.Confirm: imageIndex = 1; break;
+                case (int)Yw.Dto.eResultCode.Prompt: imageIndex = 2; break;
+                case (int)Yw.Dto.eResultCode.Alert: imageIndex = 3; break;
+                case (int)Yw.Dto.eResultCode.Error: imageIndex = 4; break;
+                case (int)Yw.Dto.eResultCode.TimeOut: imageIndex = 5; break;
+                default: break;
+            }
+            this.timer1.Enabled = false;
+            this.labText.ImageOptions.ImageIndex = imageIndex;
+            this.labText.Text = $"[{ex.ErrorCode}]{ex.ErrorMsg}";
+            this.timer1.Interval = interval;
+            this.timer1.Enabled = true;
+            AdaptSize();
+        }
+
+        //鑷�傚簲灏哄
+        private void AdaptSize()
+        {
+            int width = 300;
+            int height = 80;
+            var bestSize = this.labText.CalcBestSize();
+            if (width < bestSize.Width + 20)
+            {
+                width = bestSize.Width + 20;
+            }
+            if (height < bestSize.Height + 20)
+            {
+                height = bestSize.Height + 20;
+            }
+            this.Size = new Size(width, height);
+        }
+
+        /// <summary>
+        /// 缁樺埗杈规
+        /// </summary>
+        /// <param name="e"></param>
+        protected override void OnPaint(PaintEventArgs e)
+        {
+            base.OnPaint(e);
+            this.DrawBorder(e, Color.Gray, 1);
+        }
+
+        //浜嬩欢
+        private void timer_Tick(object sender, EventArgs e)
+        {
+            this.timer1.Enabled = false;
+            this.Close();
+        }
+
+
+
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.resx b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.resx
new file mode 100644
index 0000000..80e1e44
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipForm.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="timer1.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.Core/12-exception/VmoExceptionTipFormHelper.cs b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipFormHelper.cs
new file mode 100644
index 0000000..f951c5b
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/12-exception/VmoExceptionTipFormHelper.cs
@@ -0,0 +1,48 @@
+锘縩amespace Yw.WinFrmUI
+{
+    /// <summary>
+    /// 鎻愮ず妗嗚緟鍔╃被
+    /// </summary>
+    public class VmoExceptionTipFormHelper
+    {
+        //鑾峰彇鎻愮ず绐椾綋
+        private static VmoExceptionTipForm GetTipForm()
+        {
+            if (_tipForm == null || _tipForm.IsDisposed)
+            {
+                lock (_locker)
+                {
+                    if (_tipForm == null || _tipForm.IsDisposed)
+                    {
+                        _tipForm = new VmoExceptionTipForm();
+                    }
+                }
+            }
+            return _tipForm;
+        }
+        private static VmoExceptionTipForm _tipForm = null;
+        private static object _locker = new();//閿佸璞�
+
+        /// <summary>
+        /// 鏄剧ず鎻愮ず绐椾綋
+        /// </summary>
+        public static void Show(Yw.Vmo.VException ex, int interval = 3000)
+        {
+            var frm = GetTipForm();
+            frm.Set(ex, interval);
+            frm.Show();
+        }
+
+
+
+
+
+
+
+
+
+
+
+
+    }
+}
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.Designer.cs
index a80e223..a69fb09 100644
--- a/WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.Designer.cs
@@ -59,5 +59,65 @@
                 resourceCulture = value;
             }
         }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Bitmap confirm_32 {
+            get {
+                object obj = ResourceManager.GetObject("confirm_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Bitmap error_32 {
+            get {
+                object obj = ResourceManager.GetObject("error_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Bitmap prompt_32 {
+            get {
+                object obj = ResourceManager.GetObject("prompt_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Bitmap succeed_32 {
+            get {
+                object obj = ResourceManager.GetObject("succeed_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Bitmap timeout_32 {
+            get {
+                object obj = ResourceManager.GetObject("timeout_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
+        
+        /// <summary>
+        ///   鏌ユ壘 System.Drawing.Bitmap 绫诲瀷鐨勬湰鍦板寲璧勬簮銆�
+        /// </summary>
+        internal static System.Drawing.Bitmap warning_32 {
+            get {
+                object obj = ResourceManager.GetObject("warning_32", resourceCulture);
+                return ((System.Drawing.Bitmap)(obj));
+            }
+        }
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.resx b/WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.resx
index 1af7de1..243f87b 100644
--- a/WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.resx
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Properties/Resources.resx
@@ -117,4 +117,23 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
+  <data name="confirm_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\confirm_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="error_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\error_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="prompt_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\prompt_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="succeed_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\succeed_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="timeout_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\timeout_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
+  <data name="warning_32" type="System.Resources.ResXFileRef, System.Windows.Forms">
+    <value>..\Resources\warning_32.png;System.Drawing.Bitmap, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Resources/confirm_32.png b/WinFrmUI/Yw.WinFrmUI.Core/Resources/confirm_32.png
new file mode 100644
index 0000000..cae3fe7
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Resources/confirm_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Resources/error_32.png b/WinFrmUI/Yw.WinFrmUI.Core/Resources/error_32.png
new file mode 100644
index 0000000..9a476e4
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Resources/error_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Resources/prompt_32.png b/WinFrmUI/Yw.WinFrmUI.Core/Resources/prompt_32.png
new file mode 100644
index 0000000..a7d00e3
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Resources/prompt_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Resources/succeed_32.png b/WinFrmUI/Yw.WinFrmUI.Core/Resources/succeed_32.png
new file mode 100644
index 0000000..de7277b
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Resources/succeed_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Resources/timeout_32.png b/WinFrmUI/Yw.WinFrmUI.Core/Resources/timeout_32.png
new file mode 100644
index 0000000..d4ba5ed
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Resources/timeout_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Resources/warning_32.png b/WinFrmUI/Yw.WinFrmUI.Core/Resources/warning_32.png
new file mode 100644
index 0000000..1f28824
--- /dev/null
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Resources/warning_32.png
Binary files differ
diff --git a/WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj
index bd983c2..9b42d01 100644
--- a/WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Core/Yw.WinFrmUI.Core.csproj
@@ -58,6 +58,9 @@
     <Compile Update="11-tree\01-simple\SimpleTreeViewCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="12-exception\VmoExceptionTipForm.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="Properties\Resources.Designer.cs">
       <DesignTime>True</DesignTime>
       <AutoGen>True</AutoGen>
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs
index 9b088be..3c989c1 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/04-viewmodel/01-parter/HydroParterViewModel.cs
@@ -26,6 +26,7 @@
             this.ModelType = rhs.ModelType;
             this.DbId = rhs.DbId;
             this.DbLocked = rhs.DbLocked;
+            this.BeginGroup = rhs.BeginGroup;
             this.Flags = Yw.Untity.FlagsHelper.ToString(rhs.Flags);
             this.Description = rhs.Description;
             this.Paras = new DictionaryPropertyAdapter(rhs.Paras);
@@ -92,11 +93,20 @@
         }
 
         /// <summary>
+        /// 鍒嗙粍
+        /// </summary>
+        [Category("鍩虹淇℃伅")]
+        [DisplayName("鍒嗙粍")]
+        [PropertyOrder(6)]
+        [Browsable(true)]
+        public virtual string BeginGroup { get; set; }
+
+        /// <summary>
         /// 鏍囩
         /// </summary>
         [Category("鍩虹淇℃伅")]
         [DisplayName("鏍囩")]
-        [PropertyOrder(6)]
+        [PropertyOrder(7)]
         [HydroFlagsPro]
         [Browsable(true)]
         public virtual string Flags { get; set; }
@@ -107,17 +117,16 @@
         [Category("鍩虹淇℃伅")]
         [DisplayName("鍙傛暟")]
         [HydroParasPro]
-        [PropertyOrder(7)]
+        [PropertyOrder(8)]
         [Browsable(true)]
         public virtual DictionaryPropertyAdapter Paras { get; set; }
-
 
         /// <summary>
         /// 璇存槑
         /// </summary>
         [Category("鍩虹淇℃伅")]
         [DisplayName("璇存槑")]
-        [PropertyOrder(8)]
+        [PropertyOrder(9)]
         [MultiText]
         [Browsable(true)]
         public virtual string Description { get; set; }
@@ -127,7 +136,7 @@
         /// </summary>
         [Category("鍩虹淇℃伅")]
         [DisplayName("閿佸畾")]
-        [PropertyOrder(8)]
+        [PropertyOrder(10)]
         [Browsable(true)]
         public virtual bool DbLocked { get; set; }
 
@@ -171,6 +180,7 @@
             this.Catalog = HydroParterCatalogHelper.GetName(this.Vmo.Catalog);
             this.ModelType = this.Vmo.ModelType;
             this.DbId = this.Vmo.DbId;
+            this.BeginGroup = this.Vmo.BeginGroup;
             this.Flags = Yw.Untity.FlagsHelper.ToString(this.Vmo.Flags);
             this.Paras = new DictionaryPropertyAdapter(this.Vmo.Paras);
             this.Description = this.Vmo.Description;
@@ -188,6 +198,7 @@
             this.Vmo.ModelType = this.ModelType;
             this.Vmo.DbId = this.DbId;
             this.Vmo.DbLocked = this.DbLocked;
+            this.Vmo.BeginGroup = this.BeginGroup;
             this.Vmo.Flags = Yw.Untity.FlagsHelper.ToList(this.Flags);
             this.Vmo.Paras = (Dictionary<string, string>)this.Paras?.Dictionary;
             this.Vmo.Description = this.Description;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs
index e6336c8..e5010df 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/06-visual/11-cooling/SetHydroCoolingDlg.cs
@@ -92,7 +92,7 @@
                 {
                     if (x.Coefficient != coefficient.Value)
                     {
-                        _changeHelper.Append(x, eChangeType.Update);
+                        _changeHelper?.Append(x, eChangeType.Update);
                         _propStatusHelper?.UpdatePropStatus(x.Code, nameof(x.Coefficient), Yw.Hydro.ePropStatus.Normal, $"{DateTime.Now.ToStandardString()}閫氳繃璁剧疆缁勪欢淇敼");
                     }
                     x.Coefficient = coefficient.Value;
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroSinglePumpListExtendGridCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.Designer.cs
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroSinglePumpListExtendGridCtrl.Designer.cs
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.Designer.cs
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroSinglePumpListExtendGridCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.cs
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroSinglePumpListExtendGridCtrl.cs
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.cs
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroSinglePumpListExtendGridCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.resx
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroSinglePumpListExtendGridCtrl.resx
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListExtendGridCtrl.resx
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroSinglePumpListItemExtendViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListItemExtendViewModel.cs
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroSinglePumpListItemExtendViewModel.cs
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/01-single/HydroSinglePumpListItemExtendViewModel.cs
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.Designer.cs
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.Designer.cs
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.Designer.cs
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.cs
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.cs
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.cs
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.resx b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.resx
similarity index 100%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListExtendGridCtrl.resx
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListExtendGridCtrl.resx
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListItemExtendViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListItemExtendViewModel.cs
similarity index 89%
rename from WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListItemExtendViewModel.cs
rename to WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListItemExtendViewModel.cs
index a85eeea..799bd00 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/HydroPumpListItemExtendViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/02-extend/02-list/HydroPumpListItemExtendViewModel.cs
@@ -15,6 +15,7 @@
                 Yw.Model.HydroModelInfo hydroInfo
             )
         {
+            this.BeginGroup = string.IsNullOrEmpty(rhs.BeginGroup) ? string.Empty : rhs.BeginGroup;
             this.Code = rhs.Code;
             this.Name = rhs.Name;
             if (allPumpList != null && allPumpList.Count > 0)
@@ -30,6 +31,12 @@
         }
 
         /// <summary>
+        /// 鍒嗙粍
+        /// </summary>
+        [Display(Name = "鍒嗙粍")]
+        public string BeginGroup { get; set; }
+
+        /// <summary>
         /// 缂栫爜
         /// </summary>
         [Display(Name = "缂栫爜")]
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListItemStateViewModel.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListItemStateViewModel.cs
index 938572a..5db4a7f 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListItemStateViewModel.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListItemStateViewModel.cs
@@ -16,6 +16,7 @@
         /// </summary>
         public HydroPumpListItemStateViewModel(Yw.Model.HydroPumpInfo rhs, Yw.Model.HydroModelInfo hydroInfo)
         {
+            this.BeginGroup = string.IsNullOrEmpty(rhs.BeginGroup) ? string.Empty : rhs.BeginGroup;
             this.Code = rhs.Code;
             this.Name = rhs.Name;
             this.LinkStatus = rhs.LinkStatus;
@@ -26,6 +27,12 @@
         }
 
         /// <summary>
+        /// 鍒嗙粍
+        /// </summary>
+        [Display(Name = "鍒嗙粍")]
+        public string BeginGroup { get; set; }
+
+        /// <summary>
         /// 缂栫爜
         /// </summary>
         [Display(Name = "缂栫爜")]
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.Designer.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.Designer.cs
index 662153d..ba6e69f 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.Designer.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.Designer.cs
@@ -41,8 +41,19 @@
             DevExpress.XtraEditors.TableLayout.TableRowDefinition tableRowDefinition1 = new DevExpress.XtraEditors.TableLayout.TableRowDefinition();
             hydroPumpListItemStateViewModelBindingSource = new BindingSource(components);
             imageListBoxControl1 = new DevExpress.XtraEditors.ImageListBoxControl();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            imageComboBoxEdit1 = new DevExpress.XtraEditors.ImageComboBoxEdit();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            itemForList = new DevExpress.XtraLayout.LayoutControlItem();
+            itemForGroup = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)hydroPumpListItemStateViewModelBindingSource).BeginInit();
             ((ISupportInitialize)imageListBoxControl1).BeginInit();
+            ((ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((ISupportInitialize)imageComboBoxEdit1.Properties).BeginInit();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)itemForList).BeginInit();
+            ((ISupportInitialize)itemForGroup).BeginInit();
             SuspendLayout();
             // 
             // hydroPumpListItemStateViewModelBindingSource
@@ -60,11 +71,11 @@
             simpleContextButton1.ToolTip = "璁剧疆";
             imageListBoxControl1.ContextButtons.Add(simpleContextButton1);
             imageListBoxControl1.DataSource = hydroPumpListItemStateViewModelBindingSource;
-            imageListBoxControl1.Dock = DockStyle.Fill;
             imageListBoxControl1.ItemHeight = 34;
-            imageListBoxControl1.Location = new Point(0, 0);
+            imageListBoxControl1.Location = new Point(0, 21);
             imageListBoxControl1.Name = "imageListBoxControl1";
-            imageListBoxControl1.Size = new Size(261, 673);
+            imageListBoxControl1.Size = new Size(261, 652);
+            imageListBoxControl1.StyleController = layoutControl1;
             imageListBoxControl1.TabIndex = 0;
             tableColumnDefinition1.Length.Type = DevExpress.XtraEditors.TableLayout.TableDefinitionLengthType.Pixel;
             tableColumnDefinition1.Length.Value = 40D;
@@ -102,20 +113,84 @@
             imageListBoxControl1.SelectedValueChanged += imageListBoxControl1_SelectedValueChanged;
             imageListBoxControl1.ContextButtonClick += imageListBoxControl1_ContextButtonClick;
             // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(imageComboBoxEdit1);
+            layoutControl1.Controls.Add(imageListBoxControl1);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(261, 673);
+            layoutControl1.TabIndex = 1;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // imageComboBoxEdit1
+            // 
+            imageComboBoxEdit1.Location = new Point(0, 0);
+            imageComboBoxEdit1.Name = "imageComboBoxEdit1";
+            imageComboBoxEdit1.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton(DevExpress.XtraEditors.Controls.ButtonPredefines.Combo) });
+            imageComboBoxEdit1.Size = new Size(261, 20);
+            imageComboBoxEdit1.StyleController = layoutControl1;
+            imageComboBoxEdit1.TabIndex = 4;
+            imageComboBoxEdit1.SelectedValueChanged += imageComboBoxEdit1_SelectedValueChanged;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { itemForList, itemForGroup });
+            Root.Name = "Root";
+            Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            Root.Size = new Size(261, 673);
+            Root.TextVisible = false;
+            // 
+            // itemForList
+            // 
+            itemForList.Control = imageListBoxControl1;
+            itemForList.Location = new Point(0, 21);
+            itemForList.Name = "itemForList";
+            itemForList.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            itemForList.Size = new Size(261, 652);
+            itemForList.TextSize = new Size(0, 0);
+            itemForList.TextVisible = false;
+            // 
+            // itemForGroup
+            // 
+            itemForGroup.Control = imageComboBoxEdit1;
+            itemForGroup.Location = new Point(0, 0);
+            itemForGroup.Name = "itemForGroup";
+            itemForGroup.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 1);
+            itemForGroup.Size = new Size(261, 21);
+            itemForGroup.Text = "鍒嗙粍:";
+            itemForGroup.TextSize = new Size(0, 0);
+            itemForGroup.TextVisible = false;
+            // 
             // HydroPumpListStateEditCtrl
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
-            Controls.Add(imageListBoxControl1);
+            Controls.Add(layoutControl1);
             Name = "HydroPumpListStateEditCtrl";
             Size = new Size(261, 673);
             ((ISupportInitialize)hydroPumpListItemStateViewModelBindingSource).EndInit();
             ((ISupportInitialize)imageListBoxControl1).EndInit();
+            ((ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)imageComboBoxEdit1.Properties).EndInit();
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)itemForList).EndInit();
+            ((ISupportInitialize)itemForGroup).EndInit();
             ResumeLayout(false);
         }
 
         #endregion
         private BindingSource hydroPumpListItemStateViewModelBindingSource;
         private DevExpress.XtraEditors.ImageListBoxControl imageListBoxControl1;
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.ImageComboBoxEdit imageComboBoxEdit1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem itemForList;
+        private DevExpress.XtraLayout.LayoutControlItem itemForGroup;
     }
 }
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.cs b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.cs
index 3d1e05f..97c11cc 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.cs
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/19-pump/05-state/02-edit/HydroPumpListStateEditCtrl.cs
@@ -1,4 +1,5 @@
-锘縰sing System.Data;
+锘縰sing DevExpress.XtraEditors.Controls;
+using System.Data;
 
 namespace Yw.WinFrmUI
 {
@@ -7,6 +8,7 @@
         public HydroPumpListStateEditCtrl()
         {
             InitializeComponent();
+            this.layoutControl1.SetupLayoutControl();
         }
 
         /// <summary>
@@ -14,6 +16,7 @@
         /// </summary>
         public event Action<HydroPumpListItemStateViewModel> SelectedChangedEvent;
 
+        private List<HydroPumpListItemStateViewModel> _allList = null;//鎵�鏈夊垪琛�
         private BindingList<HydroPumpListItemStateViewModel> _allBindingList = null;//鎵�鏈夌粦瀹氬垪琛�
 
         /// <summary>
@@ -24,8 +27,6 @@
             get { return _hasChanged; }
         }
         private bool _hasChanged = false;
-
-
 
         /// <summary>
         /// 缁戝畾鏁版嵁
@@ -49,10 +50,24 @@
         /// </summary>
         public void SetBindingData(List<HydroPumpListItemStateViewModel> allStateList)
         {
-            _allBindingList = new BindingList<HydroPumpListItemStateViewModel>();
-            allStateList?.ForEach(x => _allBindingList.Add(x));
-            this.hydroPumpListItemStateViewModelBindingSource.DataSource = _allBindingList;
-            this.hydroPumpListItemStateViewModelBindingSource.ResetBindings(false);
+            InitialGroups(allStateList);
+        }
+
+        //鍒濆鍖栨墍鏈夊垎缁�
+        private void InitialGroups(List<HydroPumpListItemStateViewModel> allStateList)
+        {
+            _allList = allStateList?.ToList();
+            var groups = _allList?.Select(x => x.BeginGroup).Distinct().ToList();
+            this.itemForGroup.Visibility = groups != null && groups.Count > 1 ? DevExpress.XtraLayout.Utils.LayoutVisibility.Always
+                : DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
+            this.imageComboBoxEdit1.Properties.BeginUpdate();
+            this.imageComboBoxEdit1.Properties.Items.Clear();
+            groups?.ForEach(x =>
+            {
+                this.imageComboBoxEdit1.Properties.Items.Add(x, x, -1);
+            });
+            this.imageComboBoxEdit1.SelectedIndex = groups != null && groups.Count > 0 ? 0 : -1;
+            this.imageComboBoxEdit1.Properties.EndUpdate();
         }
 
         /// <summary>
@@ -94,6 +109,24 @@
             dlg.ShowDialog();
         }
 
+        //鍒嗙粍閫夋嫨鏀瑰彉
+        private void imageComboBoxEdit1_SelectedValueChanged(object sender, EventArgs e)
+        {
+            var item = this.imageComboBoxEdit1.SelectedItem as ImageComboBoxItem;
+            if (item == null)
+            {
+                return;
+            }
+            _allBindingList = new BindingList<HydroPumpListItemStateViewModel>();
+            if (_allList != null && _allList.Count > 0)
+            {
+                var allList = _allList.Where(x => x.BeginGroup == item.Value?.ToString()).ToList();
+                allList.ForEach(x => _allBindingList.Add(x));
+            }
+            this.hydroPumpListItemStateViewModelBindingSource.DataSource = _allBindingList;
+            this.hydroPumpListItemStateViewModelBindingSource.ResetBindings(false);
+        }
+
         //閫夋嫨鏀瑰彉
         private void imageListBoxControl1_SelectedValueChanged(object sender, EventArgs e)
         {
diff --git a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
index f75308d..8000e41 100644
--- a/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Hydro.Core/Yw.WinFrmUI.Hydro.Core.csproj
@@ -56,8 +56,8 @@
 
 	<ItemGroup>
 		<PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
-		<PackageReference Include="Yw.BLL.Basic.Core" Version="3.3.3" />
-		<PackageReference Include="Yw.BLL.Hydro.Core" Version="3.9.0" />
+		<PackageReference Include="Yw.BLL.Basic.Core" Version="3.3.7" />
+		<PackageReference Include="Yw.BLL.Hydro.Core" Version="3.9.5" />
 		<PackageReference Include="Yw.Pump.Core" Version="3.2.4" />
 	</ItemGroup>
 
@@ -255,7 +255,7 @@
 		<Compile Update="18-loss\03-statistics\HydroSingleWorkingLossStatisticsDlg.cs">
 			<SubType>Form</SubType>
 		</Compile>
-		<Compile Update="19-pump\02-extend\HydroSinglePumpListExtendGridCtrl.cs">
+		<Compile Update="19-pump\02-extend\01-single\HydroSinglePumpListExtendGridCtrl.cs">
 			<SubType>UserControl</SubType>
 		</Compile>
 		<Compile Update="19-pump\03-query\HydroSinglePumpQueryPointListGridCtrl.cs">
@@ -412,4 +412,8 @@
 		</EmbeddedResource>
 	</ItemGroup>
 
+	<ItemGroup>
+	  <Folder Include="19-pump\07-group\" />
+	</ItemGroup>
+
 </Project>
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 3120abd..505c587 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
@@ -73,7 +73,7 @@
     <Compile Update="19-pump\05-state\01-view\HydroPumpListStateViewCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
-    <Compile Update="19-pump\02-extend\HydroPumpListExtendGridCtrl.cs">
+    <Compile Update="19-pump\02-extend\02-list\HydroPumpListExtendGridCtrl.cs">
       <SubType>UserControl</SubType>
     </Compile>
     <Compile Update="19-pump\03-query\HydroPumpQueryPointListGridCtrl.cs">
diff --git a/WinFrmUI/Yw.WinFrmUI.Map.Core/Yw.WinFrmUI.Map.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Map.Core/Yw.WinFrmUI.Map.Core.csproj
index 62224f7..e97cabb 100644
--- a/WinFrmUI/Yw.WinFrmUI.Map.Core/Yw.WinFrmUI.Map.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Map.Core/Yw.WinFrmUI.Map.Core.csproj
@@ -146,7 +146,7 @@
   </ItemGroup>
 
   <ItemGroup>
-    <PackageReference Include="Yw.BLL.Map.Core" Version="3.0.7" />
+    <PackageReference Include="Yw.BLL.Map.Core" Version="3.0.9" />
     <PackageReference Include="Yw.WebBrower.Core" Version="3.0.2" />
     <PackageReference Include="Yw.WebView2.WinFrmUI.Core" Version="3.0.1" />
   </ItemGroup>
diff --git a/WinFrmUI/Yw.WinFrmUI.Unit.Core/Yw.WinFrmUI.Unit.Core.csproj b/WinFrmUI/Yw.WinFrmUI.Unit.Core/Yw.WinFrmUI.Unit.Core.csproj
index a8a08d7..ccd32df 100644
--- a/WinFrmUI/Yw.WinFrmUI.Unit.Core/Yw.WinFrmUI.Unit.Core.csproj
+++ b/WinFrmUI/Yw.WinFrmUI.Unit.Core/Yw.WinFrmUI.Unit.Core.csproj
@@ -19,7 +19,7 @@
 
   <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
-    <PackageReference Include="Yw.BLL.Unit.Core" Version="3.0.5" />
+    <PackageReference Include="Yw.BLL.Unit.Core" Version="3.0.6" />
   </ItemGroup>
 
   <ItemGroup>

--
Gitblit v1.9.3