From 0618fadff0d2e95716db801ef0c7a96ff9e1f20e Mon Sep 17 00:00:00 2001
From: duheng <2784771470@qq.com>
Date: 星期六, 22 六月 2024 21:52:00 +0800
Subject: [PATCH] 优化项目管理界面增删改

---
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.resx                        |   18 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.designer.cs                |  190 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/Properties/Resources.Designer.cs                     |   63 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.cs                         |   64 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.resx                   |   55 
 HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs                                       |   82 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.Designer.cs            |  373 +++++
 HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs                                |   22 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/LocViewModel.cs              |   10 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/Properties/Resources.resx                            |  120 +
 HStation.BLL.Xhs.Core/01-interface/IXhsProject.cs                                           |    9 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/FixationReceivedViewModel.cs |    9 
 HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs                                |  199 ++
 HStation.BLL.Xhs.Core/04-bll/02-projectItem/XhsProjectItem.cs                               |    8 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.cs                     |   71 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.cs                        |   60 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.cs                      |  103 +
 HStation.Dto.Xhs.Core/01-project/AddXhsProjectInput.cs                                      |    5 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.cs                         |   59 
 HStation.Dto.Xhs.Core/01-project/UpdateXhsProjectInput.cs                                   |   14 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.Designer.cs            |  123 +
 Desktop/HStation.DeskTop.Xhs.Main/Login/LoginFrm.Designer.cs                                |   70 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj                 |   21 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.resx                       |  123 +
 HStation.Dto.Xhs.Core/01-project/XhsProjectDto.cs                                           |    7 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.resx                    |  123 +
 HStation.Service.Xhs.Core/02-model/XhsProject.cs                                            |    5 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.designer.cs               |  202 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.resx                      |  120 +
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/ProjectViewModel.cs          |   66 
 HStation.Dto.Xhs.Core/02-projectItem/XhsProjectItemDto.cs                                   |    6 
 HStation.BLL.Xhs.Core/02-httpclient/XhsProject.cs                                           |   18 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.cs                     |   66 
 HStation.BLL.Xhs.Core/03-localclient/XhsProject.cs                                          |   36 
 HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs                                    |  176 ++
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/AmapLocationViewModel.cs     |   26 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.designer.cs                |  159 -
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj.user            |    9 
 Desktop/HStation.DeskTop.Xhs.Main/GuideMain.Designer.cs                                     |    3 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.resx                   |  123 +
 HStation.Service.Xhs.Core/01-entity/XhsProject.cs                                           |    6 
 Desktop/HStation.DeskTop.Xhs.Main/GuideMain.resx                                            |   82 
 /dev/null                                                                                   |   19 
 Desktop/HStation.DeskTop.Xhs.Main/Program.cs                                                |   35 
 HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItem.cs                                       |    5 
 HStation.BLL.Xhs.Core/03-localclient/XhsProjectItem.cs                                      |   10 
 HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs                               |   81 
 HStation.BLL.Xhs.Core/01-interface/IXhsProjectItem.cs                                       |    2 
 Desktop/HStation.DeskTop.Xhs.Main/GuideMain.cs                                              |   16 
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.designer.cs             |  445 ++++++
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.designer.cs                 |  447 ++---
 WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.cs                          |  132 +
 52 files changed, 3,680 insertions(+), 616 deletions(-)

diff --git a/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.Designer.cs b/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.Designer.cs
index bdf7534..1b193f5 100644
--- a/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.Designer.cs
+++ b/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.Designer.cs
@@ -368,7 +368,7 @@
             // 
             barBtnProject.Caption = "椤圭洰绠$悊";
             barBtnProject.Id = 12;
-            barBtnProject.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barButtonItem1.ImageOptions.SvgImage");
+            barBtnProject.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("barBtnProject.ImageOptions.SvgImage");
             barBtnProject.Name = "barBtnProject";
             barBtnProject.ItemClick += barBtnProject_ItemClick;
             // 
@@ -477,6 +477,7 @@
             Name = "GuideMain";
             StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen;
             Text = "s";
+            Load += GuideMain_Load;
             ((System.ComponentModel.ISupportInitialize)documentManager1).EndInit();
             ((System.ComponentModel.ISupportInitialize)tabbedView1).EndInit();
             ((System.ComponentModel.ISupportInitialize)tileNavPane).EndInit();
diff --git a/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.cs b/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.cs
index d819966..e15dd11 100644
--- a/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.cs
+++ b/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.cs
@@ -408,5 +408,21 @@
         {
             this.tabbedView1.Controller.CloseAll();
         }
+
+        private void GuideMain_Load(object sender, EventArgs e)
+        {
+            var guid = new SurfaceGuid()
+            {
+                Function = "椤圭洰绠$悊",
+                Modular = eModular.Basic
+            };
+            if (!IsExistPage(guid, true))
+            {
+                var page = new XhsProjectListPage();
+                page.PageTitle.Caption = guid.Function;
+                page.SurfaceGuid = guid;
+                CreatePage(page, guid);
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.resx b/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.resx
index 0ba83d2..44e34fe 100644
--- a/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.resx
+++ b/Desktop/HStation.DeskTop.Xhs.Main/GuideMain.resx
@@ -18,7 +18,7 @@
     <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="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>
@@ -135,7 +135,7 @@
   <assembly alias="DevExpress.Data.v23.2" name="DevExpress.Data.v23.2, Culture=neutral, PublicKeyToken=b88d1754d700e49a" />
   <data name="nbMapOverview.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABMCAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -151,7 +151,7 @@
   </data>
   <data name="nbSystemConfig.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAO4DAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -175,7 +175,7 @@
   </data>
   <data name="nbSystemAuthority.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAACUDAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -196,7 +196,7 @@
   </data>
   <data name="nbMinimize.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAFICAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -213,7 +213,7 @@
   </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/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAD0DAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -232,12 +232,12 @@
         LDE2eiIgY2xhc3M9IlJlZCIgLz4NCiAgICA8L2c+DQogIDwvZz4NCjwvc3ZnPgs=
 </value>
   </data>
-  <metadata name="popSystemConfig.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>325, 17</value>
+  <metadata name="barManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>190, 17</value>
   </metadata>
   <data name="barBtnSupplier.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAALsDAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -260,7 +260,7 @@
   </data>
   <data name="barBtnBuildingType.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAIIDAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -282,7 +282,7 @@
   </data>
   <data name="barBtnBuilding.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPoCAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -302,7 +302,7 @@
   </data>
   <data name="barBtnFacilities.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAHUCAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -320,7 +320,7 @@
   </data>
   <data name="barBtnSystemType.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAPMFAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -353,7 +353,7 @@
   </data>
   <data name="barBtnPart.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABMCAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -369,7 +369,7 @@
   </data>
   <data name="barBtnWaterEquivalent.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAP8HAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -409,31 +409,9 @@
         c3ZnPgs=
 </value>
   </data>
-  <data name="barButtonItem1.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
-    <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
-        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
-        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKkCAAAC77u/
-        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
-        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
-        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
-        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
-        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
-        LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuR3JlZW57ZmlsbDojMDM5
-        QzIzO30KCS5CbHVle2ZpbGw6IzExNzdENzt9Cjwvc3R5bGU+DQogIDxnIGlkPSJQYWNrYWdlIj4NCiAg
-        ICA8cGF0aCBkPSJNMjUsOGgtM3Y0aC0yVjhoLTh2NGgtMlY4SDdDNi41LDgsNiw4LjUsNiw5djIwYzAs
-        MC41LDAuNSwxLDEsMWgxOGMwLjUsMCwxLTAuNSwxLTFWOUMyNiw4LjUsMjUuNSw4LDI1LDh6ICAgIiBj
-        bGFzcz0iWWVsbG93IiAvPg0KICAgIDxwYXRoIGQ9Ik0xNiw0YzIuMiwwLDQsMS44LDQsNGgyYzAtMy4z
-        LTIuNy02LTYtNnMtNiwyLjctNiw2aDJDMTIsNS44LDEzLjgsNCwxNiw0eiIgY2xhc3M9IlllbGxvdyIg
-        Lz4NCiAgPC9nPg0KPC9zdmc+Cw==
-</value>
-  </data>
-  <metadata name="barManager1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
-    <value>190, 17</value>
-  </metadata>
   <data name="barBtnUser.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANcEAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -461,7 +439,7 @@
   </data>
   <data name="barBtnAuthority.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAIECAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -479,7 +457,7 @@
   </data>
   <data name="barBtnSystemLog.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAANYEAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -507,7 +485,7 @@
   </data>
   <data name="barBtnCorp.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
     <value>
-        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIyLjIsIFZlcnNpb249MjIuMi40
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
         LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
         dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAABsDAAAC77u/
         PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
@@ -526,6 +504,28 @@
         PC9nPg0KPC9zdmc+Cw==
 </value>
   </data>
+  <data name="barBtnProject.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAKkCAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLlllbGxvd3tmaWxsOiNGRkIxMTU7fQoJ
+        LlJlZHtmaWxsOiNEMTFDMUM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuR3JlZW57ZmlsbDojMDM5
+        QzIzO30KCS5CbHVle2ZpbGw6IzExNzdENzt9Cjwvc3R5bGU+DQogIDxnIGlkPSJQYWNrYWdlIj4NCiAg
+        ICA8cGF0aCBkPSJNMjUsOGgtM3Y0aC0yVjhoLTh2NGgtMlY4SDdDNi41LDgsNiw4LjUsNiw5djIwYzAs
+        MC41LDAuNSwxLDEsMWgxOGMwLjUsMCwxLTAuNSwxLTFWOUMyNiw4LjUsMjUuNSw4LDI1LDh6ICAgIiBj
+        bGFzcz0iWWVsbG93IiAvPg0KICAgIDxwYXRoIGQ9Ik0xNiw0YzIuMiwwLDQsMS44LDQsNGgyYzAtMy4z
+        LTIuNy02LTYtNnMtNiwyLjctNiw2aDJDMTIsNS44LDEzLjgsNCwxNiw0eiIgY2xhc3M9IlllbGxvdyIg
+        Lz4NCiAgPC9nPg0KPC9zdmc+Cw==
+</value>
+  </data>
+  <metadata name="popSystemConfig.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
+    <value>325, 17</value>
+  </metadata>
   <metadata name="popSystemAuthority.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>483, 17</value>
   </metadata>
diff --git a/Desktop/HStation.DeskTop.Xhs.Main/Login/LoginFrm.Designer.cs b/Desktop/HStation.DeskTop.Xhs.Main/Login/LoginFrm.Designer.cs
index d4de464..45a87f9 100644
--- a/Desktop/HStation.DeskTop.Xhs.Main/Login/LoginFrm.Designer.cs
+++ b/Desktop/HStation.DeskTop.Xhs.Main/Login/LoginFrm.Designer.cs
@@ -103,19 +103,19 @@
             layoutControl1.Name = "layoutControl1";
             layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(203, 181, 650, 400);
             layoutControl1.Root = Root;
-            layoutControl1.Size = new System.Drawing.Size(1077, 514);
+            layoutControl1.Size = new System.Drawing.Size(1079, 533);
             layoutControl1.TabIndex = 0;
             layoutControl1.Text = "layoutControl1";
             // 
             // marqueeProgressBarControl1
             // 
             marqueeProgressBarControl1.EditValue = 0;
-            marqueeProgressBarControl1.Location = new System.Drawing.Point(0, 499);
+            marqueeProgressBarControl1.Location = new System.Drawing.Point(0, 518);
             marqueeProgressBarControl1.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             marqueeProgressBarControl1.Name = "marqueeProgressBarControl1";
             marqueeProgressBarControl1.Properties.MarqueeAnimationSpeed = 20;
             marqueeProgressBarControl1.Properties.ProgressViewStyle = DevExpress.XtraEditors.Controls.ProgressViewStyle.Solid;
-            marqueeProgressBarControl1.Size = new System.Drawing.Size(1077, 15);
+            marqueeProgressBarControl1.Size = new System.Drawing.Size(1079, 15);
             marqueeProgressBarControl1.StyleController = layoutControl1;
             marqueeProgressBarControl1.TabIndex = 6;
             // 
@@ -129,11 +129,11 @@
             layoutControl2.Controls.Add(txtLoginName);
             layoutControl2.Controls.Add(labTitle);
             layoutControl2.HiddenItems.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem9 });
-            layoutControl2.Location = new System.Drawing.Point(642, 171);
+            layoutControl2.Location = new System.Drawing.Point(644, 172);
             layoutControl2.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             layoutControl2.Name = "layoutControl2";
             layoutControl2.Root = layoutControlGroup1;
-            layoutControl2.Size = new System.Drawing.Size(302, 253);
+            layoutControl2.Size = new System.Drawing.Size(302, 270);
             layoutControl2.TabIndex = 5;
             layoutControl2.Text = "layoutControl2";
             // 
@@ -159,10 +159,10 @@
             btnCancel.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Warning;
             btnCancel.Appearance.Options.UseBackColor = true;
             btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
-            btnCancel.Location = new System.Drawing.Point(13, 206);
+            btnCancel.Location = new System.Drawing.Point(14, 210);
             btnCancel.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             btnCancel.Name = "btnCancel";
-            btnCancel.Size = new System.Drawing.Size(134, 30);
+            btnCancel.Size = new System.Drawing.Size(133, 28);
             btnCancel.StyleController = layoutControl2;
             btnCancel.TabIndex = 9;
             btnCancel.Text = "鍙栨秷";
@@ -172,10 +172,10 @@
             // 
             btnLogin.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
             btnLogin.Appearance.Options.UseBackColor = true;
-            btnLogin.Location = new System.Drawing.Point(155, 206);
+            btnLogin.Location = new System.Drawing.Point(155, 210);
             btnLogin.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             btnLogin.Name = "btnLogin";
-            btnLogin.Size = new System.Drawing.Size(134, 30);
+            btnLogin.Size = new System.Drawing.Size(133, 28);
             btnLogin.StyleController = layoutControl2;
             btnLogin.TabIndex = 8;
             btnLogin.Text = "鐧诲綍";
@@ -183,39 +183,39 @@
             // 
             // ckRemember
             // 
-            ckRemember.Location = new System.Drawing.Point(13, 166);
+            ckRemember.Location = new System.Drawing.Point(14, 170);
             ckRemember.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             ckRemember.Name = "ckRemember";
             ckRemember.Properties.AllowFocused = false;
             ckRemember.Properties.AutoHeight = false;
             ckRemember.Properties.AutoWidth = true;
             ckRemember.Properties.Caption = "璁颁綇瀵嗙爜";
-            ckRemember.Size = new System.Drawing.Size(71, 20);
+            ckRemember.Size = new System.Drawing.Size(71, 18);
             ckRemember.StyleController = layoutControl2;
             ckRemember.TabIndex = 7;
             // 
             // txtPwd
             // 
             txtPwd.EditValue = "";
-            txtPwd.Location = new System.Drawing.Point(13, 118);
+            txtPwd.Location = new System.Drawing.Point(14, 122);
             txtPwd.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             txtPwd.Name = "txtPwd";
             txtPwd.Properties.AutoHeight = false;
             txtPwd.Properties.NullValuePrompt = "璇疯緭鍏ュ瘑鐮�";
             txtPwd.Properties.PasswordChar = '*';
-            txtPwd.Size = new System.Drawing.Size(276, 28);
+            txtPwd.Size = new System.Drawing.Size(274, 26);
             txtPwd.StyleController = layoutControl2;
             txtPwd.TabIndex = 6;
             txtPwd.KeyPress += txtPwd_KeyPress;
             // 
             // txtLoginName
             // 
-            txtLoginName.Location = new System.Drawing.Point(13, 74);
+            txtLoginName.Location = new System.Drawing.Point(14, 78);
             txtLoginName.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             txtLoginName.Name = "txtLoginName";
             txtLoginName.Properties.AutoHeight = false;
             txtLoginName.Properties.NullValuePrompt = "璇疯緭鍏ョ敤鎴峰悕";
-            txtLoginName.Size = new System.Drawing.Size(276, 28);
+            txtLoginName.Size = new System.Drawing.Size(274, 26);
             txtLoginName.StyleController = layoutControl2;
             txtLoginName.TabIndex = 5;
             txtLoginName.KeyPress += txtLoginName_KeyPress;
@@ -226,10 +226,10 @@
             labTitle.Appearance.ForeColor = System.Drawing.Color.FromArgb(7, 63, 198);
             labTitle.Appearance.Options.UseFont = true;
             labTitle.Appearance.Options.UseForeColor = true;
-            labTitle.Location = new System.Drawing.Point(13, 9);
+            labTitle.Location = new System.Drawing.Point(14, 13);
             labTitle.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             labTitle.Name = "labTitle";
-            labTitle.Size = new System.Drawing.Size(276, 55);
+            labTitle.Size = new System.Drawing.Size(274, 53);
             labTitle.StyleController = layoutControl2;
             labTitle.TabIndex = 4;
             labTitle.Text = "鐢ㄦ埛鐧诲綍";
@@ -273,7 +273,7 @@
             rowDefinition5.Height = 44D;
             rowDefinition5.SizeType = System.Windows.Forms.SizeType.Absolute;
             layoutControlGroup1.OptionsTableLayoutGroup.RowDefinitions.AddRange(new DevExpress.XtraLayout.RowDefinition[] { rowDefinition1, rowDefinition2, rowDefinition3, rowDefinition4, rowDefinition5 });
-            layoutControlGroup1.Size = new System.Drawing.Size(302, 253);
+            layoutControlGroup1.Size = new System.Drawing.Size(302, 270);
             layoutControlGroup1.TextVisible = false;
             // 
             // layoutControlItem3
@@ -283,7 +283,7 @@
             layoutControlItem3.MinSize = new System.Drawing.Size(75, 17);
             layoutControlItem3.Name = "layoutControlItem3";
             layoutControlItem3.OptionsTableLayoutItem.ColumnSpan = 2;
-            layoutControlItem3.Size = new System.Drawing.Size(284, 59);
+            layoutControlItem3.Size = new System.Drawing.Size(282, 59);
             layoutControlItem3.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem3.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 2, 1, 1);
             layoutControlItem3.TextAlignMode = DevExpress.XtraLayout.TextAlignModeItem.AutoSize;
@@ -299,7 +299,7 @@
             layoutControlItem4.Name = "layoutControlItem4";
             layoutControlItem4.OptionsTableLayoutItem.ColumnSpan = 2;
             layoutControlItem4.OptionsTableLayoutItem.RowIndex = 1;
-            layoutControlItem4.Size = new System.Drawing.Size(284, 44);
+            layoutControlItem4.Size = new System.Drawing.Size(282, 44);
             layoutControlItem4.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem4.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 2, 7, 7);
             layoutControlItem4.Text = "鐢ㄦ埛鍚�";
@@ -314,7 +314,7 @@
             layoutControlItem5.Name = "layoutControlItem5";
             layoutControlItem5.OptionsTableLayoutItem.ColumnSpan = 2;
             layoutControlItem5.OptionsTableLayoutItem.RowIndex = 2;
-            layoutControlItem5.Size = new System.Drawing.Size(284, 44);
+            layoutControlItem5.Size = new System.Drawing.Size(282, 44);
             layoutControlItem5.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem5.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 2, 7, 7);
             layoutControlItem5.Text = "瀵嗙爜";
@@ -328,7 +328,7 @@
             layoutControlItem6.MinSize = new System.Drawing.Size(80, 20);
             layoutControlItem6.Name = "layoutControlItem6";
             layoutControlItem6.OptionsTableLayoutItem.RowIndex = 3;
-            layoutControlItem6.Size = new System.Drawing.Size(142, 44);
+            layoutControlItem6.Size = new System.Drawing.Size(141, 44);
             layoutControlItem6.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem6.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 2, 11, 11);
             layoutControlItem6.Text = "璁颁綇瀵嗙爜";
@@ -339,13 +339,13 @@
             // layoutControlItem7
             // 
             layoutControlItem7.Control = btnLogin;
-            layoutControlItem7.Location = new System.Drawing.Point(142, 191);
+            layoutControlItem7.Location = new System.Drawing.Point(141, 191);
             layoutControlItem7.MaxSize = new System.Drawing.Size(0, 46);
             layoutControlItem7.MinSize = new System.Drawing.Size(87, 46);
             layoutControlItem7.Name = "layoutControlItem7";
             layoutControlItem7.OptionsTableLayoutItem.ColumnIndex = 1;
             layoutControlItem7.OptionsTableLayoutItem.RowIndex = 4;
-            layoutControlItem7.Size = new System.Drawing.Size(142, 48);
+            layoutControlItem7.Size = new System.Drawing.Size(141, 59);
             layoutControlItem7.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem7.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 2, 7, 7);
             layoutControlItem7.TextSize = new System.Drawing.Size(0, 0);
@@ -359,7 +359,7 @@
             layoutControlItem8.MinSize = new System.Drawing.Size(87, 46);
             layoutControlItem8.Name = "layoutControlItem8";
             layoutControlItem8.OptionsTableLayoutItem.RowIndex = 4;
-            layoutControlItem8.Size = new System.Drawing.Size(142, 48);
+            layoutControlItem8.Size = new System.Drawing.Size(141, 59);
             layoutControlItem8.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem8.Spacing = new DevExpress.XtraLayout.Utils.Padding(2, 2, 7, 7);
             layoutControlItem8.TextSize = new System.Drawing.Size(0, 0);
@@ -367,7 +367,7 @@
             // 
             // picSpecial
             // 
-            picSpecial.Location = new System.Drawing.Point(2, 60);
+            picSpecial.Location = new System.Drawing.Point(2, 61);
             picSpecial.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
             picSpecial.Name = "picSpecial";
             picSpecial.Properties.AllowFocused = false;
@@ -377,7 +377,7 @@
             picSpecial.Properties.NullText = " ";
             picSpecial.Properties.ShowMenu = false;
             picSpecial.Properties.SizeMode = DevExpress.XtraEditors.Controls.PictureSizeMode.Zoom;
-            picSpecial.Size = new System.Drawing.Size(636, 364);
+            picSpecial.Size = new System.Drawing.Size(638, 381);
             picSpecial.StyleController = layoutControl1;
             picSpecial.TabIndex = 4;
             // 
@@ -408,7 +408,7 @@
             rowDefinition10.SizeType = System.Windows.Forms.SizeType.Absolute;
             Root.OptionsTableLayoutGroup.RowDefinitions.AddRange(new DevExpress.XtraLayout.RowDefinition[] { rowDefinition6, rowDefinition7, rowDefinition8, rowDefinition9, rowDefinition10 });
             Root.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            Root.Size = new System.Drawing.Size(1077, 514);
+            Root.Size = new System.Drawing.Size(1079, 533);
             Root.TextVisible = false;
             // 
             // layoutControlItem1
@@ -418,7 +418,7 @@
             layoutControlItem1.Name = "layoutControlItem1";
             layoutControlItem1.OptionsTableLayoutItem.RowIndex = 1;
             layoutControlItem1.OptionsTableLayoutItem.RowSpan = 2;
-            layoutControlItem1.Size = new System.Drawing.Size(640, 366);
+            layoutControlItem1.Size = new System.Drawing.Size(642, 385);
             layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
             layoutControlItem1.TextVisible = false;
             // 
@@ -434,7 +434,7 @@
             labSysTitle.Name = "labSysTitle";
             labSysTitle.OptionsTableLayoutItem.ColumnSpan = 3;
             labSysTitle.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            labSysTitle.Size = new System.Drawing.Size(1077, 59);
+            labSysTitle.Size = new System.Drawing.Size(1079, 59);
             labSysTitle.Text = "寰幆姘村垎鏋愮郴缁�";
             labSysTitle.TextAlignMode = DevExpress.XtraLayout.TextAlignModeItem.AutoSize;
             labSysTitle.TextSize = new System.Drawing.Size(224, 39);
@@ -443,24 +443,24 @@
             // layoutControlItem2
             // 
             layoutControlItem2.Control = layoutControl2;
-            layoutControlItem2.Location = new System.Drawing.Point(640, 170);
+            layoutControlItem2.Location = new System.Drawing.Point(642, 170);
             layoutControlItem2.Name = "layoutControlItem2";
             layoutControlItem2.OptionsTableLayoutItem.ColumnIndex = 1;
             layoutControlItem2.OptionsTableLayoutItem.RowIndex = 2;
-            layoutControlItem2.Size = new System.Drawing.Size(306, 255);
+            layoutControlItem2.Size = new System.Drawing.Size(306, 274);
             layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
             layoutControlItem2.TextVisible = false;
             // 
             // itemForProgress
             // 
             itemForProgress.Control = marqueeProgressBarControl1;
-            itemForProgress.Location = new System.Drawing.Point(0, 499);
+            itemForProgress.Location = new System.Drawing.Point(0, 518);
             itemForProgress.MinSize = new System.Drawing.Size(44, 7);
             itemForProgress.Name = "itemForProgress";
             itemForProgress.OptionsTableLayoutItem.ColumnSpan = 3;
             itemForProgress.OptionsTableLayoutItem.RowIndex = 4;
             itemForProgress.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            itemForProgress.Size = new System.Drawing.Size(1077, 15);
+            itemForProgress.Size = new System.Drawing.Size(1079, 15);
             itemForProgress.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             itemForProgress.TextSize = new System.Drawing.Size(0, 0);
             itemForProgress.TextVisible = false;
@@ -472,7 +472,7 @@
             Appearance.Options.UseBackColor = true;
             AutoScaleDimensions = new System.Drawing.SizeF(7F, 14F);
             AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
-            ClientSize = new System.Drawing.Size(1077, 514);
+            ClientSize = new System.Drawing.Size(1079, 533);
             Controls.Add(layoutControl1);
             DoubleBuffered = true;
             FormBorderStyle = System.Windows.Forms.FormBorderStyle.None;
diff --git a/Desktop/HStation.DeskTop.Xhs.Main/Program.cs b/Desktop/HStation.DeskTop.Xhs.Main/Program.cs
index 03cfd0e..bc94039 100644
--- a/Desktop/HStation.DeskTop.Xhs.Main/Program.cs
+++ b/Desktop/HStation.DeskTop.Xhs.Main/Program.cs
@@ -1,4 +1,5 @@
 锘縰sing DevExpress.LookAndFeel;
+using DevExpress.XtraEditors.Controls;
 using HStation.DeskTop;
 using Mapster;
 using System;
@@ -47,6 +48,7 @@
                 DevExpress.XtraEditors.WindowsFormsSettings.DefaultMenuFont = font;
                 DevExpress.Utils.AppearanceObject.DefaultFont = font;
 
