From 073d8fff6cd51967bb1aefe8f6cef028e84ee899 Mon Sep 17 00:00:00 2001
From: liyaobang <884131781@qq.com>
Date: Fri, 28 Mar 2025 10:16:28 +0800
Subject: [PATCH] =?UTF-8?q?=E5=88=A0=E9=99=A4=E7=A7=BB=E5=8A=A8=E4=B8=8E?=
 =?UTF-8?q?=E5=A2=9E=E5=8A=A0?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

---
 DHSoftware/DHSoftware.csproj                  |   1 +
 DHSoftware/Views/AddGlobalControl.Designer.cs | 162 -------
 DHSoftware/Views/AddGlobalControl.cs          |  48 ---
 DHSoftware/Views/AddGlobalControl.resx        | 120 ------
 DHSoftware/Views/CamConfigFrm.Designer.cs     | 150 -------
 DHSoftware/Views/CamConfigFrm.cs              | 178 --------
 DHSoftware/Views/CamConfigFrm.resx            | 129 ------
 .../Views/CameraConfigControl.Designer.cs     | 200 ---------
 DHSoftware/Views/CameraConfigControl.cs       | 127 ------
 DHSoftware/Views/CameraConfigControl.resx     | 120 ------
 .../Views/DetectConfigControl.Designer.cs     | 297 -------------
 DHSoftware/Views/DetectConfigControl.cs       | 403 ------------------
 DHSoftware/Views/DetectConfigControl.resx     | 120 ------
 .../{ => Views}/LoginWindow.Designer.cs       |   0
 DHSoftware/{ => Views}/LoginWindow.cs         |   0
 DHSoftware/{ => Views}/LoginWindow.resx       |   0
 DHSoftware/{ => Views}/MainWindow.Designer.cs |  14 +
 DHSoftware/{ => Views}/MainWindow.cs          |   6 +
 DHSoftware/{ => Views}/MainWindow.resx        |   0
 .../Views/PreTreatUserControl.Designer.cs     | 213 ---------
 DHSoftware/Views/PreTreatUserControl.cs       |  25 --
 DHSoftware/Views/RBACWindow.Designer.cs       | 159 +++++++
 DHSoftware/Views/RBACWindow.cs                | 200 +++++++++
 ...eTreatUserControl.resx => RBACWindow.resx} |  12 +
 .../{ => Scheme}/AddSchemeControl.Designer.cs |   0
 .../Views/{ => Scheme}/AddSchemeControl.cs    |   0
 .../Views/{ => Scheme}/AddSchemeControl.resx  |   0
 .../AddCameraControl.Designer.cs              |   0
 .../Views/{ => Setting}/AddCameraControl.cs   |   0
 .../Views/{ => Setting}/AddCameraControl.resx |   0
 .../AddCubicleControl.Designer.cs             |   0
 .../Views/{ => Setting}/AddCubicleControl.cs  |   0
 .../{ => Setting}/AddCubicleControl.resx      |   0
 .../AddMotionControl.Designer.cs              |   0
 .../Views/{ => Setting}/AddMotionControl.cs   |   0
 .../Views/{ => Setting}/AddMotionControl.resx |   0
 .../{ => Setting}/CameraControl.Designer.cs   |   0
 .../Views/{ => Setting}/CameraControl.cs      |   0
 .../Views/{ => Setting}/CameraControl.resx    |   0
 .../CorrelatedCameraEdit.Designer.cs          |   0
 .../{ => Setting}/CorrelatedCameraEdit.cs     |   0
 .../{ => Setting}/CorrelatedCameraEdit.resx   |   0
 .../{ => Setting}/DefectRowEdit.Designer.cs   |   0
 .../Views/{ => Setting}/DefectRowEdit.cs      |   2 +-
 .../Views/{ => Setting}/DefectRowEdit.resx    |   0
 .../{ => Setting}/DetectControl.Designer.cs   |   0
 .../Views/{ => Setting}/DetectControl.cs      |   0
 .../Views/{ => Setting}/DetectControl.resx    |   0
 .../DetectionLableEdit.Designer.cs            |   0
 .../Views/{ => Setting}/DetectionLableEdit.cs |   0
 .../{ => Setting}/DetectionLableEdit.resx     |   0
 .../{ => Setting}/GlobalControl.Designer.cs   |   0
 .../Views/{ => Setting}/GlobalControl.cs      |   0
 .../Views/{ => Setting}/GlobalControl.resx    |   0
 .../{ => Setting}/MotionControl.Designer.cs   |   0
 .../Views/{ => Setting}/MotionControl.cs      |   0
 .../Views/{ => Setting}/MotionControl.resx    |   0
 .../{ => Setting}/MotionEdit.Designer.cs      |   0
 DHSoftware/Views/{ => Setting}/MotionEdit.cs  |   0
 .../Views/{ => Setting}/MotionEdit.resx       |   0
 .../MotionProcessEdit.Designer.cs             |   0
 .../Views/{ => Setting}/MotionProcessEdit.cs  |   0
 .../{ => Setting}/MotionProcessEdit.resx      |   0
 .../{ => Setting}/PreTreatEdit.Designer.cs    |   0
 .../Views/{ => Setting}/PreTreatEdit.cs       |   0
 .../Views/{ => Setting}/PreTreatEdit.resx     |   0
 .../{ => Setting}/SizeLabelEdit.Designer.cs   |   0
 .../Views/{ => Setting}/SizeLabelEdit.cs      |   0
 .../Views/{ => Setting}/SizeLabelEdit.resx    |   0
 .../Views/SizeConfigControl.Designer.cs       | 104 -----
 DHSoftware/Views/SizeConfigControl.cs         |  20 -
 DHSoftware/Views/SizeConfigControl.resx       | 120 ------
 DHSoftware/Views/UserConfigFrm.Designer.cs    | 167 --------
 DHSoftware/Views/UserConfigFrm.cs             | 257 -----------
 DHSoftware/Views/UserConfigFrm.resx           | 120 ------
 DHSoftware/Views/UserDetetion.Designer.cs     |  70 ---
 DHSoftware/Views/UserDetetion.cs              | 226 ----------
 DHSoftware/Views/UserDetetion.resx            | 120 ------
 .../CtrlVisionDisplay.Designer.cs             |   0
 .../{ => VisionDisplay}/CtrlVisionDisplay.cs  |   0
 .../CtrlVisionDisplay.resx                    |   0
 .../CtrlVisionRunBase.Designer.cs             |   0
 .../{ => VisionDisplay}/CtrlVisionRunBase.cs  |   0
 .../CtrlVisionRunBase.resx                    |   0
 84 files changed, 393 insertions(+), 3497 deletions(-)
 delete mode 100644 DHSoftware/Views/AddGlobalControl.Designer.cs
 delete mode 100644 DHSoftware/Views/AddGlobalControl.cs
 delete mode 100644 DHSoftware/Views/AddGlobalControl.resx
 delete mode 100644 DHSoftware/Views/CamConfigFrm.Designer.cs
 delete mode 100644 DHSoftware/Views/CamConfigFrm.cs
 delete mode 100644 DHSoftware/Views/CamConfigFrm.resx
 delete mode 100644 DHSoftware/Views/CameraConfigControl.Designer.cs
 delete mode 100644 DHSoftware/Views/CameraConfigControl.cs
 delete mode 100644 DHSoftware/Views/CameraConfigControl.resx
 delete mode 100644 DHSoftware/Views/DetectConfigControl.Designer.cs
 delete mode 100644 DHSoftware/Views/DetectConfigControl.cs
 delete mode 100644 DHSoftware/Views/DetectConfigControl.resx
 rename DHSoftware/{ => Views}/LoginWindow.Designer.cs (100%)
 rename DHSoftware/{ => Views}/LoginWindow.cs (100%)
 rename DHSoftware/{ => Views}/LoginWindow.resx (100%)
 rename DHSoftware/{ => Views}/MainWindow.Designer.cs (97%)
 rename DHSoftware/{ => Views}/MainWindow.cs (99%)
 rename DHSoftware/{ => Views}/MainWindow.resx (100%)
 delete mode 100644 DHSoftware/Views/PreTreatUserControl.Designer.cs
 delete mode 100644 DHSoftware/Views/PreTreatUserControl.cs
 create mode 100644 DHSoftware/Views/RBACWindow.Designer.cs
 create mode 100644 DHSoftware/Views/RBACWindow.cs
 rename DHSoftware/Views/{PreTreatUserControl.resx => RBACWindow.resx} (55%)
 rename DHSoftware/Views/{ => Scheme}/AddSchemeControl.Designer.cs (100%)
 rename DHSoftware/Views/{ => Scheme}/AddSchemeControl.cs (100%)
 rename DHSoftware/Views/{ => Scheme}/AddSchemeControl.resx (100%)
 rename DHSoftware/Views/{ => Setting}/AddCameraControl.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/AddCameraControl.cs (100%)
 rename DHSoftware/Views/{ => Setting}/AddCameraControl.resx (100%)
 rename DHSoftware/Views/{ => Setting}/AddCubicleControl.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/AddCubicleControl.cs (100%)
 rename DHSoftware/Views/{ => Setting}/AddCubicleControl.resx (100%)
 rename DHSoftware/Views/{ => Setting}/AddMotionControl.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/AddMotionControl.cs (100%)
 rename DHSoftware/Views/{ => Setting}/AddMotionControl.resx (100%)
 rename DHSoftware/Views/{ => Setting}/CameraControl.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/CameraControl.cs (100%)
 rename DHSoftware/Views/{ => Setting}/CameraControl.resx (100%)
 rename DHSoftware/Views/{ => Setting}/CorrelatedCameraEdit.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/CorrelatedCameraEdit.cs (100%)
 rename DHSoftware/Views/{ => Setting}/CorrelatedCameraEdit.resx (100%)
 rename DHSoftware/Views/{ => Setting}/DefectRowEdit.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/DefectRowEdit.cs (97%)
 rename DHSoftware/Views/{ => Setting}/DefectRowEdit.resx (100%)
 rename DHSoftware/Views/{ => Setting}/DetectControl.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/DetectControl.cs (100%)
 rename DHSoftware/Views/{ => Setting}/DetectControl.resx (100%)
 rename DHSoftware/Views/{ => Setting}/DetectionLableEdit.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/DetectionLableEdit.cs (100%)
 rename DHSoftware/Views/{ => Setting}/DetectionLableEdit.resx (100%)
 rename DHSoftware/Views/{ => Setting}/GlobalControl.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/GlobalControl.cs (100%)
 rename DHSoftware/Views/{ => Setting}/GlobalControl.resx (100%)
 rename DHSoftware/Views/{ => Setting}/MotionControl.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/MotionControl.cs (100%)
 rename DHSoftware/Views/{ => Setting}/MotionControl.resx (100%)
 rename DHSoftware/Views/{ => Setting}/MotionEdit.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/MotionEdit.cs (100%)
 rename DHSoftware/Views/{ => Setting}/MotionEdit.resx (100%)
 rename DHSoftware/Views/{ => Setting}/MotionProcessEdit.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/MotionProcessEdit.cs (100%)
 rename DHSoftware/Views/{ => Setting}/MotionProcessEdit.resx (100%)
 rename DHSoftware/Views/{ => Setting}/PreTreatEdit.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/PreTreatEdit.cs (100%)
 rename DHSoftware/Views/{ => Setting}/PreTreatEdit.resx (100%)
 rename DHSoftware/Views/{ => Setting}/SizeLabelEdit.Designer.cs (100%)
 rename DHSoftware/Views/{ => Setting}/SizeLabelEdit.cs (100%)
 rename DHSoftware/Views/{ => Setting}/SizeLabelEdit.resx (100%)
 delete mode 100644 DHSoftware/Views/SizeConfigControl.Designer.cs
 delete mode 100644 DHSoftware/Views/SizeConfigControl.cs
 delete mode 100644 DHSoftware/Views/SizeConfigControl.resx
 delete mode 100644 DHSoftware/Views/UserConfigFrm.Designer.cs
 delete mode 100644 DHSoftware/Views/UserConfigFrm.cs
 delete mode 100644 DHSoftware/Views/UserConfigFrm.resx
 delete mode 100644 DHSoftware/Views/UserDetetion.Designer.cs
 delete mode 100644 DHSoftware/Views/UserDetetion.cs
 delete mode 100644 DHSoftware/Views/UserDetetion.resx
 rename DHSoftware/Views/{ => VisionDisplay}/CtrlVisionDisplay.Designer.cs (100%)
 rename DHSoftware/Views/{ => VisionDisplay}/CtrlVisionDisplay.cs (100%)
 rename DHSoftware/Views/{ => VisionDisplay}/CtrlVisionDisplay.resx (100%)
 rename DHSoftware/Views/{ => VisionDisplay}/CtrlVisionRunBase.Designer.cs (100%)
 rename DHSoftware/Views/{ => VisionDisplay}/CtrlVisionRunBase.cs (100%)
 rename DHSoftware/Views/{ => VisionDisplay}/CtrlVisionRunBase.resx (100%)

diff --git a/DHSoftware/DHSoftware.csproj b/DHSoftware/DHSoftware.csproj
index 25a7edd..11f317e 100644
--- a/DHSoftware/DHSoftware.csproj
+++ b/DHSoftware/DHSoftware.csproj
@@ -12,6 +12,7 @@
 		<OutputType>WinExe</OutputType>
 	</PropertyGroup>
 
+	
 
 
 