+                DevExpress.XtraEditors.Controls.Localizer.Active = new XtraMessBoxClass();
                 //zh-Hans鐣岄潰缈昏瘧
                 System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("zh-Hans");
                 System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("zh-Hans");
@@ -84,5 +86,38 @@
             Yw.LogHelper.Error("绯荤粺鍑虹幇鏈煡寮傚父,ERROR:255", ex);
             MessageBox.Show($"绯荤粺鍑虹幇鏈煡寮傚父锛岃閲嶅惎绯荤粺锛乗r\n{ex.Message}");
         }
+
+        public class XtraMessBoxClass : Localizer
+        {
+            public override string GetLocalizedString(DevExpress.XtraEditors.Controls.StringId id)
+            {
+                switch (id)
+                {
+                    case StringId.XtraMessageBoxCancelButtonText:
+                        return "鍙栨秷";
+
+                    case StringId.XtraMessageBoxOkButtonText:
+                        return "纭畾";
+
+                    case StringId.XtraMessageBoxYesButtonText:
+                        return "鏄�";
+
+                    case StringId.XtraMessageBoxNoButtonText:
+                        return "鍚�";
+
+                    case StringId.XtraMessageBoxIgnoreButtonText:
+                        return "蹇界暐";
+
+                    case StringId.XtraMessageBoxAbortButtonText:
+                        return "涓";
+
+                    case StringId.XtraMessageBoxRetryButtonText:
+                        return "閲嶈瘯";
+
+                    default:
+                        return base.GetLocalizedString(id);
+                }
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/HStation.BLL.Xhs.Core/01-interface/IXhsProject.cs b/HStation.BLL.Xhs.Core/01-interface/IXhsProject.cs
index 03b1b3b..e6cfa69 100644
--- a/HStation.BLL.Xhs.Core/01-interface/IXhsProject.cs
+++ b/HStation.BLL.Xhs.Core/01-interface/IXhsProject.cs
@@ -7,6 +7,15 @@
     /// </summary>
     public interface IXhsProject : IBaseCAL<AddXhsProjectInput, UpdateXhsProjectInput, XhsProjectDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter, IUpdateUseStatus
     {
+        /// <summary>
+        /// 鎻掑叆鎷撳睍
+        /// </summary>
+        Task<long> InsertEx(AddXhsProjectInput projectInput, AddXhsProjectItemInput itemInput, AddXhsProjectItemModelInput modelInput, AddXhsProjectItemModelMapInput MapInput);
 
+        //鍒犻櫎鎷撳睍
+        Task<bool> DeleteEx(long ID);
+
+        //缂栬緫鎷撳睍
+        Task<bool> UpdateEx(UpdateXhsProjectInput projectInput, UpdateXhsProjectItemInput itemInput);
     }
 }
\ No newline at end of file
diff --git a/HStation.BLL.Xhs.Core/01-interface/IXhsProjectItem.cs b/HStation.BLL.Xhs.Core/01-interface/IXhsProjectItem.cs
index 0f787e3..2887c3c 100644
--- a/HStation.BLL.Xhs.Core/01-interface/IXhsProjectItem.cs
+++ b/HStation.BLL.Xhs.Core/01-interface/IXhsProjectItem.cs
@@ -7,5 +7,7 @@
     /// </summary>
     public interface IXhsProjectItem : IBaseCAL<AddXhsProjectItemInput, UpdateXhsProjectItemInput, XhsProjectItemDto>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter, IUpdateUseStatus
     {
+        //閫氳繃椤圭洰id鏌ユ壘
+        Task<XhsProjectItemDto> GetByPrjID(long ID);
     }
 }
\ No newline at end of file
diff --git a/HStation.BLL.Xhs.Core/02-httpclient/XhsProject.cs b/HStation.BLL.Xhs.Core/02-httpclient/XhsProject.cs
index bd5d7ea..1527873 100644
--- a/HStation.BLL.Xhs.Core/02-httpclient/XhsProject.cs
+++ b/HStation.BLL.Xhs.Core/02-httpclient/XhsProject.cs
@@ -3,7 +3,7 @@
 namespace HStation.CAL.HttpClient
 {
     /// <summary>
-    /// 
+    ///
     /// </summary>
     public class XhsProject : BaseCAL_Paras_Flags_TagName_Sorter_UseStatus<AddXhsProjectInput, UpdateXhsProjectInput, XhsProjectDto>, IXhsProject
     {
@@ -11,5 +11,21 @@
         {
             get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project"; }
         }
+
+        public Task<bool> DeleteEx(long ID)
+        {
+            return default;
+        }
+
+        public async Task<long> InsertEx(AddXhsProjectInput projectInput, AddXhsProjectItemInput itemInput, AddXhsProjectItemModelInput modelInput, AddXhsProjectItemModelMapInput MapInput)
+        {
+            //    return await GetUrl("InsertEx@V1.0").Post<long>(projectInput, itemInput, modelInput, MapInput);
+            return default;
+        }
+
+        public Task<bool> UpdateEx(UpdateXhsProjectInput projectInput, UpdateXhsProjectItemInput itemInput)
+        {
+            throw new NotImplementedException();
+        }
     }
 }
\ No newline at end of file
diff --git a/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItem.cs b/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItem.cs
index 87243e3..d5be948 100644
--- a/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItem.cs
+++ b/HStation.BLL.Xhs.Core/02-httpclient/XhsProjectItem.cs
@@ -11,5 +11,10 @@
         {
             get { return $"{HStation.BLL.Xhs.ConfigHelper.HttpUrl}/Xhs/Project/Item"; }
         }
+
+        public Task<XhsProjectItemDto> GetByPrjID(long ID)
+        {
+            throw new NotImplementedException();
+        }
     }
 }
\ No newline at end of file
diff --git a/HStation.BLL.Xhs.Core/03-localclient/XhsProject.cs b/HStation.BLL.Xhs.Core/03-localclient/XhsProject.cs
index 66f156e..b2ee939 100644
--- a/HStation.BLL.Xhs.Core/03-localclient/XhsProject.cs
+++ b/HStation.BLL.Xhs.Core/03-localclient/XhsProject.cs
@@ -1,4 +1,5 @@
 锘縰sing HStation.Xhs;
+using Yw.Dto;
 
 namespace HStation.CAL.LocalClient
 {
@@ -233,8 +234,6 @@
 
         #endregion Update
 
-
-
         #region Delete
 
         /// <summary>
@@ -276,6 +275,39 @@
             });
         }
 
+        public Task<long> InsertEx(AddXhsProjectInput projectInput, AddXhsProjectItemInput itemInput, AddXhsProjectItemModelInput modelInput, AddXhsProjectItemModelMapInput MapInput)
+        {
+            return Task.Factory.StartNew(() =>
+            {
+                var project = projectInput.Adapt<AddXhsProjectInput, Model.XhsProject>();
+                var item = itemInput.Adapt<AddXhsProjectItemInput, Model.XhsProjectItem>();
+                var model = modelInput.Adapt<AddXhsProjectItemModelInput, Model.XhsProjectItemModel>();
+                var map = MapInput.Adapt<AddXhsProjectItemModelMapInput, Model.XhsProjectItemModelMap>();
+                var bol = _service.InsertsEx(project, item, model, map);
+                return bol;
+            });
+        }
+
+        public Task<bool> DeleteEx(long ID)
+        {
+            return Task.Factory.StartNew(() =>
+            {
+                var bol = _service.DeleteEx(ID);
+                return bol;
+            });
+        }
+
+        public Task<bool> UpdateEx(UpdateXhsProjectInput projectInput, UpdateXhsProjectItemInput itemInput)
+        {
+            return Task.Factory.StartNew(() =>
+            {
+                var project = projectInput.Adapt<UpdateXhsProjectInput, Model.XhsProject>();
+                var item = itemInput.Adapt<UpdateXhsProjectItemInput, Model.XhsProjectItem>();
+                var bol = _service.UpdateEx(project, item);
+                return bol;
+            });
+        }
+
         #endregion Delete
     }
 }
\ No newline at end of file
diff --git a/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItem.cs b/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItem.cs
index c21e78f..339e6f9 100644
--- a/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItem.cs
+++ b/HStation.BLL.Xhs.Core/03-localclient/XhsProjectItem.cs
@@ -37,6 +37,16 @@
         }
 
         /// <summary>
+        /// 閫氳繃 椤圭洰ID 鑾峰彇
+        /// </summary>
+        public async Task<XhsProjectItemDto> GetByPrjID(long ID)
+        {
+            var all = await GetAll();
+            var model = all.Where(x => x.ProjectID == ID).FirstOrDefault();
+            return model == null ? null : model;
+        }
+
+        /// <summary>
         /// 閫氳繃 Ids 鑾峰彇
         /// </summary>
         public async Task<List<XhsProjectItemDto>> GetByIds(List<long> Ids)
diff --git a/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs b/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs
index 2cca614..226b89e 100644
--- a/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs
+++ b/HStation.BLL.Xhs.Core/04-bll/01-project/XhsProject.cs
@@ -1,18 +1,19 @@
 锘縰sing HStation.CAL;
+using Yw.DAL.Basic;
 
 namespace HStation.BLL
 {
     /// <summary>
-    /// 
+    ///
     /// </summary>
     public class XhsProject : IXhsProject
     {
         private readonly HStation.CAL.IXhsProject _cal = CALCreateHelper.CreateCAL<HStation.CAL.IXhsProject>();
 
-        #region Query銆�
+        #region Query
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<List<XhsProjectDto>> GetAll()
         {
@@ -20,7 +21,7 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<XhsProjectDto> GetByID(long ID)
         {
@@ -28,27 +29,42 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<List<XhsProjectDto>> GetByIds(List<long> Ids)
         {
             return await _cal.GetByIds(Ids);
         }
 
-        #endregion
+        #endregion Query
 
         #region Insert
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<long> Insert(AddXhsProjectInput model)
         {
             return await _cal.Insert(model);
         }
 
+        public async Task<long> InsertEx(AddXhsProjectInput projectInput, AddXhsProjectItemInput itemInput, AddXhsProjectItemModelInput modelInput, AddXhsProjectItemModelMapInput MapInput)
+        {
+            return await _cal.InsertEx(projectInput, itemInput, modelInput, MapInput);
+        }
+
+        public async Task<bool> DeleteEx(long ID)
+        {
+            return await _cal.DeleteEx(ID);
+        }
+
+        public async Task<bool> UpdateEx(UpdateXhsProjectInput projectInput, UpdateXhsProjectItemInput itemInput)
+        {
+            return await _cal.UpdateEx(projectInput, itemInput);
+        }
+
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> Inserts(List<AddXhsProjectInput> list)
         {
@@ -56,19 +72,19 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> BulkInserts(List<AddXhsProjectInput> list)
         {
             return await _cal.BulkInserts(list);
         }
 
-        #endregion
+        #endregion Insert
 
         #region Update
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> Update(UpdateXhsProjectInput model)
         {
@@ -76,7 +92,7 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> Updates(List<UpdateXhsProjectInput> list)
         {
@@ -84,7 +100,7 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> BulkUpdates(List<UpdateXhsProjectInput> list)
         {
@@ -92,7 +108,7 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> UpdateSortCode(long ID, int SortCode)
         {
@@ -100,7 +116,7 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> UpdateSorter(List<UpdateSortCodeInput> Sorters)
         {
@@ -108,7 +124,7 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public Task<bool> UpdateParas(long ID, Dictionary<string, string> Paras)
         {
@@ -116,7 +132,7 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public Task<bool> UpdateFlags(long ID, List<string> Flags)
         {
@@ -124,27 +140,19 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public Task<bool> UpdateTagName(long ID, string TagName)
         {
             return _cal.UpdateTagName(ID, TagName);
         }
 
-        /// <summary>
-        /// 
-        /// </summary>
-        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
-        {
-            return _cal.UpdateUseStatus(ID, UseStatus);
-        }
+        #endregion Update
 
-        #endregion
-
-        #region Delete銆�
+        #region Delete
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> DeleteByID(long ID)
         {
@@ -152,7 +160,7 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> DeleteByIds(List<long> Ids)
         {
@@ -160,13 +168,21 @@
         }
 
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public async Task<bool> DeleteAll()
         {
             return await _cal.DeleteAll();
         }
 
-        #endregion
+        /// <summary>
+        ///
+        /// </summary>
+        public Task<bool> UpdateUseStatus(long ID, int UseStatus)
+        {
+            return _cal.UpdateUseStatus(ID, UseStatus);
+        }
+
+        #endregion Delete
     }
-}
+}
\ No newline at end of file
diff --git a/HStation.BLL.Xhs.Core/04-bll/02-projectItem/XhsProjectItem.cs b/HStation.BLL.Xhs.Core/04-bll/02-projectItem/XhsProjectItem.cs
index 51ef252..14bad92 100644
--- a/HStation.BLL.Xhs.Core/04-bll/02-projectItem/XhsProjectItem.cs
+++ b/HStation.BLL.Xhs.Core/04-bll/02-projectItem/XhsProjectItem.cs
@@ -28,6 +28,14 @@
         }
 
         /// <summary>
+        ///鏍规嵁椤圭洰id鏌ヨ
+        /// </summary>
+        public async Task<XhsProjectItemDto> GetByPrjID(long ID)
+        {
+            return await _cal.GetByPrjID(ID);
+        }
+
+        /// <summary>
         ///
         /// </summary>
         public async Task<List<XhsProjectItemDto>> GetByIds(List<long> Ids)
diff --git a/HStation.Dto.Xhs.Core/01-project/AddXhsProjectInput.cs b/HStation.Dto.Xhs.Core/01-project/AddXhsProjectInput.cs
index db3e6af..e64255e 100644
--- a/HStation.Dto.Xhs.Core/01-project/AddXhsProjectInput.cs
+++ b/HStation.Dto.Xhs.Core/01-project/AddXhsProjectInput.cs
@@ -46,6 +46,11 @@
         public string MapPosition { get; set; }
 
         /// <summary>
+        /// 鎺掑簭鐮�
+        /// </summary>
+        public int SortCode { get; set; }
+
+        /// <summary>
         /// 椤圭洰璇︾粏鍦板潃
         /// </summary>
         public string Address { get; set; }
diff --git a/HStation.Dto.Xhs.Core/01-project/UpdateXhsProjectInput.cs b/HStation.Dto.Xhs.Core/01-project/UpdateXhsProjectInput.cs
index 455bf22..67d7760 100644
--- a/HStation.Dto.Xhs.Core/01-project/UpdateXhsProjectInput.cs
+++ b/HStation.Dto.Xhs.Core/01-project/UpdateXhsProjectInput.cs
@@ -1,4 +1,6 @@
-锘縩amespace Yw.Dto
+锘縰sing HStation.Dto;
+
+namespace Yw.Dto
 {
     /// <summary>
     ///
@@ -37,6 +39,11 @@
         public long CreateUserID { get; set; }
 
         /// <summary>
+        /// 鎺掑簭鐮�
+        /// </summary>
+        public int SortCode { get; set; }
+
+        /// <summary>
         /// 鍒涘缓鏃堕棿
         /// </summary>
         public DateTime CreateTime { get; set; }
@@ -47,6 +54,11 @@
         public int Version { get; set; }
 
         /// <summary>
+        /// 浣跨敤鐘舵��
+        /// </summary>
+        public int UseStatus { get; set; }
+
+        /// <summary>
         /// 椤圭洰鍦板潃(缁忓害,缁村害)
         /// </summary>
         public string MapPosition { get; set; }
diff --git a/HStation.Dto.Xhs.Core/01-project/XhsProjectDto.cs b/HStation.Dto.Xhs.Core/01-project/XhsProjectDto.cs
index e1b481f..105cd3f 100644
--- a/HStation.Dto.Xhs.Core/01-project/XhsProjectDto.cs
+++ b/HStation.Dto.Xhs.Core/01-project/XhsProjectDto.cs
@@ -19,6 +19,7 @@
             this.GID = rhs.GID;
             this.ID = rhs.ID;
             this.Name = rhs.Name;
+            this.PrjNumber = rhs.PrjNumber;
             this.Paras = rhs.Paras;
             this.Flags = rhs.Flags;
             this.TagName = rhs.TagName;
@@ -29,6 +30,7 @@
             this.CreateUserID = rhs.CreateUserID;
             this.Version = rhs.Version;
             this.Address = rhs.Address;
+            this.CustomerName = rhs.CustomerName;
             this.MapPosition = rhs.MapPosition;
         }
 
@@ -43,6 +45,11 @@
         public long ID { get; set; }
 
         /// <summary>
+        /// 椤圭洰缂栧彿
+        /// </summary>
+        public string PrjNumber { get; set; }
+
+        /// <summary>
         /// 鍚嶇О
         /// </summary>
         public string Name { get; set; }
diff --git a/HStation.Dto.Xhs.Core/02-projectItem/XhsProjectItemDto.cs b/HStation.Dto.Xhs.Core/02-projectItem/XhsProjectItemDto.cs
index 733c278..1440c95 100644
--- a/HStation.Dto.Xhs.Core/02-projectItem/XhsProjectItemDto.cs
+++ b/HStation.Dto.Xhs.Core/02-projectItem/XhsProjectItemDto.cs
@@ -16,6 +16,7 @@
         /// </summary>
         public XhsProjectItemDto(HStation.Model.XhsProjectItem rhs)
         {
+            this.ID = rhs.ID;
             this.ProjectID = rhs.ProjectID;
             this.Name = rhs.Name;
             this.TagName = rhs.TagName;
@@ -25,7 +26,10 @@
             this.CreateUserID = rhs.CreateUserID;
             this.Version = rhs.Version;
         }
-
+        /// <summary>
+        /// 椤圭洰ID
+        /// </summary>
+        public long ID { get; set; }
         /// <summary>
         /// 椤圭洰ID
         /// </summary>
diff --git a/HStation.Service.Xhs.Core/01-entity/XhsProject.cs b/HStation.Service.Xhs.Core/01-entity/XhsProject.cs
index 7cce978..6feeb44 100644
--- a/HStation.Service.Xhs.Core/01-entity/XhsProject.cs
+++ b/HStation.Service.Xhs.Core/01-entity/XhsProject.cs
@@ -22,6 +22,7 @@
         {
             this.GID = rhs.GID;
             this.ID = rhs.ID;
+            this.PrjNumber = rhs.PrjNumber;
             this.Name = rhs.Name;
             this.Paras = rhs.Paras;
             this.Flags = rhs.Flags;
@@ -41,6 +42,11 @@
         public string GID { get; set; }
 
         /// <summary>
+        /// 椤圭洰缂栧彿
+        /// </summary>
+        public string PrjNumber { get; set; }
+
+        /// <summary>
         /// 鍚嶇О
         /// </summary>
         public string Name { get; set; }
diff --git a/HStation.Service.Xhs.Core/02-model/XhsProject.cs b/HStation.Service.Xhs.Core/02-model/XhsProject.cs
index e7f3a26..fe4e60c 100644
--- a/HStation.Service.Xhs.Core/02-model/XhsProject.cs
+++ b/HStation.Service.Xhs.Core/02-model/XhsProject.cs
@@ -52,6 +52,11 @@
         public string GID { get; set; }
 
         /// <summary>
+        /// 椤圭洰缂栧彿
+        /// </summary>
+        public string PrjNumber { get; set; }
+
+        /// <summary>
         /// 鍚嶇О
         /// </summary>
         public string Name { get; set; }
diff --git a/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs b/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs
index 9d84a72..14e714a 100644
--- a/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs
+++ b/HStation.Service.Xhs.Core/04-dal/01-interface/IXhsProject.cs
@@ -3,15 +3,27 @@
 namespace HStation.DAL
 {
     /// <summary>
-    /// 
+    ///
     /// </summary>
     public interface IXhsProject : IBaseDAL<Entity.XhsProject>, IUpdateParas, IUpdateFlags, IUpdateTagName, IUpdateSorter, IUpdateUseStatus
     {
+        /// <summary>
+        /// 鎻掑叆鎷撳睍
+        /// </summary>
+        long InsertEx(Entity.XhsProject project, Entity.XhsProjectItem item, Entity.XhsProjectItemModel signals, Entity.XhsProjectItemModelMap Map);
 
+        /// <summary>
+        /// 鍒犻櫎鎷撳睍
+        /// </summary>
+        /// <param name="ID"></param>
+        /// <returns></returns>
+        bool DeleteEx(long ID);
 
-
-
-
-
+        /// <summary>
+        /// 缂栬緫鎷撳睍
+        /// </summary>
+        /// <param name="ID"></param>
+        /// <returns></returns>
+        bool UpdateEx(Entity.XhsProject project, Entity.XhsProjectItem item);
     }
 }
\ No newline at end of file
diff --git a/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs b/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs
index 7cffc6a..fd2217b 100644
--- a/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs
+++ b/HStation.Service.Xhs.Core/04-dal/02-postgresql/XhsProject.cs
@@ -14,5 +14,204 @@
         {
             get { return Xhs.ConfigHelper.PostgreSqlConnectionConfig; }
         }
+
+        /// <summary>
+        /// 鎻掑叆鎷撳睍
+        /// </summary>
+        public long InsertEx(Entity.XhsProject project, Entity.XhsProjectItem Item, Entity.XhsProjectItemModel Model, Entity.XhsProjectItemModelMap Map)
+        {
+            if (project == null || Item == null || Model == null || Map == null)
+            {
+                return default;
+            }
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                try
+                {
+                    db.BeginTran();
+                    var prjlist = db.Queryable<Entity.XhsProject>().ToList();
+                    if (prjlist.Count > 0)
+                    {
+                        project.SortCode = prjlist.Max(x => x.SortCode) + 1;
+                    }
+                    else
+                    {
+                        project.SortCode = 0;
+                    }
+                    project.UseStatus = 1;
+                    var nowday = prjlist.Where(x => x.CreateTime.Date == DateTime.Now.Date).ToList();
+                    project.PrjNumber = "Prj" + DateTime.Now.ToString("yyyyMMdd") + (nowday.Count + 1).ToString("D4");
+                    var result = db.Insertable(project).ExecuteReturnSnowflakeId();
+                    if (result < 0)
+                    {
+                        db.RollbackTran();
+                        return default;
+                    }
+                    else
+                    {
+                        Item.ProjectID = result;
+                        Item.UseStatus = 1;
+                        var itemlist = db.Queryable<Entity.XhsProjectItem>().ToList();
+                        if (itemlist.Count > 0)
+                        {
+                            Item.SortCode = itemlist.Max(x => x.SortCode) + 1;
+                        }
+                        else
+                        {
+                            Item.SortCode = 0;
+                        }
+                        var itemresult = db.Insertable(Item).ExecuteReturnSnowflakeId();
+                        if (itemresult < 0)
+                        {
+                            db.RollbackTran();
+                            return default;
+                        }
+                        else
+                        {
+                            Model.ProjectID = result;
+                            Model.UseStatus = 1;
+                            var modellist = db.Queryable<Entity.XhsProjectItemModel>().ToList();
+                            if (modellist.Count > 0)
+                            {
+                                Model.SortCode = modellist.Max(x => x.SortCode) + 1;
+                            }
+                            else
+                            {
+                                Model.SortCode = 0;
+                            }
+                            var Modelresult = db.Insertable(Model).ExecuteReturnSnowflakeId();
+                            if (Modelresult < 0)
+                            {
+                                db.RollbackTran();
+                                return default;
+                            }
+                            else
+                            {
+                                Map.ProjectID = result;
+                                Map.ItemID = itemresult;
+                                Map.ModelID = Modelresult;
+                                Map.UseStatus = 1;
+                                var Mapresult = db.Insertable(Map).ExecuteReturnSnowflakeId();
+                                if (Mapresult < 0)
+                                {
+                                    db.RollbackTran();
+                                    return default;
+                                }
+                            }
+                        }
+                    }
+                    db.CommitTran();
+                    return result;
+                }
+                catch (Exception ex)
+                {
+                    db.RollbackTran();
+                    throw;
+                }
+            }
+        }
+
+        /// <summary>
+        /// 缂栬緫鎷撳睍
+        /// </summary>
+        public bool UpdateEx(Entity.XhsProject project, Entity.XhsProjectItem Item)
+        {
+            if (project == null || Item == null)
+            {
+                return default;
+            }
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                try
+                {
+                    db.BeginTran();
+                    var result = db.Updateable(project).ExecuteCommand() > 0;
+                    if (!result)
+                    {
+                        db.RollbackTran();
+                        return default;
+                    }
+                    else
+                    {
+                        var itemresult = db.Updateable(Item).ExecuteCommand() > 0;
+                        if (!itemresult)
+                        {
+                            db.RollbackTran();
+                            return default;
+                        }
+                    }
+                    db.CommitTran();
+                    return true;
+                }
+                catch (Exception ex)
+                {
+                    db.RollbackTran();
+                    return default;
+                    throw;
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鎷撳睍
+        /// </summary>
+        public bool DeleteEx(long ID)
+        {
+            if (ID < 0)
+            {
+                return default;
+            }
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                try
+                {
+                    db.BeginTran();
+                    var project = db.Queryable<Entity.XhsProject>().ToList().Where(x => x.ID == ID).First();
+                    var result = db.Deleteable(project).Where(x => x.ID == project.ID).ExecuteCommand() > 0;
+                    if (!result)
+                    {
+                        db.RollbackTran();
+                        return default;
+                    }
+                    else
+                    {
+                        var Item = db.Queryable<Entity.XhsProjectItem>().ToList();
+                        var itemresult = db.Deleteable(Item).Where(x => x.ProjectID == project.ID).ExecuteCommand() > 0;
+                        if (!itemresult)
+                        {
+                            db.RollbackTran();
+                            return default;
+                        }
+                        else
+                        {
+                            var Model = db.Queryable<Entity.XhsProjectItemModel>().ToList();
+                            var Modelresult = db.Deleteable(Model).Where(x => x.ProjectID == project.ID).ExecuteCommand() > 0;
+                            if (!Modelresult)
+                            {
+                                db.RollbackTran();
+                                return default;
+                            }
+                            else
+                            {
+                                var Map = db.Queryable<Entity.XhsProjectItemModelMap>().ToList();
+                                var Mapresult = db.Deleteable(Map).Where(x => x.ProjectID == project.ID).ExecuteCommand() > 0;
+                                if (!Mapresult)
+                                {
+                                    db.RollbackTran();
+                                    return default;
+                                }
+                            }
+                        }
+                    }
+                    db.CommitTran();
+                    return result;
+                }
+                catch (Exception ex)
+                {
+                    db.RollbackTran();
+                    throw;
+                }
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs b/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs
index 453c4b0..6b4eefe 100644
--- a/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs
+++ b/HStation.Service.Xhs.Core/04-dal/03-sqlite/XhsProject.cs
@@ -3,21 +3,189 @@
 namespace HStation.DAL.SQLite
 {
     /// <summary>
-    /// 
+    ///
     /// </summary>
     public partial class XhsProject : BaseDAL_Paras_Flags_TagName_Sorter_UseStatus<Entity.XhsProject>, IXhsProject
     {
         /// <summary>
-        /// 
+        ///
         /// </summary>
         public override ConnectionConfig ConnectionConfig
         {
             get { return Xhs.ConfigHelper.SQLiteConnectionConfig; }
         }
 
+        /// <summary>
+        /// 鎻掑叆鎷撳睍
+        /// </summary>
+        public long InsertEx(Entity.XhsProject project, Entity.XhsProjectItem Item, Entity.XhsProjectItemModel Model, Entity.XhsProjectItemModelMap Map)
+        {
+            if (project == null || Item == null || Model == null || Map == null)
+            {
+                return default;
+            }
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                try
+                {
+                    db.BeginTran();
+                    project.SortCode = db.Queryable<Entity.XhsProject>().ToList().Max(x => x.SortCode) + 1;
+                    project.UseStatus = 1;
+                    var result = db.Insertable(project).ExecuteReturnSnowflakeId();
+                    if (result < 0)
+                    {
+                        db.RollbackTran();
+                        return default;
+                    }
+                    else
+                    {
+                        Item.ProjectID = result;
+                        Item.UseStatus = 1;
+                        Item.SortCode = db.Queryable<Entity.XhsProjectItem>().ToList().Max(x => x.SortCode) + 1;
+                        var itemresult = db.Insertable(Item).ExecuteReturnSnowflakeId();
+                        if (itemresult < 0)
+                        {
+                            db.RollbackTran();
+                            return default;
+                        }
+                        else
+                        {
+                            Model.ProjectID = result;
+                            Model.UseStatus = 1;
+                            Model.SortCode = db.Queryable<Entity.XhsProjectItemModel>().ToList().Max(x => x.SortCode) + 1;
+                            var Modelresult = db.Insertable(Model).ExecuteReturnSnowflakeId();
+                            if (Modelresult < 0)
+                            {
+                                db.RollbackTran();
+                                return default;
+                            }
+                            else
+                            {
+                                Map.ProjectID = result;
+                                Map.ItemID = itemresult;
+                                Map.ModelID = Modelresult;
+                                Map.UseStatus = 1;
+                                var Mapresult = db.Insertable(Map).ExecuteReturnSnowflakeId();
+                                if (Mapresult < 0)
+                                {
+                                    db.RollbackTran();
+                                    return default;
+                                }
+                            }
+                        }
+                    }
+                    db.CommitTran();
+                    return result;
+                }
+                catch (Exception ex)
+                {
+                    db.RollbackTran();
+                    throw;
+                }
+            }
+        }
 
+        /// <summary>
+        /// 鍒犻櫎鎷撳睍
+        /// </summary>
+        public bool DeleteEx(long ID)
+        {
+            if (ID < 0)
+            {
+                return default;
+            }
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                try
+                {
+                    db.BeginTran();
+                    var project = db.Queryable<Entity.XhsProject>().ToList().Where(x => x.ID == ID).First();
+                    var result = db.Deleteable(project).Where(x => x.ID == project.ID).ExecuteCommand() > 0;
+                    if (!result)
+                    {
+                        db.RollbackTran();
+                        return default;
+                    }
+                    else
+                    {
+                        var Item = db.Queryable<Entity.XhsProjectItem>().ToList();
+                        var itemresult = db.Deleteable(Item).Where(x => x.ProjectID == project.ID).ExecuteCommand() > 0;
+                        if (!itemresult)
+                        {
+                            db.RollbackTran();
+                            return default;
+                        }
+                        else
+                        {
+                            var Model = db.Queryable<Entity.XhsProjectItemModel>().ToList();
+                            var Modelresult = db.Deleteable(Model).Where(x => x.ProjectID == project.ID).ExecuteCommand() > 0;
+                            if (!Modelresult)
+                            {
+                                db.RollbackTran();
+                                return default;
+                            }
+                            else
+                            {
+                                var Map = db.Queryable<Entity.XhsProjectItemModelMap>().ToList();
+                                var Mapresult = db.Deleteable(Map).Where(x => x.ProjectID == project.ID).ExecuteCommand() > 0;
+                                if (Mapresult)
+                                {
+                                    db.RollbackTran();
+                                    return default;
+                                }
+                            }
+                        }
+                    }
+                    db.CommitTran();
+                    return result;
+                }
+                catch (Exception ex)
+                {
+                    db.RollbackTran();
+                    throw;
+                }
+            }
+        }
 
-
-
+        /// <summary>
+        /// 缂栬緫鎷撳睍
+        /// </summary>
+        public bool UpdateEx(Entity.XhsProject project, Entity.XhsProjectItem Item)
+        {
+            if (project == null || Item == null)
+            {
+                return default;
+            }
+            using (var db = new SqlSugarClient(ConnectionConfig))
+            {
+                try
+                {
+                    db.BeginTran();
+                    var result = db.Updateable(project).ExecuteCommand() > 0;
+                    if (!result)
+                    {
+                        db.RollbackTran();
+                        return default;
+                    }
+                    else
+                    {
+                        var itemresult = db.Updateable(Item).ExecuteCommand() > 0;
+                        if (!itemresult)
+                        {
+                            db.RollbackTran();
+                            return default;
+                        }
+                    }
+                    db.CommitTran();
+                    return true;
+                }
+                catch (Exception ex)
+                {
+                    db.RollbackTran();
+                    return default;
+                    throw;
+                }
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs b/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs
index d9b09c3..e26ddf1 100644
--- a/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs
+++ b/HStation.Service.Xhs.Core/05-service/01-project/XhsProject.cs
@@ -1,7 +1,7 @@
 锘縩amespace HStation.Service
 {
     /// <summary>
-    /// 
+    ///
     /// </summary>
     public partial class XhsProject
     {
@@ -78,7 +78,7 @@
             XhsProjectCacheHelper.Publish(key);
         }
 
-        #endregion
+        #endregion Cache
 
         #region Query
 
@@ -126,7 +126,7 @@
             return all.Max(x => x.SortCode);
         }
 
-        #endregion
+        #endregion Query
 
         #region Insert
 
@@ -169,7 +169,70 @@
             return false;
         }
 
-        #endregion
+        /// <summary>
+        /// 鎻掑叆椤圭洰鎷撳睍
+        /// </summary>
+        public long InsertsEx(Model.XhsProject project, Model.XhsProjectItem Item, Model.XhsProjectItemModel Model, Model.XhsProjectItemModelMap Map)
+        {
+            if (project == null || Item == null || Model == null || Map == null)
+            {
+                return default;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var projectentity = Model2Entity(project);
+            var itementity = XhsProjectItem.Model2Entity(Item);
+            var modelentity = XhsProjectItemModel.Model2Entity(Model);
+            var mapenetity = XhsProjectItemModelMap.Model2Entity(Map);
+            var id = dal.InsertEx(projectentity, itementity, modelentity, mapenetity);
+            if (id > 0)
+            {
+                UpdateCache(id);
+                return id;
+            }
+            return default;
+        }
+
+        /// <summary>
+        /// 缂栬緫椤圭洰鎷撳睍
+        /// </summary>
+        public bool UpdateEx(Model.XhsProject project, Model.XhsProjectItem Item)
+        {
+            if (project == null || Item == null)
+            {
+                return default;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var projectentity = Model2Entity(project);
+            var itementity = XhsProjectItem.Model2Entity(Item);
+            var result = dal.UpdateEx(projectentity, itementity);
+            if (result)
+            {
+                UpdateCache(project.ID);
+                return true;
+            }
+            return false;
+        }
+
+        /// <summary>
+        /// 鍒犻櫎椤圭洰鎷撳睍
+        /// </summary>
+        public bool DeleteEx(long ID)
+        {
+            if (ID < 0)
+            {
+                return default;
+            }
+            var dal = DALCreateHelper.CreateDAL<HStation.DAL.IXhsProject>();
+            var result = dal.DeleteEx(ID);
+            if (result)
+            {
+                RemoveCache(ID);
+                return true;
+            }
+            return default;
+        }
+
+        #endregion Insert
 
         #region Update
 
@@ -327,7 +390,7 @@
             return bol;
         }
 
-        #endregion
+        #endregion Update
 
         #region Exist
 
@@ -357,7 +420,7 @@
             return all.Exists(x => x.TagName == TagName && x.ID != ExceptID);
         }
 
-        #endregion
+        #endregion Exist
 
         #region Delete
 
@@ -376,8 +439,6 @@
             return bol;
         }
 
-        #endregion
-
+        #endregion Delete
     }
-}
-
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/AmapLocationViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/AmapLocationViewModel.cs
new file mode 100644
index 0000000..98de578
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/AmapLocationViewModel.cs
@@ -0,0 +1,26 @@
+锘縩amespace HStation.WinFrmUI.Basic
+{
+    public class AmapLocationViewModel
+    {
+        public AmapLocationViewModel()
+        {
+            location = new Location();
+        }
+
+        public string id { get; set; }
+        public string name { get; set; }
+        public string address { get; set; }
+        public Location location { get; set; }
+
+        public long BuildTypeID { get; set; }
+
+        public string NorthEast { get; set; }
+        public string SouthWest { get; set; }
+    }
+
+    public class Location
+    {
+        public float lng { get; set; }
+        public float lat { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/FixationReceivedViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/FixationReceivedViewModel.cs
new file mode 100644
index 0000000..820e6da
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/FixationReceivedViewModel.cs
@@ -0,0 +1,9 @@
+锘縩amespace HStation.WinFrmUI.Basic
+{
+    public class FixationReceivedViewModel
+    {
+        public string Oper { get; set; }
+
+        public string Json { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/LocViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/LocViewModel.cs
new file mode 100644
index 0000000..d87b52a
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/LocViewModel.cs
@@ -0,0 +1,10 @@
+锘縩amespace HStation.WinFrmUI.Basic
+{
+    public class LocViewModel
+    {
+        public string Center { get; set; }
+        public string Shape { get; set; }
+
+        public string AmapID { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/ProjectViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/ProjectViewModel.cs
new file mode 100644
index 0000000..06d9111
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/00-ViewModel/ProjectViewModel.cs
@@ -0,0 +1,66 @@
+锘縰sing HStation.Dto;
+using Yw.Dto;
+
+namespace HStation.WinFrmUI.Xhs.Project
+{
+    public class ProjectViewModel : XhsProjectDto
+    {
+        public ProjectViewModel(XhsProjectDto rhs)
+        {
+            this.ID = rhs.ID;
+            this.Name = rhs.Name;
+            this.Paras = rhs.Paras;
+            this.PrjNumber = rhs.PrjNumber;
+            this.Flags = rhs.Flags;
+            this.TagName = rhs.TagName;
+            this.UseStatus = rhs.UseStatus;
+            this.SortCode = rhs.SortCode;
+            this.Description = rhs.Description;
+            this.CreateTime = rhs.CreateTime;
+            this.CustomerName = rhs.CustomerName;
+            this.CreateUserID = rhs.CreateUserID;
+            this.Version = rhs.Version;
+            this.MapPosition = rhs.MapPosition;
+            this.CreateDisplayName = CreateUserID.ToString();
+        }
+
+        public void Reset(ProjectViewModel rhs)
+        {
+            this.ID = rhs.ID;
+            this.Name = rhs.Name;
+            this.Paras = rhs.Paras;
+            this.Flags = rhs.Flags;
+            this.TagName = rhs.TagName;
+            this.SortCode = rhs.SortCode;
+            this.Description = rhs.Description;
+            this.CreateTime = rhs.CreateTime;
+            this.CustomerName = rhs.CustomerName;
+            this.CreateUserID = rhs.CreateUserID;
+            this.Version = rhs.Version;
+            this.MapPosition = rhs.MapPosition;
+            this.CreateDisplayName = CreateUserID.ToString();
+        }
+
+        public void Reset(UpdateXhsProjectInput rhs)
+        {
+            this.ID = rhs.ID;
+            this.Name = rhs.Name;
+            this.Paras = rhs.Paras;
+            this.Flags = rhs.Flags;
+            this.TagName = rhs.TagName;
+            this.SortCode = rhs.SortCode;
+            this.Description = rhs.Description;
+            this.CreateTime = rhs.CreateTime;
+            this.CustomerName = rhs.CustomerName;
+            this.CreateUserID = rhs.CreateUserID;
+            this.Version = rhs.Version;
+            this.MapPosition = rhs.MapPosition;
+            this.CreateDisplayName = CreateUserID.ToString();
+        }
+
+        /// <summary>
+        /// 鍒涘缓浜烘樉绀哄悕瀛�
+        /// </summary>
+        public string CreateDisplayName { get; set; }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.cs
new file mode 100644
index 0000000..dd5c71d
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.cs
@@ -0,0 +1,103 @@
+锘縰sing HStation.Dto;
+using HStation.WinFrmUI;
+using HStation.WinFrmUI.Basic;
+using Newtonsoft.Json;
+using System.IO.Compression;
+
+namespace ISupply.WinFrmUI
+{
+    public partial class AddProjectDlg : DevExpress.XtraEditors.XtraForm
+    {
+        public AddProjectDlg()
+        {
+            InitializeComponent();
+        }
+
+        public event Func<AddXhsProjectInput, Task<bool>> ReloadEvent;
+
+        private AddXhsProjectInput _AddXhsProjectInput = null;
+
+        //楠岃瘉
+        private bool Valid()
+        {
+            this.dxErrorProvider1.ClearErrors();
+            if (string.IsNullOrEmpty(this.NameTextEdit.Text.Trim()))
+            {
+                this.dxErrorProvider1.SetError(this.NameTextEdit, "蹇呭~椤�");
+                return false;
+            }
+
+            var tagName = this.ModelTextEdit.Text.Trim();
+            if (string.IsNullOrEmpty(tagName))
+            {
+                this.dxErrorProvider1.SetError(this.ModelTextEdit, "閲嶅");
+                return false;
+            }
+
+            return true;
+        }
+
+        //纭畾
+        private async void btnOk_Click(object sender, EventArgs e)
+        {
+            if (!Valid())
+                return;
+            _AddXhsProjectInput = new AddXhsProjectInput();
+            _AddXhsProjectInput.Name = this.NameTextEdit.Text.Trim();
+            _AddXhsProjectInput.CustomerName = this.CustomerNameTextEdit.Text.Trim();
+            _AddXhsProjectInput.CreateTime = DateTime.Now;
+            _AddXhsProjectInput.GID = Guid.NewGuid().ToString();
+            _AddXhsProjectInput.Description = this.DescriptionTextEdit.Text.Trim();
+            if (await this.ReloadEvent.Invoke(_AddXhsProjectInput))
+            {
+                MessageBoxHelper.ShowSuccess("娣诲姞鎴愬姛!");
+            }
+            else
+            {
+                MessageBoxHelper.ShowError("娣诲姞澶辫触!");
+            }
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+
+        //鍒濆鍖�
+        private void AddProjectDlg_Load(object sender, EventArgs e)
+        {
+            this.webView21.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + "data/web/html/map_select.html");
+        }
+
+        private void webView21_WebMessageReceived(object sender, Microsoft.Web.WebView2.Core.CoreWebView2WebMessageReceivedEventArgs e)
+        {
+            var j = JsonConvert.DeserializeObject<FixationReceivedViewModel>(e.WebMessageAsJson);
+            switch (j.Oper)
+            {
+                case "getLocation":
+                    var o = JsonConvert.DeserializeObject<AmapLocationViewModel>(j.Json);
+                    if (o == null)
+                        break;
+                    _AddXhsProjectInput.Address = this.AddressTextEdit.Text = o.address;
+                    _AddXhsProjectInput.MapPosition = o.location.lng + "," + o.location.lat;
+                    break;
+            }
+        }
+
+        //閫夋嫨鏂囦欢
+        private void BtnFileChoice_ButtonClick(object sender, DevExpress.XtraEditors.Controls.ButtonPressedEventArgs e)
+        {
+            OpenFileDialog openFileDialog = new OpenFileDialog();
+            openFileDialog.Filter = "ZIP Files (*.zip)|*.zip";
+            openFileDialog.FilterIndex = 1;
+            string selectedFilePath = null;
+            if (openFileDialog.ShowDialog() == DialogResult.OK)
+            {
+                selectedFilePath = openFileDialog.FileName;
+                string newFileName = selectedFilePath.EndsWith(".zip", StringComparison.OrdinalIgnoreCase)
+       ? selectedFilePath.Substring(0, selectedFilePath.Length - 4) + ".hsr"
+       : selectedFilePath;
+                this.BtnFileChoice.Text = newFileName;
+            }
+            //   string extractPath = @"C:\Users\ZKC\Desktop\sss";
+            //  ZipFile.ExtractToDirectory(extractPath, selectedFilePath);
+        }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.designer.cs
new file mode 100644
index 0000000..b95e2ab
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.designer.cs
@@ -0,0 +1,445 @@
+锘縰sing DevExpress.Utils;
+using DevExpress.XtraEditors;
+using System.ComponentModel;
+using System.Drawing;
+using System.Windows.Forms;
+
+namespace ISupply.WinFrmUI
+{
+    partial class AddProjectDlg
+    {
+        /// <summary>
+        /// Required designer variable.
+        /// </summary>
+        private 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();
+            dataLayoutControl1 = new DevExpress.XtraDataLayout.DataLayoutControl();
+            webView21 = new Microsoft.Web.WebView2.WinForms.WebView2();
+            btnOk = new SimpleButton();
+            btnCancel = new SimpleButton();
+            NameTextEdit = new TextEdit();
+            DescriptionTextEdit = new MemoEdit();
+            ModelTextEdit = new TextEdit();
+            CustomerNameTextEdit = new TextEdit();
+            BtnFileChoice = new ButtonEdit();
+            TagName = new TextEdit();
+            AddressTextEdit = new TextEdit();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
+            ItemForName = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            tabbedControlGroup1 = new DevExpress.XtraLayout.TabbedControlGroup();
+            layoutControlGroup2 = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlGroup3 = new DevExpress.XtraLayout.LayoutControlGroup();
+            ItemForDescription = new DevExpress.XtraLayout.LayoutControlItem();
+            ItemForConstructionYear = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            ItemForTagName = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
+            dxErrorProvider1 = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(components);
+            ((ISupportInitialize)dataLayoutControl1).BeginInit();
+            dataLayoutControl1.SuspendLayout();
+            ((ISupportInitialize)webView21).BeginInit();
+            ((ISupportInitialize)NameTextEdit.Properties).BeginInit();
+            ((ISupportInitialize)DescriptionTextEdit.Properties).BeginInit();
+            ((ISupportInitialize)ModelTextEdit.Properties).BeginInit();
+            ((ISupportInitialize)CustomerNameTextEdit.Properties).BeginInit();
+            ((ISupportInitialize)BtnFileChoice.Properties).BeginInit();
+            ((ISupportInitialize)TagName.Properties).BeginInit();
+            ((ISupportInitialize)AddressTextEdit.Properties).BeginInit();
+            ((ISupportInitialize)Root).BeginInit();
+            ((ISupportInitialize)layoutControlGroup1).BeginInit();
+            ((ISupportInitialize)ItemForName).BeginInit();
+            ((ISupportInitialize)layoutControlItem1).BeginInit();
+            ((ISupportInitialize)layoutControlItem2).BeginInit();
+            ((ISupportInitialize)emptySpaceItem1).BeginInit();
+            ((ISupportInitialize)tabbedControlGroup1).BeginInit();
+            ((ISupportInitialize)layoutControlGroup2).BeginInit();
+            ((ISupportInitialize)layoutControlItem3).BeginInit();
+            ((ISupportInitialize)layoutControlGroup3).BeginInit();
+            ((ISupportInitialize)ItemForDescription).BeginInit();
+            ((ISupportInitialize)ItemForConstructionYear).BeginInit();
+            ((ISupportInitialize)layoutControlItem5).BeginInit();
+            ((ISupportInitialize)ItemForTagName).BeginInit();
+            ((ISupportInitialize)layoutControlItem4).BeginInit();
+            ((ISupportInitialize)layoutControlItem6).BeginInit();
+            ((ISupportInitialize)dxErrorProvider1).BeginInit();
+            SuspendLayout();
+            // 
+            // dataLayoutControl1
+            // 
+            dataLayoutControl1.Controls.Add(webView21);
+            dataLayoutControl1.Controls.Add(btnOk);
+            dataLayoutControl1.Controls.Add(btnCancel);
+            dataLayoutControl1.Controls.Add(NameTextEdit);
+            dataLayoutControl1.Controls.Add(DescriptionTextEdit);
+            dataLayoutControl1.Controls.Add(ModelTextEdit);
+            dataLayoutControl1.Controls.Add(CustomerNameTextEdit);
+            dataLayoutControl1.Controls.Add(BtnFileChoice);
+            dataLayoutControl1.Controls.Add(TagName);
+            dataLayoutControl1.Controls.Add(AddressTextEdit);
+            dataLayoutControl1.Dock = DockStyle.Fill;
+            dataLayoutControl1.Location = new Point(0, 0);
+            dataLayoutControl1.Name = "dataLayoutControl1";
+            dataLayoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(640, 239, 978, 700);
+            dataLayoutControl1.Root = Root;
+            dataLayoutControl1.Size = new Size(709, 440);
+            dataLayoutControl1.TabIndex = 0;
+            dataLayoutControl1.Text = "dataLayoutControl1";
+            // 
+            // webView21
+            // 
+            webView21.AllowExternalDrop = true;
+            webView21.CreationProperties = null;
+            webView21.DefaultBackgroundColor = Color.White;
+            webView21.Location = new Point(24, 144);
+            webView21.Name = "webView21";
+            webView21.Size = new Size(661, 249);
+            webView21.TabIndex = 15;
+            webView21.ZoomFactor = 1D;
+            webView21.WebMessageReceived += webView21_WebMessageReceived;
+            // 
+            // btnOk
+            // 
+            btnOk.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
+            btnOk.Appearance.Options.UseBackColor = true;
+            btnOk.Location = new Point(503, 409);
+            btnOk.Name = "btnOk";
+            btnOk.Size = new Size(95, 19);
+            btnOk.StyleController = dataLayoutControl1;
+            btnOk.TabIndex = 7;
+            btnOk.Text = "纭畾";
+            btnOk.Click += btnOk_Click;
+            // 
+            // btnCancel
+            // 
+            btnCancel.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Warning;
+            btnCancel.Appearance.Options.UseBackColor = true;
+            btnCancel.DialogResult = DialogResult.Cancel;
+            btnCancel.Location = new Point(602, 409);
+            btnCancel.Name = "btnCancel";
+            btnCancel.Size = new Size(95, 19);
+            btnCancel.StyleController = dataLayoutControl1;
+            btnCancel.TabIndex = 8;
+            btnCancel.Text = "鍙栨秷";
+            // 
+            // NameTextEdit
+            // 
+            NameTextEdit.Location = new Point(76, 12);
+            NameTextEdit.Name = "NameTextEdit";
+            NameTextEdit.Size = new Size(276, 20);
+            NameTextEdit.StyleController = dataLayoutControl1;
+            NameTextEdit.TabIndex = 0;
+            // 
+            // DescriptionTextEdit
+            // 
+            DescriptionTextEdit.Location = new Point(22, 142);
+            DescriptionTextEdit.Name = "DescriptionTextEdit";
+            DescriptionTextEdit.Size = new Size(665, 253);
+            DescriptionTextEdit.StyleController = dataLayoutControl1;
+            DescriptionTextEdit.TabIndex = 6;
+            // 
+            // ModelTextEdit
+            // 
+            ModelTextEdit.Location = new Point(76, 60);
+            ModelTextEdit.Name = "ModelTextEdit";
+            ModelTextEdit.Size = new Size(621, 20);
+            ModelTextEdit.StyleController = dataLayoutControl1;
+            ModelTextEdit.TabIndex = 4;
+            // 
+            // CustomerNameTextEdit
+            // 
+            CustomerNameTextEdit.Location = new Point(420, 12);
+            CustomerNameTextEdit.Margin = new Padding(2);
+            CustomerNameTextEdit.Name = "CustomerNameTextEdit";
+            CustomerNameTextEdit.Size = new Size(277, 20);
+            CustomerNameTextEdit.StyleController = dataLayoutControl1;
+            CustomerNameTextEdit.TabIndex = 14;
+            // 
+            // BtnFileChoice
+            // 
+            BtnFileChoice.Location = new Point(76, 36);
+            BtnFileChoice.Margin = new Padding(2);
+            BtnFileChoice.Name = "BtnFileChoice";
+            BtnFileChoice.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton() });
+            BtnFileChoice.Size = new Size(276, 20);
+            BtnFileChoice.StyleController = dataLayoutControl1;
+            BtnFileChoice.TabIndex = 11;
+            BtnFileChoice.ButtonClick += BtnFileChoice_ButtonClick;
+            // 
+            // TagName
+            // 
+            TagName.Location = new Point(420, 36);
+            TagName.Name = "TagName";
+            TagName.Size = new Size(277, 20);
+            TagName.StyleController = dataLayoutControl1;
+            TagName.TabIndex = 16;
+            // 
+            // AddressTextEdit
+            // 
+            AddressTextEdit.Location = new Point(76, 84);
+            AddressTextEdit.Name = "AddressTextEdit";
+            AddressTextEdit.Size = new Size(621, 20);
+            AddressTextEdit.StyleController = dataLayoutControl1;
+            AddressTextEdit.TabIndex = 17;
+            // 
+            // Root
+            // 
+            Root.AppearanceItemCaption.Options.UseTextOptions = true;
+            Root.AppearanceItemCaption.TextOptions.HAlignment = HorzAlignment.Far;
+            Root.EnableIndentsWithoutBorders = DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlGroup1 });
+            Root.Name = "Root";
+            Root.Size = new Size(709, 440);
+            Root.TextVisible = false;
+            // 
+            // layoutControlGroup1
+            // 
+            layoutControlGroup1.AllowDrawBackground = false;
+            layoutControlGroup1.GroupBordersVisible = false;
+            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { ItemForName, layoutControlItem1, layoutControlItem2, emptySpaceItem1, tabbedControlGroup1, ItemForConstructionYear, layoutControlItem5, ItemForTagName, layoutControlItem4, layoutControlItem6 });
+            layoutControlGroup1.Location = new Point(0, 0);
+            layoutControlGroup1.Name = "autoGeneratedGroup0";
+            layoutControlGroup1.Size = new Size(689, 420);
+            // 
+            // ItemForName
+            // 
+            ItemForName.AllowHtmlStringInCaption = true;
+            ItemForName.Control = NameTextEdit;
+            ItemForName.Location = new Point(0, 0);
+            ItemForName.Name = "ItemForName";
+            ItemForName.Size = new Size(344, 24);
+            ItemForName.Text = "<color=red>*</color>鍚嶇О:";
+            ItemForName.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = btnCancel;
+            layoutControlItem1.Location = new Point(590, 397);
+            layoutControlItem1.MaxSize = new Size(99, 23);
+            layoutControlItem1.MinSize = new Size(99, 23);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(99, 23);
+            layoutControlItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem1.TextSize = new Size(0, 0);
+            layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = btnOk;
+            layoutControlItem2.Location = new Point(491, 397);
+            layoutControlItem2.MaxSize = new Size(99, 23);
+            layoutControlItem2.MinSize = new Size(99, 23);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(99, 23);
+            layoutControlItem2.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItem2.TextSize = new Size(0, 0);
+            layoutControlItem2.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            emptySpaceItem1.AllowHotTrack = false;
+            emptySpaceItem1.Location = new Point(0, 397);
+            emptySpaceItem1.Name = "emptySpaceItem1";
+            emptySpaceItem1.Size = new Size(491, 23);
+            emptySpaceItem1.TextSize = new Size(0, 0);
+            // 
+            // tabbedControlGroup1
+            // 
+            tabbedControlGroup1.AppearanceTabPage.Header.Options.UseTextOptions = true;
+            tabbedControlGroup1.AppearanceTabPage.Header.TextOptions.HAlignment = HorzAlignment.Center;
+            tabbedControlGroup1.HeaderAutoFill = DefaultBoolean.True;
+            tabbedControlGroup1.Location = new Point(0, 96);
+            tabbedControlGroup1.Name = "tabbedControlGroup1";
+            tabbedControlGroup1.SelectedTabPage = layoutControlGroup2;
+            tabbedControlGroup1.Size = new Size(689, 301);
+            tabbedControlGroup1.TabPages.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlGroup2, layoutControlGroup3 });
+            // 
+            // layoutControlGroup2
+            // 
+            layoutControlGroup2.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem3 });
+            layoutControlGroup2.Location = new Point(0, 0);
+            layoutControlGroup2.Name = "layoutControlGroup2";
+            layoutControlGroup2.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup2.Size = new Size(665, 253);
+            layoutControlGroup2.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            layoutControlGroup2.Text = "鍦板浘鍧愭爣";
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Control = webView21;
+            layoutControlItem3.Location = new Point(0, 0);
+            layoutControlItem3.Name = "layoutControlItem3";
+            layoutControlItem3.Size = new Size(665, 253);
+            layoutControlItem3.TextSize = new Size(0, 0);
+            layoutControlItem3.TextVisible = false;
+            // 
+            // layoutControlGroup3
+            // 
+            layoutControlGroup3.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { ItemForDescription });
+            layoutControlGroup3.Location = new Point(0, 0);
+            layoutControlGroup3.Name = "layoutControlGroup3";
+            layoutControlGroup3.Size = new Size(665, 253);
+            layoutControlGroup3.Text = "璇存槑";
+            // 
+            // ItemForDescription
+            // 
+            ItemForDescription.Control = DescriptionTextEdit;
+            ItemForDescription.Location = new Point(0, 0);
+            ItemForDescription.Name = "ItemForDescription";
+            ItemForDescription.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
+            ItemForDescription.Size = new Size(665, 253);
+            ItemForDescription.Text = "璇存槑:";
+            ItemForDescription.TextSize = new Size(0, 0);
+            ItemForDescription.TextVisible = false;
+            // 
+            // ItemForConstructionYear
+            // 
+            ItemForConstructionYear.Control = BtnFileChoice;
+            ItemForConstructionYear.Location = new Point(0, 24);
+            ItemForConstructionYear.Name = "ItemForConstructionYear";
+            ItemForConstructionYear.Size = new Size(344, 24);
+            ItemForConstructionYear.Text = "閫夋嫨鏂囦欢:";
+            ItemForConstructionYear.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem5
+            // 
+            layoutControlItem5.Control = CustomerNameTextEdit;
+            layoutControlItem5.Location = new Point(344, 0);
+            layoutControlItem5.Name = "layoutControlItem5";
+            layoutControlItem5.Size = new Size(345, 24);
+            layoutControlItem5.Text = "瀹㈡埛鍚嶇О:";
+            layoutControlItem5.TextSize = new Size(52, 14);
+            // 
+            // ItemForTagName
+            // 
+            ItemForTagName.AppearanceItemCaption.Options.UseTextOptions = true;
+            ItemForTagName.AppearanceItemCaption.TextOptions.HAlignment = HorzAlignment.Far;
+            ItemForTagName.Control = ModelTextEdit;
+            ItemForTagName.Location = new Point(0, 48);
+            ItemForTagName.Name = "ItemForTagName";
+            ItemForTagName.Size = new Size(689, 24);
+            ItemForTagName.Text = "涓夌淮妯″瀷:";
+            ItemForTagName.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.Control = TagName;
+            layoutControlItem4.Location = new Point(344, 24);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(345, 24);
+            layoutControlItem4.Text = "鏍囩:";
+            layoutControlItem4.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem6
+            // 
+            layoutControlItem6.Control = AddressTextEdit;
+            layoutControlItem6.Location = new Point(0, 72);
+            layoutControlItem6.Name = "layoutControlItem6";
+            layoutControlItem6.Size = new Size(689, 24);
+            layoutControlItem6.Text = "璇︾粏鍦板潃:";
+            layoutControlItem6.TextSize = new Size(52, 14);
+            // 
+            // dxErrorProvider1
+            // 
+            dxErrorProvider1.ContainerControl = this;
+            // 
+            // AddProjectDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(709, 440);
+            Controls.Add(dataLayoutControl1);
+            Name = "AddProjectDlg";
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "娣诲姞";
+            Load += AddProjectDlg_Load;
+            ((ISupportInitialize)dataLayoutControl1).EndInit();
+            dataLayoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)webView21).EndInit();
+            ((ISupportInitialize)NameTextEdit.Properties).EndInit();
+            ((ISupportInitialize)DescriptionTextEdit.Properties).EndInit();
+            ((ISupportInitialize)ModelTextEdit.Properties).EndInit();
+            ((ISupportInitialize)CustomerNameTextEdit.Properties).EndInit();
+            ((ISupportInitialize)BtnFileChoice.Properties).EndInit();
+            ((ISupportInitialize)TagName.Properties).EndInit();
+            ((ISupportInitialize)AddressTextEdit.Properties).EndInit();
+            ((ISupportInitialize)Root).EndInit();
+            ((ISupportInitialize)layoutControlGroup1).EndInit();
+            ((ISupportInitialize)ItemForName).EndInit();
+            ((ISupportInitialize)layoutControlItem1).EndInit();
+            ((ISupportInitialize)layoutControlItem2).EndInit();
+            ((ISupportInitialize)emptySpaceItem1).EndInit();
+            ((ISupportInitialize)tabbedControlGroup1).EndInit();
+            ((ISupportInitialize)layoutControlGroup2).EndInit();
+            ((ISupportInitialize)layoutControlItem3).EndInit();
+            ((ISupportInitialize)layoutControlGroup3).EndInit();
+            ((ISupportInitialize)ItemForDescription).EndInit();
+            ((ISupportInitialize)ItemForConstructionYear).EndInit();
+            ((ISupportInitialize)layoutControlItem5).EndInit();
+            ((ISupportInitialize)ItemForTagName).EndInit();
+            ((ISupportInitialize)layoutControlItem4).EndInit();
+            ((ISupportInitialize)layoutControlItem6).EndInit();
+            ((ISupportInitialize)dxErrorProvider1).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraDataLayout.DataLayoutControl dataLayoutControl1;
+        private SimpleButton btnOk;
+        private SimpleButton btnCancel;
+        private TextEdit NameTextEdit;
+        private MemoEdit DescriptionTextEdit;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
+        private DevExpress.XtraLayout.LayoutControlItem ItemForName;
+        private DevExpress.XtraLayout.LayoutControlItem ItemForDescription;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider1;
+        private TextEdit ModelTextEdit;
+        private DevExpress.XtraLayout.LayoutControlItem ItemForTagName;
+        private DevExpress.XtraLayout.LayoutControlItem ItemForConstructionYear;
+        private TextEdit CustomerNameTextEdit;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup2;
+        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup3;
+        private DevExpress.XtraLayout.TabbedControlGroup tabbedControlGroup1;
+        private Microsoft.Web.WebView2.WinForms.WebView2 webView21;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private ButtonEdit BtnFileChoice;
+        private TextEdit TagName;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private TextEdit AddressTextEdit;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.resx
new file mode 100644
index 0000000..d438392
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg-bak.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="dxErrorProvider1.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/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.cs
index e056b89..e8aff73 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.cs
@@ -1,7 +1,10 @@
-锘縰sing DevExpress.XtraEditors;
-using HStation.Dto;
+锘縰sing HStation.Dto;
 using HStation.WinFrmUI;
-using System;
+using HStation.WinFrmUI.Basic;
+using Microsoft.AspNetCore.Identity;
+using Newtonsoft.Json;
+using System.IO.Compression;
+using Yw;
 
 namespace ISupply.WinFrmUI
 {
@@ -12,42 +15,112 @@
             InitializeComponent();
         }
 
-        public event Func<AddXhsProjectInput, Task<bool>> ReloadEvent;
-
         private AddXhsProjectInput _AddXhsProjectInput = null;
 
-        //楠岃瘉
+        public event Func<AddXhsProjectInput, AddXhsProjectItemInput, AddXhsProjectItemModelInput, AddXhsProjectItemModelMapInput, Task<bool>> ReloadEvent;
+
+        //鍒濆鍖�
+        private void AddProjectDlg_Load(object sender, EventArgs e)
+        {
+            _AddXhsProjectInput = new AddXhsProjectInput();
+            this.webView21.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + "data/web/html/map_select.html");
+            this.navigationFrame.SelectedPage = navigationPageMapSelect;
+            layoutControlItemBack.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
+        }
+
+        private void webView21_WebMessageReceived(object sender, Microsoft.Web.WebView2.Core.CoreWebView2WebMessageReceivedEventArgs e)
+        {
+            var j = JsonConvert.DeserializeObject<FixationReceivedViewModel>(e.WebMessageAsJson);
+            switch (j.Oper)
+            {
+                case "getLocation":
+                    var o = JsonConvert.DeserializeObject<AmapLocationViewModel>(j.Json);
+                    if (o == null)
+                        break;
+                    this.textEditAddress.Text = o.address;
+                    _AddXhsProjectInput.MapPosition = o.location.lng + "," + o.location.lat;
+                    break;
+            }
+        }
+
+        //涓嬩竴姝�
+        private void btnNextStep_Click(object sender, EventArgs e)
+        {
+            var currentindex = this.navigationFrame.SelectedPageIndex;
+            switch (currentindex)
+            {
+                case 0:
+
+                    this.navigationFrame.SelectedPage = navigationPageForm;
+                    stepProgressBar1.SelectedItemIndex = 1;
+                    layoutControlItemAddress.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
+                    this.btnNextStep.Text = "瀹屾垚";
+                    break;
+
+                case 1:
+                    Finish();
+                    break;
+            }
+            layoutControlItemBack.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
+        }
+
+        //涓婁竴姝�
+        private void BtnBack_Click(object sender, EventArgs e)
+        {
+            var currentindex = this.navigationFrame.SelectedPageIndex;
+            switch (currentindex)
+            {
+                case 0:
+                    if (!Valid())
+                        return;
+                    break;
+
+                case 1:
+                    this.navigationFrame.SelectedPage = navigationPageMapSelect;
+                    stepProgressBar1.SelectedItemIndex = 0;
+                    layoutControlItemBack.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Never;
+                    layoutControlItemAddress.Visibility = DevExpress.XtraLayout.Utils.LayoutVisibility.Always;
+                    this.btnNextStep.Text = "涓嬩竴姝�>";
+                    break;
+            }
+        }
+
+        //鏁版嵁楠岃瘉
         private bool Valid()
         {
             this.dxErrorProvider1.ClearErrors();
-            if (string.IsNullOrEmpty(this.NameTextEdit.Text.Trim()))
+            if (string.IsNullOrEmpty(textEditAddress.Text.Trim()))
             {
-                this.dxErrorProvider1.SetError(this.NameTextEdit, "蹇呭~椤�");
+                this.dxErrorProvider1.SetError(this.textEditAddress, "蹇呭~椤�");
                 return false;
             }
-
-            var tagName = this.ModleTextEdit.Text.Trim();
-            if (string.IsNullOrEmpty(tagName))
-            {
-                this.dxErrorProvider1.SetError(this.ModleTextEdit, "閲嶅");
-                return false;
-            }
-
             return true;
         }
 
         //纭畾
-        private async void btnOk_Click(object sender, EventArgs e)
+        private async void Finish()
         {
-            if (!Valid())
+            if (!this.projectUserControl1.Valid())
                 return;
-            _AddXhsProjectInput = new AddXhsProjectInput();
-            _AddXhsProjectInput.Name = this.NameTextEdit.Text.Trim();
-            _AddXhsProjectInput.CustomerName = this.CustomerNameTextEdit.Text.Trim();
-            _AddXhsProjectInput.CreateTime = DateTime.Now;
-            _AddXhsProjectInput.GID = new Guid().ToString();
-            _AddXhsProjectInput.Description = this.DescriptionTextEdit.Text.Trim();
-            if (await this.ReloadEvent.Invoke(_AddXhsProjectInput))
+            var proresult = this.projectUserControl1.GetData(_AddXhsProjectInput);
+            proresult.Address = this.textEditAddress.Text.Trim();
+            var Item = new AddXhsProjectItemInput();
+            Item.Name = proresult.Name;
+            Item.Version = proresult.Version;
+            Item.TagName = proresult.TagName;
+            Item.CreateTime = proresult.CreateTime;
+            Item.Description = proresult.Description;
+            Item.CreateUserID = proresult.CreateUserID;
+            Item.Version = proresult.Version;
+            var Model = new AddXhsProjectItemModelInput();
+            Model.Name = proresult.Name;
+            Model.Version = proresult.Version;
+            Model.TagName = proresult.TagName;
+            Model.Description = proresult.Description;
+            var Mapinput = new AddXhsProjectItemModelMapInput();
+            Mapinput.UploadUserID = proresult.CreateUserID;
+            Mapinput.UploadTime = DateTime.Now;
+            if (await this.ReloadEvent.Invoke(proresult, Item, Model, Mapinput))
             {
                 MessageBoxHelper.ShowSuccess("娣诲姞鎴愬姛!");
             }
@@ -57,15 +130,6 @@
             }
             this.DialogResult = DialogResult.OK;
             this.Close();
-        }
-
-        //鍒濆鍖�
-        private void AddProjectDlg_Load(object sender, EventArgs e)
-        {
-        }
-
-        private void webView21_WebMessageReceived(object sender, Microsoft.Web.WebView2.Core.CoreWebView2WebMessageReceivedEventArgs e)
-        {
         }
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.designer.cs
index 0525a1f..68f0784 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.designer.cs
@@ -35,170 +35,187 @@
         private void InitializeComponent()
         {
             components = new Container();
+            ComponentResourceManager resources = new ComponentResourceManager(typeof(AddProjectDlg));
             dataLayoutControl1 = new DevExpress.XtraDataLayout.DataLayoutControl();
+            navigationFrame = new DevExpress.XtraBars.Navigation.NavigationFrame();
+            navigationPageMapSelect = new DevExpress.XtraBars.Navigation.NavigationPage();
             webView21 = new Microsoft.Web.WebView2.WinForms.WebView2();
-            btnOk = new SimpleButton();
+            navigationPageForm = new DevExpress.XtraBars.Navigation.NavigationPage();
+            projectUserControl1 = new HStation.WinFrmUI.Xhs.Project.ProjectUserControl();
+            stepProgressBar1 = new StepProgressBar();
+            stepProgressBarItemPostion = new StepProgressBarItem();
+            stepProgressBarItem = new StepProgressBarItem();
+            btnNextStep = new SimpleButton();
             btnCancel = new SimpleButton();
-            NameTextEdit = new TextEdit();
-            DescriptionTextEdit = new MemoEdit();
-            ModleTextEdit = new TextEdit();
-            CustomerNameTextEdit = new TextEdit();
-            BtnFileChoice = new ButtonEdit();
-            TagName = new TextEdit();
+            BtnBack = new SimpleButton();
+            textEditAddress = new TextEdit();
             Root = new DevExpress.XtraLayout.LayoutControlGroup();
             layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
-            ItemForName = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
             emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
-            tabbedControlGroup1 = new DevExpress.XtraLayout.TabbedControlGroup();
-            layoutControlGroup2 = new DevExpress.XtraLayout.LayoutControlGroup();
             layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
-            layoutControlGroup3 = new DevExpress.XtraLayout.LayoutControlGroup();
-            ItemForDescription = new DevExpress.XtraLayout.LayoutControlItem();
-            ItemForConstructionYear = new DevExpress.XtraLayout.LayoutControlItem();
-            layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
-            ItemForTagName = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItemBack = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItemAddress = new DevExpress.XtraLayout.LayoutControlItem();
             dxErrorProvider1 = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(components);
-            AddressTextEdit = new TextEdit();
-            layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)dataLayoutControl1).BeginInit();
             dataLayoutControl1.SuspendLayout();
+            ((ISupportInitialize)navigationFrame).BeginInit();
+            navigationFrame.SuspendLayout();
+            navigationPageMapSelect.SuspendLayout();
             ((ISupportInitialize)webView21).BeginInit();
-            ((ISupportInitialize)NameTextEdit.Properties).BeginInit();
-            ((ISupportInitialize)DescriptionTextEdit.Properties).BeginInit();
-            ((ISupportInitialize)ModleTextEdit.Properties).BeginInit();
-            ((ISupportInitialize)CustomerNameTextEdit.Properties).BeginInit();
-            ((ISupportInitialize)BtnFileChoice.Properties).BeginInit();
-            ((ISupportInitialize)TagName.Properties).BeginInit();
+            navigationPageForm.SuspendLayout();
+            ((ISupportInitialize)stepProgressBar1).BeginInit();
+            ((ISupportInitialize)textEditAddress.Properties).BeginInit();
             ((ISupportInitialize)Root).BeginInit();
             ((ISupportInitialize)layoutControlGroup1).BeginInit();
-            ((ISupportInitialize)ItemForName).BeginInit();
             ((ISupportInitialize)layoutControlItem1).BeginInit();
             ((ISupportInitialize)layoutControlItem2).BeginInit();
             ((ISupportInitialize)emptySpaceItem1).BeginInit();
-            ((ISupportInitialize)tabbedControlGroup1).BeginInit();
-            ((ISupportInitialize)layoutControlGroup2).BeginInit();
             ((ISupportInitialize)layoutControlItem3).BeginInit();
-            ((ISupportInitialize)layoutControlGroup3).BeginInit();
-            ((ISupportInitialize)ItemForDescription).BeginInit();
-            ((ISupportInitialize)ItemForConstructionYear).BeginInit();
-            ((ISupportInitialize)layoutControlItem5).BeginInit();
-            ((ISupportInitialize)ItemForTagName).BeginInit();
             ((ISupportInitialize)layoutControlItem4).BeginInit();
+            ((ISupportInitialize)layoutControlItemBack).BeginInit();
+            ((ISupportInitialize)layoutControlItemAddress).BeginInit();
             ((ISupportInitialize)dxErrorProvider1).BeginInit();
-            ((ISupportInitialize)AddressTextEdit.Properties).BeginInit();
-            ((ISupportInitialize)layoutControlItem6).BeginInit();
             SuspendLayout();
             // 
             // dataLayoutControl1
             // 
-            dataLayoutControl1.Controls.Add(webView21);
-            dataLayoutControl1.Controls.Add(btnOk);
+            dataLayoutControl1.Controls.Add(navigationFrame);
+            dataLayoutControl1.Controls.Add(stepProgressBar1);
+            dataLayoutControl1.Controls.Add(btnNextStep);
             dataLayoutControl1.Controls.Add(btnCancel);
-            dataLayoutControl1.Controls.Add(NameTextEdit);
-            dataLayoutControl1.Controls.Add(DescriptionTextEdit);
-            dataLayoutControl1.Controls.Add(ModleTextEdit);
-            dataLayoutControl1.Controls.Add(CustomerNameTextEdit);
-            dataLayoutControl1.Controls.Add(BtnFileChoice);
-            dataLayoutControl1.Controls.Add(TagName);
-            dataLayoutControl1.Controls.Add(AddressTextEdit);
+            dataLayoutControl1.Controls.Add(BtnBack);
+            dataLayoutControl1.Controls.Add(textEditAddress);
             dataLayoutControl1.Dock = DockStyle.Fill;
             dataLayoutControl1.Location = new Point(0, 0);
             dataLayoutControl1.Name = "dataLayoutControl1";
             dataLayoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(640, 239, 978, 700);
             dataLayoutControl1.Root = Root;
-            dataLayoutControl1.Size = new Size(709, 440);
+            dataLayoutControl1.Size = new Size(742, 400);
             dataLayoutControl1.TabIndex = 0;
             dataLayoutControl1.Text = "dataLayoutControl1";
+            // 
+            // navigationFrame
+            // 
+            navigationFrame.AllowTransitionAnimation = DefaultBoolean.False;
+            navigationFrame.Controls.Add(navigationPageMapSelect);
+            navigationFrame.Controls.Add(navigationPageForm);
+            navigationFrame.Location = new Point(12, 66);
+            navigationFrame.Name = "navigationFrame";
+            navigationFrame.Pages.AddRange(new DevExpress.XtraBars.Navigation.NavigationPageBase[] { navigationPageMapSelect, navigationPageForm });
+            navigationFrame.SelectedPage = navigationPageMapSelect;
+            navigationFrame.Size = new Size(718, 272);
+            navigationFrame.TabIndex = 2;
+            navigationFrame.Text = "navigationFrame1";
+            // 
+            // navigationPageMapSelect
+            // 
+            navigationPageMapSelect.Caption = "navigationPageMapSelect";
+            navigationPageMapSelect.Controls.Add(webView21);
+            navigationPageMapSelect.Name = "navigationPageMapSelect";
+            navigationPageMapSelect.Size = new Size(718, 272);
             // 
             // webView21
             // 
             webView21.AllowExternalDrop = true;
             webView21.CreationProperties = null;
             webView21.DefaultBackgroundColor = Color.White;
-            webView21.Location = new Point(24, 144);
+            webView21.Dock = DockStyle.Fill;
+            webView21.Location = new Point(0, 0);
             webView21.Name = "webView21";
-            webView21.Size = new Size(661, 249);
-            webView21.TabIndex = 15;
+            webView21.Size = new Size(718, 272);
+            webView21.TabIndex = 0;
             webView21.ZoomFactor = 1D;
             webView21.WebMessageReceived += webView21_WebMessageReceived;
             // 
-            // btnOk
+            // navigationPageForm
             // 
-            btnOk.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
-            btnOk.Appearance.Options.UseBackColor = true;
-            btnOk.Location = new Point(503, 409);
-            btnOk.Name = "btnOk";
-            btnOk.Size = new Size(95, 19);
-            btnOk.StyleController = dataLayoutControl1;
-            btnOk.TabIndex = 7;
-            btnOk.Text = "纭畾";
-            btnOk.Click += btnOk_Click;
+            navigationPageForm.Caption = "navigationPageForm";
+            navigationPageForm.Controls.Add(projectUserControl1);
+            navigationPageForm.Name = "navigationPageForm";
+            navigationPageForm.Size = new Size(718, 272);
+            // 
+            // projectUserControl1
+            // 
+            projectUserControl1.Dock = DockStyle.Fill;
+            projectUserControl1.Location = new Point(0, 0);
+            projectUserControl1.Name = "projectUserControl1";
+            projectUserControl1.Size = new Size(718, 272);
+            projectUserControl1.TabIndex = 0;
+            // 
+            // stepProgressBar1
+            // 
+            stepProgressBar1.ContentAlignment = ContentAlignment.MiddleLeft;
+            stepProgressBar1.ItemOptions.Indicator.ActiveStateImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("stepProgressBar1.ItemOptions.Indicator.ActiveStateImageOptions.SvgImage");
+            stepProgressBar1.ItemOptions.Indicator.ActiveStateImageOptions.SvgImageSize = new Size(20, 20);
+            stepProgressBar1.ItemOptions.Indicator.Width = 23;
+            stepProgressBar1.Items.Add(stepProgressBarItemPostion);
+            stepProgressBar1.Items.Add(stepProgressBarItem);
+            stepProgressBar1.Location = new Point(12, 12);
+            stepProgressBar1.MaximumSize = new Size(0, 50);
+            stepProgressBar1.MinimumSize = new Size(0, 50);
+            stepProgressBar1.Name = "stepProgressBar1";
+            stepProgressBar1.SelectedItemIndex = 0;
+            stepProgressBar1.Size = new Size(718, 50);
+            stepProgressBar1.StyleController = dataLayoutControl1;
+            stepProgressBar1.TabIndex = 0;
+            // 
+            // stepProgressBarItemPostion
+            // 
+            stepProgressBarItemPostion.ContentBlock2.Caption = "閫夋嫨浣嶇疆";
+            stepProgressBarItemPostion.Name = "stepProgressBarItemPostion";
+            stepProgressBarItemPostion.State = StepProgressBarItemState.Active;
+            // 
+            // stepProgressBarItem
+            // 
+            stepProgressBarItem.ContentBlock2.Caption = "椤圭洰淇℃伅";
+            stepProgressBarItem.Name = "stepProgressBarItem";
+            // 
+            // btnNextStep
+            // 
+            btnNextStep.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
+            btnNextStep.Appearance.Options.UseBackColor = true;
+            btnNextStep.Location = new Point(536, 366);
+            btnNextStep.Name = "btnNextStep";
+            btnNextStep.Size = new Size(95, 22);
+            btnNextStep.StyleController = dataLayoutControl1;
+            btnNextStep.TabIndex = 5;
+            btnNextStep.Text = "涓嬩竴姝�>";
+            btnNextStep.Click += btnNextStep_Click;
             // 
             // btnCancel
             // 
-            btnCancel.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Warning;
+            btnCancel.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Danger;
             btnCancel.Appearance.Options.UseBackColor = true;
             btnCancel.DialogResult = DialogResult.Cancel;
-            btnCancel.Location = new Point(602, 409);
+            btnCancel.Location = new Point(635, 366);
             btnCancel.Name = "btnCancel";
-            btnCancel.Size = new Size(95, 19);
+            btnCancel.Size = new Size(95, 22);
             btnCancel.StyleController = dataLayoutControl1;
-            btnCancel.TabIndex = 8;
+            btnCancel.TabIndex = 6;
             btnCancel.Text = "鍙栨秷";
             // 
-            // NameTextEdit
+            // BtnBack
             // 
-            NameTextEdit.Location = new Point(76, 12);
-            NameTextEdit.Name = "NameTextEdit";
-            NameTextEdit.Size = new Size(276, 20);
-            NameTextEdit.StyleController = dataLayoutControl1;
-            NameTextEdit.TabIndex = 0;
+            BtnBack.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Warning;
+            BtnBack.Appearance.Options.UseBackColor = true;
+            BtnBack.Location = new Point(447, 366);
+            BtnBack.Name = "BtnBack";
+            BtnBack.Size = new Size(85, 22);
+            BtnBack.StyleController = dataLayoutControl1;
+            BtnBack.TabIndex = 4;
+            BtnBack.Text = "<涓婁竴姝�";
+            BtnBack.Click += BtnBack_Click;
             // 
-            // DescriptionTextEdit
+            // textEditAddress
             // 
-            DescriptionTextEdit.Location = new Point(22, 142);
-            DescriptionTextEdit.Name = "DescriptionTextEdit";
-            DescriptionTextEdit.Size = new Size(665, 253);
-            DescriptionTextEdit.StyleController = dataLayoutControl1;
-            DescriptionTextEdit.TabIndex = 6;
-            // 
-            // ModleTextEdit
-            // 
-            ModleTextEdit.Location = new Point(76, 60);
-            ModleTextEdit.Name = "ModleTextEdit";
-            ModleTextEdit.Size = new Size(621, 20);
-            ModleTextEdit.StyleController = dataLayoutControl1;
-            ModleTextEdit.TabIndex = 4;
-            // 
-            // CustomerNameTextEdit
-            // 
-            CustomerNameTextEdit.Location = new Point(420, 12);
-            CustomerNameTextEdit.Margin = new Padding(2);
-            CustomerNameTextEdit.Name = "CustomerNameTextEdit";
-            CustomerNameTextEdit.Size = new Size(277, 20);
-            CustomerNameTextEdit.StyleController = dataLayoutControl1;
-            CustomerNameTextEdit.TabIndex = 14;
-            // 
-            // BtnFileChoice
-            // 
-            BtnFileChoice.Location = new Point(76, 36);
-            BtnFileChoice.Margin = new Padding(2);
-            BtnFileChoice.Name = "BtnFileChoice";
-            BtnFileChoice.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton() });
-            BtnFileChoice.Size = new Size(276, 20);
-            BtnFileChoice.StyleController = dataLayoutControl1;
-            BtnFileChoice.TabIndex = 11;
-            // 
-            // TagName
-            // 
-            TagName.Location = new Point(420, 36);
-            TagName.Name = "TagName";
-            TagName.Size = new Size(277, 20);
-            TagName.StyleController = dataLayoutControl1;
-            TagName.TabIndex = 16;
+            textEditAddress.Location = new Point(76, 342);
+            textEditAddress.Name = "textEditAddress";
+            textEditAddress.Size = new Size(654, 20);
+            textEditAddress.StyleController = dataLayoutControl1;
+            textEditAddress.TabIndex = 3;
             // 
             // Root
             // 
@@ -208,48 +225,38 @@
             Root.GroupBordersVisible = false;
             Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlGroup1 });
             Root.Name = "Root";
-            Root.Size = new Size(709, 440);
+            Root.Size = new Size(742, 400);
             Root.TextVisible = false;
             // 
             // layoutControlGroup1
             // 
             layoutControlGroup1.AllowDrawBackground = false;
             layoutControlGroup1.GroupBordersVisible = false;
-            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { ItemForName, layoutControlItem1, layoutControlItem2, emptySpaceItem1, tabbedControlGroup1, ItemForConstructionYear, layoutControlItem5, ItemForTagName, layoutControlItem4, layoutControlItem6 });
+            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, emptySpaceItem1, layoutControlItem3, layoutControlItem4, layoutControlItemBack, layoutControlItemAddress });
             layoutControlGroup1.Location = new Point(0, 0);
             layoutControlGroup1.Name = "autoGeneratedGroup0";
-            layoutControlGroup1.Size = new Size(689, 420);
-            // 
-            // ItemForName
-            // 
-            ItemForName.AllowHtmlStringInCaption = true;
-            ItemForName.Control = NameTextEdit;
-            ItemForName.Location = new Point(0, 0);
-            ItemForName.Name = "ItemForName";
-            ItemForName.Size = new Size(344, 24);
-            ItemForName.Text = "<color=red>*</color>鍚嶇О:";
-            ItemForName.TextSize = new Size(52, 14);
+            layoutControlGroup1.Size = new Size(722, 380);
             // 
             // layoutControlItem1
             // 
             layoutControlItem1.Control = btnCancel;
-            layoutControlItem1.Location = new Point(590, 397);
-            layoutControlItem1.MaxSize = new Size(99, 23);
-            layoutControlItem1.MinSize = new Size(99, 23);
+            layoutControlItem1.Location = new Point(623, 354);
+            layoutControlItem1.MaxSize = new Size(99, 26);
+            layoutControlItem1.MinSize = new Size(99, 26);
             layoutControlItem1.Name = "layoutControlItem1";
-            layoutControlItem1.Size = new Size(99, 23);
+            layoutControlItem1.Size = new Size(99, 26);
             layoutControlItem1.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem1.TextSize = new Size(0, 0);
             layoutControlItem1.TextVisible = false;
             // 
             // layoutControlItem2
             // 
-            layoutControlItem2.Control = btnOk;
-            layoutControlItem2.Location = new Point(491, 397);
-            layoutControlItem2.MaxSize = new Size(99, 23);
-            layoutControlItem2.MinSize = new Size(99, 23);
+            layoutControlItem2.Control = btnNextStep;
+            layoutControlItem2.Location = new Point(524, 354);
+            layoutControlItem2.MaxSize = new Size(99, 26);
+            layoutControlItem2.MinSize = new Size(99, 26);
             layoutControlItem2.Name = "layoutControlItem2";
-            layoutControlItem2.Size = new Size(99, 23);
+            layoutControlItem2.Size = new Size(99, 26);
             layoutControlItem2.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
             layoutControlItem2.TextSize = new Size(0, 0);
             layoutControlItem2.TextVisible = false;
@@ -257,124 +264,59 @@
             // emptySpaceItem1
             // 
             emptySpaceItem1.AllowHotTrack = false;
-            emptySpaceItem1.Location = new Point(0, 397);
+            emptySpaceItem1.Location = new Point(0, 354);
             emptySpaceItem1.Name = "emptySpaceItem1";
-            emptySpaceItem1.Size = new Size(491, 23);
+            emptySpaceItem1.Size = new Size(435, 26);
             emptySpaceItem1.TextSize = new Size(0, 0);
-            // 
-            // tabbedControlGroup1
-            // 
-            tabbedControlGroup1.AppearanceTabPage.Header.Options.UseTextOptions = true;
-            tabbedControlGroup1.AppearanceTabPage.Header.TextOptions.HAlignment = HorzAlignment.Center;
-            tabbedControlGroup1.HeaderAutoFill = DefaultBoolean.True;
-            tabbedControlGroup1.Location = new Point(0, 96);
-            tabbedControlGroup1.Name = "tabbedControlGroup1";
-            tabbedControlGroup1.SelectedTabPage = layoutControlGroup2;
-            tabbedControlGroup1.Size = new Size(689, 301);
-            tabbedControlGroup1.TabPages.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlGroup2, layoutControlGroup3 });
-            // 
-            // layoutControlGroup2
-            // 
-            layoutControlGroup2.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem3 });
-            layoutControlGroup2.Location = new Point(0, 0);
-            layoutControlGroup2.Name = "layoutControlGroup2";
-            layoutControlGroup2.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            layoutControlGroup2.Size = new Size(665, 253);
-            layoutControlGroup2.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            layoutControlGroup2.Text = "鍦板浘鍧愭爣";
             // 
             // layoutControlItem3
             // 