diff --git a/DHSoftware/Views/AddGlobalControl.Designer.cs b/DHSoftware/Views/AddGlobalControl.Designer.cs
deleted file mode 100644
index 83b7108..0000000
--- a/DHSoftware/Views/AddGlobalControl.Designer.cs
+++ /dev/null
@@ -1,162 +0,0 @@
-namespace DHSoftware.Views
-{
-    partial class AddGlobalControl
-    {
-        /// <summary> 
-        /// 必需的设计器变量。
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 清理所有正在使用的资源。
-        /// </summary>
-        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 组件设计器生成的代码
-
-        /// <summary> 
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            panel1 = new AntdUI.Panel();
-            input_name = new AntdUI.Input();
-            label3 = new AntdUI.Label();
-            divider1 = new AntdUI.Divider();
-            stackPanel1 = new AntdUI.StackPanel();
-            button_cancel = new AntdUI.Button();
-            button_ok = new AntdUI.Button();
-            divider2 = new AntdUI.Divider();
-            lbTitleName = new AntdUI.Label();
-            panel1.SuspendLayout();
-            stackPanel1.SuspendLayout();
-            SuspendLayout();
-            // 
-            // panel1
-            // 
-            panel1.Controls.Add(input_name);
-            panel1.Controls.Add(label3);
-            panel1.Controls.Add(divider1);
-            panel1.Controls.Add(stackPanel1);
-            panel1.Controls.Add(divider2);
-            panel1.Controls.Add(lbTitleName);
-            panel1.Dock = DockStyle.Fill;
-            panel1.Location = new Point(0, 0);
-            panel1.Name = "panel1";
-            panel1.Padding = new Padding(12);
-            panel1.Shadow = 6;
-            panel1.Size = new Size(500, 192);
-            panel1.TabIndex = 0;
-            panel1.Text = "panel1";
-            // 
-            // input_name
-            // 
-            input_name.Dock = DockStyle.Top;
-            input_name.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
-            input_name.Location = new Point(18, 134);
-            input_name.Name = "input_name";
-            input_name.Radius = 3;
-            input_name.Size = new Size(464, 38);
-            input_name.TabIndex = 22;
-            // 
-            // label3
-            // 
-            label3.Dock = DockStyle.Top;
-            label3.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
-            label3.Location = new Point(18, 110);
-            label3.Name = "label3";
-            label3.Size = new Size(464, 24);
-            label3.TabIndex = 21;
-            label3.Text = "全局配置名称";
-            // 
-            // divider1
-            // 
-            divider1.Dock = DockStyle.Top;
-            divider1.Location = new Point(18, 98);
-            divider1.Name = "divider1";
-            divider1.Size = new Size(464, 12);
-            divider1.TabIndex = 20;
-            // 
-            // stackPanel1
-            // 
-            stackPanel1.Controls.Add(button_cancel);
-            stackPanel1.Controls.Add(button_ok);
-            stackPanel1.Dock = DockStyle.Top;
-            stackPanel1.Location = new Point(18, 54);
-            stackPanel1.Name = "stackPanel1";
-            stackPanel1.RightToLeft = RightToLeft.No;
-            stackPanel1.Size = new Size(464, 44);
-            stackPanel1.TabIndex = 19;
-            stackPanel1.Text = "stackPanel1";
-            // 
-            // button_cancel
-            // 
-            button_cancel.BorderWidth = 1F;
-            button_cancel.Font = new Font("Microsoft YaHei UI", 9F);
-            button_cancel.Ghost = true;
-            button_cancel.Location = new Point(84, 3);
-            button_cancel.Name = "button_cancel";
-            button_cancel.Size = new Size(75, 38);
-            button_cancel.TabIndex = 1;
-            button_cancel.Text = "取消";
-            // 
-            // button_ok
-            // 
-            button_ok.Font = new Font("Microsoft YaHei UI", 9F, FontStyle.Regular, GraphicsUnit.Point, 134);
-            button_ok.Location = new Point(3, 3);
-            button_ok.Name = "button_ok";
-            button_ok.Size = new Size(75, 38);
-            button_ok.TabIndex = 0;
-            button_ok.Text = "确定";
-            button_ok.Type = AntdUI.TTypeMini.Primary;
-            // 
-            // divider2
-            // 
-            divider2.Dock = DockStyle.Top;
-            divider2.Location = new Point(18, 42);
-            divider2.Name = "divider2";
-            divider2.Size = new Size(464, 12);
-            divider2.TabIndex = 18;
-            // 
-            // lbTitleName
-            // 
-            lbTitleName.Dock = DockStyle.Top;
-            lbTitleName.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
-            lbTitleName.Location = new Point(18, 18);
-            lbTitleName.Name = "lbTitleName";
-            lbTitleName.Size = new Size(464, 24);
-            lbTitleName.TabIndex = 17;
-            lbTitleName.Text = "新增全局配置操作";
-            // 
-            // AddGlobalControl
-            // 
-            Controls.Add(panel1);
-            Name = "AddGlobalControl";
-            Size = new Size(500, 192);
-            panel1.ResumeLayout(false);
-            stackPanel1.ResumeLayout(false);
-            ResumeLayout(false);
-        }
-
-        #endregion
-
-        private AntdUI.Panel panel1;
-        private AntdUI.Label lbTitleName;
-        private AntdUI.Input input_name;
-        private AntdUI.Label label3;
-        private AntdUI.Divider divider1;
-        private AntdUI.StackPanel stackPanel1;
-        private AntdUI.Button button_cancel;
-        private AntdUI.Button button_ok;
-        private AntdUI.Divider divider2;
-    }
-}
diff --git a/DHSoftware/Views/AddGlobalControl.cs b/DHSoftware/Views/AddGlobalControl.cs
deleted file mode 100644
index 9d34c7b..0000000
--- a/DHSoftware/Views/AddGlobalControl.cs
+++ /dev/null
@@ -1,48 +0,0 @@
-
-
-namespace DHSoftware.Views
-{
-    public partial class AddGlobalControl : UserControl
-    {
-        private AntdUI.Window window;
-        public bool submit;
-        public string GlobalName;
-        public AddGlobalControl(AntdUI.Window _window,string TitleName)
-        {
-            this.window = _window;
-            InitializeComponent();
-            lbTitleName.Text = TitleName;
-            // 绑定事件
-            BindEventHandler();
-        }
-
-        private void BindEventHandler()
-        {
-            button_ok.Click += Button_ok_Click;
-            button_cancel.Click += Button_cancel_Click;
-        }
-
-        private void Button_cancel_Click(object sender, EventArgs e)
-        {
-            submit = false;
-            this.Dispose();
-        }
-
-        private void Button_ok_Click(object sender, EventArgs e)
-        {
-            input_name.Status = AntdUI.TType.None;
-            //检查输入内容
-            if (String.IsNullOrEmpty(input_name.Text))
-            {
-                input_name.Status = AntdUI.TType.Error;
-                AntdUI.Message.warn(window, "全局配置名称名称不能为空!", autoClose: 3);
-                return;
-            }
-            GlobalName = input_name.Text;
-            submit = true;
-            this.Dispose();
-        }
-
-     
-    }
-}
diff --git a/DHSoftware/Views/AddGlobalControl.resx b/DHSoftware/Views/AddGlobalControl.resx
deleted file mode 100644
index 8b2ff64..0000000
--- a/DHSoftware/Views/AddGlobalControl.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?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/DHSoftware/Views/CamConfigFrm.Designer.cs b/DHSoftware/Views/CamConfigFrm.Designer.cs
deleted file mode 100644
index 69a68a6..0000000
--- a/DHSoftware/Views/CamConfigFrm.Designer.cs
+++ /dev/null
@@ -1,150 +0,0 @@
-namespace DHSoftware.Views
-{
-    partial class CamConfigFrm
-    {
-       
-        /// <summary> 
-        /// 必需的设计器变量。
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 清理所有正在使用的资源。
-        /// </summary>
-        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 组件设计器生成的代码
-
-        /// <summary> 
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            AntdUI.Tabs.StyleLine styleLine1 = new AntdUI.Tabs.StyleLine();
-            tabs1 = new AntdUI.Tabs();
-            tabPage1 = new AntdUI.TabPage();
-            label1 = new Label();
-            btnRefreshCamList = new Button();
-            dgvCams = new DataGridView();
-            CamName = new DataGridViewTextBoxColumn();
-            Serinum = new DataGridViewTextBoxColumn();
-            IP = new DataGridViewTextBoxColumn();
-            COMBO_DEVICES = new ComboBox();
-            tabs1.SuspendLayout();
-            tabPage1.SuspendLayout();
-            ((System.ComponentModel.ISupportInitialize)dgvCams).BeginInit();
-            SuspendLayout();
-            // 
-            // tabs1
-            // 
-            tabs1.Controls.Add(tabPage1);
-            tabs1.Dock = DockStyle.Fill;
-            tabs1.Location = new Point(0, 0);
-            tabs1.Name = "tabs1";
-            tabs1.Pages.Add(tabPage1);
-            tabs1.Size = new Size(489, 563);
-            tabs1.Style = styleLine1;
-            tabs1.TabIndex = 0;
-            tabs1.Text = "tabs1";
-            // 
-            // tabPage1
-            // 
-            tabPage1.Controls.Add(label1);
-            tabPage1.Controls.Add(btnRefreshCamList);
-            tabPage1.Controls.Add(dgvCams);
-            tabPage1.Controls.Add(COMBO_DEVICES);
-            tabPage1.Location = new Point(3, 28);
-            tabPage1.Name = "tabPage1";
-            tabPage1.Size = new Size(483, 532);
-            tabPage1.TabIndex = 0;
-            tabPage1.Text = "相机配置";
-            // 
-            // label1
-            // 
-            label1.AutoSize = true;
-            label1.Location = new Point(38, 15);
-            label1.Name = "label1";
-            label1.Size = new Size(56, 17);
-            label1.TabIndex = 3;
-            label1.Text = "相机类型";
-            // 
-            // btnRefreshCamList
-            // 
-            btnRefreshCamList.Location = new Point(36, 43);
-            btnRefreshCamList.Name = "btnRefreshCamList";
-            btnRefreshCamList.Size = new Size(423, 33);
-            btnRefreshCamList.TabIndex = 2;
-            btnRefreshCamList.Text = "刷新相机列表";
-            btnRefreshCamList.UseVisualStyleBackColor = true;
-            btnRefreshCamList.Click += btnRefreshCamList_Click;
-            // 
-            // dgvCams
-            // 
-            dgvCams.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
-            dgvCams.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            dgvCams.Columns.AddRange(new DataGridViewColumn[] { CamName, Serinum, IP });
-            dgvCams.Location = new Point(38, 82);
-            dgvCams.Name = "dgvCams";
-            dgvCams.Size = new Size(421, 206);
-            dgvCams.TabIndex = 1;
-            // 
-            // CamName
-            // 
-            CamName.HeaderText = "相机名";
-            CamName.Name = "CamName";
-            // 
-            // Serinum
-            // 
-            Serinum.HeaderText = "序列号";
-            Serinum.Name = "Serinum";
-            // 
-            // IP
-            // 
-            IP.HeaderText = "相机IP";
-            IP.Name = "IP";
-            // 
-            // COMBO_DEVICES
-            // 
-            COMBO_DEVICES.DropDownStyle = ComboBoxStyle.DropDownList;
-            COMBO_DEVICES.FormattingEnabled = true;
-            COMBO_DEVICES.Location = new Point(100, 12);
-            COMBO_DEVICES.Name = "COMBO_DEVICES";
-            COMBO_DEVICES.Size = new Size(359, 25);
-            COMBO_DEVICES.TabIndex = 0;
-            // 
-            // CamConfigFrm
-            // 
-            AutoScaleDimensions = new SizeF(7F, 17F);
-            AutoScaleMode = AutoScaleMode.Font;
-            Controls.Add(tabs1);
-            Name = "CamConfigFrm";
-            Size = new Size(489, 563);
-            tabs1.ResumeLayout(false);
-            tabPage1.ResumeLayout(false);
-            tabPage1.PerformLayout();
-            ((System.ComponentModel.ISupportInitialize)dgvCams).EndInit();
-            ResumeLayout(false);
-        }
-
-        #endregion
-
-        private AntdUI.Tabs tabs1;
-        private AntdUI.TabPage tabPage1;
-        private ComboBox COMBO_DEVICES;
-        private Button btnRefreshCamList;
-        private DataGridView dgvCams;
-        private Label label1;
-        private DataGridViewTextBoxColumn CamName;
-        private DataGridViewTextBoxColumn Serinum;
-        private DataGridViewTextBoxColumn IP;
-    }
-}
diff --git a/DHSoftware/Views/CamConfigFrm.cs b/DHSoftware/Views/CamConfigFrm.cs
deleted file mode 100644
index f85b8ae..0000000
--- a/DHSoftware/Views/CamConfigFrm.cs
+++ /dev/null
@@ -1,178 +0,0 @@
-using DH.Commons.Base;
-using DH.Commons.Enums;
-using DVPCameraType;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Diagnostics;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement;
-
-namespace DHSoftware.Views
-{
-
-    public partial class CamConfigFrm : UserControl
-    {
-        public int m_n_dev_count = 0;
-        public static int m_CamCount = 0;
-        public static dvpCameraInfo[] m_info = new dvpCameraInfo[16];
-
-        // 在窗体类中声明一个绑定列表(用于动态更新)
-        private BindingList<CameraBase> _cameraList = new BindingList<CameraBase>();
-        public CamConfigFrm()
-        {
-            InitializeComponent();
-            // 添加 ComboBox 的项
-            COMBO_DEVICES.Items.AddRange(new string[] { " 度申Do3", "海康Hik", "巴斯勒Basler", "虚拟相机" });
-
-            // 绑定 SelectedIndexChanged 事件
-            COMBO_DEVICES.SelectedIndexChanged += ComboBox_SelectedIndexChanged;
-
-            dgvCams.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.Fill;
-            dgvCams.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize;
-            dgvCams.DataSource = _cameraList; // 绑定数据源
-            dgvCams.Location = new Point(38, 82);
-            dgvCams.Name = "dgvCams";
-            dgvCams.Size = new Size(284, 206);
-            dgvCams.TabIndex = 1;
-        }
-        private void ComboBox_SelectedIndexChanged(object sender, EventArgs e)
-        {
-            if (COMBO_DEVICES.SelectedItem == null) return;
-
-            string selectedMethod = COMBO_DEVICES.SelectedItem.ToString();
-            switch (selectedMethod)
-            {
-                case "度申Do3":
-                    Do3Think();
-                    break;
-                case "海康Hik":
-                    HiK();
-                    break;
-                case "巴斯勒Basler":
-                    Basler();
-                    break;
-                case "虚拟相机":
-                    Virtul();
-                    break;
-                default:
-                    MessageBox.Show("未找到对应方法");
-                    break;
-            }
-        }
-
-        // 其他方法定义...
-        private void Do3Think()
-        {
-            InitDevList();
-        }
-
-        private void HiK()
-        {
-
-        }
-        private void Basler()
-        {
-
-        }
-
-        private void Virtul()
-        {
-
-        }
-        private void btnRefreshCamList_Click(object sender, EventArgs e)
-        {
-            //搜索度申相机
-            InitDevList();
-        }
-
-        /// <summary>
-        /// 搜索度申相机
-        /// </summary>
-        // Initialize the device list.
-        public void InitDevList()
-        {
-
-
-
-
-
-
-
-            dvpStatus status;
-            uint i, n = 0;
-            dvpCameraInfo dev_info = new dvpCameraInfo();
-
-            // 清空旧数据
-            _cameraList.Clear();
-
-            // Get the number of cameras that has been connected to a computer.
-            status = DVPCamera.dvpRefresh(ref n);
-            Debug.Assert(status == dvpStatus.DVP_STATUS_OK);
-            m_n_dev_count = (int)n;
-            if (status == dvpStatus.DVP_STATUS_OK)
-            {
-                m_CamCount = 0;
-                for (i = 0; i < n; i++)
-                {
-                    // Acquire each camera's information one by one.
-                    status = DVPCamera.dvpEnum(i, ref dev_info);
-
-                    if (status == dvpStatus.DVP_STATUS_OK)
-                    {
-                        m_info[m_CamCount] = dev_info;
-
-                        int item = -1;
-                        //if (!UserDefinedName.Checked)
-                        {
-                            // add FriendlyName
-                            item = COMBO_DEVICES.Items.Add(dev_info.FriendlyName);
-                            CameraBase info = new CameraBase
-                            {
-                                CameraName = dev_info.FriendlyName,
-                                SerialNumber = dev_info.SerialNumber,
-                                // IP = dev_info.IP
-                            };
-
-                            _cameraList.Add(info);
-
-
-                        }
-                        //else
-                        //{
-                        //    // add User Define Name
-                        //    item = COMBO_DEVICES.Items.Add(dev_info.UserID);
-                        //}
-
-                        m_CamCount++;
-                    }
-                    else
-                    {
-                        Debug.Assert(status == dvpStatus.DVP_STATUS_OK);
-                    }
-                }
-            }
-
-            if (n == 0)
-            {
-
-            }
-            else
-            {
-
-            }
-
-
-        }
-
-        private void btnsubmit_Click(object sender, EventArgs e)
-        {
-
-        }
-    }
-}
diff --git a/DHSoftware/Views/CamConfigFrm.resx b/DHSoftware/Views/CamConfigFrm.resx
deleted file mode 100644
index 66ee6fe..0000000
--- a/DHSoftware/Views/CamConfigFrm.resx
+++ /dev/null
@@ -1,129 +0,0 @@
-<?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="CamName.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="Serinum.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-  <metadata name="IP.UserAddedColumn" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
-    <value>True</value>
-  </metadata>
-</root>
\ No newline at end of file
diff --git a/DHSoftware/Views/CameraConfigControl.Designer.cs b/DHSoftware/Views/CameraConfigControl.Designer.cs
deleted file mode 100644
index 7dc37bf..0000000
--- a/DHSoftware/Views/CameraConfigControl.Designer.cs
+++ /dev/null
@@ -1,200 +0,0 @@
-namespace DHSoftware.Views
-{
-    partial class CameraConfigControl
-    {
-        /// <summary> 
-        /// 必需的设计器变量。
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 清理所有正在使用的资源。
-        /// </summary>
-        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 组件设计器生成的代码
-
-        /// <summary> 
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            label1 = new AntdUI.Label();
-            cbxCamName = new ComboBox();
-            switchCamEnable = new AntdUI.Switch();
-            label2 = new AntdUI.Label();
-            numExpose = new AntdUI.InputNumber();
-            numGain = new AntdUI.InputNumber();
-            label3 = new AntdUI.Label();
-            numRotate = new AntdUI.InputNumber();
-            label4 = new AntdUI.Label();
-            label5 = new AntdUI.Label();
-            label6 = new AntdUI.Label();
-            switchSaveCamPic = new AntdUI.Switch();
-            panel1 = new Panel();
-            panel1.SuspendLayout();
-            SuspendLayout();
-            // 
-            // label1
-            // 
-            label1.Location = new Point(15, 14);
-            label1.Name = "label1";
-            label1.Size = new Size(58, 23);
-            label1.TabIndex = 0;
-            label1.Text = "相机名";
-            // 
-            // cbxCamName
-            // 
-            cbxCamName.DropDownStyle = ComboBoxStyle.DropDownList;
-            cbxCamName.FormattingEnabled = true;
-            cbxCamName.Location = new Point(79, 12);
-            cbxCamName.Name = "cbxCamName";
-            cbxCamName.Size = new Size(165, 25);
-            cbxCamName.TabIndex = 1;
-            // 
-            // switchCamEnable
-            // 
-            switchCamEnable.Location = new Point(330, 12);
-            switchCamEnable.Name = "switchCamEnable";
-            switchCamEnable.Size = new Size(57, 23);
-            switchCamEnable.TabIndex = 2;
-            switchCamEnable.Text = "switch1";
-            // 
-            // label2
-            // 
-            label2.Location = new Point(15, 43);
-            label2.Name = "label2";
-            label2.Size = new Size(58, 38);
-            label2.TabIndex = 3;
-            label2.Text = "曝光时间";
-            // 
-            // numExpose
-            // 
-            numExpose.Location = new Point(79, 43);
-            numExpose.Maximum = new decimal(new int[] { 10000000, 0, 0, 0 });
-            numExpose.Minimum = new decimal(new int[] { 1, 0, 0, 0 });
-            numExpose.Name = "numExpose";
-            numExpose.Size = new Size(165, 38);
-            numExpose.TabIndex = 4;
-            numExpose.Text = "1";
-            numExpose.Value = new decimal(new int[] { 1, 0, 0, 0 });
-            // 
-            // numGain
-            // 
-            numGain.Location = new Point(79, 87);
-            numGain.Maximum = new decimal(new int[] { 16, 0, 0, 0 });
-            numGain.Minimum = new decimal(new int[] { 0, 0, 0, 0 });
-            numGain.Name = "numGain";
-            numGain.Size = new Size(165, 38);
-            numGain.TabIndex = 6;
-            numGain.Text = "0";
-            // 
-            // label3
-            // 
-            label3.Location = new Point(15, 87);
-            label3.Name = "label3";
-            label3.Size = new Size(58, 38);
-            label3.TabIndex = 5;
-            label3.Text = "增益";
-            // 
-            // numRotate
-            // 
-            numRotate.Increment = new decimal(new int[] { 90, 0, 0, 0 });
-            numRotate.Location = new Point(79, 131);
-            numRotate.Maximum = new decimal(new int[] { 360, 0, 0, 0 });
-            numRotate.Minimum = new decimal(new int[] { 0, 0, 0, 0 });
-            numRotate.Name = "numRotate";
-            numRotate.Size = new Size(165, 38);
-            numRotate.TabIndex = 8;
-            numRotate.Text = "0";
-            // 
-            // label4
-            // 
-            label4.Location = new Point(15, 131);
-            label4.Name = "label4";
-            label4.Size = new Size(58, 38);
-            label4.TabIndex = 7;
-            label4.Text = "旋转";
-            // 
-            // label5
-            // 
-            label5.Location = new Point(266, 5);
-            label5.Name = "label5";
-            label5.Size = new Size(58, 36);
-            label5.TabIndex = 9;
-            label5.Text = "相机启用";
-            // 
-            // label6
-            // 
-            label6.Location = new Point(266, 47);
-            label6.Name = "label6";
-            label6.Size = new Size(58, 36);
-            label6.TabIndex = 11;
-            label6.Text = "保存原图";
-            // 
-            // switchSaveCamPic
-            // 
-            switchSaveCamPic.Location = new Point(330, 54);
-            switchSaveCamPic.Name = "switchSaveCamPic";
-            switchSaveCamPic.Size = new Size(57, 23);
-            switchSaveCamPic.TabIndex = 10;
-            switchSaveCamPic.Text = "switch2";
-            // 
-            // panel1
-            // 
-            panel1.BorderStyle = BorderStyle.FixedSingle;
-            panel1.Controls.Add(cbxCamName);
-            panel1.Controls.Add(label6);
-            panel1.Controls.Add(label1);
-            panel1.Controls.Add(switchSaveCamPic);
-            panel1.Controls.Add(switchCamEnable);
-            panel1.Controls.Add(label5);
-            panel1.Controls.Add(label2);
-            panel1.Controls.Add(numRotate);
-            panel1.Controls.Add(numExpose);
-            panel1.Controls.Add(label4);
-            panel1.Controls.Add(label3);
-            panel1.Controls.Add(numGain);
-            panel1.Dock = DockStyle.Fill;
-            panel1.Location = new Point(0, 0);
-            panel1.Name = "panel1";
-            panel1.Size = new Size(620, 201);
-            panel1.TabIndex = 12;
-            // 
-            // CameraConfigControl
-            // 
-            AutoScaleDimensions = new SizeF(7F, 17F);
-            AutoScaleMode = AutoScaleMode.Font;
-            Controls.Add(panel1);
-            Name = "CameraConfigControl";
-            Size = new Size(620, 201);
-            panel1.ResumeLayout(false);
-            ResumeLayout(false);
-        }
-
-        #endregion
-
-        private AntdUI.Label label1;
-        private ComboBox cbxCamName;
-        private AntdUI.Switch switchCamEnable;
-        private AntdUI.Label label2;
-        private AntdUI.InputNumber numExpose;
-        private AntdUI.InputNumber numGain;
-        private AntdUI.Label label3;
-        private AntdUI.InputNumber numRotate;
-        private AntdUI.Label label4;
-        private AntdUI.Label label5;
-        private AntdUI.Label label6;
-        private AntdUI.Switch switchSaveCamPic;
-        private Panel panel1;
-    }
-}
diff --git a/DHSoftware/Views/CameraConfigControl.cs b/DHSoftware/Views/CameraConfigControl.cs
deleted file mode 100644
index deaff4c..0000000
--- a/DHSoftware/Views/CameraConfigControl.cs
+++ /dev/null
@@ -1,127 +0,0 @@
-using AntdUI;
-using DH.Commons.Base;
-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 DHSoftware.Views
-{
-    public partial class CameraConfigControl : UserControl
-    {
-        public CameraConfigControl()
-        {
-            InitializeComponent();
-           // InitTableColumns();
-            InitData();
-        }
-        AntList<CameraBase> antList = null;
-        CameraBase curUser;
-        //private void InitTableColumns()
-        //{
-        //    table_base.Columns = new ColumnCollection() {
-        //        new ColumnCheck("Selected"){Fixed = true},
-        //        new Column("CameraName", "相机名", ColumnAlign.Center)
-        //        {
-        //            Width="120",
-        //            //设置树节点,名称需和User里的User[]名称保持一致
-        //            KeyTree = "Users"
-        //        },
-        //        new Column("CameraIP", "相机IP",ColumnAlign.Center),
-        //        new Column("Gain", "增益"){
-        //            Width = "120",
-        //            LineBreak = true,
-        //        },
-        //        new ColumnSwitch("IsHardwareTrigger", "硬触发", ColumnAlign.Center){
-                   
-        //        },
-        //        new Column("RotateImage", "旋转",ColumnAlign.Center),
-        //        new Column("Exposure", "曝光",ColumnAlign.Center),
-        //        //new Column("CellBadge", "徽标",ColumnAlign.Center),
-        //        //new Column("CellText", "富文本")
-        //        //{
-        //        //    ColAlign = ColumnAlign.Center,//支持表头位置单独设置
-        //        //},
-        //        //new Column("CellProgress", "进度条",ColumnAlign.Center),
-        //        //new Column("CellDivider", "分割线",ColumnAlign.Center),
-        //        //new Column("CellLinks", "链接", ColumnAlign.Center)
-        //        //{
-        //        //    Fixed = true,//冻结列
-        //        //},
-        //    };
-        //}
-        private void InitData()
-        {
-            antList = new AntList<CameraBase>();
-
-            for (int i = 0; i < 10; i++)
-            {
-                antList.Add(new CameraBase
-                {
-                    CameraName = "相机1",
-                    CameraIP = "",
-                    Gain = 6,
-                    IsHardwareTrigger = true,
-                    RotateImage = 50,
-                    Exposure = 100,
-                   
-                 
-                    //CellLinks = new CellLink[] {new CellLink("https://gitee.com/antdui/AntdUI", "AntdUI"),
-                    //new CellButton(Guid.NewGuid().ToString(),"编辑",TTypeMini.Primary),
-                    //new CellButton(Guid.NewGuid().ToString(), "徽标", TTypeMini.Success)
-                    //{
-                    //    //支持所有单元格控件
-                    //    DropDownItems = new ISelectItem[]
-                    //    {
-                    //         new AntdUI.SelectItem(TState.Default),
-                    //         new AntdUI.SelectItem(TState.Primary),
-                    //         new AntdUI.SelectItem(TState.Success),
-                    //         new AntdUI.SelectItem(TState.Error),
-                    //         new AntdUI.SelectItem(TState.Warn),
-                    //         new AntdUI.SelectItem(TState.Processing),
-
-                    //    },
-                    //    DropDownValueChanged = (value) =>
-                    //    {
-                    //        string badge = value.ToString();
-                    //        //switch(badge) {
-                    //        //case "Default":
-                    //        //        curUser.CellBadge = new CellBadge(TState.Default, badge); break;
-                    //        //case "Primary":
-                    //        //        curUser.CellBadge = new CellBadge(TState.Primary, badge); break;
-                    //        //case "Success":
-                    //        //        curUser.CellBadge = new CellBadge(TState.Success, badge); break;
-                    //        //case "Error":
-                    //        //        curUser.CellBadge = new CellBadge(TState.Error, badge); break;
-                    //        //case "Warn":
-                    //        //        curUser.CellBadge = new CellBadge(TState.Warn, badge); break;
-                    //        //case "Processing":
-                    //        //        curUser.CellBadge = new CellBadge(TState.Processing, badge); break;
-                    //        //}
-                    //    }
-                    //},
-                    //new CellButton(Guid.NewGuid().ToString(),"删除",TTypeMini.Error),
-                    //new CellButton(Guid.NewGuid().ToString(),"查看图片",TTypeMini.Primary)},
-                    //value:0-1
-                   // CellProgress = new CellProgress(0.5f),
-                   // CellDivider = new CellDivider(),
-                });
-            }
-
-          
-
-            //设置树数据,可为任意行设置
-
-           // antList[1].Users = subUsers.ToArray();
-           // table_base.Binding(antList);
-
-            //设置行禁用
-           // table_base.SetRowEnable(0, false, true);
-        }
-    }
-}
diff --git a/DHSoftware/Views/CameraConfigControl.resx b/DHSoftware/Views/CameraConfigControl.resx
deleted file mode 100644
index af32865..0000000
--- a/DHSoftware/Views/CameraConfigControl.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?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/DHSoftware/Views/DetectConfigControl.Designer.cs b/DHSoftware/Views/DetectConfigControl.Designer.cs
deleted file mode 100644
index b0fbaff..0000000
--- a/DHSoftware/Views/DetectConfigControl.Designer.cs
+++ /dev/null
@@ -1,297 +0,0 @@
-namespace DHSoftware.Views
-{
-    partial class DetectConfigControl
-    {
-        /// <summary> 
-        /// 必需的设计器变量。
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 清理所有正在使用的资源。
-        /// </summary>
-        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 组件设计器生成的代码
-
-        /// <summary> 
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            panel1 = new Panel();
-            panel3 = new Panel();
-            label6 = new AntdUI.Label();
-            cbxDetectType = new AntdUI.Select();
-            label1 = new AntdUI.Label();
-            tbDetectName = new AntdUI.Input();
-            btnPreOpen = new AntdUI.Button();
-            tbModelpath = new AntdUI.Input();
-            button3 = new AntdUI.Button();
-            switchEnable = new AntdUI.Switch();
-            label8 = new AntdUI.Label();
-            label10 = new AntdUI.Label();
-            sthPic = new AntdUI.Switch();
-            sthSaveNGPic = new AntdUI.Switch();
-            label7 = new AntdUI.Label();
-            label9 = new AntdUI.Label();
-            swSaveOKPic = new AntdUI.Switch();
-            panel2 = new Panel();
-            label2 = new AntdUI.Label();
-            buttonDEL = new AntdUI.Button();
-            table_base = new AntdUI.Table();
-            buttonADD = new AntdUI.Button();
-            panel1.SuspendLayout();
-            panel3.SuspendLayout();
-            panel2.SuspendLayout();
-            SuspendLayout();
-            // 
-            // panel1
-            // 
-            panel1.BorderStyle = BorderStyle.FixedSingle;
-            panel1.Controls.Add(panel3);
-            panel1.Controls.Add(panel2);
-            panel1.Dock = DockStyle.Fill;
-            panel1.Location = new Point(0, 0);
-            panel1.Name = "panel1";
-            panel1.Size = new Size(600, 445);
-            panel1.TabIndex = 0;
-            // 
-            // panel3
-            // 
-            panel3.Controls.Add(label6);
-            panel3.Controls.Add(cbxDetectType);
-            panel3.Controls.Add(label1);
-            panel3.Controls.Add(tbDetectName);
-            panel3.Controls.Add(btnPreOpen);
-            panel3.Controls.Add(tbModelpath);
-            panel3.Controls.Add(button3);
-            panel3.Controls.Add(switchEnable);
-            panel3.Controls.Add(label8);
-            panel3.Controls.Add(label10);
-            panel3.Controls.Add(sthPic);
-            panel3.Controls.Add(sthSaveNGPic);
-            panel3.Controls.Add(label7);
-            panel3.Controls.Add(label9);
-            panel3.Controls.Add(swSaveOKPic);
-            panel3.Dock = DockStyle.Fill;
-            panel3.Location = new Point(0, 0);
-            panel3.Name = "panel3";
-            panel3.Size = new Size(598, 206);
-            panel3.TabIndex = 41;
-            // 
-            // label6
-            // 
-            label6.Location = new Point(3, 15);
-            label6.Name = "label6";
-            label6.Size = new Size(58, 23);
-            label6.TabIndex = 25;
-            label6.Text = "检测名称";
-            // 
-            // cbxDetectType
-            // 
-            cbxDetectType.Anchor = AnchorStyles.Top | AnchorStyles.Right;
-            cbxDetectType.Location = new Point(341, 7);
-            cbxDetectType.Name = "cbxDetectType";
-            cbxDetectType.Size = new Size(226, 31);
-            cbxDetectType.TabIndex = 40;
-            // 
-            // label1
-            // 
-            label1.Location = new Point(3, 44);
-            label1.Name = "label1";
-            label1.Size = new Size(73, 23);
-            label1.TabIndex = 9;
-            label1.Text = "模型路径";
-            // 
-            // tbDetectName
-            // 
-            tbDetectName.Location = new Point(82, 7);
-            tbDetectName.Name = "tbDetectName";
-            tbDetectName.Size = new Size(249, 31);
-            tbDetectName.TabIndex = 39;
-            // 
-            // btnPreOpen
-            // 
-            btnPreOpen.Anchor = AnchorStyles.Top | AnchorStyles.Right;
-            btnPreOpen.Location = new Point(507, 36);
-            btnPreOpen.MinimumSize = new Size(20, 0);
-            btnPreOpen.Name = "btnPreOpen";
-            btnPreOpen.Size = new Size(60, 31);
-            btnPreOpen.TabIndex = 22;
-            btnPreOpen.Text = "...";
-            // 
-            // tbModelpath
-            // 
-            tbModelpath.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
-            tbModelpath.Location = new Point(82, 36);
-            tbModelpath.Name = "tbModelpath";
-            tbModelpath.Size = new Size(415, 31);
-            tbModelpath.TabIndex = 38;
-            // 
-            // button3
-            // 
-            button3.Anchor = AnchorStyles.Top | AnchorStyles.Right;
-            button3.Location = new Point(385, 73);
-            button3.Name = "button3";
-            button3.Size = new Size(182, 34);
-            button3.TabIndex = 37;
-            button3.Text = "查看文件夹";
-            // 
-            // switchEnable
-            // 
-            switchEnable.Location = new Point(82, 84);
-            switchEnable.Name = "switchEnable";
-            switchEnable.Size = new Size(60, 23);
-            switchEnable.TabIndex = 27;
-            switchEnable.Text = "switch1";
-            // 
-            // label8
-            // 
-            label8.Location = new Point(3, 84);
-            label8.Name = "label8";
-            label8.Size = new Size(58, 23);
-            label8.TabIndex = 28;
-            label8.Text = "模型启用";
-            // 
-            // label10
-            // 
-            label10.Location = new Point(176, 113);
-            label10.Name = "label10";
-            label10.Size = new Size(73, 23);
-            label10.TabIndex = 34;
-            label10.Text = "保存NG原图";
-            // 
-            // sthPic
-            // 
-            sthPic.Location = new Point(263, 84);
-            sthPic.Name = "sthPic";
-            sthPic.Size = new Size(60, 23);
-            sthPic.TabIndex = 29;
-            sthPic.Text = "switch2";
-            // 
-            // sthSaveNGPic
-            // 
-            sthSaveNGPic.Location = new Point(263, 113);
-            sthSaveNGPic.Name = "sthSaveNGPic";
-            sthSaveNGPic.Size = new Size(60, 23);
-            sthSaveNGPic.TabIndex = 33;
-            sthSaveNGPic.Text = "switch4";
-            // 
-            // label7
-            // 
-            label7.Location = new Point(184, 84);
-            label7.Name = "label7";
-            label7.Size = new Size(58, 23);
-            label7.TabIndex = 30;
-            label7.Text = "数据保存";
-            // 
-            // label9
-            // 
-            label9.Location = new Point(3, 113);
-            label9.Name = "label9";
-            label9.Size = new Size(73, 23);
-            label9.TabIndex = 32;
-            label9.Text = "保存OK原图";
-            // 
-            // swSaveOKPic
-            // 
-            swSaveOKPic.Location = new Point(82, 113);
-            swSaveOKPic.Name = "swSaveOKPic";
-            swSaveOKPic.Size = new Size(60, 23);
-            swSaveOKPic.TabIndex = 31;
-            swSaveOKPic.Text = "switch3";
-            // 
-            // panel2
-            // 
-            panel2.Controls.Add(label2);
-            panel2.Controls.Add(buttonDEL);
-            panel2.Controls.Add(table_base);
-            panel2.Controls.Add(buttonADD);
-            panel2.Dock = DockStyle.Bottom;
-            panel2.Location = new Point(0, 206);
-            panel2.Name = "panel2";
-            panel2.Size = new Size(598, 237);
-            panel2.TabIndex = 35;
-            // 
-            // label2
-            // 
-            label2.Location = new Point(3, 3);
-            label2.Name = "label2";
-            label2.Size = new Size(58, 23);
-            label2.TabIndex = 29;
-            label2.Text = "模型参数";
-            // 
-            // buttonDEL
-            // 
-            buttonDEL.Location = new Point(93, 28);
-            buttonDEL.Name = "buttonDEL";
-            buttonDEL.Size = new Size(84, 34);
-            buttonDEL.TabIndex = 24;
-            buttonDEL.Text = "删除";
-            // 
-            // table_base
-            // 
-            table_base.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
-            table_base.Location = new Point(0, 68);
-            table_base.Name = "table_base";
-            table_base.Size = new Size(598, 169);
-            table_base.TabIndex = 22;
-            table_base.Text = "table1";
-            // 
-            // buttonADD
-            // 
-            buttonADD.Location = new Point(3, 28);
-            buttonADD.Name = "buttonADD";
-            buttonADD.Size = new Size(84, 34);
-            buttonADD.TabIndex = 23;
-            buttonADD.Text = "新增";
-            // 
-            // DetectConfigControl
-            // 
-            AutoScaleDimensions = new SizeF(7F, 17F);
-            AutoScaleMode = AutoScaleMode.Font;
-            Controls.Add(panel1);
-            Name = "DetectConfigControl";
-            Size = new Size(600, 445);
-            panel1.ResumeLayout(false);
-            panel3.ResumeLayout(false);
-            panel2.ResumeLayout(false);
-            ResumeLayout(false);
-        }
-
-        #endregion
-
-        private Panel panel1;
-        private AntdUI.Label label1;
-        private AntdUI.Label label6;
-        private AntdUI.Button btnPreOpen;
-        private AntdUI.Label label7;
-        private AntdUI.Switch sthPic;
-        private AntdUI.Label label8;
-        private AntdUI.Switch switchEnable;
-        private AntdUI.Label label10;
-        private AntdUI.Switch sthSaveNGPic;
-        private AntdUI.Label label9;
-        private AntdUI.Switch swSaveOKPic;
-        private Panel panel2;
-        private AntdUI.Button buttonDEL;
-        private AntdUI.Table table_base;
-        private AntdUI.Button buttonADD;
-        private AntdUI.Button button3;
-        private AntdUI.Input tbDetectName;
-        private AntdUI.Input tbModelpath;
-        private AntdUI.Label label2;
-        private AntdUI.Select cbxDetectType;
-        private Panel panel3;
-    }
-}
diff --git a/DHSoftware/Views/DetectConfigControl.cs b/DHSoftware/Views/DetectConfigControl.cs
deleted file mode 100644
index 378c0fc..0000000
--- a/DHSoftware/Views/DetectConfigControl.cs
+++ /dev/null
@@ -1,403 +0,0 @@
-using AntdUI;
-using AntdUIDemo.Views.Table;
-using DH.Commons.Enums;
-using DH.Devices.Vision;
-using DHSoftware.Models;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Data.Common;
-using System.Drawing;
-using System.Linq;
-using System.Reflection;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using DH.Devices.Vision;
-using DH.Commons.Base;
-
-namespace DHSoftware.Views
-{
-    public partial class DetectConfigControl : UserControl
-    {
-
-        private DetectionConfig _currentConfig = new DetectionConfig();
-        private readonly string _configName;
-        List<KeyValuePair<string, int>> MLModelTypes = GetFilteredEnumDescriptionsAndValues<ModelType>();
-
-        public static List<KeyValuePair<string, int>> GetFilteredEnumDescriptionsAndValues<T>() where T : Enum
-        {
-            return Enum.GetValues(typeof(T))
-                .Cast<T>()
-                .Select(e =>
-                {
-                    // 获取枚举的 Description 属性,如果没有,则使用枚举的名称
-                    var description = e.GetType()
-                        .GetField(e.ToString())
-                        ?.GetCustomAttribute<DescriptionAttribute>()
-                        ?.Description ?? e.ToString();
-
-                    // 返回枚举的描述和对应的整数值
-                    return new KeyValuePair<string, int>(description, Convert.ToInt32(e));
-                })
-                .ToList();
-        }
-
-        List<KeyValuePair<string, int>> resultStates = GetFilteredEnumDescriptionsAndValues<ResultState>();
-        // 获取枚举的描述和对应的值,只筛选出 OK 和 NG
-        public static List<KeyValuePair<string, int>> GetFilteredEnumDescriptionsAndValuesres<T>() where T : Enum
-        {
-            return Enum.GetValues(typeof(T))
-                .Cast<T>()
-                .Where(e => e.Equals(ResultState.OK) || e.Equals(ResultState.DetectNG)) // 只保留 OK 和 NG
-                .Select(e =>
-                {
-                    // 通过反射获取 DescriptionAttribute 描述,如果没有描述,则使用枚举项名称
-                    var description = e.GetType()
-                        .GetField(e.ToString())
-                        ?.GetCustomAttribute<DescriptionAttribute>()
-                        ?.Description ?? e.ToString(); // 如果没有 DescriptionAttribute,则使用枚举名称
-
-                    // 返回描述和值的键值对
-                    return new KeyValuePair<string, int>(description, Convert.ToInt32(e));
-                })
-                .ToList();
-        }
-
-
-        DetectionConfig Detection = new DetectionConfig();
-        AntList<DefectRow> antList;
-        public AntdUI.Window _window;
-        DefectRow curUser;
-        public DetectConfigControl()
-        {
-            InitializeComponent();
-            InitTableColumns();
-            //InitData();
-            BindEventHandler();
-            foreach (var item in MLModelTypes)
-            {
-                cbxDetectType.Items.Add(item.Key);
-            }
-            cbxDetectType.SelectedIndex = (int)Detection.ModelType - 1;
-            tbDetectName.Text = Detection.Name;
-          
-        }
-
-        private void InitTableColumns()
-        {
-            table_base.Columns = new ColumnCollection() {
-                new ColumnCheck("Selected"){Fixed = true},
-                new Column("LabelDescription", "标签名", ColumnAlign.Center)
-                {
-                    Width="120",
-                    //设置树节点,名称需和User里的User[]名称保持一致
-                    KeyTree = "Users"
-                },
-                  new ColumnSwitch("IsEnable", "是否启用", ColumnAlign.Center){
-                    //支持点击回调
-                    //Call= (value,record, i_row, i_col) =>{
-                    //    //执行耗时操作
-                    //    Thread.Sleep(10);
-                    //   // AntdUI.Message.info(window, value.ToString(),autoClose:1);
-                    //    return value;
-                    //}
-                },
-                new Column("ScoreMinValue", "最小得分",ColumnAlign.Center),
-                new Column("ScoreMaxValue", "最大得分",ColumnAlign.Center),
-
-                new Column("AreaMinValue", "最小面积",ColumnAlign.Center),
-                new Column("AreaMaxValue", "最大面积",ColumnAlign.Center),
-                //new Column("CellBadge", "徽标",ColumnAlign.Center),
-                //new Column("CellText", "富文本")
-                //{
-                //    ColAlign = ColumnAlign.Center,//支持表头位置单独设置
-                //},
-                //new Column("CellProgress", "进度条",ColumnAlign.Center),
-                //new Column("CellDivider", "分割线",ColumnAlign.Center),
-                //new Column("CellLinks", "链接", ColumnAlign.Center)
-                //{
-                //    Fixed = true,//冻结列
-                //},
-            };
-        }
-
-        private void InitData()
-        {
-            antList = new AntList<DefectRow>();
-
-            for (int i = 0; i < 10; i++)
-            {
-                antList.Add(new DefectRow
-                {
-                    LabelDescription = "张三",
-
-                });
-            }
-
-           
-            table_base.Binding(antList);
-
-            //设置行禁用
-          //  table_base.SetRowEnable(0, false, true);
-        }
-
-
-        private void BindEventHandler()
-        {
-            buttonADD.Click += ButtonADD_Click;
-            buttonDEL.Click += ButtonDEL_Click;
-
-           
-            table_base.CellClick += Table_base_CellClick;
-            table_base.CellButtonClick += Table_base_CellButtonClick;
-        }
-
-      
-        private AntdUI.Table.CellStyleInfo Table_base_SetRowStyle(object sender, TableSetRowStyleEventArgs e)
-        {
-            if (e.RowIndex % 2 == 0)
-            {
-                return new AntdUI.Table.CellStyleInfo
-                {
-                    BackColor = AntdUI.Style.Db.ErrorBg,
-                };
-            }
-            return null;
-        }
-
-        private void ButtonADD_Click(object sender, EventArgs e)
-        {
-            DefectRow useradd = new DefectRow()
-            {
-                LabelDescription="xinquexian",
-                IsEnable=true,
-                ScoreMinValue=0.3,
-                ScoreMaxValue=1,
-                AreaMinValue=1,
-                AreaMaxValue=999999999,
-               
-            };
-            var form = new DefectRowEdit(_window, useradd) { Size = new Size(700, 500) };
-            AntdUI.Modal.open(new AntdUI.Modal.Config(_window, "", form, TType.None)
-            {
-                BtnHeight = 0,
-            });
-            if (form.submit)
-            {
-                antList.Add(useradd);
-            }
-
-        }
-
-        private void Table_base_CellClick(object sender, TableClickEventArgs e)
-        {
-            var record = e.Record;
-            if (record is DefectRow user)
-            {
-                curUser = user;
-                //判断是否右键
-                if (e.Button == MouseButtons.Right)
-                {
-                    if (antList.Count == 0) return;
-                    AntdUI.ContextMenuStrip.open(new AntdUI.ContextMenuStrip.Config(table_base,
-                    (item) =>
-                    {
-                        if (item.Text == "开启")
-                        {
-                            user.IsEnable = true;
-                        }
-                        else if (item.Text == "关闭")
-                        {
-                            user.IsEnable = false;
-                        }
-                        else if (item.Text == "编辑")
-                        {
-                            var form = new DefectRowEdit(_window, user) { Size = new Size(500, 300) };
-                            AntdUI.Drawer.open(new AntdUI.Drawer.Config(_window, form)
-                            {
-                                OnLoad = () =>
-                                {
-                                    AntdUI.Message.info(_window, "进入编辑", autoClose: 1);
-                                },
-                                OnClose = () =>
-                                {
-                                    AntdUI.Message.info(_window, "结束编辑", autoClose: 1);
-                                }
-                            });
-                        }
-                        else if (item.Text == "删除")
-                        {
-                            var result = Modal.open(_window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
-                            if (result == DialogResult.OK)
-                            {
-                                //父元素没有勾选或者子元素也没有勾选,则删除当前行
-                                bool delCurrent = !antList.Any(x => x.Selected /*|| (x.?.Any(u => u.Selected) ?? false)*/);
-
-                                if (delCurrent)
-                                {
-                                    //删除当前行,先判断是否父元素,再判断是否子元素,只支持一层子元素,需实现嵌套查询
-                                    for (int i = 0; i < antList.Count; i++)
-                                    {
-                                        if (antList[i] == user)
-                                        {
-                                            antList.RemoveAt(i);
-                                        }
-                                        //else
-                                        //{
-                                        //    antList[i].Users = antList[i].Users?.Where(x => x != user).ToArray();
-                                        //}
-                                    }
-                                }
-                                else
-                                {
-                                    // 使用反转for循环删除主列表中选中的项
-                                    for (int i = antList.Count - 1; i >= 0; i--)
-                                    {
-                                        // 1.删除选中的主列表项
-                                        if (antList[i].Selected)
-                                        {
-                                            antList.RemoveAt(i);
-                                        }
-                                        //else
-                                        //{
-                                        //    // 删除子列表中选中的项
-                                        //    antList[i].Users = antList[i].Users?.Where(childUser => !childUser.Selected).ToArray();
-                                        //}
-                                    }
-                                }
-
-                            }
-                        }
-                        else if (item.Text == "查看图片")
-                        {
-                            //查看其他来源的高清图片
-                            Preview.open(new Preview.Config(_window, Properties.Resources.head2));
-                        }
-                        else
-                            AntdUI.Message.info(_window, item.Text, autoClose: 1);
-                    },
-                        new IContextMenuStripItem[] {
-                            //根据行数据动态修改右键菜单
-                            user.IsEnable?  new ContextMenuStripItem("关闭")
-                            {
-                                IconSvg = "CloseOutlined"
-                            }:new ContextMenuStripItem("开启")
-                            {
-                                IconSvg = "CheckOutlined"
-                            },
-                            new AntdUI.ContextMenuStripItem("编辑"){
-                                IconSvg = "EditOutlined",
-                            },
-                            new AntdUI.ContextMenuStripItem("删除"){
-                                IconSvg = "DeleteOutlined"
-                            },
-                            new ContextMenuStripItem("查看图片")
-                            {
-                                IconSvg = "FundViewOutlined"
-                            },
-                            new ContextMenuStripItemDivider(),
-                            new AntdUI.ContextMenuStripItem("详情"){
-                                Sub = new IContextMenuStripItem[]{ new AntdUI.ContextMenuStripItem("打印", "Ctrl + P") { },
-                                        new AntdUI.ContextMenuStripItem("另存为", "Ctrl + S") { } },
-                                IconSvg = "<svg t=\"1725101601993\" class=\"icon\" viewBox=\"0 0 1024 1024\" version=\"1.1\" xmlns=\"http://www.w3.org/2000/svg\" p-id=\"1414\" width=\"200\" height=\"200\"><path d=\"M450.23 831.7c-164.87 0-316.85-108.51-366.94-269.68-30.4-97.82-20.9-201.62 26.76-292.29s127.79-157.35 225.6-187.75c97.83-30.42 201.61-20.9 292.29 26.76 90.67 47.67 157.35 127.79 187.75 225.61 35.78 115.12 16.24 237.58-53.6 335.99a383.494 383.494 0 0 1-43 50.66c-15.04 14.89-39.34 14.78-54.23-0.29-14.9-15.05-14.77-39.34 0.29-54.23a307.844 307.844 0 0 0 34.39-40.52c55.9-78.76 71.54-176.75 42.92-268.84-50.21-161.54-222.49-252.1-384.03-201.9-78.26 24.32-142.35 77.67-180.48 150.2-38.14 72.53-45.74 155.57-21.42 233.83 44.58 143.44 190.03 234.7 338.26 212.42 20.98-3.14 40.48 11.26 43.64 32.2 3.16 20.95-11.26 40.48-32.2 43.64a377.753 377.753 0 0 1-56 4.19z\" p-id=\"1415\"></path><path d=\"M919.84 959.5c-9.81 0-19.63-3.74-27.11-11.24L666.75 722.29c-14.98-14.97-14.98-39.25 0-54.23 14.97-14.98 39.26-14.98 54.23 0l225.97 225.97c14.98 14.97 14.98 39.25 0 54.23-7.48 7.5-17.3 11.24-27.11 11.24z\" p-id=\"1416\"></path></svg>",
-                            }
-                        }));
-                }
-                else
-                {
-
-                }
-            }
-        }
-
-        //表格内部按钮事件
-        private void Table_base_CellButtonClick(object sender, TableButtonEventArgs e)
-        {
-            var buttontext = e.Btn.Text;
-
-            if (e.Record is DefectRow user)
-            {
-                curUser = user;
-                switch (buttontext)
-                {
-                    //暂不支持进入整行编辑,只支持指定单元格编辑,推荐使用弹窗或抽屉编辑整行数据
-                    case "编辑":
-                        var form = new DefectRowEdit(_window, user) { Size = new Size(500, 300) };
-                        AntdUI.Drawer.open(new AntdUI.Drawer.Config(_window, form)
-                        {
-                            OnLoad = () =>
-                            {
-                                AntdUI.Message.info(_window, "进入编辑", autoClose: 1);
-                            },
-                            OnClose = () =>
-                            {
-                                AntdUI.Message.info(_window, "结束编辑", autoClose: 1);
-                            }
-                        });
-                        break;
-                    case "删除":
-                        var result = Modal.open(_window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
-                        if (result == DialogResult.OK)
-                            antList.Remove(user);
-                        break;
-                    case "AntdUI":
-                        //超链接内容
-                       // AntdUI.Message.info(_window, user.CellLinks.FirstOrDefault().Id, autoClose: 1);
-                        break;
-                    case "查看图片":
-                        //使用clone可以防止table中的image被修改
-                       // Preview.open(new Preview.Config(window, (Image)curUser.CellImages[0].Image.Clone()));
-                        break;
-                }
-            }
-        }
-
-        private void ButtonDEL_Click(object sender, EventArgs e)
-        {
-            if (antList.Count == 0 || !antList.Any(x => x.Selected))
-            {
-                bool isSubSelected = false;
-                //// 判断子元素是否勾选
-                //for (int i = 0; i < antList.Count; i++)
-                //{
-                //    if (antList[i].Users != null && antList[i].Users.Any(x => x.Selected))
-                //    {
-                //        isSubSelected = true;
-                //        break;
-                //    }
-                //}
-                if (!isSubSelected)
-                {
-                    AntdUI.Message.warn(_window, "请选择要删除的行!", autoClose: 3);
-                    return;
-                }
-            }
-
-            var result = Modal.open(_window, "删除警告!", "确认要删除选择的数据吗?", TType.Warn);
-            if (result == DialogResult.OK)
-            {
-                // 使用反转for循环删除主列表中选中的项
-                for (int i = antList.Count - 1; i >= 0; i--)
-                {
-                    // 删除选中的主列表项
-                    if (antList[i].Selected)
-                    {
-                        antList.RemoveAt(i);
-                    }
-                    else
-                    {
-                        // 删除子列表中选中的项
-                       // antList[i].Users = antList[i].Users?.Where(user => !user.Selected).ToArray();
-                    }
-                }
-                // 提示删除完成
-                // AntdUI.Message.success(this.w, "删除成功!", autoClose: 3);
-                MessageBox.Show("删除成功!");
-            }
-        }
-
-
-    }
-}
diff --git a/DHSoftware/Views/DetectConfigControl.resx b/DHSoftware/Views/DetectConfigControl.resx
deleted file mode 100644
index af32865..0000000
--- a/DHSoftware/Views/DetectConfigControl.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?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/DHSoftware/LoginWindow.Designer.cs b/DHSoftware/Views/LoginWindow.Designer.cs
similarity index 100%
rename from DHSoftware/LoginWindow.Designer.cs
rename to DHSoftware/Views/LoginWindow.Designer.cs
diff --git a/DHSoftware/LoginWindow.cs b/DHSoftware/Views/LoginWindow.cs
similarity index 100%
rename from DHSoftware/LoginWindow.cs
rename to DHSoftware/Views/LoginWindow.cs
diff --git a/DHSoftware/LoginWindow.resx b/DHSoftware/Views/LoginWindow.resx
similarity index 100%
rename from DHSoftware/LoginWindow.resx
rename to DHSoftware/Views/LoginWindow.resx
diff --git a/DHSoftware/MainWindow.Designer.cs b/DHSoftware/Views/MainWindow.Designer.cs
similarity index 97%
rename from DHSoftware/MainWindow.Designer.cs
rename to DHSoftware/Views/MainWindow.Designer.cs
index 4101135..05ba5b6 100644
--- a/DHSoftware/MainWindow.Designer.cs
+++ b/DHSoftware/Views/MainWindow.Designer.cs
@@ -51,6 +51,7 @@
             lblNum = new Label();
             label2 = new Label();
             pageHeader1 = new AntdUI.PageHeader();
+            lbInBackend = new AntdUI.Label();
             labuph = new Label();
             divider2 = new AntdUI.Divider();
             tabMain = new AntdUI.TabPage();
@@ -237,6 +238,7 @@
             // 
             // pageHeader1
             // 
+            pageHeader1.Controls.Add(lbInBackend);
             pageHeader1.Controls.Add(labuph);
             pageHeader1.Controls.Add(divider2);
             pageHeader1.DividerShow = true;
@@ -248,6 +250,17 @@
             pageHeader1.TabIndex = 7;
             pageHeader1.Text = "UPH";
             // 
+            // lbInBackend
+            // 
+            lbInBackend.BackColor = Color.Transparent;
+            lbInBackend.Dock = DockStyle.Right;
+            lbInBackend.ForeColor = Color.FromArgb(46, 108, 227);
+            lbInBackend.Location = new Point(949, 10);
+            lbInBackend.Name = "lbInBackend";
+            lbInBackend.Size = new Size(75, 30);
+            lbInBackend.TabIndex = 2;
+            lbInBackend.Text = "系统后台";
+            // 
             // labuph
             // 
             labuph.AutoSize = true;
@@ -635,5 +648,6 @@
         private Label label10;
         private Label lblstarttime2;
         private Label label7;
+        private AntdUI.Label lbInBackend;
     }
 }