-            layoutControlItem3.Control = webView21;
+            layoutControlItem3.Control = stepProgressBar1;
             layoutControlItem3.Location = new Point(0, 0);
             layoutControlItem3.Name = "layoutControlItem3";
-            layoutControlItem3.Size = new Size(665, 253);
+            layoutControlItem3.Size = new Size(722, 54);
             layoutControlItem3.TextSize = new Size(0, 0);
             layoutControlItem3.TextVisible = false;
             // 
-            // layoutControlGroup3
-            // 
-            layoutControlGroup3.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { ItemForDescription });
-            layoutControlGroup3.Location = new Point(0, 0);
-            layoutControlGroup3.Name = "layoutControlGroup3";
-            layoutControlGroup3.Size = new Size(665, 253);
-            layoutControlGroup3.Text = "璇存槑";
-            // 
-            // ItemForDescription
-            // 
-            ItemForDescription.Control = DescriptionTextEdit;
-            ItemForDescription.Location = new Point(0, 0);
-            ItemForDescription.Name = "ItemForDescription";
-            ItemForDescription.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            ItemForDescription.Size = new Size(665, 253);
-            ItemForDescription.Text = "璇存槑:";
-            ItemForDescription.TextSize = new Size(0, 0);
-            ItemForDescription.TextVisible = false;
-            // 
-            // ItemForConstructionYear
-            // 
-            ItemForConstructionYear.Control = BtnFileChoice;
-            ItemForConstructionYear.Location = new Point(0, 24);
-            ItemForConstructionYear.Name = "ItemForConstructionYear";
-            ItemForConstructionYear.Size = new Size(344, 24);
-            ItemForConstructionYear.Text = "閫夋嫨鏂囦欢:";
-            ItemForConstructionYear.TextSize = new Size(52, 14);
-            // 
-            // layoutControlItem5
-            // 
-            layoutControlItem5.Control = CustomerNameTextEdit;
-            layoutControlItem5.Location = new Point(344, 0);
-            layoutControlItem5.Name = "layoutControlItem5";
-            layoutControlItem5.Size = new Size(345, 24);
-            layoutControlItem5.Text = "瀹㈡埛鍚嶇О:";
-            layoutControlItem5.TextSize = new Size(52, 14);
-            // 
-            // ItemForTagName
-            // 
-            ItemForTagName.AppearanceItemCaption.Options.UseTextOptions = true;
-            ItemForTagName.AppearanceItemCaption.TextOptions.HAlignment = HorzAlignment.Far;
-            ItemForTagName.Control = ModleTextEdit;
-            ItemForTagName.Location = new Point(0, 48);
-            ItemForTagName.Name = "ItemForTagName";
-            ItemForTagName.Size = new Size(689, 24);
-            ItemForTagName.Text = "涓夌淮妯″瀷:";
-            ItemForTagName.TextSize = new Size(52, 14);
-            // 
             // layoutControlItem4
             // 