\ No newline at end of file
diff --git a/DHSoftware/MainWindow.cs b/DHSoftware/Views/MainWindow.cs
similarity index 99%
rename from DHSoftware/MainWindow.cs
rename to DHSoftware/Views/MainWindow.cs
index 8754f09..299a245 100644
--- a/DHSoftware/MainWindow.cs
+++ b/DHSoftware/Views/MainWindow.cs
@@ -367,6 +367,12 @@ namespace DHSoftware
             btnAddProject.Click += BtnAddProject_Click;
             btnDeleteProject.Click += BtnDeleteProject_Click;
             btnLoadProject.Click += BtnLoadProject_Click;
+            lbInBackend.Click += LbInBackend_Click;
+        }
+
+        private void LbInBackend_Click(object? sender, EventArgs e)
+        {
+            RBACWindow.Instance.Show();
         }
 
         private void BtnDeleteProject_Click(object? sender, EventArgs e)
diff --git a/DHSoftware/MainWindow.resx b/DHSoftware/Views/MainWindow.resx
similarity index 100%
rename from DHSoftware/MainWindow.resx
rename to DHSoftware/Views/MainWindow.resx
diff --git a/DHSoftware/Views/PreTreatUserControl.Designer.cs b/DHSoftware/Views/PreTreatUserControl.Designer.cs
deleted file mode 100644
index 49eda8e..0000000
--- a/DHSoftware/Views/PreTreatUserControl.Designer.cs
+++ /dev/null
@@ -1,213 +0,0 @@
-namespace DHSoftware.Views
-{
-    partial class PreTreatUserControl
-    {
-        /// <summary> 
-        /// 必需的设计器变量。
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 清理所有正在使用的资源。
-        /// </summary>
-        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 组件设计器生成的代码
-
-        /// <summary> 
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            btnPreOpen = new AntdUI.Button();
-            tbxPrePath = new TextBox();
-            label1 = new AntdUI.Label();
-            panel1 = new Panel();
-            btnOParmDel = new Panel();
-            label3 = new Label();
-            btnDelOParm = new AntdUI.Button();
-            tbOutputParm = new AntdUI.Table();
-            btnAddOParm = new AntdUI.Button();
-            panel2 = new Panel();
-            label2 = new Label();
-            btnDelIParm = new AntdUI.Button();
-            tbInputParm = new AntdUI.Table();
-            btnAddIParm = new AntdUI.Button();
-            panel1.SuspendLayout();
-            btnOParmDel.SuspendLayout();
-            panel2.SuspendLayout();
-            SuspendLayout();
-            // 
-            // btnPreOpen
-            // 
-            btnPreOpen.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
-            btnPreOpen.Location = new Point(570, 17);
-            btnPreOpen.Name = "btnPreOpen";
-            btnPreOpen.Size = new Size(28, 23);
-            btnPreOpen.TabIndex = 21;
-            btnPreOpen.Text = "...";
-            btnPreOpen.Click += btnPreOpen_Click;
-            // 
-            // tbxPrePath
-            // 
-            tbxPrePath.Location = new Point(91, 17);
-            tbxPrePath.Name = "tbxPrePath";
-            tbxPrePath.Size = new Size(473, 23);
-            tbxPrePath.TabIndex = 20;
-            // 
-            // label1
-            // 
-            label1.Location = new Point(12, 17);
-            label1.Name = "label1";
-            label1.Size = new Size(73, 23);
-            label1.TabIndex = 19;
-            label1.Text = "预处理路径";
-            // 
-            // panel1
-            // 
-            panel1.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
-            panel1.BorderStyle = BorderStyle.FixedSingle;
-            panel1.Controls.Add(btnOParmDel);
-            panel1.Controls.Add(panel2);
-            panel1.Controls.Add(label1);
-            panel1.Controls.Add(btnPreOpen);
-            panel1.Controls.Add(tbxPrePath);
-            panel1.Location = new Point(0, 0);
-            panel1.Name = "panel1";
-            panel1.Size = new Size(633, 243);
-            panel1.TabIndex = 22;
-            // 
-            // btnOParmDel
-            // 
-            btnOParmDel.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
-            btnOParmDel.Controls.Add(label3);
-            btnOParmDel.Controls.Add(btnDelOParm);
-            btnOParmDel.Controls.Add(tbOutputParm);
-            btnOParmDel.Controls.Add(btnAddOParm);
-            btnOParmDel.Location = new Point(352, 44);
-            btnOParmDel.Name = "btnOParmDel";
-            btnOParmDel.Size = new Size(246, 194);
-            btnOParmDel.TabIndex = 26;
-            // 
-            // label3
-            // 
-            label3.AutoSize = true;
-            label3.Location = new Point(3, 2);
-            label3.Name = "label3";
-            label3.Size = new Size(56, 17);
-            label3.TabIndex = 25;
-            label3.Text = "输出参数";
-            // 
-            // btnDelOParm
-            // 
-            btnDelOParm.Location = new Point(93, 25);
-            btnDelOParm.Name = "btnDelOParm";
-            btnDelOParm.Size = new Size(84, 34);
-            btnDelOParm.TabIndex = 24;
-            btnDelOParm.Text = "删除";
-            // 
-            // tbOutputParm
-            // 
-            tbOutputParm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
-            tbOutputParm.Location = new Point(3, 65);
-            tbOutputParm.Name = "tbOutputParm";
-            tbOutputParm.Size = new Size(240, 126);
-            tbOutputParm.TabIndex = 22;
-            tbOutputParm.Text = "table2";
-            // 
-            // btnAddOParm
-            // 
-            btnAddOParm.Location = new Point(3, 25);
-            btnAddOParm.Name = "btnAddOParm";
-            btnAddOParm.Size = new Size(84, 34);
-            btnAddOParm.TabIndex = 23;
-            btnAddOParm.Text = "新增";
-            // 
-            // panel2
-            // 
-            panel2.Controls.Add(label2);
-            panel2.Controls.Add(btnDelIParm);
-            panel2.Controls.Add(tbInputParm);
-            panel2.Controls.Add(btnAddIParm);
-            panel2.Location = new Point(12, 45);
-            panel2.Name = "panel2";
-            panel2.Size = new Size(264, 194);
-            panel2.TabIndex = 25;
-            // 
-            // label2
-            // 
-            label2.AutoSize = true;
-            label2.Location = new Point(3, 5);
-            label2.Name = "label2";
-            label2.Size = new Size(56, 17);
-            label2.TabIndex = 25;
-            label2.Text = "输入参数";
-            // 
-            // btnDelIParm
-            // 
-            btnDelIParm.Location = new Point(93, 25);
-            btnDelIParm.Name = "btnDelIParm";
-            btnDelIParm.Size = new Size(84, 34);
-            btnDelIParm.TabIndex = 24;
-            btnDelIParm.Text = "删除";
-            // 
-            // tbInputParm
-            // 
-            tbInputParm.Anchor = AnchorStyles.Top | AnchorStyles.Left | AnchorStyles.Right;
-            tbInputParm.Location = new Point(3, 65);
-            tbInputParm.Name = "tbInputParm";
-            tbInputParm.Size = new Size(258, 126);
-            tbInputParm.TabIndex = 22;
-            tbInputParm.Text = "table1";
-            // 
-            // btnAddIParm
-            // 
-            btnAddIParm.Location = new Point(3, 25);
-            btnAddIParm.Name = "btnAddIParm";
-            btnAddIParm.Size = new Size(84, 34);
-            btnAddIParm.TabIndex = 23;
-            btnAddIParm.Text = "新增";
-            // 
-            // PreTreatUserControl
-            // 
-            AutoScaleDimensions = new SizeF(7F, 17F);
-            AutoScaleMode = AutoScaleMode.Font;
-            Controls.Add(panel1);
-            Name = "PreTreatUserControl";
-            Size = new Size(635, 243);
-            panel1.ResumeLayout(false);
-            panel1.PerformLayout();
-            btnOParmDel.ResumeLayout(false);
-            btnOParmDel.PerformLayout();
-            panel2.ResumeLayout(false);
-            panel2.PerformLayout();
-            ResumeLayout(false);
-        }
-
-        #endregion
-
-        private AntdUI.Button btnPreOpen;
-        private TextBox tbxPrePath;
-        private AntdUI.Label label1;
-        private Panel panel1;
-        private AntdUI.Button btnDelIParm;
-        private AntdUI.Button btnAddIParm;
-        private AntdUI.Table tbInputParm;
-        private Panel panel2;
-        private Panel btnOParmDel;
-        private Label label3;
-        private AntdUI.Button btnDelOParm;
-        private AntdUI.Table tbOutputParm;
-        private AntdUI.Button btnAddOParm;
-        private Label label2;
-    }
-}
diff --git a/DHSoftware/Views/PreTreatUserControl.cs b/DHSoftware/Views/PreTreatUserControl.cs
deleted file mode 100644
index 6b20868..0000000
--- a/DHSoftware/Views/PreTreatUserControl.cs
+++ /dev/null
@@ -1,25 +0,0 @@
-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 DHSoftware.Views
-{
-    public partial class PreTreatUserControl : UserControl
-    {
-        public PreTreatUserControl()
-        {
-            InitializeComponent();
-        }
-
-        private void btnPreOpen_Click(object sender, EventArgs e)
-        {
-
-        }
-    }
-}
diff --git a/DHSoftware/Views/RBACWindow.Designer.cs b/DHSoftware/Views/RBACWindow.Designer.cs
new file mode 100644
index 0000000..949e713
--- /dev/null
+++ b/DHSoftware/Views/RBACWindow.Designer.cs
@@ -0,0 +1,159 @@
+namespace DHSoftware
+{
+    partial class RBACWindow
+    {
+        /// <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()
+        {
+            AntdUI.Tabs.StyleLine styleLine1 = new AntdUI.Tabs.StyleLine();
+            AntdUI.MenuItem menuItem1 = new AntdUI.MenuItem();
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(RBACWindow));
+            AntdUI.MenuItem menuItem2 = new AntdUI.MenuItem();
+            AntdUI.MenuItem menuItem3 = new AntdUI.MenuItem();
+            AntdUI.MenuItem menuItem4 = new AntdUI.MenuItem();
+            titlebar = new AntdUI.PageHeader();
+            lbName = new AntdUI.Label();
+            panel1 = new AntdUI.Panel();
+            tabs1 = new AntdUI.Tabs();
+            divider1 = new AntdUI.Divider();
+            menu1 = new AntdUI.Menu();
+            titlebar.SuspendLayout();
+            panel1.SuspendLayout();
+            SuspendLayout();
+            // 
+            // titlebar
+            // 
+            titlebar.BackColor = Color.FromArgb(46, 108, 227);
+            titlebar.Controls.Add(lbName);
+            titlebar.DividerShow = true;
+            titlebar.DividerThickness = 0F;
+            titlebar.Dock = DockStyle.Top;
+            titlebar.Font = new Font("Microsoft YaHei UI", 12F, FontStyle.Regular, GraphicsUnit.Point, 134);
+            titlebar.ForeColor = Color.White;
+            titlebar.Location = new Point(0, 0);
+            titlebar.Mode = AntdUI.TAMode.Dark;
+            titlebar.Name = "titlebar";
+            titlebar.ShowButton = true;
+            titlebar.ShowIcon = true;
+            titlebar.Size = new Size(904, 40);
+            titlebar.SubText = "CCD光学筛选系统后台";
+            titlebar.TabIndex = 1;
+            titlebar.Text = "山东迭慧智能科技有限公司";
+            // 
+            // lbName
+            // 
+            lbName.Dock = DockStyle.Right;
+            lbName.ForeColor = SystemColors.Window;
+            lbName.Location = new Point(626, 0);
+            lbName.Name = "lbName";
+            lbName.Size = new Size(134, 40);
+            lbName.TabIndex = 0;
+            lbName.Text = "";
+            lbName.TextAlign = ContentAlignment.MiddleRight;
+            // 
+            // panel1
+            // 
+            panel1.Controls.Add(tabs1);
+            panel1.Controls.Add(divider1);
+            panel1.Controls.Add(menu1);
+            panel1.Dock = DockStyle.Fill;
+            panel1.Location = new Point(0, 40);
+            panel1.Name = "panel1";
+            panel1.Size = new Size(904, 476);
+            panel1.TabIndex = 2;
+            panel1.Text = "panel1";
+            // 
+            // tabs1
+            // 
+            tabs1.BackColor = SystemColors.Window;
+            tabs1.Dock = DockStyle.Fill;
+            tabs1.Location = new Point(200, 0);
+            tabs1.Name = "tabs1";
+            tabs1.Size = new Size(704, 476);
+            tabs1.Style = styleLine1;
+            tabs1.TabIndex = 7;
+            tabs1.Text = "tabs1";
+            // 
+            // divider1
+            // 
+            divider1.BackColor = SystemColors.Window;
+            divider1.Dock = DockStyle.Left;
+            divider1.Location = new Point(190, 0);
+            divider1.Name = "divider1";
+            divider1.OrientationMargin = 0F;
+            divider1.Size = new Size(10, 476);
+            divider1.TabIndex = 6;
+            divider1.Text = "";
+            divider1.Vertical = true;
+            // 
+            // menu1
+            // 
+            menu1.BackColor = SystemColors.Window;
+            menu1.Dock = DockStyle.Left;
+            menuItem1.IconSvg = resources.GetString("menuItem1.IconSvg");
+            menuItem2.IconSvg = resources.GetString("menuItem2.IconSvg");
+            menuItem2.Text = "用户管理";
+            menuItem3.IconSvg = resources.GetString("menuItem3.IconSvg");
+            menuItem3.Text = "角色管理";
+            menuItem4.IconSvg = resources.GetString("menuItem4.IconSvg");
+            menuItem4.Text = "权限管理";
+            menuItem1.Sub.Add(menuItem2);
+            menuItem1.Sub.Add(menuItem3);
+            menuItem1.Sub.Add(menuItem4);
+            menuItem1.Text = "系统后台";
+            menu1.Items.Add(menuItem1);
+            menu1.Location = new Point(0, 0);
+            menu1.Name = "menu1";
+            menu1.Size = new Size(190, 476);
+            menu1.TabIndex = 0;
+            menu1.Text = "menu1";
+            // 
+            // RBACWindow
+            // 
+            AutoScaleDimensions = new SizeF(7F, 17F);
+            AutoScaleMode = AutoScaleMode.Font;
+            ClientSize = new Size(904, 516);
+            Controls.Add(panel1);
+            Controls.Add(titlebar);
+            Name = "RBACWindow";
+            StartPosition = FormStartPosition.CenterScreen;
+            Text = "RBACWindows";
+            WindowState = FormWindowState.Maximized;
+            titlebar.ResumeLayout(false);
+            panel1.ResumeLayout(false);
+            ResumeLayout(false);
+        }
+
+        #endregion
+
+        private AntdUI.PageHeader titlebar;
+        private AntdUI.Label lbName;
+        private AntdUI.Panel panel1;
+        private AntdUI.Tabs tabs1;
+        private AntdUI.Divider divider1;
+        private AntdUI.Menu menu1;
+    }
+}
\ No newline at end of file
diff --git a/DHSoftware/Views/RBACWindow.cs b/DHSoftware/Views/RBACWindow.cs
new file mode 100644
index 0000000..b9cb76e
--- /dev/null
+++ b/DHSoftware/Views/RBACWindow.cs
@@ -0,0 +1,200 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Data;
+using System.Drawing;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using AntdUI;
+using DH.Commons.Base;
+using DH.Commons.Models;
+using DHSoftware.Views;
+
+namespace DHSoftware
+{
+    public partial class RBACWindow : Window
+    {
+        public RBACWindow()
+        {
+            InitializeComponent();
+            menu1.SelectChanged += Menu1_SelectChanged;
+        }
+
+        /// <summary>
+        /// 窗体对象实例
+        /// </summary>
+        private static RBACWindow _instance;
+
+        internal static RBACWindow Instance
+        {
+            get
+            {
+                if (_instance == null || _instance.IsDisposed)
+                    _instance = new RBACWindow();
+                return _instance;
+            }
+        }
+        private void Menu1_SelectChanged(object sender, MenuSelectEventArgs e)
+        {
+            MenuItem clickedItem = e.Value;
+
+            if (clickedItem != null)
+            {
+                if (clickedItem.PARENTITEM == null)
+                {
+                    return;
+                }
+
+                switch (clickedItem.PARENTITEM.Text)
+                {
+                    case "用户管理":
+                        foreach (var tab in tabs1.Pages)
+                        {
+                            if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
+                            {
+                                tabs1.SelectedTab = existingTab; 
+                                return;
+                            }
+                        }
+
+                        CameraBase? CameraBase = ConfigModel.CameraBaseList.Where(c => c.CameraName == clickedItem.Text).FirstOrDefault();
+                        if (CameraBase == null)
+                        {
+                            CameraBase = new CameraBase();
+                        }
+                        UserControl control = null;
+                        control = new CameraControl(this, CameraBase);
+                        if (control != null)
+                        {
+                            //容器添加控件,需要调整dpi
+                            control.Dock = DockStyle.Fill;
+                            AutoDpi(control);
+                            AntdUI.TabPage tabPage = new AntdUI.TabPage()
+                            {
+                                Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
+                                ReadOnly = false,
+                            };
+                            tabPage.Controls.Add(control);
+                            tabs1.Pages.Add(tabPage);
+
+                            tabs1.SelectedTab = tabPage;
+               
+                        }
+                        break;
+
+                    case "角色管理":
+                        // 检查是否已存在同名 TabPage
+                        foreach (var tab in tabs1.Pages)
+                        {
+                            if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
+                            {
+                              
+                                tabs1.SelectedTab = existingTab; 
+                                return;
+                            }
+                        }
+                        DetectionConfig? detectionConfig = ConfigModel.DetectionList.Where(c => c.Name == clickedItem.Text).FirstOrDefault();
+                        if (detectionConfig == null)
+                        {
+                            detectionConfig = new DetectionConfig();
+                        }
+                        UserControl control1 = null;
+                        control1 = new DetectControl(this, detectionConfig);
+                        if (control1 != null)
+                        {
+                            //容器添加控件,需要调整dpi
+                            control1.Dock = DockStyle.Fill;
+                            AutoDpi(control1);
+                            AntdUI.TabPage tabPage = new AntdUI.TabPage()
+                            {
+                                Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
+                                ReadOnly = false,
+                            };
+                            tabPage.Controls.Add(control1);
+                            tabs1.Pages.Add(tabPage);
+                            tabs1.SelectedTab = tabPage;
+ 
+                        }
+                        break;
+
+                    case "权限管理":
+                        foreach (var tab in tabs1.Pages)
+                        {
+                            if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
+                            {
+                                tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
+                               
+                                return;
+                            }
+                        }
+                        //先获取是否存在该名称的配置
+                        //如果没有新建项
+                        PLCBase? pLCBase = ConfigModel.PLCBaseList.Where(c => c.PLCName == clickedItem.Text).FirstOrDefault();
+                        if (pLCBase == null)
+                        {
+                            pLCBase = new PLCBase();
+                        }
+                        UserControl control2 = null;
+                        control = new MotionControl(this, pLCBase);
+                        if (control != null)
+                        {
+                            //容器添加控件,需要调整dpi
+                            control.Dock = DockStyle.Fill;
+                            AutoDpi(control);
+                            AntdUI.TabPage tabPage = new AntdUI.TabPage()
+                            {
+                                Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
+                                ReadOnly = false,
+                            };
+                            tabPage.Controls.Add(control);
+                            tabs1.Pages.Add(tabPage);
+                            tabs1.SelectedTab = tabPage;
+                        }
+                        break;
+                    case "其他设置":
+                        foreach (var tab in tabs1.Pages)
+                        {
+                            if (tab is AntdUI.TabPage existingTab && existingTab.Text == $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}")
+                            {
+                                tabs1.SelectedTab = existingTab; // 直接跳转到已存在的 TabPage
+                                return;
+                            }
+                        }
+
+                        if (clickedItem.Text == "全局设置")
+                        {
+                            //先获取是否存在该名称的配置
+                            //如果没有新建项
+                            GlobalConfig? global = ConfigModel
+                            .GlobalList.FirstOrDefault();
+                            if (global == null)
+                            {
+                                global = new GlobalConfig();
+                            }
+
+                            UserControl control3 = null;
+                            control = new GlobalControl(this, global);
+                            if (control != null)
+                            {
+                                //容器添加控件,需要调整dpi
+                                control.Dock = DockStyle.Fill;
+                                AutoDpi(control);
+                                AntdUI.TabPage tabPage = new AntdUI.TabPage()
+                                {
+                                    Text = $"{clickedItem.PARENTITEM.Text}-{clickedItem.Text}",
+                                    ReadOnly = false,
+                                };
+                                tabPage.Controls.Add(control);
+                                tabs1.Pages.Add(tabPage);
+                                tabs1.SelectedTab = tabPage;
+
+                            }
+                        }
+                        break;
+                }
+            }
+        }
+    }
+}
diff --git a/DHSoftware/Views/PreTreatUserControl.resx b/DHSoftware/Views/RBACWindow.resx
similarity index 55%
rename from DHSoftware/Views/PreTreatUserControl.resx
rename to DHSoftware/Views/RBACWindow.resx
index 8b2ff64..c68efef 100644
--- a/DHSoftware/Views/PreTreatUserControl.resx
+++ b/DHSoftware/Views/RBACWindow.resx
@@ -117,4 +117,16 @@
   <resheader name="writer">
     <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
   </resheader>