-            layoutControlItem4.Control = TagName;
-            layoutControlItem4.Location = new Point(344, 24);
+            layoutControlItem4.Control = navigationFrame;
+            layoutControlItem4.Location = new Point(0, 54);
             layoutControlItem4.Name = "layoutControlItem4";
-            layoutControlItem4.Size = new Size(345, 24);
-            layoutControlItem4.Text = "鏍囩:";
-            layoutControlItem4.TextSize = new Size(52, 14);
+            layoutControlItem4.Size = new Size(722, 276);
+            layoutControlItem4.TextSize = new Size(0, 0);
+            layoutControlItem4.TextVisible = false;
+            // 
+            // layoutControlItemBack
+            // 
+            layoutControlItemBack.Control = BtnBack;
+            layoutControlItemBack.Location = new Point(435, 354);
+            layoutControlItemBack.MaxSize = new Size(89, 26);
+            layoutControlItemBack.MinSize = new Size(89, 26);
+            layoutControlItemBack.Name = "layoutControlItemBack";
+            layoutControlItemBack.Size = new Size(89, 26);
+            layoutControlItemBack.SizeConstraintsType = DevExpress.XtraLayout.SizeConstraintsType.Custom;
+            layoutControlItemBack.TextSize = new Size(0, 0);
+            layoutControlItemBack.TextVisible = false;
+            // 
+            // layoutControlItemAddress
+            // 
+            layoutControlItemAddress.Control = textEditAddress;
+            layoutControlItemAddress.Location = new Point(0, 330);
+            layoutControlItemAddress.Name = "layoutControlItemAddress";
+            layoutControlItemAddress.Size = new Size(722, 24);
+            layoutControlItemAddress.Text = "璇︾粏鍦板潃:";
+            layoutControlItemAddress.TextSize = new Size(52, 14);
             // 
             // dxErrorProvider1
             // 
             dxErrorProvider1.ContainerControl = this;
             // 
-            // AddressTextEdit
-            // 
-            AddressTextEdit.Location = new Point(76, 84);
-            AddressTextEdit.Name = "AddressTextEdit";
-            AddressTextEdit.Size = new Size(621, 20);
-            AddressTextEdit.StyleController = dataLayoutControl1;
-            AddressTextEdit.TabIndex = 17;
-            // 
-            // layoutControlItem6
-            // 
-            layoutControlItem6.Control = AddressTextEdit;
-            layoutControlItem6.Location = new Point(0, 72);
-            layoutControlItem6.Name = "layoutControlItem6";
-            layoutControlItem6.Size = new Size(689, 24);
-            layoutControlItem6.Text = "璇︾粏鍦板潃:";
-            layoutControlItem6.TextSize = new Size(52, 14);
-            // 
             // AddProjectDlg
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
             AutoScaleMode = AutoScaleMode.Font;
-            ClientSize = new Size(709, 440);
+            ClientSize = new Size(742, 400);
             Controls.Add(dataLayoutControl1);
             Name = "AddProjectDlg";
             StartPosition = FormStartPosition.CenterParent;
@@ -382,63 +324,50 @@
             Load += AddProjectDlg_Load;
             ((ISupportInitialize)dataLayoutControl1).EndInit();
             dataLayoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)navigationFrame).EndInit();
+            navigationFrame.ResumeLayout(false);
+            navigationPageMapSelect.ResumeLayout(false);
             ((ISupportInitialize)webView21).EndInit();
-            ((ISupportInitialize)NameTextEdit.Properties).EndInit();
-            ((ISupportInitialize)DescriptionTextEdit.Properties).EndInit();
-            ((ISupportInitialize)ModleTextEdit.Properties).EndInit();
-            ((ISupportInitialize)CustomerNameTextEdit.Properties).EndInit();
-            ((ISupportInitialize)BtnFileChoice.Properties).EndInit();
-            ((ISupportInitialize)TagName.Properties).EndInit();
+            navigationPageForm.ResumeLayout(false);
+            ((ISupportInitialize)stepProgressBar1).EndInit();
+            ((ISupportInitialize)textEditAddress.Properties).EndInit();
             ((ISupportInitialize)Root).EndInit();
             ((ISupportInitialize)layoutControlGroup1).EndInit();
-            ((ISupportInitialize)ItemForName).EndInit();
             ((ISupportInitialize)layoutControlItem1).EndInit();
             ((ISupportInitialize)layoutControlItem2).EndInit();
             ((ISupportInitialize)emptySpaceItem1).EndInit();
-            ((ISupportInitialize)tabbedControlGroup1).EndInit();
-            ((ISupportInitialize)layoutControlGroup2).EndInit();
             ((ISupportInitialize)layoutControlItem3).EndInit();
-            ((ISupportInitialize)layoutControlGroup3).EndInit();
-            ((ISupportInitialize)ItemForDescription).EndInit();
-            ((ISupportInitialize)ItemForConstructionYear).EndInit();
-            ((ISupportInitialize)layoutControlItem5).EndInit();
-            ((ISupportInitialize)ItemForTagName).EndInit();
             ((ISupportInitialize)layoutControlItem4).EndInit();
+            ((ISupportInitialize)layoutControlItemBack).EndInit();
+            ((ISupportInitialize)layoutControlItemAddress).EndInit();
             ((ISupportInitialize)dxErrorProvider1).EndInit();
-            ((ISupportInitialize)AddressTextEdit.Properties).EndInit();
-            ((ISupportInitialize)layoutControlItem6).EndInit();
             ResumeLayout(false);
         }
 
         #endregion
 
         private DevExpress.XtraDataLayout.DataLayoutControl dataLayoutControl1;
-        private SimpleButton btnOk;
+        private SimpleButton btnNextStep;
         private SimpleButton btnCancel;
-        private TextEdit NameTextEdit;
-        private MemoEdit DescriptionTextEdit;
         private DevExpress.XtraLayout.LayoutControlGroup Root;
         private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup1;
-        private DevExpress.XtraLayout.LayoutControlItem ItemForName;
-        private DevExpress.XtraLayout.LayoutControlItem ItemForDescription;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
         private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
         private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider1;
-        private TextEdit ModleTextEdit;
-        private DevExpress.XtraLayout.LayoutControlItem ItemForTagName;
-        private DevExpress.XtraLayout.LayoutControlItem ItemForConstructionYear;
-        private TextEdit CustomerNameTextEdit;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
-        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup2;
-        private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup3;
-        private DevExpress.XtraLayout.TabbedControlGroup tabbedControlGroup1;
-        private Microsoft.Web.WebView2.WinForms.WebView2 webView21;
+        private StepProgressBar stepProgressBar1;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
-        private ButtonEdit BtnFileChoice;
-        private TextEdit TagName;
+        private DevExpress.XtraBars.Navigation.NavigationFrame navigationFrame;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
-        private TextEdit AddressTextEdit;
-        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+        private StepProgressBarItem stepProgressBarItemPostion;
+        private StepProgressBarItem stepProgressBarItem;
+        private SimpleButton BtnBack;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItemBack;
+        private DevExpress.XtraBars.Navigation.NavigationPage navigationPageMapSelect;
+        private Microsoft.Web.WebView2.WinForms.WebView2 webView21;
+        private DevExpress.XtraBars.Navigation.NavigationPage navigationPageForm;
+        private HStation.WinFrmUI.Xhs.Project.ProjectUserControl projectUserControl1;
+        private TextEdit textEditAddress;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItemAddress;
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.resx
index d438392..a8695bc 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/AddProjectDlg.resx
@@ -117,6 +117,24 @@
   <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="stepProgressBar1.ItemOptions.Indicator.ActiveStateImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAFUCAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzczNzM3NDt9Cgku
+        WWVsbG93e2ZpbGw6I0ZDQjAxQjt9CgkuR3JlZW57ZmlsbDojMTI5QzQ5O30KCS5CbHVle2ZpbGw6IzM4
+        N0NCNzt9CgkuUmVke2ZpbGw6I0QwMjEyNzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQoJLnN0M3tk
+        aXNwbGF5Om5vbmU7ZmlsbDojNzM3Mzc0O30KPC9zdHlsZT4NCiAgPHBvbHlnb24gcG9pbnRzPSIyNyw0
+        IDExLDIwIDUsMTQgMiwxNyAxMSwyNiAzMCw3ICIgY2xhc3M9IkdyZWVuIiAvPg0KPC9zdmc+Cw==
+</value>
+  </data>
   <metadata name="dxErrorProvider1.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.cs
index a026d81..ff24ea5 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.cs
@@ -2,10 +2,11 @@
 using HStation.Dto;
 using HStation.WinFrmUI;
 using HStation.WinFrmUI.Xhs.Project;
+using Mapster;
 using System;
 using Yw.Dto;
 
-namespace ISupply.WinFrmUI
+namespace HStation.WinFrmUI
 {
     public partial class EditProjectDlg : DevExpress.XtraEditors.XtraForm
     {
@@ -14,16 +15,21 @@
             InitializeComponent();
         }
 
-        private UpdateXhsProjectInput _UpdateXhsProjectInput = null;
+        private UpdateXhsProjectInput _updatePrj = null;
 
-        public event Func<UpdateXhsProjectInput, Task<bool>> ReloadEvent = null;
+        private UpdateXhsProjectItemInput _UpdateItem = null;
 
-        public void SetBindingData(XhsProjectDto xhsProjectDto)
+        public event Func<UpdateXhsProjectInput, UpdateXhsProjectItemInput, Task<bool>> ReloadEvent = null;
+
+        public async void SetBindingData(long ID)
         {
-            this.NameTextEdit.Text = xhsProjectDto.Name;
-            this.CustomerNameTextEdit.Text = xhsProjectDto.CustomerName;
-            this.DescriptionTextEdit.Text = xhsProjectDto.Description;
-            this.AddressTextEdit.Text = xhsProjectDto.Address;
+            var model = await new BLL.XhsProject().GetByID(ID);
+            _updatePrj = model.Adapt<XhsProjectDto, UpdateXhsProjectInput>();
+            this.NameTextEdit.Text = _updatePrj.Name;
+            this.TagNameText.Text = _updatePrj.TagName;
+            this.CustomerNameTextEdit.Text = _updatePrj.CustomerName;
+            this.DescriptionTextEdit.Text = _updatePrj.Description;
+            this.AddressTextEdit.Text = _updatePrj.Address;
         }
 
         //楠岃瘉
@@ -35,14 +41,6 @@
                 this.dxErrorProvider1.SetError(this.NameTextEdit, "蹇呭~椤�");
                 return false;
             }
-
-            var tagName = this.ModleTextEdit.Text.Trim();
-            if (string.IsNullOrEmpty(tagName))
-            {
-                this.dxErrorProvider1.SetError(this.ModleTextEdit, "閲嶅");
-                return false;
-            }
-
             return true;
         }
 
@@ -51,25 +49,34 @@
         {
             if (!Valid())
                 return;
-            _UpdateXhsProjectInput = new UpdateXhsProjectInput();
-            _UpdateXhsProjectInput.Name = this.NameTextEdit.Text.Trim();
-            _UpdateXhsProjectInput.CustomerName = this.CustomerNameTextEdit.Text.Trim();
-            _UpdateXhsProjectInput.CreateTime = DateTime.Now;
-            _UpdateXhsProjectInput.Description = this.DescriptionTextEdit.Text.Trim();
-            if (await this.ReloadEvent.Invoke(_UpdateXhsProjectInput))
+            _updatePrj.Name = this.NameTextEdit.Text.Trim();
+            _updatePrj.TagName = this.TagNameText.Text.Trim();
+            _updatePrj.CustomerName = this.CustomerNameTextEdit.Text.Trim();
+            _updatePrj.Description = this.DescriptionTextEdit.Text.Trim();
+            _updatePrj.Address = this.AddressTextEdit.Text.Trim();
+            var itemDto = await new BLL.XhsProjectItem().GetByPrjID(_updatePrj.ID);
+            _UpdateItem = itemDto.Adapt<XhsProjectItemDto, UpdateXhsProjectItemInput>();
+            _UpdateItem.Name = _updatePrj.Name;
+            _UpdateItem.TagName = _updatePrj.TagName;
+            _UpdateItem.UseStatus = _updatePrj.UseStatus;
+            if (await this.ReloadEvent.Invoke(_updatePrj, _UpdateItem))
             {
-                MessageBoxHelper.ShowSuccess("娣诲姞鎴愬姛!");
+                MessageBoxHelper.ShowSuccess("缂栬緫鎴愬姛!");
             }
             else
             {
-                MessageBoxHelper.ShowError("娣诲姞澶辫触!");
+                MessageBoxHelper.ShowError("缂栬緫澶辫触!");
             }
             this.DialogResult = DialogResult.OK;
             this.Close();
         }
 
-        //鍒濆鍖�
-        private void AddProjectDlg_Load(object sender, EventArgs e)
+        private void EditProjectDlg_Load(object sender, EventArgs e)
+        {
+            this.webView21.Source = new Uri(AppDomain.CurrentDomain.BaseDirectory + "data/web/html/map_select.html");
+        }
+
+        private void webView21_WebMessageReceived(object sender, Microsoft.Web.WebView2.Core.CoreWebView2WebMessageReceivedEventArgs e)
         {
         }
     }
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.designer.cs
index f39e27a..8765d15 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/EditProjectDlg.designer.cs
@@ -4,7 +4,7 @@
 using System.Drawing;
 using System.Windows.Forms;
 
-namespace ISupply.WinFrmUI
+namespace HStation.WinFrmUI
 {
     partial class EditProjectDlg
     {
@@ -36,15 +36,14 @@
         {
             components = new Container();
             dataLayoutControl1 = new DevExpress.XtraDataLayout.DataLayoutControl();
+            AddressTextEdit = new TextEdit();
             webView21 = new Microsoft.Web.WebView2.WinForms.WebView2();
             btnOk = new SimpleButton();
             btnCancel = new SimpleButton();
             NameTextEdit = new TextEdit();
             DescriptionTextEdit = new MemoEdit();
-            ModleTextEdit = new TextEdit();
             CustomerNameTextEdit = new TextEdit();
-            BtnFileChoice = new ButtonEdit();
-            TagName = new TextEdit();
+            TagNameText = new TextEdit();
             Root = new DevExpress.XtraLayout.LayoutControlGroup();
             layoutControlGroup1 = new DevExpress.XtraLayout.LayoutControlGroup();
             ItemForName = new DevExpress.XtraLayout.LayoutControlItem();
@@ -56,25 +55,21 @@
             layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlGroup3 = new DevExpress.XtraLayout.LayoutControlGroup();
             ItemForDescription = new DevExpress.XtraLayout.LayoutControlItem();
-            ItemForConstructionYear = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
-            ItemForTagName = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
             dxErrorProvider1 = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(components);
             layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
             layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
-            AddressTextEdit = new TextEdit();
-            layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
             ((ISupportInitialize)dataLayoutControl1).BeginInit();
             dataLayoutControl1.SuspendLayout();
+            ((ISupportInitialize)AddressTextEdit.Properties).BeginInit();
             ((ISupportInitialize)webView21).BeginInit();
             ((ISupportInitialize)NameTextEdit.Properties).BeginInit();
             ((ISupportInitialize)DescriptionTextEdit.Properties).BeginInit();
-            ((ISupportInitialize)ModleTextEdit.Properties).BeginInit();
             ((ISupportInitialize)CustomerNameTextEdit.Properties).BeginInit();
-            ((ISupportInitialize)BtnFileChoice.Properties).BeginInit();
-            ((ISupportInitialize)TagName.Properties).BeginInit();
+            ((ISupportInitialize)TagNameText.Properties).BeginInit();
             ((ISupportInitialize)Root).BeginInit();
             ((ISupportInitialize)layoutControlGroup1).BeginInit();
             ((ISupportInitialize)ItemForName).BeginInit();
@@ -86,16 +81,13 @@
             ((ISupportInitialize)layoutControlItem3).BeginInit();
             ((ISupportInitialize)layoutControlGroup3).BeginInit();
             ((ISupportInitialize)ItemForDescription).BeginInit();
-            ((ISupportInitialize)ItemForConstructionYear).BeginInit();
             ((ISupportInitialize)layoutControlItem5).BeginInit();
-            ((ISupportInitialize)ItemForTagName).BeginInit();
             ((ISupportInitialize)layoutControlItem4).BeginInit();
+            ((ISupportInitialize)layoutControlItem9).BeginInit();
             ((ISupportInitialize)dxErrorProvider1).BeginInit();
             ((ISupportInitialize)layoutControlItem6).BeginInit();
             ((ISupportInitialize)layoutControlItem7).BeginInit();
             ((ISupportInitialize)layoutControlItem8).BeginInit();
-            ((ISupportInitialize)AddressTextEdit.Properties).BeginInit();
-            ((ISupportInitialize)layoutControlItem9).BeginInit();
             SuspendLayout();
             // 
             // dataLayoutControl1
@@ -106,10 +98,8 @@
             dataLayoutControl1.Controls.Add(btnCancel);
             dataLayoutControl1.Controls.Add(NameTextEdit);
             dataLayoutControl1.Controls.Add(DescriptionTextEdit);
-            dataLayoutControl1.Controls.Add(ModleTextEdit);
             dataLayoutControl1.Controls.Add(CustomerNameTextEdit);
-            dataLayoutControl1.Controls.Add(BtnFileChoice);
-            dataLayoutControl1.Controls.Add(TagName);
+            dataLayoutControl1.Controls.Add(TagNameText);
             dataLayoutControl1.Dock = DockStyle.Fill;
             dataLayoutControl1.Location = new Point(0, 0);
             dataLayoutControl1.Name = "dataLayoutControl1";
@@ -119,16 +109,25 @@
             dataLayoutControl1.TabIndex = 0;
             dataLayoutControl1.Text = "dataLayoutControl1";
             // 
+            // AddressTextEdit
+            // 
+            AddressTextEdit.Location = new Point(76, 60);
+            AddressTextEdit.Name = "AddressTextEdit";
+            AddressTextEdit.Size = new Size(621, 20);
+            AddressTextEdit.StyleController = dataLayoutControl1;
+            AddressTextEdit.TabIndex = 5;
+            // 
             // webView21
             // 
             webView21.AllowExternalDrop = true;
             webView21.CreationProperties = null;
             webView21.DefaultBackgroundColor = Color.White;
-            webView21.Location = new Point(24, 144);
+            webView21.Location = new Point(24, 120);
             webView21.Name = "webView21";
-            webView21.Size = new Size(661, 249);
+            webView21.Size = new Size(661, 273);
             webView21.TabIndex = 15;
             webView21.ZoomFactor = 1D;
+            webView21.WebMessageReceived += webView21_WebMessageReceived;
             // 
             // btnOk
             // 
@@ -164,19 +163,11 @@
             // 
             // DescriptionTextEdit
             // 
-            DescriptionTextEdit.Location = new Point(22, 142);
+            DescriptionTextEdit.Location = new Point(22, 118);
             DescriptionTextEdit.Name = "DescriptionTextEdit";
-            DescriptionTextEdit.Size = new Size(665, 253);
+            DescriptionTextEdit.Size = new Size(665, 277);
             DescriptionTextEdit.StyleController = dataLayoutControl1;
             DescriptionTextEdit.TabIndex = 6;
-            // 
-            // ModleTextEdit
-            // 
-            ModleTextEdit.Location = new Point(76, 60);
-            ModleTextEdit.Name = "ModleTextEdit";
-            ModleTextEdit.Size = new Size(621, 20);
-            ModleTextEdit.StyleController = dataLayoutControl1;
-            ModleTextEdit.TabIndex = 4;
             // 
             // CustomerNameTextEdit
             // 
@@ -187,23 +178,13 @@
             CustomerNameTextEdit.StyleController = dataLayoutControl1;
             CustomerNameTextEdit.TabIndex = 14;
             // 
-            // BtnFileChoice
+            // TagNameText
             // 
-            BtnFileChoice.Location = new Point(76, 36);
-            BtnFileChoice.Margin = new Padding(2);
-            BtnFileChoice.Name = "BtnFileChoice";
-            BtnFileChoice.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton() });
-            BtnFileChoice.Size = new Size(276, 20);
-            BtnFileChoice.StyleController = dataLayoutControl1;
-            BtnFileChoice.TabIndex = 11;
-            // 
-            // TagName
-            // 
-            TagName.Location = new Point(420, 36);
-            TagName.Name = "TagName";
-            TagName.Size = new Size(277, 20);
-            TagName.StyleController = dataLayoutControl1;
-            TagName.TabIndex = 16;
+            TagNameText.Location = new Point(76, 36);
+            TagNameText.Name = "TagNameText";
+            TagNameText.Size = new Size(621, 20);
+            TagNameText.StyleController = dataLayoutControl1;
+            TagNameText.TabIndex = 16;
             // 
             // Root
             // 
@@ -220,7 +201,7 @@
             // 
             layoutControlGroup1.AllowDrawBackground = false;
             layoutControlGroup1.GroupBordersVisible = false;
-            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { ItemForName, layoutControlItem1, layoutControlItem2, emptySpaceItem1, tabbedControlGroup1, ItemForConstructionYear, layoutControlItem5, ItemForTagName, layoutControlItem4, layoutControlItem9 });
+            layoutControlGroup1.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { ItemForName, layoutControlItem1, layoutControlItem2, emptySpaceItem1, tabbedControlGroup1, layoutControlItem5, layoutControlItem4, layoutControlItem9 });
             layoutControlGroup1.Location = new Point(0, 0);
             layoutControlGroup1.Name = "autoGeneratedGroup0";
             layoutControlGroup1.Size = new Size(689, 420);
@@ -272,10 +253,10 @@
             tabbedControlGroup1.AppearanceTabPage.Header.Options.UseTextOptions = true;
             tabbedControlGroup1.AppearanceTabPage.Header.TextOptions.HAlignment = HorzAlignment.Center;
             tabbedControlGroup1.HeaderAutoFill = DefaultBoolean.True;
-            tabbedControlGroup1.Location = new Point(0, 96);
+            tabbedControlGroup1.Location = new Point(0, 72);
             tabbedControlGroup1.Name = "tabbedControlGroup1";
             tabbedControlGroup1.SelectedTabPage = layoutControlGroup2;
-            tabbedControlGroup1.Size = new Size(689, 301);
+            tabbedControlGroup1.Size = new Size(689, 325);
             tabbedControlGroup1.TabPages.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlGroup2, layoutControlGroup3 });
             // 
             // layoutControlGroup2
@@ -284,7 +265,7 @@
             layoutControlGroup2.Location = new Point(0, 0);
             layoutControlGroup2.Name = "layoutControlGroup2";
             layoutControlGroup2.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            layoutControlGroup2.Size = new Size(665, 253);
+            layoutControlGroup2.Size = new Size(665, 277);
             layoutControlGroup2.Spacing = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
             layoutControlGroup2.Text = "鍦板浘鍧愭爣";
             // 
@@ -293,7 +274,7 @@
             layoutControlItem3.Control = webView21;
             layoutControlItem3.Location = new Point(0, 0);
             layoutControlItem3.Name = "layoutControlItem3";
-            layoutControlItem3.Size = new Size(665, 253);
+            layoutControlItem3.Size = new Size(665, 277);
             layoutControlItem3.TextSize = new Size(0, 0);
             layoutControlItem3.TextVisible = false;
             // 
@@ -302,7 +283,7 @@
             layoutControlGroup3.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { ItemForDescription });
             layoutControlGroup3.Location = new Point(0, 0);
             layoutControlGroup3.Name = "layoutControlGroup3";
-            layoutControlGroup3.Size = new Size(665, 253);
+            layoutControlGroup3.Size = new Size(665, 277);
             layoutControlGroup3.Text = "璇存槑";
             // 
             // ItemForDescription
@@ -311,19 +292,10 @@
             ItemForDescription.Location = new Point(0, 0);
             ItemForDescription.Name = "ItemForDescription";
             ItemForDescription.Padding = new DevExpress.XtraLayout.Utils.Padding(0, 0, 0, 0);
-            ItemForDescription.Size = new Size(665, 253);
+            ItemForDescription.Size = new Size(665, 277);
             ItemForDescription.Text = "璇存槑:";
             ItemForDescription.TextSize = new Size(0, 0);
             ItemForDescription.TextVisible = false;
-            // 
-            // ItemForConstructionYear
-            // 
-            ItemForConstructionYear.Control = BtnFileChoice;
-            ItemForConstructionYear.Location = new Point(0, 24);
-            ItemForConstructionYear.Name = "ItemForConstructionYear";
-            ItemForConstructionYear.Size = new Size(344, 24);
-            ItemForConstructionYear.Text = "閫夋嫨鏂囦欢:";
-            ItemForConstructionYear.TextSize = new Size(52, 14);
             // 
             // layoutControlItem5
             // 
@@ -334,25 +306,23 @@
             layoutControlItem5.Text = "瀹㈡埛鍚嶇О:";
             layoutControlItem5.TextSize = new Size(52, 14);
             // 
-            // ItemForTagName
-            // 
-            ItemForTagName.AppearanceItemCaption.Options.UseTextOptions = true;
-            ItemForTagName.AppearanceItemCaption.TextOptions.HAlignment = HorzAlignment.Far;
-            ItemForTagName.Control = ModleTextEdit;
-            ItemForTagName.Location = new Point(0, 48);
-            ItemForTagName.Name = "ItemForTagName";
-            ItemForTagName.Size = new Size(689, 24);
-            ItemForTagName.Text = "涓夌淮妯″瀷:";
-            ItemForTagName.TextSize = new Size(52, 14);
-            // 
             // layoutControlItem4
             // 
-            layoutControlItem4.Control = TagName;
-            layoutControlItem4.Location = new Point(344, 24);
+            layoutControlItem4.Control = TagNameText;
+            layoutControlItem4.Location = new Point(0, 24);
             layoutControlItem4.Name = "layoutControlItem4";
-            layoutControlItem4.Size = new Size(345, 24);
+            layoutControlItem4.Size = new Size(689, 24);
             layoutControlItem4.Text = "鏍囩:";
             layoutControlItem4.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem9
+            // 
+            layoutControlItem9.Control = AddressTextEdit;
+            layoutControlItem9.Location = new Point(0, 48);
+            layoutControlItem9.Name = "layoutControlItem9";
+            layoutControlItem9.Size = new Size(689, 24);
+            layoutControlItem9.Text = "璇︾粏鍦板潃:";
+            layoutControlItem9.TextSize = new Size(52, 14);
             // 
             // dxErrorProvider1
             // 
@@ -382,23 +352,6 @@
             layoutControlItem8.Text = "璇︾粏鍦板潃:";
             layoutControlItem8.TextSize = new Size(52, 14);
             // 
-            // AddressTextEdit
-            // 
-            AddressTextEdit.Location = new Point(76, 84);
-            AddressTextEdit.Name = "AddressTextEdit";
-            AddressTextEdit.Size = new Size(621, 20);
-            AddressTextEdit.StyleController = dataLayoutControl1;
-            AddressTextEdit.TabIndex = 5;
-            // 
-            // layoutControlItem9
-            // 
-            layoutControlItem9.Control = AddressTextEdit;
-            layoutControlItem9.Location = new Point(0, 72);
-            layoutControlItem9.Name = "layoutControlItem9";
-            layoutControlItem9.Size = new Size(689, 24);
-            layoutControlItem9.Text = "璇︾粏鍦板潃:";
-            layoutControlItem9.TextSize = new Size(52, 14);
-            // 
             // EditProjectDlg
             // 
             AutoScaleDimensions = new SizeF(7F, 14F);
@@ -407,17 +360,16 @@
             Controls.Add(dataLayoutControl1);
             Name = "EditProjectDlg";
             StartPosition = FormStartPosition.CenterParent;
-            Text = "娣诲姞";
-            Load += AddProjectDlg_Load;
+            Text = "缂栬緫";
+            Load += EditProjectDlg_Load;
             ((ISupportInitialize)dataLayoutControl1).EndInit();
             dataLayoutControl1.ResumeLayout(false);
+            ((ISupportInitialize)AddressTextEdit.Properties).EndInit();
             ((ISupportInitialize)webView21).EndInit();
             ((ISupportInitialize)NameTextEdit.Properties).EndInit();
             ((ISupportInitialize)DescriptionTextEdit.Properties).EndInit();
-            ((ISupportInitialize)ModleTextEdit.Properties).EndInit();
             ((ISupportInitialize)CustomerNameTextEdit.Properties).EndInit();
-            ((ISupportInitialize)BtnFileChoice.Properties).EndInit();
-            ((ISupportInitialize)TagName.Properties).EndInit();
+            ((ISupportInitialize)TagNameText.Properties).EndInit();
             ((ISupportInitialize)Root).EndInit();
             ((ISupportInitialize)layoutControlGroup1).EndInit();
             ((ISupportInitialize)ItemForName).EndInit();
@@ -429,16 +381,13 @@
             ((ISupportInitialize)layoutControlItem3).EndInit();
             ((ISupportInitialize)layoutControlGroup3).EndInit();
             ((ISupportInitialize)ItemForDescription).EndInit();
-            ((ISupportInitialize)ItemForConstructionYear).EndInit();
             ((ISupportInitialize)layoutControlItem5).EndInit();
-            ((ISupportInitialize)ItemForTagName).EndInit();
             ((ISupportInitialize)layoutControlItem4).EndInit();
+            ((ISupportInitialize)layoutControlItem9).EndInit();
             ((ISupportInitialize)dxErrorProvider1).EndInit();
             ((ISupportInitialize)layoutControlItem6).EndInit();
             ((ISupportInitialize)layoutControlItem7).EndInit();
             ((ISupportInitialize)layoutControlItem8).EndInit();
-            ((ISupportInitialize)AddressTextEdit.Properties).EndInit();
-            ((ISupportInitialize)layoutControlItem9).EndInit();
             ResumeLayout(false);
         }
 
@@ -457,9 +406,6 @@
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
         private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
         private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider1;
-        private TextEdit ModleTextEdit;
-        private DevExpress.XtraLayout.LayoutControlItem ItemForTagName;
-        private DevExpress.XtraLayout.LayoutControlItem ItemForConstructionYear;
         private TextEdit CustomerNameTextEdit;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
         private DevExpress.XtraLayout.LayoutControlGroup layoutControlGroup2;
@@ -467,8 +413,7 @@
         private DevExpress.XtraLayout.TabbedControlGroup tabbedControlGroup1;
         private Microsoft.Web.WebView2.WinForms.WebView2 webView21;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
-        private ButtonEdit BtnFileChoice;
-        private TextEdit TagName;
+        private TextEdit TagNameText;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
         private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.Designer.cs