+  <data name="menuItem1.IconSvg" xml:space="preserve">
+    <value>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024"&gt;&lt;path d="M490.4 491.7h-195.8c-108 0-195.8-87.8-195.8-195.8 0-108 87.8-195.8 195.8-195.8s195.8 87.8 195.8 195.8v195.8zm-195.8-337.1c-77.9 0-141.3 63.4-141.3 141.3s63.4 141.3 141.3 141.3h141.3v-141.3c0-77.9-63.4-141.3-141.3-141.3zm434.6 337.1h-195.8v-195.8c0-108 87.8-195.8 195.8-195.8s195.8 87.8 195.8 195.8c0 108-87.8 195.8-195.8 195.8zm-141.3-54.5h141.3c77.9 0 141.3-63.4 141.3-141.3S807.3 200 729.4 200 588.1 263.4 588.1 341.3v141.3zM294.6 923.9c-108 0-195.8-87.8-195.8-195.8s87.8-195.8 195.8-195.8h195.8v195.8c0 108-87.8 195.8-195.8 195.8zm0-337.1c-77.9 0-141.3 63.4-141.3 141.3s63.4 141.3 141.3 141.3S435.9 806 435.9 728.1V586.8H294.6zm434.8 337.1c-108 0-195.8-87.8-195.8-195.8V532.3h195.8c108 0 195.8 87.8 195.8 195.8s-87.8 195.8-195.8 195.8zM588.1 586.8v141.3c0 77.9 63.4 141.3 141.3 141.3S870.7 806 870.7 728.1 807.3 586.8 729.4 586.8H588.1z"/&gt;&lt;/svg&gt;</value>
+  </data>
+  <data name="menuItem2.IconSvg" xml:space="preserve">
+    <value>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="#333333"&gt;&lt;path d="M665.4 532.8c-20.9-10.8-42.9-19.6-65.8-26.4 85.1-44.7 139.5-140 122.7-246C706.1 158 620.8 77 517.8 65.5 376.1 49.6 256 160 256 298.7c0 90.3 51.1 168.6 126 207.9-159.1 46.9-275.3 193.9-275.3 368.1 0 23.3 2.3 46 6.3 68.2 1.8 10 10.8 17.1 21 17.1h0.1c13.3 0 23.3-12 20.9-25.1-10.8-58-7.4-120.9 21.1-187.2 50.3-117 158.4-202.2 285.3-213.1 70.5-6.1 136.6 10.1 193.3 41.4 23.7 0 31.9-32.3 10.7-43.2zM458.1 488c-79.5-13-143.6-77-156.7-156.7C279.7 200 392 87.7 523.2 109.4c79.5 13 143.6 77 156.7 156.7 21.8 131-90.6 243-221.8 221.9zM640 704h256c11.8 0 21.3-9.6 21.3-21.3 0-11.8-9.6-21.3-21.3-21.3H640c-11.8 0-21.3 9.6-21.3 21.3 0 11.7 9.5 21.3 21.3 21.3zm0 106.7h256c11.8 0 21.3-9.6 21.3-21.3 0-11.8-9.6-21.3-21.3-21.3H640c-11.8 0-21.3 9.6-21.3 21.3 0 11.7 9.5 21.3 21.3 21.3zm0 106.6h256c11.8 0 21.3-9.6 21.3-21.3 0-11.8-9.6-21.3-21.3-21.3H640c-11.8 0-21.3 9.6-21.3 21.3 0 11.8 9.5 21.3 21.3 21.3z"/&gt;&lt;/svg&gt;</value>
+  </data>
+  <data name="menuItem3.IconSvg" xml:space="preserve">
+    <value>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="#000"&gt;&lt;path d="M844.5 682.7H554.7c-11.7 0-21.3 9.6-21.3 21.3 0 11.7 9.6 21.3 21.3 21.3H896c2.8 0 5.6-0.6 8.2-1.7 0.5-0.2 0.9-0.7 1.4-0.9 1.9-1 3.8-2 5.4-3.6 1.6-1.6 2.6-3.5 3.6-5.4 0.3-0.5 0.7-0.9 0.9-1.4 1.1-2.6 1.7-5.4 1.7-8.2 0-0.2-0.1-0.3-0.1-0.5-0.1-2.6-0.5-5.2-1.6-7.7-0.6-1.5-1.7-2.7-2.7-4-0.7-0.9-1.1-2-1.9-2.9L805.5 583.3c-8.3-8.3-21.9-8.3-30.2 0s-8.3 21.9 0 30.2l69.2 69.2zm-99.3-410.8C733.3 164.6 646.1 77.3 538.7 65.5 397.1 49.9 277.3 160.3 277.3 298.7c0 90 50.7 168 125 207.4C231.9 553.9 106.7 710.2 106.7 896c0 15.5 1.1 30.7 2.9 45.7 1.3 10.5 10.5 18.3 21.1 18.3 12.5 0 22.6-10.8 21.1-23.3-1.6-13.4-2.5-26.9-2.5-40.7 0-200.3 162.4-362.7 362.7-362.7 138.4 0 248.8-119.8 233.2-261.4zM479.5 488c-79.6-13.1-143.8-77.2-156.8-156.8-21.6-131.4 90.4-243.4 221.8-221.8 79.6 13.1 143.8 77.2 156.8 156.8 21.6 131.3-90.4 243.4-221.8 221.8zm416.5 323.8H554.7c-2.8 0-5.6 0.6-8.2 1.7-0.5 0.2-0.9 0.7-1.4 0.9-1.9 1-3.8 2-5.4 3.6-1.6 1.6-2.6 3.5-3.6 5.5-0.3 0.5-0.7 0.9-0.9 1.4-1.1 2.6-1.7 5.4-1.7 8.2 0 0.2 0.1 0.3 0.1 0.5 0.1 2.6 0.5 5.2 1.6 7.6 0.6 1.5 1.7 2.7 2.7 4 0.7 0.9 1.1 2 1.9 2.9l105.6 105.6c8.3 8.3 21.9 8.3 30.2 0s8.3-21.9 0-30.2l-69.2-69.1H896c11.7 0 21.3-9.6 21.3-21.3s-9.6-21.3-21.3-21.3z"/&gt;&lt;/svg&gt;</value>
+  </data>
+  <data name="menuItem4.IconSvg" xml:space="preserve">
+    <value>&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1024 1024" fill="#333333"&gt;&lt;path d="M665.4 532.8c-20.9-10.8-42.9-19.6-65.8-26.4 85.1-44.7 139.5-140 122.7-246C706.1 158 620.8 77 517.8 65.5 376.1 49.6 256 160 256 298.7c0 90.3 51.1 168.6 126 207.9-159.1 46.9-275.3 193.9-275.3 368.1 0 23.3 2.3 46 6.3 68.2 1.8 10 10.8 17.1 21 17.1h0.1c13.3 0 23.3-12 20.9-25.1-10.8-58-7.4-120.9 21.1-187.2 50.3-117 158.4-202.2 285.3-213.1 70.5-6.1 136.6 10.1 193.3 41.4 23.7 0 31.9-32.3 10.7-43.2zM458.1 488c-79.5-13-143.6-77-156.7-156.7C279.7 200 392 87.7 523.2 109.4c79.5 13 143.6 77 156.7 156.7 21.8 131-90.6 243-221.8 221.9zM896 768h-42.7v-42.7c0-58.9-47.8-106.7-106.7-106.7S640 666.4 640 725.3V768h-42.7c-11.8 0-21.3 9.6-21.3 21.3v149.3c0 11.8 9.6 21.3 21.3 21.3H896c11.8 0 21.3-9.6 21.3-21.3V789.3c0-11.7-9.5-21.3-21.3-21.3zm-213.3-42.7c0-35.3 28.7-64 64-64s64 28.7 64 64V768h-128v-42.7zm192 192h-256V810.7h256v106.6z"/&gt;&lt;/svg&gt;</value>
+  </data>
 </root>