new file mode 100644
index 0000000..cb8a733
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.Designer.cs
@@ -0,0 +1,373 @@
+锘縩amespace HStation.WinFrmUI.Xhs.Project
+{
+    partial class ProjectUserControl
+    {
+        /// <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 System.ComponentModel.Container();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            TagName = new DevExpress.XtraEditors.TextEdit();
+            CustomerNameTextEdit = new DevExpress.XtraEditors.TextEdit();
+            NameTextEdit = new DevExpress.XtraEditors.TextEdit();
+            BtnFileChoice = new DevExpress.XtraEditors.ButtonEdit();
+            DescriptionTextEdit = new DevExpress.XtraEditors.MemoEdit();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem13 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem11 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem12 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem16 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem14 = new DevExpress.XtraLayout.LayoutControlItem();
+            ItemForName = new DevExpress.XtraLayout.LayoutControlItem();
+            ItemForConstructionYear = new DevExpress.XtraLayout.LayoutControlItem();
+            ItemForTagName = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem6 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem5 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem7 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem8 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem9 = new DevExpress.XtraLayout.LayoutControlItem();
+            dxErrorProvider1 = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(components);
+            ((System.ComponentModel.ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)TagName.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)CustomerNameTextEdit.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)NameTextEdit.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)BtnFileChoice.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)DescriptionTextEdit.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)Root).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem13).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem11).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem12).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem16).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem14).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)ItemForName).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)ItemForConstructionYear).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)ItemForTagName).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem6).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem4).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem5).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem2).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem3).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem7).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem8).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem9).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)dxErrorProvider1).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(TagName);
+            layoutControl1.Controls.Add(CustomerNameTextEdit);
+            layoutControl1.Controls.Add(NameTextEdit);
+            layoutControl1.Controls.Add(BtnFileChoice);
+            layoutControl1.Controls.Add(DescriptionTextEdit);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(967, 0, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(709, 196);
+            layoutControl1.TabIndex = 0;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // TagName
+            // 
+            TagName.Location = new Point(420, 36);
+            TagName.Name = "TagName";
+            TagName.Size = new Size(277, 20);
+            TagName.StyleController = layoutControl1;
+            TagName.TabIndex = 5;
+            // 
+            // CustomerNameTextEdit
+            // 
+            CustomerNameTextEdit.Location = new Point(420, 12);
+            CustomerNameTextEdit.Margin = new Padding(2);
+            CustomerNameTextEdit.Name = "CustomerNameTextEdit";
+            CustomerNameTextEdit.Size = new Size(277, 20);
+            CustomerNameTextEdit.StyleController = layoutControl1;
+            CustomerNameTextEdit.TabIndex = 2;
+            // 
+            // NameTextEdit
+            // 
+            NameTextEdit.Location = new Point(76, 12);
+            NameTextEdit.Name = "NameTextEdit";
+            NameTextEdit.Size = new Size(276, 20);
+            NameTextEdit.StyleController = layoutControl1;
+            NameTextEdit.TabIndex = 0;
+            // 
+            // BtnFileChoice
+            // 
+            BtnFileChoice.Location = new Point(76, 36);
+            BtnFileChoice.Margin = new Padding(2);
+            BtnFileChoice.Name = "BtnFileChoice";
+            BtnFileChoice.Properties.Buttons.AddRange(new DevExpress.XtraEditors.Controls.EditorButton[] { new DevExpress.XtraEditors.Controls.EditorButton() });
+            BtnFileChoice.Properties.ReadOnly = true;
+            BtnFileChoice.Size = new Size(276, 20);
+            BtnFileChoice.StyleController = layoutControl1;
+            BtnFileChoice.TabIndex = 4;
+            BtnFileChoice.Click += BtnFileChoice_Click;
+            // 
+            // DescriptionTextEdit
+            // 
+            DescriptionTextEdit.Location = new Point(76, 60);
+            DescriptionTextEdit.Name = "DescriptionTextEdit";
+            DescriptionTextEdit.Size = new Size(621, 124);
+            DescriptionTextEdit.StyleController = layoutControl1;
+            DescriptionTextEdit.TabIndex = 7;
+            // 
+            // Root
+            // 
+            Root.AppearanceItemCaption.Options.UseTextOptions = true;
+            Root.AppearanceItemCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem13, layoutControlItem11, layoutControlItem12, layoutControlItem16, layoutControlItem14 });
+            Root.Name = "Root";
+            Root.Size = new Size(709, 196);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem13
+            // 
+            layoutControlItem13.Control = CustomerNameTextEdit;
+            layoutControlItem13.Location = new Point(344, 0);
+            layoutControlItem13.Name = "layoutControlItem13";
+            layoutControlItem13.Size = new Size(345, 24);
+            layoutControlItem13.Text = "瀹㈡埛鍚嶇О:";
+            layoutControlItem13.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem11
+            // 
+            layoutControlItem11.AllowHtmlStringInCaption = true;
+            layoutControlItem11.Control = NameTextEdit;
+            layoutControlItem11.Location = new Point(0, 0);
+            layoutControlItem11.Name = "layoutControlItem11";
+            layoutControlItem11.Size = new Size(344, 24);
+            layoutControlItem11.Text = "<color=red>*</color>鍚嶇О:";
+            layoutControlItem11.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem12
+            // 
+            layoutControlItem12.Control = BtnFileChoice;
+            layoutControlItem12.Location = new Point(0, 24);
+            layoutControlItem12.Name = "layoutControlItem12";
+            layoutControlItem12.Size = new Size(344, 24);
+            layoutControlItem12.Text = "鏂囦欢閫夋嫨:";
+            layoutControlItem12.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem16
+            // 
+            layoutControlItem16.Control = DescriptionTextEdit;
+            layoutControlItem16.Location = new Point(0, 48);
+            layoutControlItem16.Name = "layoutControlItem16";
+            layoutControlItem16.Size = new Size(689, 128);
+            layoutControlItem16.Text = "璇存槑";
+            layoutControlItem16.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem14
+            // 
+            layoutControlItem14.Control = TagName;
+            layoutControlItem14.Location = new Point(344, 24);
+            layoutControlItem14.Name = "layoutControlItem14";
+            layoutControlItem14.Size = new Size(345, 24);
+            layoutControlItem14.Text = "鏍囩:";
+            layoutControlItem14.TextSize = new Size(52, 14);
+            // 
+            // ItemForName
+            // 
+            ItemForName.AllowHtmlStringInCaption = true;
+            ItemForName.Location = new Point(0, 74);
+            ItemForName.Name = "ItemForName";
+            ItemForName.Size = new Size(413, 24);
+            ItemForName.Text = "<color=red>*</color>鍚嶇О:";
+            ItemForName.TextSize = new Size(52, 14);
+            // 
+            // ItemForConstructionYear
+            // 
+            ItemForConstructionYear.Location = new Point(0, 98);
+            ItemForConstructionYear.Name = "ItemForConstructionYear";
+            ItemForConstructionYear.Size = new Size(413, 24);
+            ItemForConstructionYear.Text = "閫夋嫨鏂囦欢:";
+            ItemForConstructionYear.TextSize = new Size(52, 14);
+            // 
+            // ItemForTagName
+            // 
+            ItemForTagName.AppearanceItemCaption.Options.UseTextOptions = true;
+            ItemForTagName.AppearanceItemCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
+            ItemForTagName.Location = new Point(0, 122);
+            ItemForTagName.Name = "ItemForTagName";
+            ItemForTagName.Size = new Size(827, 24);
+            ItemForTagName.Text = "涓夌淮妯″瀷:";
+            ItemForTagName.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem6
+            // 
+            layoutControlItem6.Location = new Point(0, 146);
+            layoutControlItem6.Name = "layoutControlItem6";
+            layoutControlItem6.Size = new Size(827, 24);
+            layoutControlItem6.Text = "璇︾粏鍦板潃:";
+            layoutControlItem6.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.Location = new Point(413, 98);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(414, 24);
+            layoutControlItem4.Text = "鏍囩:";
+            layoutControlItem4.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem5
+            // 
+            layoutControlItem5.Location = new Point(413, 74);
+            layoutControlItem5.Name = "layoutControlItem5";
+            layoutControlItem5.Size = new Size(414, 24);
+            layoutControlItem5.Text = "瀹㈡埛鍚嶇О:";
+            layoutControlItem5.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Location = new Point(0, 146);
+            layoutControlItem1.Name = "layoutControlItem6";
+            layoutControlItem1.Size = new Size(827, 24);
+            layoutControlItem1.Text = "璇︾粏鍦板潃:";
+            layoutControlItem1.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.AppearanceItemCaption.Options.UseTextOptions = true;
+            layoutControlItem2.AppearanceItemCaption.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Far;
+            layoutControlItem2.Location = new Point(0, 122);
+            layoutControlItem2.Name = "ItemForTagName";
+            layoutControlItem2.Size = new Size(827, 24);
+            layoutControlItem2.Text = "涓夌淮妯″瀷:";
+            layoutControlItem2.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem3
+            // 
+            layoutControlItem3.Location = new Point(0, 98);
+            layoutControlItem3.Name = "ItemForConstructionYear";
+            layoutControlItem3.Size = new Size(413, 24);
+            layoutControlItem3.Text = "閫夋嫨鏂囦欢:";
+            layoutControlItem3.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem7
+            // 
+            layoutControlItem7.AllowHtmlStringInCaption = true;
+            layoutControlItem7.Location = new Point(0, 74);
+            layoutControlItem7.Name = "ItemForName";
+            layoutControlItem7.Size = new Size(413, 24);
+            layoutControlItem7.Text = "<color=red>*</color>鍚嶇О:";
+            layoutControlItem7.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem8
+            // 
+            layoutControlItem8.Location = new Point(413, 98);
+            layoutControlItem8.Name = "layoutControlItem4";
+            layoutControlItem8.Size = new Size(414, 24);
+            layoutControlItem8.Text = "鏍囩:";
+            layoutControlItem8.TextSize = new Size(52, 14);
+            // 
+            // layoutControlItem9
+            // 
+            layoutControlItem9.Location = new Point(413, 74);
+            layoutControlItem9.Name = "layoutControlItem5";
+            layoutControlItem9.Size = new Size(414, 24);
+            layoutControlItem9.Text = "瀹㈡埛鍚嶇О:";
+            layoutControlItem9.TextSize = new Size(52, 14);
+            // 
+            // dxErrorProvider1
+            // 
+            dxErrorProvider1.ContainerControl = this;
+            // 
+            // ProjectUserControl
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            Controls.Add(layoutControl1);
+            Name = "ProjectUserControl";
+            Size = new Size(709, 196);
+            ((System.ComponentModel.ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)TagName.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)CustomerNameTextEdit.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)NameTextEdit.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)BtnFileChoice.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)DescriptionTextEdit.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)Root).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem13).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem11).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem12).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem16).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem14).EndInit();
+            ((System.ComponentModel.ISupportInitialize)ItemForName).EndInit();
+            ((System.ComponentModel.ISupportInitialize)ItemForConstructionYear).EndInit();
+            ((System.ComponentModel.ISupportInitialize)ItemForTagName).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem6).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem4).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem5).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem2).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem3).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem7).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem8).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem9).EndInit();
+            ((System.ComponentModel.ISupportInitialize)dxErrorProvider1).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem ItemForName;
+        private DevExpress.XtraLayout.LayoutControlItem ItemForConstructionYear;
+        private DevExpress.XtraLayout.LayoutControlItem ItemForTagName;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem6;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem5;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem7;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem8;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem9;
+        private DevExpress.XtraEditors.TextEdit TagName;
+        private DevExpress.XtraEditors.TextEdit CustomerNameTextEdit;
+        private DevExpress.XtraEditors.TextEdit NameTextEdit;
+        private DevExpress.XtraEditors.ButtonEdit BtnFileChoice;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem11;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem12;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem13;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem14;
+        private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider1;
+        private DevExpress.XtraEditors.MemoEdit DescriptionTextEdit;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem16;
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.cs
new file mode 100644
index 0000000..fd2d5a6
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.cs
@@ -0,0 +1,71 @@
+锘縰sing DevExpress.XtraEditors;
+using HStation.Dto;
+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 HStation.WinFrmUI.Xhs.Project
+{
+    public partial class ProjectUserControl : DevExpress.XtraEditors.XtraUserControl
+    {
+        public ProjectUserControl()
+        {
+            InitializeComponent();
+        }
+
+        private AddXhsProjectInput _AddXhsProjectInput = null;
+
+        //楠岃瘉
+        public bool Valid()
+        {
+            this.dxErrorProvider1.ClearErrors();
+            if (string.IsNullOrEmpty(this.NameTextEdit.Text.Trim()))
+            {
+                this.dxErrorProvider1.SetError(this.NameTextEdit, "蹇呭~椤�");
+                return false;
+            }
+            if (string.IsNullOrEmpty(this.BtnFileChoice.Text.Trim()))
+            {
+                this.dxErrorProvider1.SetError(this.BtnFileChoice, "蹇呴�夐」");
+                return false;
+            }
+            return true;
+        }
+
+        public AddXhsProjectInput GetData(AddXhsProjectInput model)
+        {
+            model.Name = this.NameTextEdit.Text.Trim();
+            model.CustomerName = this.CustomerNameTextEdit.Text.Trim();
+            model.CreateTime = DateTime.Now;
+            model.GID = Guid.NewGuid().ToString();
+            model.Description = this.DescriptionTextEdit.Text.Trim();
+            // model.CreateUserID=
+            return model;
+        }
+
+        //閫夋嫨鏂囦欢
+        private void BtnFileChoice_Click(object sender, EventArgs e)
+        {
+            OpenFileDialog openFileDialog = new OpenFileDialog();
+            openFileDialog.Filter = "ZIP Files (*.zip)|*.zip";
+            openFileDialog.FilterIndex = 1;
+            string selectedFilePath = null;
+            if (openFileDialog.ShowDialog() == DialogResult.OK)
+            {
+                selectedFilePath = openFileDialog.FileName;
+                string newFileName = selectedFilePath.EndsWith(".zip", StringComparison.OrdinalIgnoreCase)
+       ? selectedFilePath.Substring(0, selectedFilePath.Length - 4) + ".hsr"
+       : selectedFilePath;
+                this.BtnFileChoice.Text = newFileName;
+            }
+            //   string extractPath = @"C:\Users\ZKC\Desktop\sss";
+            //  ZipFile.ExtractToDirectory(extractPath, selectedFilePath);
+        }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.resx
new file mode 100644
index 0000000..d438392
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectUserControl.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="dxErrorProvider1.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/HStation.WinFrmUI.Xhs.Project/01-project/ProjectViewModel.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectViewModel.cs
deleted file mode 100644
index dd44964..0000000
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/ProjectViewModel.cs
+++ /dev/null
@@ -1,29 +0,0 @@
-锘縰sing HStation.Dto;
-
-namespace HStation.WinFrmUI.Xhs.Project
-{
-    public class ProjectViewModel : XhsProjectDto
-    {
-        public ProjectViewModel(XhsProjectDto rhs)
-        {
-            this.ID = rhs.ID;
-            this.Name = rhs.Name;
-            this.Paras = rhs.Paras;
-            this.Flags = rhs.Flags;
-            this.TagName = rhs.TagName;
-            this.UseStatus = rhs.UseStatus;
-            this.SortCode = rhs.SortCode;
-            this.Description = rhs.Description;
-            this.CreateTime = rhs.CreateTime;
-            this.CreateUserID = rhs.CreateUserID;
-            this.Version = rhs.Version;
-            this.MapPosition = rhs.MapPosition;
-            this.CreateDisplayName = CreateUserID.ToString();
-        }
-
-        /// <summary>
-        /// 鍒涘缓浜烘樉绀哄悕瀛�
-        /// </summary>
-        public string CreateDisplayName { get; set; }
-    }
-}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.cs
new file mode 100644
index 0000000..36b5a87
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.cs
@@ -0,0 +1,64 @@
+锘縰sing DevExpress.XtraEditors;
+using System;
+using System.Windows.Forms;
+
+namespace HStation.WinFrmUI
+{
+    /// <summary>
+    /// 璁剧疆鎺掑簭鐮�
+    /// </summary>
+    public partial class SetSortCodeDlg : XtraForm
+    {
+        public SetSortCodeDlg()
+        {
+            InitializeComponent();
+        }
+
+        /// <summary>
+        /// 鍥炶皟浜嬩欢
+        /// </summary>
+        public event Func<int, Task<bool>> ReloadDataEvent;
+
+        /// <summary>
+        /// 缁戝畾浜嬩欢
+        /// </summary>
+        public void SetBindingData(int SortCode)
+        {
+            this.txtSortCode.EditValue = SortCode;
+        }
+
+        //楠岃瘉
+        private bool Valid()
+        {
+            this.dxErrorProvider1.ClearErrors();
+            if (string.IsNullOrEmpty(this.txtSortCode.Text.Trim()))
+            {
+                this.dxErrorProvider1.SetError(this.txtSortCode, "蹇呭~椤�");
+                return false;
+            }
+            return true;
+        }
+
+        //纭畾
+        private async void btnOk_Click(object sender, EventArgs e)
+        {
+            if (!Valid())
+                return;
+            if (this.ReloadDataEvent != null)
+            {
+                var result = await this.ReloadDataEvent.Invoke(int.Parse(this.txtSortCode.Text));
+                if (result)
+                {
+                    MessageBoxHelper.ShowSuccess("鏇存柊鎴愬姛锛�");
+                }
+                else
+                {
+                    MessageBoxHelper.ShowError("鏇存柊澶辫触锛�");
+                    return;
+                }
+            }
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.designer.cs
new file mode 100644
index 0000000..f7e16d6
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.designer.cs
@@ -0,0 +1,190 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class SetSortCodeDlg
+    {
+        /// <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();
+            layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            txtSortCode = new DevExpress.XtraEditors.TextEdit();
+            btnCancel = new DevExpress.XtraEditors.SimpleButton();
+            btnOk = new DevExpress.XtraEditors.SimpleButton();
+            Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            layoutControlItem4 = new DevExpress.XtraLayout.LayoutControlItem();
+            dxErrorProvider1 = new DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider(components);
+            ((System.ComponentModel.ISupportInitialize)layoutControl1).BeginInit();
+            layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)txtSortCode.Properties).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)Root).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem2).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)emptySpaceItem1).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem4).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)dxErrorProvider1).BeginInit();
+            SuspendLayout();
+            // 
+            // layoutControl1
+            // 
+            layoutControl1.Controls.Add(txtSortCode);
+            layoutControl1.Controls.Add(btnCancel);
+            layoutControl1.Controls.Add(btnOk);
+            layoutControl1.Dock = DockStyle.Fill;
+            layoutControl1.Location = new Point(0, 0);
+            layoutControl1.Margin = new Padding(3, 2, 3, 2);
+            layoutControl1.Name = "layoutControl1";
+            layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new Rectangle(399, 0, 650, 400);
+            layoutControl1.Root = Root;
+            layoutControl1.Size = new Size(282, 71);
+            layoutControl1.TabIndex = 1;
+            layoutControl1.Text = "layoutControl1";
+            // 
+            // txtSortCode
+            // 
+            txtSortCode.Location = new Point(64, 12);
+            txtSortCode.Margin = new Padding(0);
+            txtSortCode.Name = "txtSortCode";
+            txtSortCode.Properties.AllowNullInput = DevExpress.Utils.DefaultBoolean.False;
+            txtSortCode.Properties.Mask.EditMask = "N00";
+            txtSortCode.Properties.Mask.MaskType = DevExpress.XtraEditors.Mask.MaskType.Numeric;
+            txtSortCode.Size = new Size(206, 20);
+            txtSortCode.StyleController = layoutControl1;
+            txtSortCode.TabIndex = 7;
+            // 
+            // btnCancel
+            // 
+            btnCancel.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Warning;
+            btnCancel.Appearance.Options.UseBackColor = true;
+            btnCancel.DialogResult = DialogResult.Cancel;
+            btnCancel.Location = new Point(204, 36);
+            btnCancel.Margin = new Padding(2);
+            btnCancel.Name = "btnCancel";
+            btnCancel.Size = new Size(66, 22);
+            btnCancel.StyleController = layoutControl1;
+            btnCancel.TabIndex = 5;
+            btnCancel.Text = "鍙栨秷";
+            // 
+            // btnOk
+            // 
+            btnOk.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
+            btnOk.Appearance.Options.UseBackColor = true;
+            btnOk.Location = new Point(137, 36);
+            btnOk.Margin = new Padding(2);
+            btnOk.Name = "btnOk";
+            btnOk.Size = new Size(63, 22);
+            btnOk.StyleController = layoutControl1;
+            btnOk.TabIndex = 4;
+            btnOk.Text = "纭畾";
+            btnOk.Click += btnOk_Click;
+            // 
+            // Root
+            // 
+            Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            Root.GroupBordersVisible = false;
+            Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] { layoutControlItem1, layoutControlItem2, emptySpaceItem1, layoutControlItem4 });
+            Root.Name = "Root";
+            Root.Size = new Size(282, 71);
+            Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            layoutControlItem1.Control = btnOk;
+            layoutControlItem1.Location = new Point(125, 24);
+            layoutControlItem1.Name = "layoutControlItem1";
+            layoutControlItem1.Size = new Size(67, 27);
+            layoutControlItem1.TextSize = new Size(0, 0);
+            layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            layoutControlItem2.Control = btnCancel;
+            layoutControlItem2.Location = new Point(192, 24);
+            layoutControlItem2.Name = "layoutControlItem2";
+            layoutControlItem2.Size = new Size(70, 27);
+            layoutControlItem2.TextSize = new Size(0, 0);
+            layoutControlItem2.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            emptySpaceItem1.AllowHotTrack = false;
+            emptySpaceItem1.Location = new Point(0, 24);
+            emptySpaceItem1.Name = "emptySpaceItem1";
+            emptySpaceItem1.Size = new Size(125, 27);
+            emptySpaceItem1.TextSize = new Size(0, 0);
+            // 
+            // layoutControlItem4
+            // 
+            layoutControlItem4.Control = txtSortCode;
+            layoutControlItem4.Location = new Point(0, 0);
+            layoutControlItem4.Name = "layoutControlItem4";
+            layoutControlItem4.Size = new Size(262, 24);
+            layoutControlItem4.Text = "鎺掑簭鐮�:";
+            layoutControlItem4.TextSize = new Size(40, 14);
+            // 
+            // dxErrorProvider1
+            // 
+            dxErrorProvider1.ContainerControl = this;
+            // 
+            // SetSortCodeDlg
+            // 
+            AutoScaleDimensions = new SizeF(7F, 14F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(282, 71);
+            Controls.Add(layoutControl1);
+            FormBorderStyle = FormBorderStyle.FixedToolWindow;
+            Margin = new Padding(3, 2, 3, 2);
+            Name = "SetSortCodeDlg";
+            StartPosition = FormStartPosition.CenterParent;
+            Text = "璁剧疆鎺掑簭鐮�";
+            ((System.ComponentModel.ISupportInitialize)layoutControl1).EndInit();
+            layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)txtSortCode.Properties).EndInit();
+            ((System.ComponentModel.ISupportInitialize)Root).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem2).EndInit();
+            ((System.ComponentModel.ISupportInitialize)emptySpaceItem1).EndInit();
+            ((System.ComponentModel.ISupportInitialize)layoutControlItem4).EndInit();
+            ((System.ComponentModel.ISupportInitialize)dxErrorProvider1).EndInit();
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.SimpleButton btnCancel;
+        private DevExpress.XtraEditors.SimpleButton btnOk;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.TextEdit txtSortCode;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem4;
+        private DevExpress.XtraEditors.DXErrorProvider.DXErrorProvider dxErrorProvider1;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.resx
new file mode 100644
index 0000000..d438392
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetSortCodeDlg.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="dxErrorProvider1.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/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.cs
new file mode 100644
index 0000000..154a156
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.cs
@@ -0,0 +1,60 @@
+锘縰sing DevExpress.XtraEditors;
+
+namespace HStation.WinFrmUI
+{
+    /// <summary>
+    /// 璁剧疆浣跨敤鐘舵��
+    /// </summary>
+    public partial class SetUseStatusDlg : XtraForm
+    {
+        public SetUseStatusDlg()
+        {
+            InitializeComponent();
+        }
+
+        /// <summary>
+        /// 鍥炶皟鍑芥暟
+        /// </summary>
+        public event Func<Yw.Model.eUseStatus, Task<bool>> ReloadDataEvent;
+
+        /// <summary>
+        /// 缁戝畾鏁版嵁
+        /// </summary>
+        public void SetBindingData(Yw.Model.eUseStatus UseStatus)
+        {
+            switch (UseStatus)
+            {
+                case Yw.Model.eUseStatus.Enable: this.radioGroup1.SelectedIndex = 1; break;
+                case Yw.Model.eUseStatus.Disable: this.radioGroup1.SelectedIndex = 0; break;
+                default: break;
+            }
+        }
+
+        //纭畾
+
+        private async void btnOk_Click(object sender, EventArgs e)
+        {
+            var status = Yw.Model.eUseStatus.Enable;
+            if (this.radioGroup1.SelectedIndex == 0)
+                status = Yw.Model.eUseStatus.Disable;
+            else if (this.radioGroup1.SelectedIndex == 1)
+                status = Yw.Model.eUseStatus.Enable;
+
+            if (this.ReloadDataEvent != null)
+            {
+                var result = await this.ReloadDataEvent.Invoke(status);
+                if (result)
+                {
+                    MessageBoxHelper.ShowSuccess("鏇存柊鎴愬姛锛�");
+                }
+                else
+                {
+                    MessageBoxHelper.ShowError("鏇存柊澶辫触锛�");
+                    return;
+                }
+            }
+            this.DialogResult = DialogResult.OK;
+            this.Close();
+        }
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.designer.cs
new file mode 100644
index 0000000..9712163
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.designer.cs
@@ -0,0 +1,202 @@
+锘縩amespace HStation.WinFrmUI
+{
+    partial class SetUseStatusDlg
+    {
+        /// <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()
+        {
+            this.layoutControl1 = new DevExpress.XtraLayout.LayoutControl();
+            this.radioGroup1 = new DevExpress.XtraEditors.RadioGroup();
+            this.btnCancel = new DevExpress.XtraEditors.SimpleButton();
+            this.btnOk = new DevExpress.XtraEditors.SimpleButton();
+            this.Root = new DevExpress.XtraLayout.LayoutControlGroup();
+            this.layoutControlItem1 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.layoutControlItem2 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.emptySpaceItem1 = new DevExpress.XtraLayout.EmptySpaceItem();
+            this.layoutControlItem3 = new DevExpress.XtraLayout.LayoutControlItem();
+            this.emptySpaceItem2 = new DevExpress.XtraLayout.EmptySpaceItem();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).BeginInit();
+            this.layoutControl1.SuspendLayout();
+            ((System.ComponentModel.ISupportInitialize)(this.radioGroup1.Properties)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).BeginInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).BeginInit();
+             // 
+            // layoutControl1
+            // 
+            this.layoutControl1.Controls.Add(this.radioGroup1);
+            this.layoutControl1.Controls.Add(this.btnCancel);
+            this.layoutControl1.Controls.Add(this.btnOk);
+            this.layoutControl1.Dock = System.Windows.Forms.DockStyle.Fill;
+            this.layoutControl1.Location = new System.Drawing.Point(0, 0);
+            this.layoutControl1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.layoutControl1.Name = "layoutControl1";
+            this.layoutControl1.OptionsCustomizationForm.DesignTimeCustomizationFormPositionAndSize = new System.Drawing.Rectangle(668, 0, 650, 400);
+            this.layoutControl1.Root = this.Root;
+            this.layoutControl1.Size = new System.Drawing.Size(411, 134);
+            this.layoutControl1.TabIndex = 1;
+            this.layoutControl1.Text = "layoutControl1";
+            // 
+            // radioGroup1
+            // 
+            this.radioGroup1.EditValue = 0;
+            this.radioGroup1.Location = new System.Drawing.Point(131, 12);
+            this.radioGroup1.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.radioGroup1.Name = "radioGroup1";
+            this.radioGroup1.Properties.AllowFocused = false;
+            this.radioGroup1.Properties.Appearance.BackColor = System.Drawing.Color.Transparent;
+            this.radioGroup1.Properties.Appearance.Options.UseBackColor = true;
+            this.radioGroup1.Properties.BorderStyle = DevExpress.XtraEditors.Controls.BorderStyles.NoBorder;
+            this.radioGroup1.Properties.GlyphAlignment = DevExpress.Utils.HorzAlignment.Default;
+            this.radioGroup1.Properties.Items.AddRange(new DevExpress.XtraEditors.Controls.RadioGroupItem[] {
+            new DevExpress.XtraEditors.Controls.RadioGroupItem(0, "鏃犳晥"),
+            new DevExpress.XtraEditors.Controls.RadioGroupItem(1, "鏈夋晥")});
+            this.radioGroup1.Size = new System.Drawing.Size(268, 74);
+            this.radioGroup1.StyleController = this.layoutControl1;
+            this.radioGroup1.TabIndex = 6;
+            // 
+            // btnCancel
+            // 
+            this.btnCancel.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Warning;
+            this.btnCancel.Appearance.Options.UseBackColor = true;
+            this.btnCancel.DialogResult = System.Windows.Forms.DialogResult.Cancel;
+            this.btnCancel.Location = new System.Drawing.Point(305, 90);
+            this.btnCancel.Name = "btnCancel";
+            this.btnCancel.Size = new System.Drawing.Size(94, 32);
+            this.btnCancel.StyleController = this.layoutControl1;
+            this.btnCancel.TabIndex = 5;
+            this.btnCancel.Text = "鍙栨秷";
+            // 
+            // btnOk
+            // 
+            this.btnOk.Appearance.BackColor = DevExpress.LookAndFeel.DXSkinColors.FillColors.Primary;
+            this.btnOk.Appearance.Options.UseBackColor = true;
+            this.btnOk.Location = new System.Drawing.Point(207, 90);
+            this.btnOk.Name = "btnOk";
+            this.btnOk.Size = new System.Drawing.Size(94, 32);
+            this.btnOk.StyleController = this.layoutControl1;
+            this.btnOk.TabIndex = 4;
+            this.btnOk.Text = "纭畾";
+            this.btnOk.Click += new System.EventHandler(this.btnOk_Click);
+            // 
+            // Root
+            // 
+            this.Root.EnableIndentsWithoutBorders = DevExpress.Utils.DefaultBoolean.True;
+            this.Root.GroupBordersVisible = false;
+            this.Root.Items.AddRange(new DevExpress.XtraLayout.BaseLayoutItem[] {
+            this.layoutControlItem1,
+            this.layoutControlItem2,
+            this.emptySpaceItem1,
+            this.layoutControlItem3,
+            this.emptySpaceItem2});
+            this.Root.Name = "Root";
+            this.Root.Size = new System.Drawing.Size(411, 134);
+            this.Root.TextVisible = false;
+            // 
+            // layoutControlItem1
+            // 
+            this.layoutControlItem1.Control = this.btnOk;
+            this.layoutControlItem1.Location = new System.Drawing.Point(195, 78);
+            this.layoutControlItem1.Name = "layoutControlItem1";
+            this.layoutControlItem1.Size = new System.Drawing.Size(98, 36);
+            this.layoutControlItem1.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem1.TextVisible = false;
+            // 
+            // layoutControlItem2
+            // 
+            this.layoutControlItem2.Control = this.btnCancel;
+            this.layoutControlItem2.Location = new System.Drawing.Point(293, 78);
+            this.layoutControlItem2.Name = "layoutControlItem2";
+            this.layoutControlItem2.Size = new System.Drawing.Size(98, 36);
+            this.layoutControlItem2.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem2.TextVisible = false;
+            // 
+            // emptySpaceItem1
+            // 
+            this.emptySpaceItem1.AllowHotTrack = false;
+            this.emptySpaceItem1.Location = new System.Drawing.Point(0, 78);
+            this.emptySpaceItem1.Name = "emptySpaceItem1";
+            this.emptySpaceItem1.Size = new System.Drawing.Size(195, 36);
+            this.emptySpaceItem1.TextSize = new System.Drawing.Size(0, 0);
+            // 
+            // layoutControlItem3
+            // 
+            this.layoutControlItem3.Control = this.radioGroup1;
+            this.layoutControlItem3.Location = new System.Drawing.Point(119, 0);
+            this.layoutControlItem3.Name = "layoutControlItem3";
+            this.layoutControlItem3.Size = new System.Drawing.Size(272, 78);
+            this.layoutControlItem3.TextSize = new System.Drawing.Size(0, 0);
+            this.layoutControlItem3.TextVisible = false;
+            // 
+            // emptySpaceItem2
+            // 
+            this.emptySpaceItem2.AllowHotTrack = false;
+            this.emptySpaceItem2.Location = new System.Drawing.Point(0, 0);
+            this.emptySpaceItem2.Name = "emptySpaceItem2";
+            this.emptySpaceItem2.Size = new System.Drawing.Size(119, 78);
+            this.emptySpaceItem2.TextSize = new System.Drawing.Size(0, 0);
+            // 
+            // SetUseStatusDlg
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(10F, 22F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(411, 134);
+            this.Controls.Add(this.layoutControl1);
+            this.FormBorderStyle = System.Windows.Forms.FormBorderStyle.FixedToolWindow;
+            this.Margin = new System.Windows.Forms.Padding(4, 3, 4, 3);
+            this.Name = "SetUseStatusDlg";
+            this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent;
+            this.Text = " 璁剧疆浣跨敤鐘舵��";
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControl1)).EndInit();
+            this.layoutControl1.ResumeLayout(false);
+            ((System.ComponentModel.ISupportInitialize)(this.radioGroup1.Properties)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.Root)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem2)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem1)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.layoutControlItem3)).EndInit();
+            ((System.ComponentModel.ISupportInitialize)(this.emptySpaceItem2)).EndInit();
+            this.ResumeLayout(false);
+
+        }
+
+        #endregion
+
+        private DevExpress.XtraLayout.LayoutControl layoutControl1;
+        private DevExpress.XtraEditors.SimpleButton btnCancel;
+        private DevExpress.XtraEditors.SimpleButton btnOk;
+        private DevExpress.XtraLayout.LayoutControlGroup Root;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem2;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem1;
+        private DevExpress.XtraEditors.RadioGroup radioGroup1;
+        private DevExpress.XtraLayout.LayoutControlItem layoutControlItem3;
+        private DevExpress.XtraLayout.EmptySpaceItem emptySpaceItem2;
+    }
+}
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/SetUseStatusDlg.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.Project/01-project/XhsProjectListPage.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.Designer.cs
index 4cf82d5..ae8bc4a 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.Designer.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.Designer.cs
@@ -34,19 +34,23 @@
             BtnAdd = new DevExpress.XtraBars.BarButtonItem();
             BtnEdit = new DevExpress.XtraBars.BarButtonItem();
             BtnDelete = new DevExpress.XtraBars.BarButtonItem();
+            BtnUpdateUseStatus = new DevExpress.XtraBars.BarButtonItem();
+            BtnUpdateSortCode = new DevExpress.XtraBars.BarButtonItem();
             ribbonPage1 = new DevExpress.XtraBars.Ribbon.RibbonPage();
             ribbonPageGroup1 = new DevExpress.XtraBars.Ribbon.RibbonPageGroup();
             gridControl1 = new DevExpress.XtraGrid.GridControl();
             projectViewModelBindingSource = new BindingSource(components);
             gridView1 = new DevExpress.XtraGrid.Views.Grid.GridView();
             colName = new DevExpress.XtraGrid.Columns.GridColumn();
-            colParas = new DevExpress.XtraGrid.Columns.GridColumn();
             ColDisplayName = new DevExpress.XtraGrid.Columns.GridColumn();
+            gridColumn1 = new DevExpress.XtraGrid.Columns.GridColumn();
             colTagName = new DevExpress.XtraGrid.Columns.GridColumn();
             colUseStatus = new DevExpress.XtraGrid.Columns.GridColumn();
+            gridColumn2 = new DevExpress.XtraGrid.Columns.GridColumn();
+            gridColumn4 = new DevExpress.XtraGrid.Columns.GridColumn();
+            gridColumn3 = new DevExpress.XtraGrid.Columns.GridColumn();
             colSortCode = new DevExpress.XtraGrid.Columns.GridColumn();
             colDescription = new DevExpress.XtraGrid.Columns.GridColumn();
-            colCustomerName = new DevExpress.XtraGrid.Columns.GridColumn();
             ((System.ComponentModel.ISupportInitialize)ribbonControl1).BeginInit();
             ((System.ComponentModel.ISupportInitialize)gridControl1).BeginInit();
             ((System.ComponentModel.ISupportInitialize)projectViewModelBindingSource).BeginInit();
@@ -58,9 +62,9 @@
             ribbonControl1.DrawGroupsBorderMode = DevExpress.Utils.DefaultBoolean.False;
             ribbonControl1.ExpandCollapseItem.Id = 0;
             ribbonControl1.ItemPanelStyle = DevExpress.XtraBars.Ribbon.RibbonItemPanelStyle.Classic;
-            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, BtnAdd, BtnEdit, BtnDelete });
+            ribbonControl1.Items.AddRange(new DevExpress.XtraBars.BarItem[] { ribbonControl1.ExpandCollapseItem, BtnAdd, BtnEdit, BtnDelete, BtnUpdateUseStatus, BtnUpdateSortCode });
             ribbonControl1.Location = new Point(0, 0);
-            ribbonControl1.MaxItemId = 4;
+            ribbonControl1.MaxItemId = 6;
             ribbonControl1.Name = "ribbonControl1";
             ribbonControl1.Pages.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPage[] { ribbonPage1 });
             ribbonControl1.ShowApplicationButton = DevExpress.Utils.DefaultBoolean.False;
@@ -94,6 +98,22 @@
             BtnDelete.Name = "BtnDelete";
             BtnDelete.ItemClick += BtnDelete_ItemClick;
             // 
+            // BtnUpdateUseStatus
+            // 
+            BtnUpdateUseStatus.Caption = "浣跨敤鐘舵��";
+            BtnUpdateUseStatus.Id = 4;
+            BtnUpdateUseStatus.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("BtnUpdateUseStatus.ImageOptions.SvgImage");
+            BtnUpdateUseStatus.Name = "BtnUpdateUseStatus";
+            BtnUpdateUseStatus.ItemClick += BtnUpdateUseStatus_ItemClick;
+            // 
+            // BtnUpdateSortCode
+            // 
+            BtnUpdateSortCode.Caption = "鎺掑簭鐮�";
+            BtnUpdateSortCode.Id = 5;
+            BtnUpdateSortCode.ImageOptions.SvgImage = (DevExpress.Utils.Svg.SvgImage)resources.GetObject("BtnUpdateSortCode.ImageOptions.SvgImage");
+            BtnUpdateSortCode.Name = "BtnUpdateSortCode";
+            BtnUpdateSortCode.ItemClick += BtnUpdateSortCode_ItemClick;
+            // 
             // ribbonPage1
             // 
             ribbonPage1.Groups.AddRange(new DevExpress.XtraBars.Ribbon.RibbonPageGroup[] { ribbonPageGroup1 });
@@ -105,6 +125,8 @@
             ribbonPageGroup1.ItemLinks.Add(BtnAdd);
             ribbonPageGroup1.ItemLinks.Add(BtnEdit);
             ribbonPageGroup1.ItemLinks.Add(BtnDelete);
+            ribbonPageGroup1.ItemLinks.Add(BtnUpdateUseStatus);
+            ribbonPageGroup1.ItemLinks.Add(BtnUpdateSortCode);
             ribbonPageGroup1.Name = "ribbonPageGroup1";
             ribbonPageGroup1.Text = "ribbonPageGroup1";
             // 
@@ -126,74 +148,111 @@
             // 
             // gridView1
             // 
-            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colName, colParas, ColDisplayName, colTagName, colUseStatus, colSortCode, colDescription, colCustomerName });
+            gridView1.Appearance.HeaderPanel.Options.UseTextOptions = true;
+            gridView1.Appearance.HeaderPanel.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+            gridView1.Columns.AddRange(new DevExpress.XtraGrid.Columns.GridColumn[] { colName, ColDisplayName, gridColumn1, colTagName, colUseStatus, gridColumn2, gridColumn4, gridColumn3, colSortCode, colDescription });
             gridView1.GridControl = gridControl1;
             gridView1.Name = "gridView1";
             gridView1.OptionsView.ShowGroupPanel = false;
             // 
             // colName
             // 
-            colName.Caption = "鍚嶇О";
+            colName.AppearanceCell.Options.UseTextOptions = true;
+            colName.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+            colName.Caption = "椤圭洰鍚嶇О";
             colName.FieldName = "Name";
             colName.Name = "colName";
             colName.Visible = true;
-            colName.VisibleIndex = 0;
-            // 
-            // colParas
-            // 
-            colParas.Caption = "鍙傛暟";
-            colParas.FieldName = "Paras";
-            colParas.Name = "colParas";
-            colParas.Visible = true;
-            colParas.VisibleIndex = 1;
+            colName.VisibleIndex = 1;
             // 
             // ColDisplayName
             // 
+            ColDisplayName.AppearanceCell.Options.UseTextOptions = true;
+            ColDisplayName.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
             ColDisplayName.Caption = "鍒涘缓浜�";
             ColDisplayName.FieldName = "CreateDisplayName";
             ColDisplayName.Name = "ColDisplayName";
             ColDisplayName.Visible = true;
-            ColDisplayName.VisibleIndex = 2;
+            ColDisplayName.VisibleIndex = 3;
+            // 
+            // gridColumn1
+            // 
+            gridColumn1.AppearanceCell.Options.UseTextOptions = true;
+            gridColumn1.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+            gridColumn1.Caption = "鍒涘缓鏃堕棿";
+            gridColumn1.FieldName = "CreateTime";
+            gridColumn1.Name = "gridColumn1";
+            gridColumn1.Visible = true;
+            gridColumn1.VisibleIndex = 2;
             // 
             // colTagName
             // 
+            colTagName.AppearanceCell.Options.UseTextOptions = true;
+            colTagName.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
             colTagName.Caption = "鏍囩";
             colTagName.FieldName = "TagName";
             colTagName.Name = "colTagName";
             colTagName.Visible = true;
-            colTagName.VisibleIndex = 3;
+            colTagName.VisibleIndex = 4;
             // 
             // colUseStatus
             // 
+            colUseStatus.AppearanceCell.Options.UseTextOptions = true;
+            colUseStatus.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
             colUseStatus.Caption = "浣跨敤鐘舵��";
             colUseStatus.FieldName = "UseStatus";
             colUseStatus.Name = "colUseStatus";
             colUseStatus.Visible = true;
-            colUseStatus.VisibleIndex = 4;
+            colUseStatus.VisibleIndex = 5;
+            // 
+            // gridColumn2
+            // 
+            gridColumn2.AppearanceCell.Options.UseTextOptions = true;
+            gridColumn2.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+            gridColumn2.Caption = "椤圭洰缂栧彿";
+            gridColumn2.FieldName = "PrjNumber";
+            gridColumn2.Name = "gridColumn2";
+            gridColumn2.Visible = true;
+            gridColumn2.VisibleIndex = 0;
+            // 
+            // gridColumn4
+            // 
+            gridColumn4.AppearanceCell.Options.UseTextOptions = true;
+            gridColumn4.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+            gridColumn4.Caption = "瀹㈡埛鍚嶇О";
+            gridColumn4.FieldName = "CustomerName";
+            gridColumn4.Name = "gridColumn4";
+            gridColumn4.Visible = true;
+            gridColumn4.VisibleIndex = 6;
+            // 
+            // gridColumn3
+            // 
+            gridColumn3.AppearanceCell.Options.UseTextOptions = true;
+            gridColumn3.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
+            gridColumn3.Caption = "妯″瀷鐘舵��";
+            gridColumn3.Name = "gridColumn3";
+            gridColumn3.Visible = true;
+            gridColumn3.VisibleIndex = 7;
             // 
             // colSortCode
             // 
+            colSortCode.AppearanceCell.Options.UseTextOptions = true;
+            colSortCode.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
             colSortCode.Caption = "鎺掑簭鐮�";
             colSortCode.FieldName = "SortCode";
             colSortCode.Name = "colSortCode";
             colSortCode.Visible = true;
-            colSortCode.VisibleIndex = 5;
+            colSortCode.VisibleIndex = 8;
             // 
             // colDescription
             // 
+            colDescription.AppearanceCell.Options.UseTextOptions = true;
+            colDescription.AppearanceCell.TextOptions.HAlignment = DevExpress.Utils.HorzAlignment.Center;
             colDescription.Caption = "璇存槑";
             colDescription.FieldName = "Description";
             colDescription.Name = "colDescription";
             colDescription.Visible = true;
-            colDescription.VisibleIndex = 6;
-            // 
-            // colCustomerName
-            // 
-            colCustomerName.Caption = "瀹㈡埛淇℃伅";
-            colCustomerName.FieldName = "CustomerName";
-            colCustomerName.Name = "colCustomerName";
-            colCustomerName.Visible = true;
-            colCustomerName.VisibleIndex = 7;
+            colDescription.VisibleIndex = 9;
             // 
             // XhsProjectListPage
             // 
@@ -223,12 +282,16 @@
         private DevExpress.XtraGrid.Views.Grid.GridView gridView1;
         private BindingSource projectViewModelBindingSource;
         private DevExpress.XtraGrid.Columns.GridColumn colName;
-        private DevExpress.XtraGrid.Columns.GridColumn colParas;
         private DevExpress.XtraGrid.Columns.GridColumn colTagName;
         private DevExpress.XtraGrid.Columns.GridColumn colUseStatus;
         private DevExpress.XtraGrid.Columns.GridColumn colSortCode;
         private DevExpress.XtraGrid.Columns.GridColumn colDescription;
-        private DevExpress.XtraGrid.Columns.GridColumn colCustomerName;
         private DevExpress.XtraGrid.Columns.GridColumn ColDisplayName;
+        private DevExpress.XtraGrid.Columns.GridColumn gridColumn1;
+        private DevExpress.XtraGrid.Columns.GridColumn gridColumn2;
+        private DevExpress.XtraGrid.Columns.GridColumn gridColumn4;
+        private DevExpress.XtraGrid.Columns.GridColumn gridColumn3;
+        private DevExpress.XtraBars.BarButtonItem BtnUpdateUseStatus;
+        private DevExpress.XtraBars.BarButtonItem BtnUpdateSortCode;
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.cs
index 0e2780f..2f6448a 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.cs
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.cs
@@ -44,9 +44,9 @@
         private async void BtnAdd_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
             var dlg = new AddProjectDlg();
-            dlg.ReloadEvent += async (rhs) =>
+            dlg.ReloadEvent += async (pro, item, model, map) =>
             {
-                var id = await _bll.Insert(rhs);
+                var id = await _bll.InsertEx(pro, item, model, map);
                 if (id > 0)
                 {
                     var vmmodel = await _bll.GetByID(id);
@@ -60,7 +60,7 @@
         }
 
         //淇敼
-        private async void BtnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        private void BtnEdit_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
         {
             var vm = this.gridView1.GetCurrentViewModel(_allBindingList);
             if (vm == null)
@@ -69,11 +69,13 @@
                 return;
             }
             var dlg = new EditProjectDlg();
-            dlg.SetBindingData(vm);
-            dlg.ReloadEvent += async (rhs) =>
+            dlg.SetBindingData(vm.ID);
+            dlg.ReloadEvent += async (prj, item) =>
             {
-                if (await _bll.Update(rhs))
+                if (await _bll.UpdateEx(prj, item))
                 {
+                    vm.Reset(prj);
+                    this.projectViewModelBindingSource.ResetBindings(false);
                     return true;
                 }
                 return false;
@@ -92,7 +94,7 @@
             }
             if (MessageBoxHelper.IsClickOk($"纭鍒犻櫎鏁版嵁琛�?", "鎻愮ず", MessageBoxButtons.OKCancel))
                 return;
-            var result = await _bll.DeleteByID(vm.ID);
+            var result = await _bll.DeleteEx(vm.ID);
             if (!result)
             {
                 MessageBoxHelper.ShowError($"鍒犻櫎澶辫触!", "璀﹀憡");
@@ -102,5 +104,55 @@
             _allBindingList.Remove(vm);
             this.projectViewModelBindingSource.ResetBindings(false);
         }
+
+        //浣跨敤鐘舵��
+        private void BtnUpdateUseStatus_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            var vm = this.gridView1.GetCurrentViewModel(_allBindingList);
+            if (vm == null)
+            {
+                MessageBoxHelper.ShowWarning("璇烽�夋嫨鏁版嵁琛岋紒");
+                return;
+            }
+            var dlg = new SetUseStatusDlg();
+            dlg.SetBindingData(vm.UseStatus);
+            dlg.ReloadDataEvent += async (useStatus) =>
+            {
+                var result = await _bll.UpdateUseStatus(vm.ID, (int)useStatus);
+                if (result)
+                {
+                    vm.UseStatus = useStatus;
+                    vm.Reset(vm);
+                    this.projectViewModelBindingSource.ResetBindings(false);
+                }
+                return result;
+            };
+            dlg.ShowDialog();
+        }
+
+        //璁剧疆鎺掑簭鐮�
+        private void BtnUpdateSortCode_ItemClick(object sender, DevExpress.XtraBars.ItemClickEventArgs e)
+        {
+            var vm = this.gridView1.GetCurrentViewModel(_allBindingList);
+            if (vm == null)
+            {
+                MessageBoxHelper.ShowWarning("璇烽�夋嫨鏁版嵁琛岋紒");
+                return;
+            }
+            var dlg = new SetSortCodeDlg();
+            dlg.SetBindingData(vm.SortCode);
+            dlg.ReloadDataEvent += async (sortCode) =>
+            {
+                var result = await _bll.UpdateSortCode(vm.ID, sortCode);
+                if (result)
+                {
+                    vm.SortCode = sortCode;
+                    vm.Reset(vm);
+                    this.projectViewModelBindingSource.ResetBindings(false);
+                }
+                return result;
+            };
+            dlg.ShowDialog();
+        }
     }
 }
\ No newline at end of file
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.resx
index d1164da..b000200 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.resx
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/01-project/XhsProjectListPage.resx
@@ -189,6 +189,61 @@
         L2c+DQo8L3N2Zz4L
 </value>
   </data>
+  <data name="BtnUpdateUseStatus.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAMgFAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsdWV7ZmlsbDojMTE3N0Q3O30KCS5Z
+        ZWxsb3d7ZmlsbDojRkZCMTE1O30KCS5SZWR7ZmlsbDojRDExQzFDO30KCS5HcmVlbntmaWxsOiMwMzlD
+        MjM7fQoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjU7fQoJLnN0MXtvcGFjaXR5OjAuNzU7fQoJLnN0MntkaXNwbGF5Om5vbmU7fQoJLnN0M3tk
+        aXNwbGF5OmlubGluZTtmaWxsOiNGRkIxMTU7fQoJLnN0NHtkaXNwbGF5OmlubGluZTt9Cgkuc3Q1e2Rp
+        c3BsYXk6aW5saW5lO29wYWNpdHk6MC43NTt9Cgkuc3Q2e2Rpc3BsYXk6aW5saW5lO29wYWNpdHk6MC41
+        O30KCS5zdDd7ZGlzcGxheTppbmxpbmU7ZmlsbDojMDM5QzIzO30KCS5zdDh7ZGlzcGxheTppbmxpbmU7
+        ZmlsbDojRDExQzFDO30KCS5zdDl7ZGlzcGxheTppbmxpbmU7ZmlsbDojMTE3N0Q3O30KCS5zdDEwe2Rp
+        c3BsYXk6aW5saW5lO2ZpbGw6I0ZGRkZGRjt9Cjwvc3R5bGU+DQogIDxnIGlkPSJVc2VyIj4NCiAgICA8
+        cGF0aCBkPSJNMTYuMiwyNkgydi0xLjVjMC03LjUsNS43LTUsOC04LjVjMC44LDEuNSwyLjEsNCw0LDRz
+        My4yLTIuNSw0LTRjMC43LDEsMS43LDEuNSwyLjcsMS45bDAsMCAgIGMtMC41LDAuOS0wLjcsMi0wLjcs
+        My4xYzAsMC40LDAsMC43LDAuMSwxLjFMMTYuMiwyNkwxNi4yLDI2eiBNOS4zLDEwLjljMCwwLDAsMC4x
+        LDAsMC4yYzAuNiwyLjMsMiw0LjksNC43LDQuOXM0LjItMi42LDQuNy00LjkgICBWMTFjMSwwLjEsMC42
+        LTEuMSwwLjktMS42QzE5LjgsOC45LDIwLDguNSwxOS45LDhjLTAuMS0wLjQtMC40LTAuNC0wLjUtMC4z
+        QzIxLjIsMi44LDE4LjMsMywxOC4zLDNTMTgsMCwxMi44LDBDOCwwLDcuNCw0LDguNSw3LjYgICBDOC40
+        LDcuNiw4LjEsNy43LDgsNy45QzcuOSw4LjQsOC4yLDguOCw4LjQsOS4zQzguNiw5LjgsOC4zLDExLDku
+        MywxMC45eiIgY2xhc3M9IkJsYWNrIiAvPg0KICAgIDxwYXRoIGQ9Ik0yNywxNmMtMi44LDAtNSwyLjIt
+        NSw1YzAsMC42LDAuMSwxLjIsMC4zLDEuN0wxNiwyOXYzaDR2LTJoMnYtMmgybDIuMS0yLjFDMjYuNCwy
+        NiwyNi43LDI2LDI3LDI2ICAgYzIuOCwwLDUtMi4yLDUtNVMyOS44LDE2LDI3LDE2eiBNMjcsMjJjLTAu
+        NiwwLTEtMC40LTEtMWMwLTAuNiwwLjQtMSwxLTFzMSwwLjQsMSwxQzI4LDIxLjYsMjcuNiwyMiwyNywy
+        MnoiIGNsYXNzPSJZZWxsb3ciIC8+DQogIDwvZz4NCjwvc3ZnPgs=
+</value>
+  </data>
+  <data name="BtnUpdateSortCode.ImageOptions.SvgImage" type="DevExpress.Utils.Svg.SvgImage, DevExpress.Data.v23.2" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAEAAAD/////AQAAAAAAAAAMAgAAAFlEZXZFeHByZXNzLkRhdGEudjIzLjIsIFZlcnNpb249MjMuMi40
+        LjAsIEN1bHR1cmU9bmV1dHJhbCwgUHVibGljS2V5VG9rZW49Yjg4ZDE3NTRkNzAwZTQ5YQUBAAAAHURl
+        dkV4cHJlc3MuVXRpbHMuU3ZnLlN2Z0ltYWdlAQAAAAREYXRhBwICAAAACQMAAAAPAwAAAJkDAAAC77u/
+        PD94bWwgdmVyc2lvbj0nMS4wJyBlbmNvZGluZz0nVVRGLTgnPz4NCjxzdmcgeD0iMHB4IiB5PSIwcHgi
+        IHZpZXdCb3g9IjAgMCAzMiAzMiIgdmVyc2lvbj0iMS4xIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcv
+        MjAwMC9zdmciIHhtbG5zOnhsaW5rPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIiB4bWw6c3Bh
+        Y2U9InByZXNlcnZlIiBpZD0iTGF5ZXJfMSIgc3R5bGU9ImVuYWJsZS1iYWNrZ3JvdW5kOm5ldyAwIDAg
+        MzIgMzIiPg0KICA8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgoJLkJsYWNre2ZpbGw6IzcyNzI3Mjt9Cgku
+        WWVsbG93e2ZpbGw6I0ZGQjExNTt9CgkuQmx1ZXtmaWxsOiMxMTc3RDc7fQoJLkdyZWVue2ZpbGw6IzAz
+        OUMyMzt9CgkuUmVke2ZpbGw6I0QxMUMxQzt9CgkuV2hpdGV7ZmlsbDojRkZGRkZGO30KCS5zdDB7b3Bh
+        Y2l0eTowLjc1O30KCS5zdDF7b3BhY2l0eTowLjU7fQoJLnN0MntvcGFjaXR5OjAuMjU7fQo8L3N0eWxl
+        Pg0KICA8ZyBpZD0iU29ydERlc2MiPg0KICAgIDxwYXRoIGQ9Ik0yOCwyOGgtMC4yaC0xLjloLTAuMWww
+        LTAuMUwyNS4yLDI2aC00LjRsLTAuNiwxLjlsMCwwLjFoLTAuMWgtMS45SDE4bDAuMS0wLjJsMy45LTEx
+        LjdsMC0wLjFoMC4xSDI0aDAuMSAgIGwwLDAuMWwzLjgsMTEuN0wyOCwyOEwyOCwyOHogTTIxLjQsMjRo
+        My4yTDIzLDE4LjdjMCwwLDAsMCwwLTAuMWMwLDAsMCwwLDAsMC4xTDIxLjQsMjR6IiBjbGFzcz0iUmVk
+        IiAvPg0KICAgIDxwYXRoIGQ9Ik0xNCwyNGwtNSw1bC01LTVoNFYyaDJ2MjJIMTR6IE0yNy40LDE0di0w
+        LjF2LTEuN1YxMmgtMC4xaC01LjZsNS45LTlWMi4xVjJoLTAuMWgtOC4ySDE5djAuMXYxLjdMMTksNGgw
+        LjIgICBoNS4ybC01LjksOXYwLjlWMTRoMC4xaDguNkgyNy40TDI3LjQsMTR6IiBjbGFzcz0iQmx1ZSIg
+        Lz4NCiAgPC9nPg0KPC9zdmc+Cw==
+</value>
+  </data>
   <metadata name="projectViewModelBindingSource.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
     <value>17, 17</value>
   </metadata>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj
index e173b7c..354be65 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj
@@ -8,6 +8,8 @@
   </PropertyGroup>
 
   <ItemGroup>
+    <Compile Remove="01-project\AddProjectDlg-bak.cs" />
+    <Compile Remove="01-project\AddProjectDlg-bak.designer.cs" />
     <Compile Remove="02-UICore\01-鎵╁睍绫籠BandGridViewExtend.cs" />
     <Compile Remove="02-UICore\01-鎵╁睍绫籠ButtonEditExtend.cs" />
     <Compile Remove="02-UICore\01-鎵╁睍绫籠ClassUpdateVailDataHelper.cs" />
@@ -35,6 +37,10 @@
   </ItemGroup>
 
   <ItemGroup>
+    <EmbeddedResource Remove="01-project\AddProjectDlg-bak.resx" />
+  </ItemGroup>
+
+  <ItemGroup>
     <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
     <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2535.41" />
   </ItemGroup>
@@ -43,4 +49,19 @@
     <ProjectReference Include="..\..\HStation.BLL.Xhs.Core\HStation.BLL.Xhs.Core.csproj" />
   </ItemGroup>
 
+  <ItemGroup>
+    <Compile Update="Properties\Resources.Designer.cs">
+      <DesignTime>True</DesignTime>
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+  </ItemGroup>
+
+  <ItemGroup>
+    <EmbeddedResource Update="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+
 </Project>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj.bak b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj.bak
deleted file mode 100644
index 9a28579..0000000
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj.bak
+++ /dev/null
@@ -1,19 +0,0 @@
-锘�<Project Sdk="Microsoft.NET.Sdk">
-
-  <PropertyGroup>
-    <TargetFramework>net6.0-windows</TargetFramework>
-    <Nullable>enable</Nullable>
-    <UseWindowsForms>true</UseWindowsForms>
-    <ImplicitUsings>enable</ImplicitUsings>
-  </PropertyGroup>
-
-  <ItemGroup>
-    <PackageReference Include="DevExpress.Win.Design" Version="22.2.4" />
-    <PackageReference Include="Microsoft.Web.WebView2" Version="1.0.2535.41" />
-  </ItemGroup>
-
-  <ItemGroup>
-    <ProjectReference Include="..\..\HStation.BLL.Xhs.Core\HStation.BLL.Xhs.Core.csproj" />
-  </ItemGroup>
-
-</Project>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj.user b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj.user
index 6f8bfbc..6edad42 100644
--- a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj.user
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/HStation.WinFrmUI.Xhs.Project.csproj.user
@@ -8,9 +8,18 @@
     <Compile Update="01-project\EditProjectDlg.cs">
       <SubType>Form</SubType>
     </Compile>
+    <Compile Update="01-project\SetSortCodeDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Update="01-project\SetUseStatusDlg.cs">
+      <SubType>Form</SubType>
+    </Compile>
     <Compile Update="01-project\XhsProjectListPage.cs">
       <SubType>UserControl</SubType>
     </Compile>
+    <Compile Update="01-project\ProjectUserControl.cs">
+      <SubType>UserControl</SubType>
+    </Compile>
     <Compile Update="02-UICore\00-DocumentPage\DocumentPage.cs">
       <SubType>UserControl</SubType>
     </Compile>
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/Properties/Resources.Designer.cs b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/Properties/Resources.Designer.cs
new file mode 100644
index 0000000..0638f2e
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/Properties/Resources.Designer.cs
@@ -0,0 +1,63 @@
+锘�//------------------------------------------------------------------------------
+// <auto-generated>
+//     姝や唬鐮佺敱宸ュ叿鐢熸垚銆�
+//     杩愯鏃剁増鏈�:4.0.30319.42000
+//
+//     瀵规鏂囦欢鐨勬洿鏀瑰彲鑳戒細瀵艰嚧涓嶆纭殑琛屼负锛屽苟涓斿鏋�
+//     閲嶆柊鐢熸垚浠g爜锛岃繖浜涙洿鏀瑰皢浼氫涪澶便��
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+namespace HStation.WinFrmUI.Xhs.Project.Properties {
+    using System;
+    
+    
+    /// <summary>
+    ///   涓�涓己绫诲瀷鐨勮祫婧愮被锛岀敤浜庢煡鎵炬湰鍦板寲鐨勫瓧绗︿覆绛夈��
+    /// </summary>
+    // 姝ょ被鏄敱 StronglyTypedResourceBuilder
+    // 绫婚�氳繃绫讳技浜� ResGen 鎴� Visual Studio 鐨勫伐鍏疯嚜鍔ㄧ敓鎴愮殑銆�
+    // 鑻ヨ娣诲姞鎴栫Щ闄ゆ垚鍛橈紝璇风紪杈� .ResX 鏂囦欢锛岀劧鍚庨噸鏂拌繍琛� ResGen
+    // (浠� /str 浣滀负鍛戒护閫夐」)锛屾垨閲嶆柊鐢熸垚 VS 椤圭洰銆�
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "17.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources {
+        
+        private static global::System.Resources.ResourceManager resourceMan;
+        
+        private static global::System.Globalization.CultureInfo resourceCulture;
+        
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources() {
+        }
+        
+        /// <summary>
+        ///   杩斿洖姝ょ被浣跨敤鐨勭紦瀛樼殑 ResourceManager 瀹炰緥銆�
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager {
+            get {
+                if (object.ReferenceEquals(resourceMan, null)) {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("HStation.WinFrmUI.Xhs.Project.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+        
+        /// <summary>
+        ///   閲嶅啓褰撳墠绾跨▼鐨� CurrentUICulture 灞炴�э紝瀵�
+        ///   浣跨敤姝ゅ己绫诲瀷璧勬簮绫荤殑鎵�鏈夎祫婧愭煡鎵炬墽琛岄噸鍐欍��
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture {
+            get {
+                return resourceCulture;
+            }
+            set {
+                resourceCulture = value;
+            }
+        }
+    }
+}
diff --git a/WinFrmUI/HStation.WinFrmUI.Xhs.Project/Properties/Resources.resx b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/Properties/Resources.resx
new file mode 100644
index 0000000..1af7de1
--- /dev/null
+++ b/WinFrmUI/HStation.WinFrmUI.Xhs.Project/Properties/Resources.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

--
Gitblit v1.9.3