\ No newline at end of file
diff --git a/DHSoftware/Views/AddSchemeControl.Designer.cs b/DHSoftware/Views/Scheme/AddSchemeControl.Designer.cs
similarity index 100%
rename from DHSoftware/Views/AddSchemeControl.Designer.cs
rename to DHSoftware/Views/Scheme/AddSchemeControl.Designer.cs
diff --git a/DHSoftware/Views/AddSchemeControl.cs b/DHSoftware/Views/Scheme/AddSchemeControl.cs
similarity index 100%
rename from DHSoftware/Views/AddSchemeControl.cs
rename to DHSoftware/Views/Scheme/AddSchemeControl.cs
diff --git a/DHSoftware/Views/AddSchemeControl.resx b/DHSoftware/Views/Scheme/AddSchemeControl.resx
similarity index 100%
rename from DHSoftware/Views/AddSchemeControl.resx
rename to DHSoftware/Views/Scheme/AddSchemeControl.resx
diff --git a/DHSoftware/Views/AddCameraControl.Designer.cs b/DHSoftware/Views/Setting/AddCameraControl.Designer.cs
similarity index 100%
rename from DHSoftware/Views/AddCameraControl.Designer.cs
rename to DHSoftware/Views/Setting/AddCameraControl.Designer.cs
diff --git a/DHSoftware/Views/AddCameraControl.cs b/DHSoftware/Views/Setting/AddCameraControl.cs
similarity index 100%
rename from DHSoftware/Views/AddCameraControl.cs
rename to DHSoftware/Views/Setting/AddCameraControl.cs
diff --git a/DHSoftware/Views/AddCameraControl.resx b/DHSoftware/Views/Setting/AddCameraControl.resx
similarity index 100%
rename from DHSoftware/Views/AddCameraControl.resx
rename to DHSoftware/Views/Setting/AddCameraControl.resx
diff --git a/DHSoftware/Views/AddCubicleControl.Designer.cs b/DHSoftware/Views/Setting/AddCubicleControl.Designer.cs
similarity index 100%
rename from DHSoftware/Views/AddCubicleControl.Designer.cs
rename to DHSoftware/Views/Setting/AddCubicleControl.Designer.cs
diff --git a/DHSoftware/Views/AddCubicleControl.cs b/DHSoftware/Views/Setting/AddCubicleControl.cs
similarity index 100%
rename from DHSoftware/Views/AddCubicleControl.cs
rename to DHSoftware/Views/Setting/AddCubicleControl.cs
diff --git a/DHSoftware/Views/AddCubicleControl.resx b/DHSoftware/Views/Setting/AddCubicleControl.resx
similarity index 100%
rename from DHSoftware/Views/AddCubicleControl.resx
rename to DHSoftware/Views/Setting/AddCubicleControl.resx
diff --git a/DHSoftware/Views/AddMotionControl.Designer.cs b/DHSoftware/Views/Setting/AddMotionControl.Designer.cs
similarity index 100%
rename from DHSoftware/Views/AddMotionControl.Designer.cs
rename to DHSoftware/Views/Setting/AddMotionControl.Designer.cs
diff --git a/DHSoftware/Views/AddMotionControl.cs b/DHSoftware/Views/Setting/AddMotionControl.cs
similarity index 100%
rename from DHSoftware/Views/AddMotionControl.cs
rename to DHSoftware/Views/Setting/AddMotionControl.cs
diff --git a/DHSoftware/Views/AddMotionControl.resx b/DHSoftware/Views/Setting/AddMotionControl.resx
similarity index 100%
rename from DHSoftware/Views/AddMotionControl.resx
rename to DHSoftware/Views/Setting/AddMotionControl.resx
diff --git a/DHSoftware/Views/CameraControl.Designer.cs b/DHSoftware/Views/Setting/CameraControl.Designer.cs
similarity index 100%
rename from DHSoftware/Views/CameraControl.Designer.cs
rename to DHSoftware/Views/Setting/CameraControl.Designer.cs
diff --git a/DHSoftware/Views/CameraControl.cs b/DHSoftware/Views/Setting/CameraControl.cs
similarity index 100%
rename from DHSoftware/Views/CameraControl.cs
rename to DHSoftware/Views/Setting/CameraControl.cs
diff --git a/DHSoftware/Views/CameraControl.resx b/DHSoftware/Views/Setting/CameraControl.resx
similarity index 100%
rename from DHSoftware/Views/CameraControl.resx
rename to DHSoftware/Views/Setting/CameraControl.resx
diff --git a/DHSoftware/Views/CorrelatedCameraEdit.Designer.cs b/DHSoftware/Views/Setting/CorrelatedCameraEdit.Designer.cs
similarity index 100%
rename from DHSoftware/Views/CorrelatedCameraEdit.Designer.cs
rename to DHSoftware/Views/Setting/CorrelatedCameraEdit.Designer.cs
diff --git a/DHSoftware/Views/CorrelatedCameraEdit.cs b/DHSoftware/Views/Setting/CorrelatedCameraEdit.cs
similarity index 100%
rename from DHSoftware/Views/CorrelatedCameraEdit.cs
rename to DHSoftware/Views/Setting/CorrelatedCameraEdit.cs
diff --git a/DHSoftware/Views/CorrelatedCameraEdit.resx b/DHSoftware/Views/Setting/CorrelatedCameraEdit.resx
similarity index 100%
rename from DHSoftware/Views/CorrelatedCameraEdit.resx
rename to DHSoftware/Views/Setting/CorrelatedCameraEdit.resx
diff --git a/DHSoftware/Views/DefectRowEdit.Designer.cs b/DHSoftware/Views/Setting/DefectRowEdit.Designer.cs
similarity index 100%
rename from DHSoftware/Views/DefectRowEdit.Designer.cs
rename to DHSoftware/Views/Setting/DefectRowEdit.Designer.cs
diff --git a/DHSoftware/Views/DefectRowEdit.cs b/DHSoftware/Views/Setting/DefectRowEdit.cs
similarity index 97%
rename from DHSoftware/Views/DefectRowEdit.cs
rename to DHSoftware/Views/Setting/DefectRowEdit.cs
index 8ea5d9a..c0f9711 100644
--- a/DHSoftware/Views/DefectRowEdit.cs
+++ b/DHSoftware/Views/Setting/DefectRowEdit.cs
@@ -8,7 +8,7 @@ namespace AntdUIDemo.Views.Table
 {
     public partial class DefectRowEdit : UserControl
     {
-        DetectConfigControl detectConfigControl;
+    
         private AntdUI.Window window;
         private DefectRow user;
         public bool submit;
diff --git a/DHSoftware/Views/DefectRowEdit.resx b/DHSoftware/Views/Setting/DefectRowEdit.resx
similarity index 100%
rename from DHSoftware/Views/DefectRowEdit.resx
rename to DHSoftware/Views/Setting/DefectRowEdit.resx
diff --git a/DHSoftware/Views/DetectControl.Designer.cs b/DHSoftware/Views/Setting/DetectControl.Designer.cs
similarity index 100%
rename from DHSoftware/Views/DetectControl.Designer.cs
rename to DHSoftware/Views/Setting/DetectControl.Designer.cs
diff --git a/DHSoftware/Views/DetectControl.cs b/DHSoftware/Views/Setting/DetectControl.cs
similarity index 100%
rename from DHSoftware/Views/DetectControl.cs
rename to DHSoftware/Views/Setting/DetectControl.cs
diff --git a/DHSoftware/Views/DetectControl.resx b/DHSoftware/Views/Setting/DetectControl.resx
similarity index 100%
rename from DHSoftware/Views/DetectControl.resx
rename to DHSoftware/Views/Setting/DetectControl.resx
diff --git a/DHSoftware/Views/DetectionLableEdit.Designer.cs b/DHSoftware/Views/Setting/DetectionLableEdit.Designer.cs
similarity index 100%
rename from DHSoftware/Views/DetectionLableEdit.Designer.cs
rename to DHSoftware/Views/Setting/DetectionLableEdit.Designer.cs
diff --git a/DHSoftware/Views/DetectionLableEdit.cs b/DHSoftware/Views/Setting/DetectionLableEdit.cs
similarity index 100%
rename from DHSoftware/Views/DetectionLableEdit.cs
rename to DHSoftware/Views/Setting/DetectionLableEdit.cs
diff --git a/DHSoftware/Views/DetectionLableEdit.resx b/DHSoftware/Views/Setting/DetectionLableEdit.resx
similarity index 100%
rename from DHSoftware/Views/DetectionLableEdit.resx
rename to DHSoftware/Views/Setting/DetectionLableEdit.resx
diff --git a/DHSoftware/Views/GlobalControl.Designer.cs b/DHSoftware/Views/Setting/GlobalControl.Designer.cs
similarity index 100%
rename from DHSoftware/Views/GlobalControl.Designer.cs
rename to DHSoftware/Views/Setting/GlobalControl.Designer.cs
diff --git a/DHSoftware/Views/GlobalControl.cs b/DHSoftware/Views/Setting/GlobalControl.cs
similarity index 100%
rename from DHSoftware/Views/GlobalControl.cs
rename to DHSoftware/Views/Setting/GlobalControl.cs
diff --git a/DHSoftware/Views/GlobalControl.resx b/DHSoftware/Views/Setting/GlobalControl.resx
similarity index 100%
rename from DHSoftware/Views/GlobalControl.resx
rename to DHSoftware/Views/Setting/GlobalControl.resx
diff --git a/DHSoftware/Views/MotionControl.Designer.cs b/DHSoftware/Views/Setting/MotionControl.Designer.cs
similarity index 100%
rename from DHSoftware/Views/MotionControl.Designer.cs
rename to DHSoftware/Views/Setting/MotionControl.Designer.cs
diff --git a/DHSoftware/Views/MotionControl.cs b/DHSoftware/Views/Setting/MotionControl.cs
similarity index 100%
rename from DHSoftware/Views/MotionControl.cs
rename to DHSoftware/Views/Setting/MotionControl.cs
diff --git a/DHSoftware/Views/MotionControl.resx b/DHSoftware/Views/Setting/MotionControl.resx
similarity index 100%
rename from DHSoftware/Views/MotionControl.resx
rename to DHSoftware/Views/Setting/MotionControl.resx
diff --git a/DHSoftware/Views/MotionEdit.Designer.cs b/DHSoftware/Views/Setting/MotionEdit.Designer.cs
similarity index 100%
rename from DHSoftware/Views/MotionEdit.Designer.cs
rename to DHSoftware/Views/Setting/MotionEdit.Designer.cs
diff --git a/DHSoftware/Views/MotionEdit.cs b/DHSoftware/Views/Setting/MotionEdit.cs
similarity index 100%
rename from DHSoftware/Views/MotionEdit.cs
rename to DHSoftware/Views/Setting/MotionEdit.cs
diff --git a/DHSoftware/Views/MotionEdit.resx b/DHSoftware/Views/Setting/MotionEdit.resx
similarity index 100%
rename from DHSoftware/Views/MotionEdit.resx
rename to DHSoftware/Views/Setting/MotionEdit.resx
diff --git a/DHSoftware/Views/MotionProcessEdit.Designer.cs b/DHSoftware/Views/Setting/MotionProcessEdit.Designer.cs
similarity index 100%
rename from DHSoftware/Views/MotionProcessEdit.Designer.cs
rename to DHSoftware/Views/Setting/MotionProcessEdit.Designer.cs
diff --git a/DHSoftware/Views/MotionProcessEdit.cs b/DHSoftware/Views/Setting/MotionProcessEdit.cs
similarity index 100%
rename from DHSoftware/Views/MotionProcessEdit.cs
rename to DHSoftware/Views/Setting/MotionProcessEdit.cs
diff --git a/DHSoftware/Views/MotionProcessEdit.resx b/DHSoftware/Views/Setting/MotionProcessEdit.resx
similarity index 100%
rename from DHSoftware/Views/MotionProcessEdit.resx
rename to DHSoftware/Views/Setting/MotionProcessEdit.resx
diff --git a/DHSoftware/Views/PreTreatEdit.Designer.cs b/DHSoftware/Views/Setting/PreTreatEdit.Designer.cs
similarity index 100%
rename from DHSoftware/Views/PreTreatEdit.Designer.cs
rename to DHSoftware/Views/Setting/PreTreatEdit.Designer.cs
diff --git a/DHSoftware/Views/PreTreatEdit.cs b/DHSoftware/Views/Setting/PreTreatEdit.cs
similarity index 100%
rename from DHSoftware/Views/PreTreatEdit.cs
rename to DHSoftware/Views/Setting/PreTreatEdit.cs
diff --git a/DHSoftware/Views/PreTreatEdit.resx b/DHSoftware/Views/Setting/PreTreatEdit.resx
similarity index 100%
rename from DHSoftware/Views/PreTreatEdit.resx
rename to DHSoftware/Views/Setting/PreTreatEdit.resx
diff --git a/DHSoftware/Views/SizeLabelEdit.Designer.cs b/DHSoftware/Views/Setting/SizeLabelEdit.Designer.cs
similarity index 100%
rename from DHSoftware/Views/SizeLabelEdit.Designer.cs
rename to DHSoftware/Views/Setting/SizeLabelEdit.Designer.cs
diff --git a/DHSoftware/Views/SizeLabelEdit.cs b/DHSoftware/Views/Setting/SizeLabelEdit.cs
similarity index 100%
rename from DHSoftware/Views/SizeLabelEdit.cs
rename to DHSoftware/Views/Setting/SizeLabelEdit.cs
diff --git a/DHSoftware/Views/SizeLabelEdit.resx b/DHSoftware/Views/Setting/SizeLabelEdit.resx
similarity index 100%
rename from DHSoftware/Views/SizeLabelEdit.resx
rename to DHSoftware/Views/Setting/SizeLabelEdit.resx
diff --git a/DHSoftware/Views/SizeConfigControl.Designer.cs b/DHSoftware/Views/SizeConfigControl.Designer.cs
deleted file mode 100644
index 5f94d86..0000000
--- a/DHSoftware/Views/SizeConfigControl.Designer.cs
+++ /dev/null
@@ -1,104 +0,0 @@
-namespace DHSoftware.Views
-{
-    partial class SizeConfigControl
-    {
-        /// <summary> 
-        /// 必需的设计器变量。
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 清理所有正在使用的资源。
-        /// </summary>
-        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 组件设计器生成的代码
-
-        /// <summary> 
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            panel2 = new Panel();
-            label2 = new Label();
-            btnDelSizeParm = new AntdUI.Button();
-            tbSizeParm = new AntdUI.Table();
-            btnAddSizeParm = new AntdUI.Button();
-            panel2.SuspendLayout();
-            SuspendLayout();
-            // 
-            // panel2
-            // 
-            panel2.Controls.Add(label2);
-            panel2.Controls.Add(btnDelSizeParm);
-            panel2.Controls.Add(tbSizeParm);
-            panel2.Controls.Add(btnAddSizeParm);
-            panel2.Location = new Point(3, 3);
-            panel2.Name = "panel2";
-            panel2.Size = new Size(779, 286);
-            panel2.TabIndex = 36;
-            // 
-            // label2
-            // 
-            label2.AutoSize = true;
-            label2.Location = new Point(3, 5);
-            label2.Name = "label2";
-            label2.Size = new Size(56, 17);
-            label2.TabIndex = 25;
-            label2.Text = "尺寸参数";
-            // 
-            // btnDelSizeParm
-            // 
-            btnDelSizeParm.Location = new Point(93, 25);
-            btnDelSizeParm.Name = "btnDelSizeParm";
-            btnDelSizeParm.Size = new Size(84, 34);
-            btnDelSizeParm.TabIndex = 24;
-            btnDelSizeParm.Text = "删除";
-            // 
-            // tbSizeParm
-            // 
-            tbSizeParm.Location = new Point(3, 65);
-            tbSizeParm.Name = "tbSizeParm";
-            tbSizeParm.Size = new Size(773, 218);
-            tbSizeParm.TabIndex = 22;
-            tbSizeParm.Text = "table1";
-            // 
-            // btnAddSizeParm
-            // 
-            btnAddSizeParm.Location = new Point(3, 25);
-            btnAddSizeParm.Name = "btnAddSizeParm";
-            btnAddSizeParm.Size = new Size(84, 34);
-            btnAddSizeParm.TabIndex = 23;
-            btnAddSizeParm.Text = "新增";
-            // 
-            // SizeConfigControl
-            // 
-            AutoScaleDimensions = new SizeF(7F, 17F);
-            AutoScaleMode = AutoScaleMode.Font;
-            BorderStyle = BorderStyle.FixedSingle;
-            Controls.Add(panel2);
-            Name = "SizeConfigControl";
-            Size = new Size(783, 290);
-            panel2.ResumeLayout(false);
-            panel2.PerformLayout();
-            ResumeLayout(false);
-        }
-
-        #endregion
-
-        private Panel panel2;
-        private Label label2;
-        private AntdUI.Button btnDelSizeParm;
-        private AntdUI.Table tbSizeParm;
-        private AntdUI.Button btnAddSizeParm;
-    }
-}
diff --git a/DHSoftware/Views/SizeConfigControl.cs b/DHSoftware/Views/SizeConfigControl.cs
deleted file mode 100644
index a720330..0000000
--- a/DHSoftware/Views/SizeConfigControl.cs
+++ /dev/null
@@ -1,20 +0,0 @@
-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 DHSoftware.Views
-{
-    public partial class SizeConfigControl : UserControl
-    {
-        public SizeConfigControl()
-        {
-            InitializeComponent();
-        }
-    }
-}
diff --git a/DHSoftware/Views/SizeConfigControl.resx b/DHSoftware/Views/SizeConfigControl.resx
deleted file mode 100644
index af32865..0000000
--- a/DHSoftware/Views/SizeConfigControl.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?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/DHSoftware/Views/UserConfigFrm.Designer.cs b/DHSoftware/Views/UserConfigFrm.Designer.cs
deleted file mode 100644
index c426746..0000000
--- a/DHSoftware/Views/UserConfigFrm.Designer.cs
+++ /dev/null
@@ -1,167 +0,0 @@
-namespace DHSoftware.Views
-{
-    partial class UserConfigFrm
-    {
-        /// <summary> 
-        /// 必需的设计器变量。
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 清理所有正在使用的资源。
-        /// </summary>
-        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 组件设计器生成的代码
-
-        /// <summary> 
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            AntdUI.Tabs.StyleCard styleCard1 = new AntdUI.Tabs.StyleCard();
-            pnlMenu = new AntdUI.Panel();
-            panel3 = new AntdUI.Panel();
-            btnSave = new AntdUI.Button();
-            btnAdd = new AntdUI.Button();
-            menu = new AntdUI.Menu();
-            panel2 = new AntdUI.Panel();
-            divider1 = new AntdUI.Divider();
-            tabs = new AntdUI.Tabs();
-            pnlMenu.SuspendLayout();
-            panel3.SuspendLayout();
-            panel2.SuspendLayout();
-            SuspendLayout();
-            // 
-            // pnlMenu
-            // 
-            pnlMenu.Controls.Add(panel3);
-            pnlMenu.Controls.Add(menu);
-            pnlMenu.Dock = DockStyle.Left;
-            pnlMenu.Location = new Point(0, 0);
-            pnlMenu.Name = "pnlMenu";
-            pnlMenu.Size = new Size(135, 542);
-            pnlMenu.TabIndex = 0;
-            pnlMenu.Text = "panel1";
-            // 
-            // panel3
-            // 
-            panel3.Back = SystemColors.Window;
-            panel3.BackColor = SystemColors.Window;
-            panel3.Controls.Add(btnSave);
-            panel3.Controls.Add(btnAdd);
-            panel3.Dock = DockStyle.Bottom;
-            panel3.Location = new Point(0, 516);
-            panel3.Name = "panel3";
-            panel3.Size = new Size(135, 26);
-            panel3.TabIndex = 2;
-            panel3.Text = "panel3";
-            // 
-            // btnSave
-            // 
-            btnSave.BackActive = SystemColors.Control;
-            btnSave.BackColor = SystemColors.Control;
-            btnSave.Dock = DockStyle.Left;
-            btnSave.ForeColor = Color.Black;
-            btnSave.IconRatio = 1F;
-            btnSave.IconSvg = "AppstoreAddOutlined";
-            btnSave.Location = new Point(35, 0);
-            btnSave.Name = "btnSave";
-            btnSave.Size = new Size(35, 26);
-            btnSave.TabIndex = 2;
-            // 
-            // btnAdd
-            // 
-            btnAdd.BackActive = SystemColors.Control;
-            btnAdd.BackColor = SystemColors.Control;
-            btnAdd.Dock = DockStyle.Left;
-            btnAdd.ForeColor = Color.Black;
-            btnAdd.IconRatio = 1F;
-            btnAdd.IconSvg = "AppstoreAddOutlined";
-            btnAdd.Location = new Point(0, 0);
-            btnAdd.Name = "btnAdd";
-            btnAdd.Size = new Size(35, 26);
-            btnAdd.TabIndex = 1;
-            btnAdd.Click += btnAdd_Click;
-            // 
-            // menu
-            // 
-            menu.Dock = DockStyle.Fill;
-            menu.Location = new Point(0, 0);
-            menu.Name = "menu";
-            menu.Size = new Size(135, 542);
-            menu.TabIndex = 0;
-            menu.Text = "menu1";
-            menu.SelectChanged += Menu_SelectChanged;
-            menu.MouseDown += Menu_MouseDown;
-            // 
-            // panel2
-            // 
-            panel2.Controls.Add(divider1);
-            panel2.Controls.Add(tabs);
-            panel2.Dock = DockStyle.Fill;
-            panel2.Location = new Point(135, 0);
-            panel2.Name = "panel2";
-            panel2.Size = new Size(745, 542);
-            panel2.TabIndex = 1;
-            panel2.Text = "panel2";
-            // 
-            // divider1
-            // 
-            divider1.BackColor = SystemColors.ActiveCaption;
-            divider1.Dock = DockStyle.Left;
-            divider1.Location = new Point(0, 0);
-            divider1.Name = "divider1";
-            divider1.Size = new Size(10, 542);
-            divider1.TabIndex = 1;
-            divider1.Text = "";
-            divider1.Vertical = true;
-            // 
-            // tabs
-            // 
-            tabs.Dock = DockStyle.Fill;
-            tabs.Location = new Point(0, 0);
-            tabs.Name = "tabs";
-            tabs.Size = new Size(745, 542);
-            tabs.Style = styleCard1;
-            tabs.TabIndex = 0;
-            tabs.Text = "tabs1";
-            tabs.Type = AntdUI.TabType.Card;
-            tabs.SelectedIndexChanged += tabs_SelectedIndexChanged;
-            // 
-            // UserConfigFrm
-            // 
-            AutoScaleDimensions = new SizeF(7F, 17F);
-            AutoScaleMode = AutoScaleMode.Font;
-            AutoSize = true;
-            Controls.Add(panel2);
-            Controls.Add(pnlMenu);
-            Name = "UserConfigFrm";
-            Size = new Size(880, 542);
-            pnlMenu.ResumeLayout(false);
-            panel3.ResumeLayout(false);
-            panel2.ResumeLayout(false);
-            ResumeLayout(false);
-        }
-
-        #endregion
-        private AntdUI.Tabs tabs;
-        private AntdUI.Panel pnlMenu;
-        private AntdUI.Panel panel2;
-        private AntdUI.Menu menu;
-        private AntdUI.Panel panel3;
-        private AntdUI.Button btnSave;
-        private AntdUI.Button btnAdd;
-        private AntdUI.Divider divider1;
-       // private AntdUI.Tabs tabs;
-    }
-}
diff --git a/DHSoftware/Views/UserConfigFrm.cs b/DHSoftware/Views/UserConfigFrm.cs
deleted file mode 100644
index dde1f82..0000000
--- a/DHSoftware/Views/UserConfigFrm.cs
+++ /dev/null
@@ -1,257 +0,0 @@
-using AntdUI;
-using AntdUIDemo.Models;
-using DH.Commons.Base;
-using DH.Devices.Vision;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using static System.Windows.Forms.VisualStyles.VisualStyleElement;
-using Window = AntdUI.Window;
-
-namespace DHSoftware.Views
-{
-    public partial class UserConfigFrm : UserControl
-    {
-        public List<CameraBase> cameras = new List<CameraBase>();
-        public List<DetectionConfig> detections = new List<DetectionConfig>();
-        private UserControl currControl;
-        private bool isUpdatingTabs = false;//用于阻止Tabs更新
-        public Window Window;
-        public UserConfigFrm()
-        {
-            InitializeComponent();
-
-            LoadMenu();
-            menu.Width = (int)(100 * Config.Dpi);
-
-        }
-        private void LoadMenu(string filter = "")
-        {
-            menu.Items.Clear();
-
-            string lang = AntdUI.Localization.CurrentLanguage;
-            var menuItems = DataUtil.Menu_decetion;
-            //var menuIcons = DataUtil.MenuIcons_zhcn;
-            //if (lang.StartsWith("en"))
-            //{
-            //    menuItems = DataUtil.MenuItems_enus;
-            //    menuIcons = DataUtil.MenuIcons_enus;
-            //}
-
-            foreach (var rootItem in menuItems)
-            {
-                var rootKey = rootItem.Key.ToLower();
-                var rootMenu = new AntdUI.MenuItem
-                {
-                    Text = rootItem.Key,
-                    //IconSvg = menuIcons.TryGetValue(rootItem.Key, out var icon) ? icon : "UnorderedListOutlined",
-                };
-                bool rootVisible = false; // 用于标记是否显示根节点
-
-                foreach (var item in rootItem.Value)
-                {
-                    var childText = item.Text.ToLower();
-
-                    // 如果子节点包含搜索文本
-                    if (childText.Contains(filter))
-                    {
-                        var menuItem = new AntdUI.MenuItem
-                        {
-                            Text = item.Text,
-                            IconSvg = item.IconSvg,
-                            Tag = item.Tag,
-                        };
-                        rootMenu.Sub.Add(menuItem);
-                        rootVisible = true; // 如果有子节点包含,则显示根节点
-                    }
-                }
-
-                // 如果根节点包含搜索文本,或有可见的子节点,则显示根节点
-                if (rootKey.Contains(filter) || rootVisible)
-                {
-                    menu.Items.Add(rootMenu);
-                }
-            }
-        }
-        private void SelectMenu()
-        {
-            if (isUpdatingTabs) return;
-            var text = tabs.SelectedTab?.Text; // 使用安全导航操作符,防止 SelectedTab 为 null
-            if (string.IsNullOrEmpty(text)) // 检查 text 是否为 null 或空
-            {
-                return; // 如果 text 为空,直接退出方法
-            }
-            //首页
-            if (text == AntdUI.Localization.Get("home", "主页"))
-            {
-                return;
-            }
-            var rootIndex = 0;
-            var subIndex = 0;
-            var menuItemsCopy = menu.Items.ToList(); // 创建副本
-            for (int i = 0; i < menuItemsCopy.Count; i++)
-            {
-                for (int j = 0; j < menuItemsCopy[i].Sub.Count; j++)
-                {
-                    if (menuItemsCopy[i].Sub[j].Tag.ToString() == text)
-                    {
-                        rootIndex = i;
-                        subIndex = j;
-                        break;
-                    }
-                }
-            }
-            menu.SelectIndex(rootIndex, subIndex, true);
-        }
-        private void Menu_MouseDown(object sender, MouseEventArgs e)
-        {
-            if (e.Button == MouseButtons.Right)
-            {
-                // 转换坐标到控件内部坐标系(考虑滚动条)
-                Point clickPoint = new Point(e.X, e.Y + menu.ScrollBar.Value);
-
-                // 递归查找命中的菜单项
-                MenuItem clickedItem = FindClickedItem(menu.Items, clickPoint);
-
-                if (clickedItem != null)
-                {
-                    // 显示节点名称弹窗
-                    //MessageBox.Show($"右键点击的节点: {clickedItem.Text}");
-
-                    var menulist = new AntdUI.IContextMenuStripItem[]
-                    {
-                    new AntdUI.ContextMenuStripItem("关联相机", "")
-                        {
-                            IconSvg = "VideoCameraAddOutlined"
-                        }
-                    };
-                    AntdUI.ContextMenuStrip.open(menu, it =>
-                    {
-                        if (it.Text == "关联相机")
-                        {
-                            //using (var dlg = new AddCameraWindow(cameras))
-                            //{
-                            //    if (dlg.ShowDialog() == DialogResult.OK)
-                            //    {
-                            //        var newItem = new MenuItem(dlg.CubicleName);
-                            //        newItem.IconSvg = "VideoCameraOutlined";
-                            //        //// 防止重复添加
-                            //        //if (!menu1.Items.Cast<MenuItem>().Any(m => m.Text == newItem.Text))
-                            //        //{
-                            //        clickedItem.Sub.Add(newItem);
-                            //        //}
-                            //        //else
-                            //        //{
-                            //        //    AntdUI.Notification.warn(this, "新增失败", $"{dlg.CubicleName}已存在!", autoClose: 3, align: TAlignFrom.TR);
-                            //        //}
-                            //    }
-                            //}
-                        }
-                    }, menulist);
-                }
-            }
-        }
-
-        private MenuItem FindClickedItem(MenuItemCollection items, Point clickPoint)
-        {
-            foreach (MenuItem item in items)
-            {
-                // 检查当前项是否可见且包含点击坐标
-                if (item.Visible && item.Rect.Contains(clickPoint))
-                {
-                    return item;
-                }
-
-
-            }
-            return null;
-        }
-
-        private void Menu_SelectChanged(object sender, MenuSelectEventArgs e)
-        {
-            string name = (string)e.Value.Tag;
-
-            //// 清理上一个浮动按钮窗体
-            //if (currControl is FloatButtonDemo floatButtonDemo)
-            //{
-            //    floatButtonDemo.CloseFloatButtonForm();
-            //}
-
-            // 检查是否已存在同名 TabPage
-            foreach (var tab in tabs.Pages)
-            {
-                if (tab is AntdUI.TabPage existingTab && existingTab.Text == name)
-                {
-                    isUpdatingTabs = true;
-                    tabs.SelectedTab = existingTab;
-                    isUpdatingTabs = false;
-                    currControl = existingTab.Controls.Count > 0 ? existingTab.Controls[0] as UserControl : null;
-                    return;
-                }
-            }
-            int width = tabs.Width;
-            int height = tabs.Height;
-            // 创建新 TabPage
-            UserDetetion control = new UserDetetion(Window,width, height);
-           // control._windows = Window;
-            switch (name)
-            {
-                case "工位1":
-                    //  control  = 
-                    break;
-            }
-
-            if (control != null)
-            {
-                control.Dock = DockStyle.Fill;
-                // AutoDpi(control); // 如果有 DPI 适配逻辑
-
-                var tabPage = new AntdUI.TabPage
-                {
-                    Dock = DockStyle.Fill,
-                    Text = name,
-                };
-                tabPage.Controls.Add(control);
-                tabs.Pages.Add(tabPage);
-
-                isUpdatingTabs = true;
-                tabs.SelectedTab = tabPage;
-                isUpdatingTabs = false;
-                currControl = control;
-            }
-        }
-
-
-        private void tabs_SelectedIndexChanged(object sender, IntEventArgs e)
-        {
-            SelectMenu();
-        }
-
-        private void btnAdd_Click(object sender, EventArgs e)
-        {
-            //using (var dlg = new AddCubicleWindow())
-            //{
-            //    if (dlg.ShowDialog() == DialogResult.OK)
-            //    {
-            //        var newItem = new MenuItem(dlg.CubicleName);
-            //        //newItem.IconSvg = "AppstoreOutlined";
-            //        // 防止重复添加
-            //        if (!menu.Items.Cast<MenuItem>().Any(m => m.Text == newItem.Text))
-            //        {
-            //            menu.Items.Add(newItem);
-            //        }
-            //        else
-            //        {
-            //           // AntdUI.Notification.warn(this, "新增工位失败", $"{dlg.CubicleName}已存在!", autoClose: 3, align: TAlignFrom.TR);
-            //        }
-            //    }
-            //}
-        }
-    }
-}
diff --git a/DHSoftware/Views/UserConfigFrm.resx b/DHSoftware/Views/UserConfigFrm.resx
deleted file mode 100644
index 8b2ff64..0000000
--- a/DHSoftware/Views/UserConfigFrm.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?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/DHSoftware/Views/UserDetetion.Designer.cs b/DHSoftware/Views/UserDetetion.Designer.cs
deleted file mode 100644
index 92b08bc..0000000
--- a/DHSoftware/Views/UserDetetion.Designer.cs
+++ /dev/null
@@ -1,70 +0,0 @@
-namespace DHSoftware.Views
-{
-    partial class UserDetetion
-    {
-        /// <summary> 
-        /// 必需的设计器变量。
-        /// </summary>
-        private System.ComponentModel.IContainer components = null;
-
-        /// <summary> 
-        /// 清理所有正在使用的资源。
-        /// </summary>
-        /// <param name="disposing">如果应释放托管资源,为 true;否则为 false。</param>
-        protected override void Dispose(bool disposing)
-        {
-            if (disposing && (components != null))
-            {
-                components.Dispose();
-            }
-            base.Dispose(disposing);
-        }
-
-        #region 组件设计器生成的代码
-
-        /// <summary> 
-        /// 设计器支持所需的方法 - 不要修改
-        /// 使用代码编辑器修改此方法的内容。
-        /// </summary>
-        private void InitializeComponent()
-        {
-            collapse1 = new AntdUI.Collapse();
-            panel1 = new Panel();
-            SuspendLayout();
-            // 
-            // collapse1
-            // 
-            collapse1.Dock = DockStyle.Fill;
-            collapse1.Location = new Point(0, 0);
-            collapse1.Name = "collapse1";
-            collapse1.Size = new Size(842, 568);
-            collapse1.TabIndex = 0;
-            collapse1.Text = "collapse1";
-            // 
-            // panel1
-            // 
-            panel1.BackColor = SystemColors.GradientActiveCaption;
-            panel1.Dock = DockStyle.Left;
-            panel1.Location = new Point(0, 0);
-            panel1.Name = "panel1";
-            panel1.Size = new Size(2, 568);
-            panel1.TabIndex = 0;
-            // 
-            // UserDetetion
-            // 
-            AutoScaleDimensions = new SizeF(7F, 17F);
-            AutoScaleMode = AutoScaleMode.Font;
-            Controls.Add(panel1);
-            Controls.Add(collapse1);
-            Name = "UserDetetion";
-            Size = new Size(842, 568);
-            ResumeLayout(false);
-        }
-
-        #endregion
-
-        private AntdUI.Collapse collapse1;
-        private Panel panel1;
-        //private AntdUI.Button button1;
-    }
-}
diff --git a/DHSoftware/Views/UserDetetion.cs b/DHSoftware/Views/UserDetetion.cs
deleted file mode 100644
index 4b6c3a2..0000000
--- a/DHSoftware/Views/UserDetetion.cs
+++ /dev/null
@@ -1,226 +0,0 @@
-using AntdUI;
-using System;
-using System.Collections.Generic;
-using System.ComponentModel;
-using System.Data;
-using System.Drawing;
-using System.Linq;
-using System.Text;
-using System.Threading.Tasks;
-using System.Windows.Forms;
-using Button = AntdUI.Button;
-
-namespace DHSoftware.Views
-{
-    public partial class UserDetetion : UserControl
-    {
-        private StackPanel panel, panel2, panel3, panel4;
-        public Window _windows;
-        //根据检测配置 将对应的相机配置、中处理预处理、尺寸测量
-        public UserDetetion(Window windows,int parentWidth, int parentHeight)
-        {
-            InitializeComponent();
-            _windows = windows;
-            AntdUI.CollapseItem group1 = new CollapseItem();
-            group1.Height = parentHeight / 4;
-            group1.Text = "相机配置";
-            AntdUI.CollapseItem group2 = new CollapseItem();
-            group2.Text = "预处理";
-            group2.Height = parentHeight/4;
-
-            AntdUI.CollapseItem group3 = new CollapseItem();
-            group3.Text = "中处理";
-            group3.Height = parentHeight - 300;
-
-            AntdUI.CollapseItem group4 = new CollapseItem();
-            group4.Text = "尺寸测量";
-            group4.Height = parentHeight / 4;
-
-
-            // 初始化内容面板
-            panel = CreateScrollPanel();
-            panel2 = CreateScrollPanel();
-            panel3 = CreateScrollPanel();
-            panel4 = CreateScrollPanel();
-
-            // 添加预处理控件
-            var ptuc = new PreTreatUserControl { AutoScroll = true, Dock = DockStyle.Top };
-            var detect = new DetectConfigControl { AutoScroll = true , Dock = DockStyle.Fill };
-            detect._window = this._windows;
-
-            // 添加尺寸测量控件
-            var sizeFrm = new SizeConfigControl();
-         
-
-            CameraConfigControl camConfigFrm = new CameraConfigControl();
-            camConfigFrm.Dock = DockStyle.Fill;
-
-
-
-            //PreTreatUserControl ptuc = new PreTreatUserControl();
-            //ptuc.AutoScroll = true;
-            //panel2.Controls.Add(ptuc);
-            //DetectConfigControl detect = new DetectConfigControl();
-            //// detect.Dock = DockStyle.Fill;
-            //detect.AutoScroll = true;
-            //panel2.Controls.Add(detect);
-
-
-            //SizeConfigControl Sizefc = new SizeConfigControl();
-            //Sizefc.Dock = DockStyle.Fill;
-            //panel3.Controls.Add(Sizefc);
-
-
-
-            Button btnAddCam = new Button
-            {
-                Width = 100,
-                Height = 30,
-                Text = "添加相机配置",
-                //Dock=DockStyle.Bottom
-            };
-            Button btnDelCam = new Button
-            {
-                Width = 100,
-                Height = 30,
-                Text = "删除相机配置",
-                // Dock = DockStyle.Bottom
-            };
-
-
-            Button btnAddModel = new Button
-            {
-                Width = 100,
-                Height = 30,
-                Text = "添加模型配置",
-                //Dock=DockStyle.Bottom
-            };
-            Button btnDelModel = new Button
-            {
-                Width = 100,
-                Height = 30,
-                Text = "删除模型配置",
-                // Dock = DockStyle.Bottom
-            };
-
-            FlowLayoutPanel flow = new FlowLayoutPanel();
-            flow.Dock = DockStyle.Bottom;
-            flow.Controls.Add(btnAddCam);
-            flow.Controls.Add(btnDelCam);
-
-            FlowLayoutPanel flowmodel = new FlowLayoutPanel();
-            flowmodel.Dock = DockStyle.Bottom;
-            flowmodel.Controls.Add(btnAddModel);
-            flowmodel.Controls.Add(btnDelModel);
-            btnAddCam.Click += btnAddCam_Click;
-            btnDelCam.Click += btnDelCam_Click;
-            btnAddModel.Click += btnAddModel_Click;
-            btnDelModel.Click += btnDelModel_Click;
-
-            panel.Controls.Add(flow);
-            panel.Controls.Add(camConfigFrm);
-          
-            panel2.Controls.Add(ptuc);
-            panel3.Controls.Add(flowmodel);
-            panel3.Controls.Add(detect);
-            panel4.Controls.Add(sizeFrm);
-            group1.Controls.Add(panel);
-            group2.Controls.Add(panel2);
-            group3.Controls.Add(panel3);
-            group4.Controls.Add(panel4);
-
-
-            //collapse1.Items.Add(group1);
-            collapse1.Items.Add(group1);
-            collapse1.Items.Add(group2);
-            collapse1.Items.Add(group3);
-            collapse1.Items.Add(group4);
-
-
-        }
-       
-        // 统一事件处理
-        private void CameraOperation_Click(object sender, EventArgs e)
-        {
-            if (sender is Button btn)
-            {
-                switch (btn.Tag?.ToString())
-                {
-                    case "Add":
-                        AddCameraConfig();
-                        break;
-                    case "Delete":
-                        DeleteCameraConfig();
-                        break;
-                }
-            }
-        }
-
-        // 实际业务方法
-        private void AddCameraConfig()
-        {
-            var newCamConfig = new CameraConfigControl { Dock = DockStyle.Top };
-            panel.Controls.Add(newCamConfig);
-            panel.ScrollControlIntoView(newCamConfig);
-        }
-
-        private void DeleteCameraConfig()
-        {
-            if (panel.Controls.Count > 1)
-            {
-                panel.Controls.RemoveAt(panel.Controls.Count - 2);
-            }
-        }
-        // 创建带滚动条的面板
-        private StackPanel CreateScrollPanel()
-        {
-            return new StackPanel
-            {
-                Dock = DockStyle.Fill,
-                Vertical = true,
-                AutoScroll = true,
-                Padding = new Padding(5)  // 添加内边距避免内容贴边
-            };
-        }
-
-        private void btnAddCam_Click(object sender, EventArgs e)
-        {
-            CameraConfigControl camConfigFrm2 = new CameraConfigControl();
-            camConfigFrm2.Dock = DockStyle.Fill;
-
-            panel.Controls.Add(camConfigFrm2);
-        }
-        private void btnDelCam_Click(object sender, EventArgs e)
-        {
-            // 遍历 panel 的 Controls,找到最后一个 CameraConfigControl 并移除
-            for (int i = panel.Controls.Count - 1; i >= 0; i--)
-            {
-                if (panel.Controls[i] is CameraConfigControl)
-                {
-                    panel.Controls.RemoveAt(i);
-                    break;  // 只删除一个
-                }
-            }
-        }
-        private void btnAddModel_Click(object sender, EventArgs e)
-        {
-            DetectConfigControl DetectFrm = new DetectConfigControl();
-            DetectFrm._window = this._windows;
-            DetectFrm.Dock = DockStyle.Fill;
-
-            panel3.Controls.Add(DetectFrm);
-        }
-        private void btnDelModel_Click(object sender, EventArgs e)
-        {
-            // 遍历 panel 的 Controls,找到最后一个 CameraConfigControl 并移除
-            for (int i = panel3.Controls.Count - 1; i >= 0; i--)
-            {
-                if (panel3.Controls[i] is DetectConfigControl)
-                {
-                    panel3.Controls.RemoveAt(i);
-                    break;  // 只删除一个
-                }
-            }
-        }
-    }
-}
diff --git a/DHSoftware/Views/UserDetetion.resx b/DHSoftware/Views/UserDetetion.resx
deleted file mode 100644
index af32865..0000000
--- a/DHSoftware/Views/UserDetetion.resx
+++ /dev/null
@@ -1,120 +0,0 @@
-<?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/DHSoftware/Views/CtrlVisionDisplay.Designer.cs b/DHSoftware/Views/VisionDisplay/CtrlVisionDisplay.Designer.cs
similarity index 100%
rename from DHSoftware/Views/CtrlVisionDisplay.Designer.cs
rename to DHSoftware/Views/VisionDisplay/CtrlVisionDisplay.Designer.cs
diff --git a/DHSoftware/Views/CtrlVisionDisplay.cs b/DHSoftware/Views/VisionDisplay/CtrlVisionDisplay.cs
similarity index 100%
rename from DHSoftware/Views/CtrlVisionDisplay.cs
rename to DHSoftware/Views/VisionDisplay/CtrlVisionDisplay.cs
diff --git a/DHSoftware/Views/CtrlVisionDisplay.resx b/DHSoftware/Views/VisionDisplay/CtrlVisionDisplay.resx
similarity index 100%
rename from DHSoftware/Views/CtrlVisionDisplay.resx
rename to DHSoftware/Views/VisionDisplay/CtrlVisionDisplay.resx
diff --git a/DHSoftware/Views/CtrlVisionRunBase.Designer.cs b/DHSoftware/Views/VisionDisplay/CtrlVisionRunBase.Designer.cs
similarity index 100%
rename from DHSoftware/Views/CtrlVisionRunBase.Designer.cs
rename to DHSoftware/Views/VisionDisplay/CtrlVisionRunBase.Designer.cs
diff --git a/DHSoftware/Views/CtrlVisionRunBase.cs b/DHSoftware/Views/VisionDisplay/CtrlVisionRunBase.cs
similarity index 100%
rename from DHSoftware/Views/CtrlVisionRunBase.cs
rename to DHSoftware/Views/VisionDisplay/CtrlVisionRunBase.cs
diff --git a/DHSoftware/Views/CtrlVisionRunBase.resx b/DHSoftware/Views/VisionDisplay/CtrlVisionRunBase.resx
similarity index 100%
rename from DHSoftware/Views/CtrlVisionRunBase.resx
rename to DHSoftware/Views/VisionDisplay/CtrlVisionRunBase.resx