From 557c8c4f75aafc97533721766272410042440d34 Mon Sep 17 00:00:00 2001
From: wei <kaede@kaededeMacBook-Air.local>
Date: 星期六, 21 八月 2021 11:00:29 +0800
Subject: [PATCH] 安防功能

---
 HDL-ON_Android/Properties/AndroidManifest.xml                          |    2 
 HDL_ON/UI/UI2/1-HomePage/HomePage.cs                                   |   48 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                           |    2 
 HDL_ON/Common/ApiUtlis.cs                                              |    8 
 HDL_ON/Entity/Function/SecurityAlarm.cs                                |  270 ++++
 HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs            |  119 +
 HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs            |  441 +++++++
 HDL_ON/HDL_ON.projitems                                                |    4 
 HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs                            |   11 
 HDL-ON_Android/HDL-ON_Android.csproj                                   |    2 
 HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs                                |   27 
 HDL-ON_iOS/Resources/Language.ini                                      |   11 
 HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputSettingPage.cs     |  995 ++++++++++++++++
 .vs/HDL_APP_Project/xs/UserPrefs.xml                                   |   66 
 HDL_ON/DAL/DriverLayer/Control.cs                                      |   41 
 HDL_ON/UI/MainPage.cs                                                  |    2 
 HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddInputPage.cs             |  388 ++++++
 HDL_ON/Entity/Function/Scene.cs                                        |   13 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs      |    1 
 HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs                   |    1 
 HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs                    |    6 
 HDL_ON/Entity/DB_ResidenceData.cs                                      |    7 
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs                   |    7 
 HDL_ON/Entity/FunctionList.cs                                          |    9 
 HDL_ON/DAL/Server/HttpUtil.cs                                          |    4 
 HDL-ON_Android/Assets/Phone/Collection/DefenseStatusIcon.png           |    0 
 HDL-ON_iOS/Resources/Phone/Collection/DisarmStatusIcon.png             |    0 
 HDL-ON_Android/Assets/Phone/Collection/DisarmStatusIcon.png            |    0 
 HDL_ON/Common/R.cs                                                     |   23 
 HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmDeploymentSettingPage.cs |  532 +++++---
 HDL-ON_iOS/Resources/Phone/Collection/DefenseStatusIcon.png            |    0 
 HDL_ON/Common/Utlis/FloorRoomSelectPopupView.cs                        |    2 
 HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddAlarmDeploymentPage.cs   |  627 ++++++++++
 33 files changed, 3,352 insertions(+), 317 deletions(-)

diff --git a/.vs/HDL_APP_Project/xs/UserPrefs.xml b/.vs/HDL_APP_Project/xs/UserPrefs.xml
index 70db16e..d959bc6 100644
--- a/.vs/HDL_APP_Project/xs/UserPrefs.xml
+++ b/.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,12 +1,21 @@
 锘�<Properties StartupConfiguration="{D998E133-F0DD-4760-BE3C-461632F54DA4}|Default">
-  <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneSimulatorTarget.220222E9-B9CA-4834-9318-2BC22465F050" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/UI2/4-PersonalCenter/FaceManagement/FacePassagePage.cs">
+  <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneDeviceTarget.6242be7109c740c6cb8999a8904b6e0ea8d45192" />
+  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/DAL/Server/HttpUtil.cs">
     <Files>
-      <File FileName="HDL_ON/UI/UI2/FuntionControlView/Light/RelayPageBLL.cs" Line="66" Column="23" />
-      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/PersonalDataPage.cs" Line="217" Column="1" />
-      <File FileName="HDL_ON/UI/UI2/4-PersonalCenter/FaceManagement/FacePassagePage.cs" Line="114" Column="55" />
-      <File FileName="HDL_ON/Common/R.cs" Line="10" Column="47" />
-      <File FileName="HDL-ON_iOS/Resources/Language.ini" Line="479" Column="30" />
+      <File FileName="HDL_ON/Entity/Function/Scene.cs" Line="83" Column="23" />
+      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs" Line="376" Column="33" />
+      <File FileName="HDL_ON/UI/UI2/1-HomePage/HomePage.cs" Line="392" Column="53" />
+      <File FileName="HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs" Line="28" Column="22" />
+      <File FileName="HDL_ON/DAL/DriverLayer/UdpSocket.cs" Line="123" Column="1" />
+      <File FileName="HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs" Line="199" Column="1" />
+      <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="789" Column="18" />
+      <File FileName="HDL_ON/DAL/Server/HttpServerRequest.cs" Line="2295" Column="32" />
+      <File FileName="HDL_ON/DAL/Server/NewAPI.cs" Line="483" Column="23" />
+      <File FileName="HDL_ON/Entity/FunctionList.cs" Line="179" Column="48" />
+      <File FileName="HDL_ON/Common/ApiUtlis.cs" Line="394" Column="1" />
+      <File FileName="HDL_ON/Entity/Function/SecurityAlarm.cs" Line="72" Column="1" />
+      <File FileName="HDL_ON/DAL/DriverLayer/Control_Udp.cs" Line="79" Column="28" />
+      <File FileName="HDL_ON/DAL/Server/HttpUtil.cs" Line="22" Column="87" />
     </Files>
     <Pads>
       <Pad Id="ProjectPad">
@@ -16,40 +25,18 @@
               <Node name="Common" expanded="True" />
               <Node name="DAL" expanded="True">
                 <Node name="DriverLayer" expanded="True" />
-                <Node name="Server" expanded="True" />
+                <Node name="Server" expanded="True">
+                  <Node name="HttpUtil.cs" selected="True" />
+                </Node>
               </Node>
               <Node name="Entity" expanded="True">
                 <Node name="Function" expanded="True" />
               </Node>
               <Node name="UI" expanded="True">
-                <Node name="UI1-Login" expanded="True" />
                 <Node name="UI2" expanded="True">
                   <Node name="1-HomePage" expanded="True" />
-                  <Node name="2-Classification" expanded="True" />
-                  <Node name="3-Intelligence" expanded="True" />
-                  <Node name="4-PersonalCenter" expanded="True">
-                    <Node name="AddFunction" expanded="True" />
-                    <Node name="FaceManagement" expanded="True">
-                      <Node name="FacePassagePage.cs" selected="True" />
-                    </Node>
-                    <Node name="PirDevice" expanded="True" />
-                    <Node name="RoomListManage" expanded="True" />
-                  </Node>
                   <Node name="FuntionControlView" expanded="True">
                     <Node name="ArmCenter" expanded="True" />
-                    <Node name="Light" expanded="True" />
-                  </Node>
-                </Node>
-              </Node>
-            </Node>
-            <Node name="HDL-ON_Android" expanded="True">
-              <Node name="Assets" expanded="True">
-                <Node name="Phone" expanded="True">
-                  <Node name="FunctionIcon" expanded="True">
-                    <Node name="Light" expanded="True" />
-                  </Node>
-                  <Node name="PersonalCenter" expanded="True">
-                    <Node name="FacePassage" expanded="True" />
                   </Node>
                 </Node>
               </Node>
@@ -57,13 +44,7 @@
             <Node name="HDL-ON_iOS" expanded="True">
               <Node name="Resources" expanded="True">
                 <Node name="Phone" expanded="True">
-                  <Node name="FunctionIcon" expanded="True">
-                    <Node name="Light" expanded="True">
-                      <Node name="LightScene" expanded="True" />
-                    </Node>
-                  </Node>
-                  <Node name="PersonalCenter" expanded="True" />
-                  <Node name="Public" expanded="True" />
+                  <Node name="Collection" expanded="True" />
                 </Node>
               </Node>
             </Node>
@@ -78,17 +59,20 @@
     <String>Shared.Droid.TouchID/Shared.Droid.TouchID.csproj</String>
     <String>Shared.IOS/Shared.IOS.csproj</String>
   </DisabledProjects>
-  <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug" />
+  <MonoDevelop.Ide.Workspace ActiveConfiguration="Debug|iPhone" />
   <MonoDevelop.Ide.ItemProperties.HDL-ON__Android PreferredExecutionTarget="Android.SelectDevice" />
   <MonoDevelop.Ide.DebuggingService.Breakpoints>
     <BreakpointStore>
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/Electrical/IrFanPage.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/Electrical/IrFanPage.cs" line="42" column="1" />
-      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/Common/ApiUtlis.cs" relfile="HDL_ON/Common/ApiUtlis.cs" line="390" column="1" />
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/Mqtt/MqttClient.cs" relfile="HDL_ON/DAL/Mqtt/MqttClient.cs" line="422" column="1" />
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalSensorPage.cs" line="747" column="1" />
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/Transfer/TransferUserConfirmPage.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/RoomListManage/Transfer/TransferUserConfirmPage.cs" line="106" column="1" />
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/EnvironmentalScience/EnvironmentalPage.cs" line="348" column="1" />
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/AddFunction/AddDevciePage.cs" line="54" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/Server/HttpServerRequest.cs" relfile="HDL_ON/DAL/Server/HttpServerRequest.cs" line="2318" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs" line="168" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddAlarmDeploymentPage.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddAlarmDeploymentPage.cs" line="424" column="1" />
+      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/DAL/DriverLayer/Control.cs" relfile="HDL_ON/DAL/DriverLayer/Control.cs" line="785" column="1" />
     </BreakpointStore>
   </MonoDevelop.Ide.DebuggingService.Breakpoints>
   <MultiItemStartupConfigurations />
diff --git a/HDL-ON_Android/Assets/Phone/Collection/DefenseStatusIcon.png b/HDL-ON_Android/Assets/Phone/Collection/DefenseStatusIcon.png
new file mode 100644
index 0000000..6fa5bd1
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/Collection/DefenseStatusIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/Collection/DisarmStatusIcon.png b/HDL-ON_Android/Assets/Phone/Collection/DisarmStatusIcon.png
new file mode 100644
index 0000000..da8a843
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/Collection/DisarmStatusIcon.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index aa13318..b89fd18 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -440,6 +440,8 @@
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Light\LightScene\CheckIcon.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Light\LightScene\CheckOnIcon.png" />
     <AndroidAsset Include="Assets\Phone\FunctionIcon\Light\LightScene\SetLightSceneIcon.png" />
+    <AndroidAsset Include="Assets\Phone\Collection\DefenseStatusIcon.png" />
+    <AndroidAsset Include="Assets\Phone\Collection\DisarmStatusIcon.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidAsset Include="Assets\Phone\FunctionIcon\DoorLock\BindScene.png" />
diff --git a/HDL-ON_Android/Properties/AndroidManifest.xml b/HDL-ON_Android/Properties/AndroidManifest.xml
index 659e1ff..907983d 100644
--- a/HDL-ON_Android/Properties/AndroidManifest.xml
+++ b/HDL-ON_Android/Properties/AndroidManifest.xml
@@ -1,5 +1,5 @@
 锘�<?xml version="1.0" encoding="utf-8"?>
-<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202108171" android:versionName="1.2.202108171" package="com.hdl.onpro">
+<manifest xmlns:android="http://schemas.android.com/apk/res/android" android:versionCode="202108201" android:versionName="1.2.202108201" package="com.hdl.onpro">
 	<uses-sdk android:minSdkVersion="26" android:targetSdkVersion="29" />
 	<!-- 涔愭鍙瀵硅闇�瑕佺殑鏉冮檺 -->
 	<!--<uses-permission android:name="android.permission.INTERNET" />-->
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index 6f1d223..2e079e1 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -1328,6 +1328,8 @@
       <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\AddTargetIcon.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\RightIcon.png" />
       <BundleResource Include="Resources\Phone\PersonalCenter\FacePassage\FaceIcon.png" />
+      <BundleResource Include="Resources\Phone\Collection\DefenseStatusIcon.png" />
+      <BundleResource Include="Resources\Phone\Collection\DisarmStatusIcon.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 01ffbc4..a2c3ac7 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -481,7 +481,11 @@
 493=Reset face ID
 494=Set face ID
 495=Face passage settings
-
+496=There is no associated task deployment status
+497=Custom
+498=Trigger delay
+499=Add defense function
+500=Add alarm target
 
  
 1000=Room Humidity
@@ -1572,6 +1576,11 @@
 493=閲嶇疆闈㈠
 494=璁剧疆闈㈠
 495=浜鸿劯閫氳璁剧疆
+496=杩樻病鏈夊叧鑱斾换浣曞竷闃茬姸鎬�
+497=鑷畾涔�
+498=瑙﹀彂寤舵椂
+499=娣诲姞甯冮槻鍔熻兘
+500=娣诲姞鍛婅鐩爣
  
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
diff --git a/HDL-ON_iOS/Resources/Phone/Collection/DefenseStatusIcon.png b/HDL-ON_iOS/Resources/Phone/Collection/DefenseStatusIcon.png
new file mode 100644
index 0000000..6fa5bd1
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/Collection/DefenseStatusIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/Collection/DisarmStatusIcon.png b/HDL-ON_iOS/Resources/Phone/Collection/DisarmStatusIcon.png
new file mode 100644
index 0000000..da8a843
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/Collection/DisarmStatusIcon.png
Binary files differ
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index b5eb5bb..8ea5c0b 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -278,6 +278,10 @@
                         }
                     }
 
+
+                    //======================瀹夐槻====================
+                    GetSecurityList();
+
                 }
                 catch (Exception ex)
                 {
@@ -376,14 +380,14 @@
             var pack = Ins.HttpRequest.GetSecurityList();
             if (pack.Code == StateCode.SUCCESS)
             {
-                var packList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SecurityAlarm>>(pack.Data.ToString());
+                var packList = JsonConvert.DeserializeObject<List<SecurityAlarm>>(pack.Data.ToString());
                 var sidList = new List<string>();
                 foreach (var function in packList)
                 {
                     sidList.Add(function.sid);
                 }
                 var infoListPack = Ins.httpRequest.GetSecurityInfo(sidList, new List<string>());
-                var infoList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SecurityAlarm>>(infoListPack.Data.ToString());
+                var infoList = JsonConvert.DeserializeObject<List<SecurityAlarm>>(infoListPack.Data.ToString());
                 foreach (var function in infoList)
                 {
                     function.SaveFile();
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index 8b79424..a8f6fcb 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -4,6 +4,29 @@
 {
     public static class StringId
     {
+        /// <summary>
+        /// 娣诲姞鍛婅鐩爣
+        /// </summary>
+        public const int AddAlarmTarget = 500;
+        /// <summary>
+        /// 娣诲姞甯冮槻鍔熻兘
+        /// </summary>
+        public const int AddDefenseFunction = 499;
+        /// <summary>
+        /// 瑙﹀彂寤舵椂
+        /// </summary>
+        public const int TriggerDelay = 498;
+        /// <summary>
+        /// 鑷畾涔�
+        /// </summary>
+        public const int Custom = 497;
+        /// <summary>
+        /// 杩樻病鏈夊叧鑱斾换鍔″竷闃茬姸鎬�
+        /// </summary>
+        public const int ThereIsNoAssociatedTaskDeploymentStatus = 496;
+        /// <summary>
+        /// 浜鸿劯閫氳璁剧疆
+        /// </summary>
         public const int FacePassageSetting = 495;
         /// <summary>
         /// 璁剧疆闈㈠
diff --git a/HDL_ON/Common/Utlis/FloorRoomSelectPopupView.cs b/HDL_ON/Common/Utlis/FloorRoomSelectPopupView.cs
index db8e6c3..dffe522 100644
--- a/HDL_ON/Common/Utlis/FloorRoomSelectPopupView.cs
+++ b/HDL_ON/Common/Utlis/FloorRoomSelectPopupView.cs
@@ -241,7 +241,7 @@
             {
                 //鍏ㄩ儴
                 btnFloorName.Text = Language.StringByID(StringId.All);
-                btnFloorName.Width = btnFloorName.GetTextWidth();
+                //btnFloorName.Width = btnFloorName.GetTextWidth();
             }
             //鎴块棿
             else if (selectType == 3)
diff --git a/HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs b/HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs
index 91acb3a..3292d0a 100644
--- a/HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs
+++ b/HDL_ON/DAL/DriverLayer/A_Protocol_Common.cs
@@ -130,5 +130,16 @@
                 return $"/user/{Control.Ins.GatewayId}/custom/scene/execute";
             }
         }
+
+        /// <summary>
+        /// 瀹夐槻鎺у埗
+        /// </summary>
+        public string ControlSeurity
+        {
+            get
+            {
+                return $"/user/{Control.Ins.GatewayId}/custom/security/status/set";
+            }
+        }
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
index 99c5b0e..b72b210 100644
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -622,6 +622,39 @@
         }
 
         /// <summary>
+        /// 瀹夐槻鎺у埗
+        /// </summary>
+        public void ControlSecurity(SecurityAlarm securityAlarm,string state)
+        {
+            if (!Ins.GatewayOnline_Local)//缃戝叧鏈湴涓嶅湪绾�
+            {
+                var pm = new DAL.Server.HttpServerRequest();
+                var result = pm.SetSecurityStatus(new List<SecurityState>() { new SecurityState() {
+                 gatewayId = DB_ResidenceData.Instance.HomeGateway.gatewayId,
+                  sid = securityAlarm.sid, status = state, userSecurityId = securityAlarm.userSecurityId
+                } });
+            }
+            else
+            {
+                Dictionary<string, string> keys = new Dictionary<string, string>();
+                keys.Add("sid", securityAlarm.sid);
+                keys.Add("status", state);
+                var aLinkData = new AlinkReadFunctionStatusObj()
+                {
+                    id = Ins.msg_id.ToString(),
+                    objects = new List<Dictionary<string, string>>()
+                        {
+                            keys
+                        },
+                    time_stamp = Utlis.GetTimestamp()
+                };
+                var aLinkJson = Newtonsoft.Json.JsonConvert.SerializeObject(aLinkData);
+                var sendBytes = Ins.ConvertSendBodyData(CommunicationTopic.ct.ControlSeurity, aLinkJson);
+                new Control_Udp().SendLocalHdlLinkData(sendBytes, aLinkData.id);
+            }
+        }
+
+        /// <summary>
         /// a鍗忚鎺у埗鍦烘櫙
         /// </summary>
         /// <param name="scene"></param>
@@ -746,6 +779,14 @@
                     //TODO 鏆傛椂涓嶄紶姝g‘鐨勬暟鎹笂鍘伙紝濡傛灉鍚庨潰瑕佷紭鍖栧墠闈㈣繖浜涗唬鐮�
                     UpdataFunctionStatus(receiveObj.BodyDataString, null);
                 }
+                else if (receiveObj.Topic == CommunicationTopic.ct.ControlSeurity +"_reply")
+                {
+                    var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<AlinkFunctionStatusObj>(receiveObj.BodyDataString);
+                    if (temp != null)
+                    {
+                        Control_Udp.ReceiveRepeatManager(temp.id, null);
+                    }
+                }
                 else
                 {
                     //涓�浜涚壒娈婄殑涓婚澶勭悊(涓轰簡鎵ц閫熷害,灏藉彲鑳界殑鍒姞鑰楁椂鐨勬搷浣�)
diff --git a/HDL_ON/DAL/Server/HttpUtil.cs b/HDL_ON/DAL/Server/HttpUtil.cs
index b271fdb..0dec30c 100644
--- a/HDL_ON/DAL/Server/HttpUtil.cs
+++ b/HDL_ON/DAL/Server/HttpUtil.cs
@@ -18,8 +18,8 @@
         /// 鍏叡鍩熷悕灏辫繎瑙f瀽
         /// 
         /// </summary>
-        public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
-        //public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm
+        //public const string GlobalRequestHttpsHost = "https://nearest.hdlcontrol.com";
+        public const string GlobalRequestHttpsHost = "https://test-gz.hdlcontrol.com";//mmmm
         /// <summary>
         /// RegionMark
         /// </summary>
diff --git a/HDL_ON/Entity/DB_ResidenceData.cs b/HDL_ON/Entity/DB_ResidenceData.cs
index 896cb34..0f6ca28 100644
--- a/HDL_ON/Entity/DB_ResidenceData.cs
+++ b/HDL_ON/Entity/DB_ResidenceData.cs
@@ -19,7 +19,6 @@
         /// </summary>
         public string MasterToken;
 
-        //RegionInfoRes _residecenInfo;
         RegionInfoRes _residecenInfo = new RegionInfoRes();
         /// <summary>
         /// 浣忓畢鍩虹淇℃伅
@@ -163,8 +162,8 @@
         public HomeGatewayInfo HomeGateway;
 
         /// <summary>
-        /// 0:bus缃戝叧
-        /// 1:A鍗忚缃戝叧
+        /// 0:涓�绔彛
+        /// 1:Link鍗忚缃戝叧
         /// </summary>
         public int GatewayType
         {
@@ -175,7 +174,7 @@
                 //#endif
                 if (HomeGateway == null)
                     return -1;
-                if (HomeGateway.gatewayType == "AGATEWAY")
+                if (HomeGateway.gatewayType != "BUSUDPGATEWAY")
                 {
                     return 1;
                 }
diff --git a/HDL_ON/Entity/Function/Scene.cs b/HDL_ON/Entity/Function/Scene.cs
index 9399392..fa6176f 100644
--- a/HDL_ON/Entity/Function/Scene.cs
+++ b/HDL_ON/Entity/Function/Scene.cs
@@ -86,6 +86,10 @@
         /// 鏀惰棌鏍囪
         /// </summary>
         public bool collect = false;
+        /// <summary>
+        /// 鏄惁鍏佽鍒犻櫎
+        /// </summary>
+        public bool can_delete = true;
 
         /// <summary>
         /// 鍒涘缓璇ュ満鏅殑鐢ㄦ埛ID
@@ -545,10 +549,15 @@
         /// <summary>
         /// 灞炴�у�煎崟浣�
         /// </summary>
-        public string GetUintString()
+        public string GetUintString(string inputKey = "")
         {
             var us = "";
-            switch (key)
+            var swithchString = key;
+            if(!string.IsNullOrEmpty(inputKey))
+            {
+                swithchString = inputKey;
+            }
+            switch (swithchString)
             {
                 case FunctionAttributeKey.SetTemp:
                 case FunctionAttributeKey.RoomTemp:
diff --git a/HDL_ON/Entity/Function/SecurityAlarm.cs b/HDL_ON/Entity/Function/SecurityAlarm.cs
index e342c89..4eda460 100644
--- a/HDL_ON/Entity/Function/SecurityAlarm.cs
+++ b/HDL_ON/Entity/Function/SecurityAlarm.cs
@@ -1,12 +1,117 @@
 锘縰sing System;
 using System.Collections.Generic;
 using HDL_ON.Common;
+using HDL_ON.DAL.Server;
 using Shared;
 
 namespace HDL_ON.Entity
 {
+    /// <summary>
+    /// 瀹夐槻涓績
+    /// </summary>
+    public class SecurityCenter
+    {
+        static SecurityCenter _center;
+
+        public static SecurityCenter Security
+        {
+            get
+            {
+                if(_center == null)
+                {
+                    _center = new SecurityCenter();
+                }
+                return _center;
+            }
+        }
+
+        SecurityAlarm _securityAlarm;
+        /// <summary>
+        /// 褰撳墠甯冮槻妯″紡
+        /// </summary>
+        public SecurityAlarm CurrentDefenseMode
+        {
+            get
+            {
+                return _securityAlarm;
+            }
+            set
+            {
+                _securityAlarm = value;
+                UI.HomePage.LoadEvent_RefreshSecurityStatus();
+            }
+        }
+
+        HttpServerRequest httpServerRequest = new HttpServerRequest();
+
+
+
+        List<SecurityAlarm> _securityAlarmList;
+        /// <summary>
+        /// 闃插尯鍒楄〃
+        /// </summary>
+        public List<SecurityAlarm> securityAlarmList
+        {
+            get
+            {
+                if(_securityAlarmList == null)
+                {
+                  _securityAlarmList =  GetSecurityAlarmList();
+                }
+                return _securityAlarmList;
+            }
+        }
+
+
+        /// <summary>
+        /// 璇诲彇浜戠瀹夐槻鍒楄〃
+        /// </summary>
+        /// <returns></returns>
+        public List<SecurityAlarm> GetSecurityAlarmList()
+        {
+            var pack = httpServerRequest.GetSecurityList();
+            if(pack.Code == StateCode.SUCCESS)
+            {
+                var revData = Newtonsoft.Json.JsonConvert.DeserializeObject<List<SecurityAlarm>>(pack.Data.ToString());
+                if(revData!= null)
+                {
+                    _securityAlarmList = revData;
+                    return revData;
+                }
+            }
+            return new List<SecurityAlarm>();
+        }
+
+        /// <summary>
+        /// 鐘舵�� enable甯冮槻銆乨isable鎾掗槻
+        /// </summary>
+        public string status
+        {
+            get
+            {
+                string result = "disable";
+                foreach(var s in securityAlarmList)
+                {
+                    if(s.status == "enable")
+                    {
+                        result = "enable";
+                        break;
+                    }
+                }
+                return result;
+            }
+        }
+
+
+    }
+
+
     public class SecurityAlarm
     {
+        /// <summary>
+        /// 瀹夐槻浜戠id
+        /// </summary>
+        public string userSecurityId;
         /// <summary>
         /// 瀹夐槻sid
         /// </summary>
@@ -22,7 +127,7 @@
         /// <summary>
         /// 鐘舵�� enable甯冮槻銆乨isable鎾掗槻
         /// </summary>
-        public string status;
+        public string status = "disable";
         /// <summary>
         /// 绫诲瀷
         /// "all"--鍏ㄥ畢甯冮槻锛�
@@ -30,7 +135,7 @@
         /// "all_day":24灏忔椂,
         /// "mute"锛氶潤闊�
         /// </summary>
-        public string type;
+        public string type = "normal";
         /// <summary>
         /// 鏇存柊鏃堕棿
         /// </summary>
@@ -71,6 +176,93 @@
             var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
             FileUtlis.Files.WriteFileByBytes(savePath, ssd);
         }
+
+        /// <summary>
+        /// 淇濆瓨瀹夐槻淇℃伅
+        /// </summary>
+        public string SaveInfo()
+        {
+            HttpServerRequest hsr = new HttpServerRequest();
+            if (string.IsNullOrEmpty(sid))
+            {
+                NewSid();
+                var pack = hsr.AddSecurity(new List<SecurityAlarm>() { this });
+                if (pack.Code == StateCode.SUCCESS)
+                {
+                    SaveFile();
+                }else
+                {
+                    sid = "";
+                }
+                return pack.Code;
+            }
+            else
+            {
+                var pack = hsr.EditSecurity(new List<SecurityAlarm>() { this });
+                if (pack.Code == StateCode.SUCCESS)
+                {
+                    SaveFile();
+                }
+                return pack.Code;
+            }
+        }
+
+
+        /// <summary>
+        /// 鐢熸垚sid鏂规硶
+        /// </summary>
+        public void NewSid()
+        {
+            try
+            {
+                string sOidBeginsWith = "000101";//鍘傚晢 + 閫氳鏂瑰紡
+                DateTime dt = DateTime.Now;
+                DateTime startTime = TimeZoneInfo.ConvertTimeToUtc(new DateTime(2020, 1, 1));
+                long m = (long)((dt - startTime).TotalMilliseconds / 10);
+                string sTimeSpan = "00000000";
+
+                byte[] arry = new byte[4];
+                arry[0] = (byte)(m & 0xFF);
+                arry[1] = (byte)((m & 0xFF00) >> 8);
+                arry[2] = (byte)((m & 0xFF0000) >> 16);
+                arry[3] = (byte)((m >> 24) & 0xFF);
+                sTimeSpan = arry[0].ToString("X2") + arry[1].ToString("X2") + arry[2].ToString("X2") + arry[3].ToString("X2");
+
+
+                if (sTimeSpan.Length >= 8)
+                {
+                    sTimeSpan = sTimeSpan.Substring(0, 8);
+                }
+                else
+                {
+                    sTimeSpan = Guid.NewGuid().ToString().Substring(0, 8);
+                    //sTimeSpan = "00000000";
+                }
+
+                sid = sOidBeginsWith + sTimeSpan;
+
+                sid += "16";
+                sid += "1601";
+                int maxId = 1;
+
+
+                for (int i = 0; i < SecurityCenter.Security.securityAlarmList.Count; i++)
+                {
+                    string s = SecurityCenter.Security.securityAlarmList[i].sid.Substring(20, 4);
+                    int iThisSceneId = Convert.ToInt16(s, 16);
+                    if (iThisSceneId > maxId)
+                        maxId = iThisSceneId;
+                }
+
+                sid += (maxId + 1).ToString("X4");
+                sid += "0000";
+            }
+            catch
+            {
+            }
+        }
+
+
     }
 
     /// <summary>
@@ -127,7 +319,6 @@
         public string bypass;
     }
 
-
     /// <summary>
     /// 瀹夐槻杈撳叆
     /// </summary>
@@ -147,6 +338,13 @@
         /// </summary>
         public List<SecurityInputCondition> condition = new List<SecurityInputCondition>();
 
+        /// <summary>
+        /// 鍔犲叆杈撳叆鏉′欢
+        /// 鏈湴鍒ゆ柇浣跨敤
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public bool addCondition = false;
+
         [Newtonsoft.Json.JsonIgnore]
         Function _function = null;
         /// <summary>
@@ -160,6 +358,65 @@
                 _function = FunctionList.List.Functions.Find((obj) => obj.sid == sid);
             }
             return _function;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍗曚釜鐘舵�佺殑鏄剧ず鏂囨湰
+        /// </summary>
+        /// <param name="inputValue"></param>
+        /// <returns></returns>
+        public string GetStateText(string inputValue)
+        {
+            string text = "";
+
+            if (GetFunction() == null)
+                return text;
+            switch (GetFunction().spk)
+            {
+                case SPK.SensorGas:
+                case SPK.SensorSmoke:
+                    if (inputValue == "true")
+                    {
+                        text += Language.StringByID(StringId.InAlarm) + " ";
+                    }
+                    else if (inputValue == "false")
+                    {
+                        text += Language.StringByID(StringId.Normal) + " ";
+                    }
+                    break;
+                case SPK.SensorPir:
+                    if (inputValue == "true")
+                    {
+                        text += Language.StringByID(StringId.youren) + " ";
+                    }
+                    else if (inputValue == "false")
+                    {
+                        text += Language.StringByID(StringId.wuren) + " ";
+                    }
+                    break;
+                case SPK.SensorWater:
+                    if (inputValue == "true")
+                    {
+                        text += Language.StringByID(StringId.WaterLeakage) + " ";
+                    }
+                    else if (inputValue == "false")
+                    {
+                        text += Language.StringByID(StringId.Normal) + " ";
+                    }
+                    break;
+                case SPK.SensorDoorWindow:
+                    if (inputValue == "true")
+                    {
+                        text += Language.StringByID(StringId.Open) + " ";
+                    }
+                    else if (inputValue == "false")
+                    {
+                        text += Language.StringByID(StringId.Close) + " ";
+                    }
+                    break;
+            }
+
+            return text;
         }
 
         /// <summary>
@@ -276,6 +533,13 @@
         /// </summary>
         public List<SecurityOutputStatus> status = new List<SecurityOutputStatus>();
 
+        /// <summary>
+        /// 鍔犲叆杈撳叆鏉′欢
+        /// 鏈湴鍒ゆ柇浣跨敤
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public bool addCondition = false;
+
         [Newtonsoft.Json.JsonIgnore]
         Function _function = null;
         /// <summary>
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index 0d84b83..4a04b6f 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -172,7 +172,14 @@
         /// <summary>
         /// 瀹夐槻鍒楄〃
         /// </summary>
-        public List<SecurityAlarm> securities = new List<SecurityAlarm>();
+        public List<SecurityAlarm> securities
+        {
+            get
+            {
+                return SecurityCenter.Security.securityAlarmList;
+            }
+        }
+
 
         /// <summary>
         /// 鍔犺浇鍔熻兘鍒楄〃
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 403a3a5..163b1fa 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -472,6 +472,10 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddDevice\SenesorEnvironment\AddQingpingSensorEnvirTipPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Light\LightScene\AddLightScene.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\FaceManagement\FacePassagePage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmCenter\AddAlarmDeploymentPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmCenter\AddInputPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmCenter\AddOutputPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmCenter\AddOutputSettingPage.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)Entity\Device\" />
diff --git a/HDL_ON/UI/MainPage.cs b/HDL_ON/UI/MainPage.cs
index 291c974..1a51f05 100644
--- a/HDL_ON/UI/MainPage.cs
+++ b/HDL_ON/UI/MainPage.cs
@@ -25,7 +25,7 @@
         /// <summary>
         /// 鐗堟湰鍙�
         /// </summary>
-        public static string VersionString = "1.2.0817";
+        public static string VersionString = "1.2.0820";
         ///// <summary>
         ///// 瀹㈡埛绔被鍨�
         ///// </summary>
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
index 5a4f32e..dc250ad 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePage.cs
@@ -27,6 +27,12 @@
         /// </summary>
         Button btnLinkStateTip;
         /// <summary>
+        /// 瀹夐槻鐘舵�佸浘鏍�
+        /// </summary>
+        Button btnSecurityStatus;
+
+
+        /// <summary>
         ///浣忓畢鍚嶇О鏄剧ず
         /// </summary>
         Button btnResidenceName;
@@ -369,6 +375,28 @@
                 environmentalView.AddChidren(btnPm25Values);
                 #endregion
 
+                btnSecurityStatus = new Button()
+                {
+                    X = Application.GetRealWidth(329),
+                    Y = Application.GetRealHeight(34),
+                    Width = Application.GetRealWidth(30),
+                    Height = Application.GetRealWidth(30),
+                    SelectedImagePath = "Collection/DefenseStatusIcon.png",
+                    UnSelectedImagePath = "Collection/DisarmStatusIcon.png"
+                };
+                if (DB_ResidenceData.Instance.GatewayType == 1)
+                {
+                    topView.AddChidren(btnSecurityStatus);
+                    btnSecurityStatus.IsSelected = SecurityCenter.Security.CurrentDefenseMode != null;
+                    btnSecurityStatus.MouseUpEventHandler = (sender, e) => {
+                        var page = new ArmCenterPage();
+                        MainPage.BasePageView.AddChidren(page);
+                        page.LoadPage();
+                        MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                    };
+                }
+
+
                 #region msg
                 FrameLayout msgView;
                 msgView = new FrameLayout()
@@ -512,16 +540,16 @@
             //    },
             //});
 
-            //FunctionList.List.Functions.Add(new Function() {
-            //    spk = SPK.SensorGas,
-            //    name = "鐕冩皵浼犳劅鍣�",
-            //    attributes = new List<FunctionAttributes> ()
-            //    {
-            //        new FunctionAttributes(){ key = "enable",curValue= "true",state = "true" ,value = new List<string>(){ "true", "false" } },
-            //        new FunctionAttributes(){ key = "status",curValue= "normal",state = "normal" ,value = new List<string>(){ "alarm", "normal" } },
-                    
-            //    },
-            //});
+            FunctionList.List.Functions.Add(new Function()
+            {
+                spk = SPK.SensorGas,
+                name = "鐕冩皵浼犳劅鍣�",
+                attributes = new List<FunctionAttributes>()
+                {
+                    new FunctionAttributes(){ key = "enable",curValue= "true",state = "true" ,value = new List<string>(){ "true", "false" } },
+                    new FunctionAttributes(){ key = "status",curValue= "normal",state = "normal" ,value = new List<string>(){ "alarm", "normal" } },
+                },
+            });
 
             //FunctionList.List.Functions.Add(new Function() { spk = SPK.PjtIr, name = "娴嬭瘯鎶曞奖浠�",
             //                            attributes = new List<FunctionAttributes>() {
diff --git a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
index 8cb90b4..7cd1ce4 100644
--- a/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
+++ b/HDL_ON/UI/UI2/1-HomePage/HomePageBLL.cs
@@ -14,12 +14,29 @@
         /// </summary>
         public static void LoadEvent_RefreshAir()
         {
-            if (bodyView != null)
+            Application.RunOnMainThread(() =>
             {
-                bodyView.btnTempValues.Text = MainPage.cityInfo.temperature == null ? "--" : MainPage.cityInfo.temperature + "掳";
-                bodyView.btnHumidityValues.Text = MainPage.cityInfo.humidity == null ? "--" : MainPage.cityInfo.humidity + "%";
-                bodyView.btnPm25Values.Text = MainPage.cityInfo.pm25 == null ? "--" : MainPage.cityInfo.pm25;
-            }
+                if (bodyView != null)
+                {
+                    bodyView.btnTempValues.Text = MainPage.cityInfo.temperature == null ? "--" : MainPage.cityInfo.temperature + "掳";
+                    bodyView.btnHumidityValues.Text = MainPage.cityInfo.humidity == null ? "--" : MainPage.cityInfo.humidity + "%";
+                    bodyView.btnPm25Values.Text = MainPage.cityInfo.pm25 == null ? "--" : MainPage.cityInfo.pm25;
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鏇存柊瀹夐槻鐘舵��
+        /// </summary>
+        public static void LoadEvent_RefreshSecurityStatus()
+        {
+            Application.RunOnMainThread(() =>
+            {
+                if (bodyView != null)
+                {
+                    bodyView.btnSecurityStatus.IsSelected = SecurityCenter.Security.CurrentDefenseMode != null;
+                }
+            });
         }
 
         /// <summary>
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index 3accadc..890573b 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -725,9 +725,10 @@
                         break;
                     case ShowFunction.SecurityCenter:
                         functionCount = FunctionList.List.securities.Count;
-#if DEBUG
-                        functionCount = 1;
-#endif
+                        if (DB_ResidenceData.Instance.GatewayType == 1)
+                        {
+                            functionCount = 1;
+                        }
                         break;
 
                 }
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
index cfab368..67f47d5 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs
@@ -373,8 +373,10 @@
                 BackgroundColor = CSS_Color.MainBackgroundColor,
                 //IsBold = true
             };
-            bodyView.AddChidren(btnComplete);
-
+            if (scene.can_delete)
+            {
+                bodyView.AddChidren(btnComplete);
+            }
             LoadEventList();
 
             var waitPage = new Loading();
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs
index 9401786..05c2a9c 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs
@@ -157,7 +157,6 @@
         /// <summary>
         /// 鏄剧ず鍔熻兘Row
         /// </summary>
-        /// <param name="showUnallocated">鏄惁鏄樉绀烘湭鍒嗛厤</param>
         void LoadFunctionListRow(List<Function> functions)
         {
             functionListView.RemoveAll();
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddAlarmDeploymentPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddAlarmDeploymentPage.cs
new file mode 100644
index 0000000..d47f84d
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddAlarmDeploymentPage.cs
@@ -0,0 +1,627 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+namespace HDL_ON.UI
+{
+    public class AddAlarmDeploymentPage : FrameLayout
+    {
+        FrameLayout bodyView;
+        /// <summary>
+        /// 涓婚鐣岄潰
+        /// </summary>
+        VerticalScrolViewLayout contentView;
+        /// <summary>
+        /// 杈撳叆鏉′欢鍒楄〃鍖哄煙鐣岄潰
+        /// </summary>
+        VerticalScrolViewLayout inputTargetView;
+        /// <summary>
+        /// 鍛婅鐩爣鍒楄〃鍖哄煙鐣岄潰
+        /// </summary>
+        VerticalScrolViewLayout outputTargetView;
+
+
+        SecurityAlarm securityAlarm;
+        Action refreshAction;
+
+        public AddAlarmDeploymentPage(SecurityAlarm alarm, Action action)
+        {
+            bodyView = this;
+            securityAlarm = alarm;
+            refreshAction = action;
+        }
+
+        public void LoadPage()
+        {
+            new TopViewDiv(bodyView, Language.StringByID(StringId.Setting)).LoadTopView();
+
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+
+            contentView = new VerticalScrolViewLayout()
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(527),
+            };
+            bodyView.AddChidren(contentView);
+
+            #region 甯冮槻淇℃伅
+            var deploymentTitleRow = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(44),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            contentView.AddChidren(deploymentTitleRow);
+
+            var btnDeploymentTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                TextColor = CSS_Color.MainColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.DeploymentInformation,
+                IsBold = true,
+            };
+            deploymentTitleRow.AddChidren(btnDeploymentTitle);
+
+            deploymentTitleRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(43), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
+
+            #region 甯冮槻鍚嶇О
+            var deploymentNameRow = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            contentView.AddChidren(deploymentNameRow);
+
+            var btnDeploymentNameTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(72),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.Name,
+            };
+            deploymentNameRow.AddChidren(btnDeploymentNameTitle);
+            btnDeploymentNameTitle.Text += ":";
+
+            var btnDeploymentName = new Button()
+            {
+                X = Application.GetRealWidth(88),
+                Width = Application.GetRealWidth(230),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                Text = securityAlarm.name
+            };
+            deploymentNameRow.AddChidren(btnDeploymentName);
+            deploymentNameRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(49), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
+
+            LoadEvent_EditSecurityAlarmName(btnDeploymentName);
+            #endregion
+
+            /*
+            #region 瑙﹀彂寤舵椂
+            var delayedRow = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            contentView.AddChidren(delayedRow);
+
+            var btnDelayedTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(72),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.TriggerDelay,
+            };
+            delayedRow.AddChidren(btnDelayedTitle);
+            btnDelayedTitle.Text += ":";
+
+            var btnDelayedText = new Button()
+            {
+                X = Application.GetRealWidth(88),
+                Width = Application.GetRealWidth(230),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                Text = securityAlarm.name
+            };
+            delayedRow.AddChidren(btnDelayedText);
+
+            var btnDelayedRight = new Button()
+            {
+                X = Application.GetRealWidth(343),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                UnSelectedImagePath = "Public/RightIcon.png",
+            };
+            delayedRow.AddChidren(btnDelayedRight);
+
+            //delayedRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(49), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
+            #endregion
+            */
+
+            #endregion
+            contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.BackgroundColor });
+
+            //甯冮槻鍔熻兘
+            iniDefenseView();
+            //鍛婅鐩爣
+            iniAlarmView();
+
+            #region 搴曢儴鍖哄煙
+            var bottomView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(591),
+                Height = Application.GetRealHeight(100),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(22),
+            };
+            this.AddChidren(bottomView);
+
+            var btnConfrim = new Button()
+            {
+                X = Application.GetRealWidth(78),
+                Y = Application.GetRealHeight(12),
+                Width = Application.GetRealWidth(220),
+                Height = Application.GetRealWidth(44),
+                Radius = (uint)Application.GetRealWidth(22),
+                BackgroundColor = CSS_Color.MainColor,
+                TextID = StringId.Confirm,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            bottomView.AddChidren(btnConfrim);
+
+            btnConfrim.MouseUpEventHandler = (sender, e) =>
+            {
+                if (securityAlarm.input.Count == 0)
+                {
+                    var tip = new Tip()
+                    {
+                        Text = "璇烽�夋嫨甯冮槻鐩爣",
+                        CloseTime = 3,
+                        Direction = AMPopTipDirection.None
+                    };
+                    tip.Show(MainPage.BaseView);
+                    return;
+                }
+                if (securityAlarm.output.Count == 0)
+                {
+                    var tip = new Tip()
+                    {
+                        Text = "璇烽�夋嫨鍛婅鐩爣",
+                        CloseTime = 3,
+                        Direction = AMPopTipDirection.None
+                    };
+                    tip.Show(MainPage.BaseView);
+
+                    return;
+                }
+
+                var waitPage = new Loading();
+                waitPage.Start();
+                new System.Threading.Thread(() =>
+                {
+                    try
+                    {
+                        var code = securityAlarm.SaveInfo();
+                        if (code == StateCode.SUCCESS)
+                        {
+                            SecurityCenter.Security.GetSecurityAlarmList();
+                            Application.RunOnMainThread(() =>
+                            {
+                                this.RemoveFromParent();
+                                refreshAction?.Invoke();
+                            });
+                        }
+                        else
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                IMessageCommon.Current.ShowErrorInfoAlter(code);
+                            });
+                        }
+                    }
+                    catch { }
+                    finally
+                    {
+                        Application.RunOnMainThread(() => {
+                            waitPage.Hide();
+                        });
+                    }
+                })
+                { IsBackground = true }.Start();
+            };
+            #endregion
+
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栭儴鍒嗗姛鑳藉尯鍩�
+        /// </summary>
+        private void iniDefenseView()
+        {
+
+            #region 甯冮槻鍔熻兘
+            var deploymentFunctionRow = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(44),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            contentView.AddChidren(deploymentFunctionRow);
+
+            var btnFunctionTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                TextColor = CSS_Color.MainColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.DefenseFunctionArmState,
+                IsBold = true,
+            };
+            deploymentFunctionRow.AddChidren(btnFunctionTitle);
+
+            var btnAddTarget = new Button()
+            {
+                X = Application.GetRealWidth(337),
+                Y = Application.GetRealHeight(6),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "FunctionIcon/ArmCenter/AddTargetIcon.png",
+            };
+            deploymentFunctionRow.AddChidren(btnAddTarget);
+            ///娣诲姞杈撳叆鐩爣
+            btnAddTarget.MouseUpEventHandler = (sender, e) => {
+                Action<SecurityAlarm> action = (outTemp) => {
+                    securityAlarm = outTemp;
+                    iniInputTargetView();
+                };
+                var page = new AddInputPage(securityAlarm, action);
+                MainPage.BasePageView.AddChidren(page);
+                page.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+            deploymentFunctionRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(43), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
+
+            inputTargetView = new VerticalScrolViewLayout()
+            {
+                ScrollEnabled = false,
+            };
+            contentView.AddChidren(inputTargetView);
+
+            iniInputTargetView();
+
+            #endregion
+            contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.BackgroundColor });
+
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栬緭鍏ユ潯浠跺尯鍩熺晫闈�
+        /// </summary>
+        /// <param name=""></param>
+        private void iniInputTargetView()
+        {
+            inputTargetView.RemoveAll();
+            if (securityAlarm.input.Count > 0)
+            {
+                foreach (var target in securityAlarm.input)
+                {
+                    inputTargetView.AddChidren(new InputRow(target.GetFunction().name, target.GetFunction().GetRoomListName(),target.StateText()));
+                }
+                inputTargetView.Height = Application.GetRealHeight(65 * securityAlarm.input.Count);
+                //if (outputTargetView != null)
+                //{
+                //    contentView.AddChidren(outputTargetView);
+                //}
+            }
+            else
+            {
+                inputTargetView.AddChidren(new Button()
+                {
+                    Height = Application.GetRealHeight(65),
+                    TextAlignment = TextAlignment.Center,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextID = StringId.ThereIsNoAssociatedTaskDeploymentStatus,
+                    IsMoreLines = true,
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                });
+
+                inputTargetView.Height = Application.GetRealHeight(68);
+                //if(outputTargetView!= null)
+                //{
+                //    contentView.AddChidren(outputTargetView);
+                //}
+            }
+
+
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栧憡璀︾洰鏍囧尯鍩�
+        /// </summary>
+        private void iniAlarmView()
+        {
+            #region 鍛婅鐩爣
+            var outputRow = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(44),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            contentView.AddChidren(outputRow);
+
+            var btnOutputRowTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                TextColor = CSS_Color.MainColor,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.AlarmTargetAfterTriggering,
+                IsBold = true,
+            };
+            outputRow.AddChidren(btnOutputRowTitle);
+
+            var btnAddOutTarget = new Button()
+            {
+                X = Application.GetRealWidth(337),
+                Y = Application.GetRealHeight(6),
+                Width = Application.GetRealWidth(32),
+                Height = Application.GetRealWidth(32),
+                UnSelectedImagePath = "FunctionIcon/ArmCenter/AddTargetIcon.png",
+            };
+            outputRow.AddChidren(btnAddOutTarget);
+
+            btnAddOutTarget.MouseUpEventHandler = (sender, e) => {
+                Action<SecurityAlarm> action = (outTemp) => {
+                    securityAlarm = outTemp;
+                    iniAlarmListView();
+                };
+                var page = new AddOutputPage(securityAlarm, action);
+                MainPage.BasePageView.AddChidren(page);
+                page.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+            outputRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(43), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
+
+
+            outputTargetView = new VerticalScrolViewLayout()
+            {
+                ScrollEnabled = false,
+            };
+            contentView.AddChidren(outputTargetView);
+
+            iniAlarmListView();
+
+            #endregion
+            contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.BackgroundColor });
+
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栧憡璀﹀垪琛ㄥ尯鍩�
+        /// </summary>
+        private void iniAlarmListView()
+        {
+            outputTargetView.RemoveAll();
+            if (securityAlarm.output.Count > 0)
+            {
+                foreach (var outTarget in securityAlarm.output)
+                {
+                    outputTargetView.AddChidren(new OutputRow(outTarget.GetFunction().name, outTarget.GetFunction().GetRoomListName(), "鎵撳紑"));
+                }
+                outputTargetView.Height = Application.GetRealHeight(65 * securityAlarm.output.Count);
+            }
+            else
+            {
+                outputTargetView.AddChidren(new Button()
+                {
+                    Height = Application.GetRealHeight(65),
+                    TextAlignment = TextAlignment.Center,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextID = StringId.ThereIsNoAssociatedTaskDeploymentStatus,
+                    IsMoreLines = true,
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                });
+            }
+        }
+
+
+        /// <summary>
+        /// 淇敼瀹夐槻鍚嶇О
+        /// </summary>
+        void LoadEvent_EditSecurityAlarmName(Button btnDeploymentName)
+        {
+            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
+            {
+                Action<string> callBack = (str) =>
+                {
+                    //鍚嶇О涓嶈兘涓虹┖
+                    if (string.IsNullOrEmpty(str))
+                    {
+                        new Tip()
+                        {
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.NameCannotBeEmpty),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(bodyView);
+                        return;
+                    }
+
+
+                    btnDeploymentName.Text = securityAlarm.name = str;
+
+                };
+                new PublicAssmebly().LoadDialog_EditParater(StringId.Name, securityAlarm.name, callBack, StringId.NameCannotBeEmpty, 0, new List<string>());
+            };
+            btnDeploymentName.MouseUpEventHandler = eventHandler;
+        }
+
+        /// <summary>
+        /// 娣诲姞瀹夐槻
+        /// </summary>
+        void LoadEvent_AddDefense()
+        {
+            var responsePack = new HttpServerRequest().AddSecurity(new List<SecurityAlarm>() { securityAlarm});
+            if (responsePack.Code == StateCode.SUCCESS)
+            {
+                Application.RunOnMainThread(() =>
+                {
+                    this.RemoveFromParent();
+                });
+            }
+            else
+            {
+                IMessageCommon.Current.ShowErrorInfoAlter(responsePack.Code);
+            }
+        }
+
+    }
+
+    /// <summary>
+    /// 杈撳叆鏉′欢琛屾帶浠�
+    /// </summary>
+    public class InputRow : RowLayout
+    {
+        Button btnTitle;
+
+        Button btnSubTitle;
+
+        public InputRow(string title, string subtitle,string state)
+        {
+            this.LineColor = 0x00000000;
+            this.Height = Application.GetRealHeight(65);
+            this.BackgroundColor = CSS_Color.MainBackgroundColor;
+
+            btnTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Height = Application.GetRealHeight(44),
+                Width = Application.GetRealWidth(320),
+                Text = title,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.TextFontSize,
+            };
+            this.AddChidren(btnTitle);
+
+            btnSubTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealHeight(24),
+                Height = Application.GetRealHeight(44),
+                Width = Application.GetRealWidth(320),
+                Text = subtitle,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            this.AddChidren(btnSubTitle);
+
+
+            Button btnState = new Button()
+            {
+                Width = Application.GetRealWidth(369),
+                TextAlignment = TextAlignment.CenterRight,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                Text = state
+            };
+            this.AddChidren(btnState);
+
+
+        }
+
+        public void SetClickEvent(EventHandler<MouseEventArgs> eventHandler)
+        {
+            this.MouseUpEventHandler = eventHandler;
+            btnTitle.MouseUpEventHandler = eventHandler;
+            btnSubTitle.MouseUpEventHandler = eventHandler;
+        }
+    }
+
+    /// <summary>
+    /// 杈撳嚭鏉′欢鎺т欢
+    /// </summary>
+    public class OutputRow : RowLayout
+    {
+        Button btnTitle;
+
+        Button btnSubTitle;
+
+        Button btnState;
+
+        Button btnRightIcon;
+
+        public OutputRow(string title, string subtitle, string state)
+        {
+            this.LineColor = 0x00000000;
+            this.Height = Application.GetRealHeight(65);
+            this.BackgroundColor = CSS_Color.MainBackgroundColor;
+
+            btnTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Height = Application.GetRealHeight(44),
+                Width = Application.GetRealWidth(320),
+                Text = title,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.TextFontSize,
+            };
+            this.AddChidren(btnTitle);
+
+            btnSubTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealHeight(24),
+                Height = Application.GetRealHeight(44),
+                Width = Application.GetRealWidth(320),
+                Text = subtitle,
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.PromptingColor1,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            this.AddChidren(btnSubTitle);
+
+            btnState = new Button()
+            {
+                Width = Application.GetRealWidth(323),
+                TextAlignment = TextAlignment.CenterRight,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextColor = CSS_Color.PromptingColor1,
+                Text = state
+            };
+            this.AddChidren(btnState);
+
+            btnRightIcon = new Button()
+            {
+                X = Application.GetRealWidth(339),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetRealWidth(16),
+                Height = Application.GetRealWidth(16),
+                UnSelectedImagePath = "FunctionIcon/ArmCenter/RightIcon.png",
+            };
+            this.AddChidren(btnRightIcon);
+        }
+
+        public void SetClickEvent(EventHandler<MouseEventArgs> eventHandler)
+        {
+            btnState.MouseUpEventHandler = eventHandler;
+            btnTitle.MouseUpEventHandler = eventHandler;
+            btnSubTitle.MouseUpEventHandler = eventHandler;
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddInputPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddInputPage.cs
new file mode 100644
index 0000000..9d0a8c2
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddInputPage.cs
@@ -0,0 +1,388 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.DAL.Server;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+
+namespace HDL_ON.UI
+{
+    public class AddInputPage : FrameLayout
+    {
+        FrameLayout bodyView;
+        VerticalScrolViewLayout functionListView;
+
+        Action<SecurityAlarm> refreshAction;
+
+        SecurityAlarm securityAlarm;
+        List<SecurityInput> inputList = new List<SecurityInput>();
+
+        public AddInputPage(SecurityAlarm alarm,Action<SecurityAlarm> action)
+        {
+            bodyView = this;
+            securityAlarm = alarm;
+            refreshAction = action;
+        }
+
+
+        /// <summary>
+        /// 鍔犺浇鐣岄潰
+        /// </summary>
+        public void LoadPage()
+        {
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+            new TopViewDiv(bodyView, Language.StringByID(StringId.AddDefenseFunction)).LoadTopView();
+
+            #region 鏄剧ず鐨勫姛鑳界被鍨嬪垏鎹㈠尯鍩�
+            var showdFunctionTypeRow = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(53),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            bodyView.AddChidren(showdFunctionTypeRow);
+
+
+            var btnFloorDownIcon = new Button()
+            {
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealHeight(18),
+                UnSelectedImagePath = "Public/DownIcon.png",
+            };
+            showdFunctionTypeRow.AddChidren(btnFloorDownIcon);
+
+            var btnFloor = new Button()
+            {
+                X = btnFloorDownIcon.Right,
+                Y = Application.GetRealHeight(18),
+                Width = Application.GetRealWidth(200),
+                Height = Application.GetMinRealAverage(16),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = DB_ResidenceData.Instance.CurFloor.roomName,
+            };
+            showdFunctionTypeRow.AddChidren(btnFloor);
+            btnFloor.MouseUpEventHandler += (sender, e) =>
+            {
+                string nowSelectId = null;
+                var listAllFun = FunctionList.List.GetArmSensorList();
+
+                //鏄剧ず涓嬫媺鐣岄潰
+                var form = new FloorRoomSelectPopupView();
+                form.ShowDeviceFunctionView(btnFloor, listAllFun, (selectId, listFun) =>
+                {
+                    nowSelectId = selectId;
+                    //閲嶆柊鍒锋柊璁惧鍒楄〃
+                    this.LoadFunctionListRow(listFun);
+                }, nowSelectId);
+            };
+
+
+            #endregion
+
+            functionListView = new VerticalScrolViewLayout()
+            {
+                Y = showdFunctionTypeRow.Bottom,
+                Height = Application.GetRealHeight(530),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            };
+            bodyView.AddChidren(functionListView);
+
+
+
+            LoadFunctionListRow(FunctionList.List.GetArmSensorList());
+
+
+
+            var bottomView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(591),
+                Height = Application.GetRealHeight(100),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(22),
+            };
+            this.AddChidren(bottomView);
+
+            var btnConfrim = new Button()
+            {
+                X = Application.GetRealWidth(78),
+                Y = Application.GetRealHeight(12),
+                Width = Application.GetRealWidth(220),
+                Height = Application.GetRealWidth(44),
+                Radius = (uint)Application.GetRealWidth(22),
+                BackgroundColor = CSS_Color.MainColor,
+                TextID = StringId.Confirm,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            bottomView.AddChidren(btnConfrim);
+            btnConfrim.MouseUpEventHandler = (sender, e) =>
+            {
+                securityAlarm.input = new List<SecurityInput>();
+                foreach (var input in inputList)
+                {
+                    if (input.addCondition)
+                    {
+                        securityAlarm.input.Add(input);
+                    }
+                }
+                this.RemoveFromParent();
+                refreshAction?.Invoke(securityAlarm);
+            };
+
+            
+
+        }
+
+
+        // <summary>
+        /// 鏄剧ず鍔熻兘Row
+        /// </summary>
+        void LoadFunctionListRow(List<Function> functions)
+        {
+            functionListView.RemoveAll();
+            if (functions == null)
+            {
+                //鍒濆鍊�
+                functions = FunctionList.List.GetArmSensorList();
+            }
+            foreach (var function in functions)
+            {
+                var input = securityAlarm.input.Find((obj) => obj.sid == function.sid);
+                if (input == null)
+                {
+                    input = new SecurityInput();
+                    input.sid = function.sid;
+                }
+                else
+                {
+                    input.addCondition = true;
+                }
+                inputList.Add(input);
+
+                FrameLayout functionRow = new FrameLayout()
+                {
+                    Height = Application.GetRealHeight(65),
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                };
+                functionListView.AddChidren(functionRow);
+
+                var btnFunctionName = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Width = Application.GetRealWidth(200),
+                    Height = Application.GetRealHeight(44),
+                    Text = function.name,
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                functionRow.AddChidren(btnFunctionName);
+
+                var btnFunctionFloorName = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Y = Application.GetRealHeight(24),
+                    Width = Application.GetRealWidth(200),
+                    Height = Application.GetRealHeight(41),
+                    Text = function.GetRoomListName(),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+                };
+                functionRow.AddChidren(btnFunctionFloorName);
+
+                Button btnState = new Button()
+                {
+                    Width = Application.GetRealWidth(317),
+                    TextAlignment = TextAlignment.CenterRight,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextColor = CSS_Color.PromptingColor1,
+                };
+                functionRow.AddChidren(btnState);
+
+
+                Button btnChooseIcon = new Button()
+                {
+                    X = Application.GetRealWidth(333),
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetMinRealAverage(32),
+                    Height = Application.GetMinRealAverage(32),
+                    UnSelectedImagePath = "Public/ChooseIcon.png",
+                    SelectedImagePath = "Public/ChooseOnIcon.png",
+                };
+                functionRow.AddChidren(btnChooseIcon);
+
+                btnChooseIcon.MouseUpEventHandler = (sender, e) => {
+                    btnChooseIcon.IsSelected = !btnChooseIcon.IsSelected;
+                    if(btnChooseIcon.IsSelected)
+                    {
+                        input.addCondition = true;
+                        if (input.condition.Count==0)
+                        {
+                            ShowStateDialog(input, btnState,btnChooseIcon);
+                        }
+                    }
+                    else
+                    {
+                        input.addCondition = false;
+                    }
+                };
+                btnState.MouseUpEventHandler = (sender, e) =>
+                {
+                    ShowStateDialog(input, btnState, btnChooseIcon);
+                };
+
+
+                if (input.addCondition)
+                {
+                    btnChooseIcon.IsSelected = true;
+                    btnState.Text = input.StateText();
+                }
+
+
+                functionListView.AddChidren(new Button()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Width = Application.GetRealWidth(343),
+                    Height = Application.GetRealWidth(1),
+                    BackgroundColor = CSS_Color.DividingLineColor,
+                });
+
+
+            }
+        }
+
+
+        private void ShowStateDialog(SecurityInput input,Button btnState,Button btnChoose = null)
+        {
+            Dialog dialog = new Dialog();
+
+            FrameLayout contentView = new FrameLayout();
+            dialog.AddChidren(contentView);
+            contentView.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+                if (input.condition.Count == 0)
+                {
+                    if (btnChoose != null)
+                    {
+                        btnChoose.IsSelected = false;
+                    }
+                }
+            };
+
+            VerticalScrolViewLayout optinView = new VerticalScrolViewLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(515),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(88),
+                Radius = (uint)Application.GetRealHeight(13),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            contentView.AddChidren(optinView);
+
+            Button btnOpen = new Button()
+            {
+                Height = Application.GetRealHeight(44),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                Text = input.GetStateText("true")
+            };
+            optinView.AddChidren(btnOpen);
+
+            optinView.AddChidren(new Button()
+            {
+                Height = 1,
+                BackgroundColor = CSS_Color.DividingLineColor
+            });
+
+            Button btnClose = new Button()
+            {
+                Height = Application.GetRealHeight(44),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.PromptingColor1,
+                Text = input.GetStateText("false"),
+                TextSize = CSS_FontSize.SubheadingFontSize,
+            };
+            optinView.AddChidren(btnClose);
+
+
+            Button btnCancel = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = optinView.Bottom + Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(44),
+                Radius = (uint)Application.GetRealHeight(13),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                TextID = StringId.Cancel,
+                TextColor = CSS_Color.WarningColor,
+                IsBold = true,
+            };
+            contentView.AddChidren(btnCancel);
+
+            dialog.Show();
+
+            btnOpen.MouseUpEventHandler = (sender, e) => {
+                btnState.Text = btnOpen.Text;
+                input.condition = new List<SecurityInputCondition>()
+                {
+                    new SecurityInputCondition()
+                    {
+                        key = "status",
+                        value = "true",
+                    }
+                };
+                input.addCondition = true;
+                if (btnChoose != null)
+                {
+                    btnChoose.IsSelected = true;
+                }
+                dialog.Close();
+            };
+
+            btnClose.MouseUpEventHandler = (sender, e) =>
+            {
+                btnState.Text = btnClose.Text;
+                input.condition = new List<SecurityInputCondition>()
+                {
+                    new SecurityInputCondition()
+                    {
+                        key = "status",
+                        value = "false",
+                    }
+                };
+                input.addCondition = true;
+                if (btnChoose != null)
+                {
+                    btnChoose.IsSelected = true;
+                }
+                dialog.Close();
+            };
+
+            btnCancel.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+                if (input.condition.Count == 0)
+                {
+                    if (btnChoose != null)
+                    {
+                        btnChoose.IsSelected = false;
+                    }
+                }
+
+            };
+
+        }
+
+
+    }
+
+}
\ No newline at end of file
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs
new file mode 100644
index 0000000..9aac9de
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputPage.cs
@@ -0,0 +1,441 @@
+锘縰sing System;
+using Shared;
+using System.Text.RegularExpressions;
+using System.Collections.Generic;
+using HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+
+namespace HDL_ON.UI
+{
+    public class AddOutputPage : FrameLayout
+    {
+        FrameLayout bodyView;
+
+        FrameLayout showdFunctionTypeRow;
+
+        /// <summary>
+        /// 妤煎眰閫夋嫨涓嬫媺鍥炬爣
+        /// </summary>
+        Button btnFloorDownIcon;
+        /// <summary>
+        /// 妤煎眰鏄剧ず
+        /// </summary>
+        Button btnFloor;
+
+        /// <summary>
+        /// 绛涢�夋枃鏈樉绀�
+        /// </summary>
+        Button btnScreenText;
+
+        VerticalScrolViewLayout functionListView;
+
+        SecurityAlarm securityAlarm;
+        Action<SecurityAlarm> refreshAction;
+        List<SecurityOutput> outputList = new List<SecurityOutput>();
+
+        List<Function> allocatedList = new List<Function>();
+
+        public AddOutputPage(SecurityAlarm function, Action<SecurityAlarm> action)
+        {
+            bodyView = this;
+            securityAlarm = function;
+            refreshAction = action;
+        }
+
+
+        /// <summary>
+        /// 鍔犺浇鐣岄潰
+        /// </summary>
+        public void LoadPage()
+        {
+            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+            new TopViewDiv(bodyView, Language.StringByID(StringId.AddFunction)).LoadTopView();
+
+            #region 鏄剧ず鐨勫姛鑳界被鍨嬪垏鎹㈠尯鍩�
+            showdFunctionTypeRow = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(64),
+                Height = Application.GetRealHeight(62),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            bodyView.AddChidren(showdFunctionTypeRow);
+
+
+            btnFloorDownIcon = new Button()
+            {
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                X = Application.GetRealWidth(16),
+                Y = Application.GetRealHeight(18),
+                UnSelectedImagePath = "Public/DownIcon.png",
+            };
+            showdFunctionTypeRow.AddChidren(btnFloorDownIcon);
+
+            btnFloor = new Button()
+            {
+                X = btnFloorDownIcon.Right,
+                Y = Application.GetRealHeight(18),
+                Width = Application.GetRealWidth(200),
+                Height = Application.GetMinRealAverage(16),
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+                TextAlignment = TextAlignment.CenterLeft,
+                Text = DB_ResidenceData.Instance.CurFloor.roomName,
+            };
+            showdFunctionTypeRow.AddChidren(btnFloor);
+
+            #endregion
+
+            functionListView = new VerticalScrolViewLayout()
+            {
+                Y = showdFunctionTypeRow.Bottom,
+                Height = Application.GetRealHeight(530 -100),
+                BackgroundColor = CSS_Color.BackgroundColor,
+            };
+            bodyView.AddChidren(functionListView);
+
+
+
+
+
+
+            foreach (var function in FunctionList.List.Functions)
+            {
+                if (!MainPage.SceneSupportFunctionList.Contains(function.spk))
+                {
+                    continue;
+                }
+                if (function == null)
+                {
+                    continue;
+                }
+                function.roomIds.Remove(null);
+                    allocatedList.Add(function);
+            }
+
+            LoadFunctionListRow(null);
+
+
+
+
+
+
+
+            var bottomView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(591),
+                Height = Application.GetRealHeight(100),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(22),
+            };
+            this.AddChidren(bottomView);
+
+            var btnConfrim = new Button()
+            {
+                X = Application.GetRealWidth(78),
+                Y = Application.GetRealHeight(12),
+                Width = Application.GetRealWidth(220),
+                Height = Application.GetRealWidth(44),
+                Radius = (uint)Application.GetRealWidth(22),
+                BackgroundColor = CSS_Color.MainColor,
+                TextID = StringId.Confirm,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            bottomView.AddChidren(btnConfrim);
+            btnConfrim.MouseUpEventHandler = (sender, e) =>
+            {
+                securityAlarm.output = new List<SecurityOutput>();
+                foreach (var output in outputList)
+                {
+                    if (output.addCondition)
+                    {
+                        securityAlarm.output.Add(output);
+                    }
+                }
+                this.RemoveFromParent();
+                refreshAction?.Invoke(securityAlarm);
+            };
+
+
+
+
+
+
+        }
+
+
+
+
+        // <summary>
+        /// 鏄剧ず鍔熻兘Row
+        /// </summary>
+        void LoadFunctionListRow(List<Function> functions)
+        {
+            functionListView.RemoveAll();
+            if (functions == null)
+            {
+                functions = allocatedList;
+            }
+            foreach (var function in functions)
+            {
+                var output = securityAlarm.output.Find((obj) => obj.sid == function.sid);
+                if (output == null)
+                {
+                    output = new SecurityOutput();
+                    output.sid = function.sid;
+                }
+                else
+                {
+                    output.addCondition = true;
+                }
+                outputList.Add(output);
+
+                FrameLayout functionRow = new FrameLayout()
+                {
+                    Height = Application.GetRealHeight(65),
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                };
+                functionListView.AddChidren(functionRow);
+
+                var btnFunctionName = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Width = Application.GetRealWidth(200),
+                    Height = Application.GetRealHeight(44),
+                    Text = function.name,
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.FirstLevelTitleColor,
+                    TextSize = CSS_FontSize.TextFontSize,
+                };
+                functionRow.AddChidren(btnFunctionName);
+
+                var btnFunctionFloorName = new Button()
+                {
+                    X = Application.GetRealWidth(16),
+                    Y = Application.GetRealHeight(24),
+                    Width = Application.GetRealWidth(200),
+                    Height = Application.GetRealHeight(41),
+                    Text = function.GetRoomListName(),
+                    TextAlignment = TextAlignment.CenterLeft,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel,
+                };
+                functionRow.AddChidren(btnFunctionFloorName);
+
+                Button btnState = new Button()
+                {
+                    Width = Application.GetRealWidth(317),
+                    TextAlignment = TextAlignment.CenterRight,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextColor = CSS_Color.PromptingColor1,
+                };
+                functionRow.AddChidren(btnState);
+              
+
+                Button btnChooseIcon = new Button()
+                {
+                    X = Application.GetRealWidth(333),
+                    Gravity = Gravity.CenterVertical,
+                    Width = Application.GetMinRealAverage(32),
+                    Height = Application.GetMinRealAverage(32),
+                    UnSelectedImagePath = "Public/ChooseIcon.png",
+                    SelectedImagePath = "Public/ChooseOnIcon.png",
+                };
+                functionRow.AddChidren(btnChooseIcon);
+
+                btnChooseIcon.MouseUpEventHandler = (sender, e) => {
+                    btnChooseIcon.IsSelected = !btnChooseIcon.IsSelected;
+                    if (btnChooseIcon.IsSelected)
+                    {
+                        output.addCondition = true;
+                        if (output.status.Count == 0)
+                        {
+                            ShowStateDialog(output, btnState,btnChooseIcon);
+                        }
+                    }
+                    else
+                    {
+                        output.addCondition = false;
+                    }
+                };
+                btnState.MouseUpEventHandler = (sender, e) =>
+                {
+                    ShowStateDialog(output, btnState, btnChooseIcon);
+                };
+
+
+                if (output.addCondition)
+                {
+                    btnChooseIcon.IsSelected = true;
+                    btnState.Text = output.StateText();
+                }
+
+
+                functionListView.AddChidren(new Button()
+                {
+                    Gravity = Gravity.CenterHorizontal,
+                    Width = Application.GetRealWidth(343),
+                    Height = Application.GetRealWidth(1),
+                    BackgroundColor = CSS_Color.DividingLineColor,
+                });
+
+
+            }
+        }
+
+
+
+        private void ShowStateDialog(SecurityOutput output, Button btnState, Button btnChoose = null)
+        {
+            Dialog dialog = new Dialog();
+
+            FrameLayout contentView = new FrameLayout();
+            dialog.AddChidren(contentView);
+            contentView.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+                if (output.status.Count == 0)
+                {
+                    if (btnChoose != null)
+                    {
+                        btnChoose.IsSelected = false;
+                    }
+                }
+            };
+
+            VerticalScrolViewLayout optinView = new VerticalScrolViewLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = Application.GetRealHeight(515),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(88),
+                Radius = (uint)Application.GetRealHeight(13),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            contentView.AddChidren(optinView);
+
+            Button btnOpen = new Button()
+            {
+                Height = Application.GetRealHeight(44),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.On
+            };
+            optinView.AddChidren(btnOpen);
+
+            optinView.AddChidren(new Button()
+            {
+                Height = 1,
+                BackgroundColor = CSS_Color.DividingLineColor
+            });
+
+            Button btnClose = new Button()
+            {
+                Height = Application.GetRealHeight(44),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.PromptingColor1,
+                TextID = StringId.OFF,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+            };
+            optinView.AddChidren(btnClose);
+
+
+            Button btnCancel = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Y = optinView.Bottom + Application.GetRealHeight(8),
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(44),
+                Radius = (uint)Application.GetRealHeight(13),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                TextID = StringId.Cancel,
+                TextColor = CSS_Color.WarningColor,
+                IsBold = true,
+            };
+            contentView.AddChidren(btnCancel);
+
+            dialog.Show();
+
+            btnOpen.MouseUpEventHandler = (sender, e) => {
+                btnState.Text = btnOpen.Text;
+                output.status = new List<SecurityOutputStatus>()
+                {
+                    new SecurityOutputStatus()
+                    {
+                        key = FunctionAttributeKey.OnOff,
+                        value = "on",
+                    }
+                };
+                output.addCondition = true;
+                if (btnChoose != null)
+                {
+                    btnChoose.IsSelected = true;
+                }
+                dialog.Close();
+            };
+
+            btnClose.MouseUpEventHandler = (sender, e) =>
+            {
+                btnState.Text = btnClose.Text;
+                output.status = new List<SecurityOutputStatus>()
+                {
+                    new SecurityOutputStatus()
+                    {
+                        key = FunctionAttributeKey.OnOff,
+                        value = "off",
+                    }
+                };
+                output.addCondition = true;
+                if (btnChoose != null)
+                {
+                    btnChoose.IsSelected = true;
+                }
+                dialog.Close();
+            };
+
+            btnCancel.MouseUpEventHandler = (sender, e) =>
+            {
+                dialog.Close();
+                if (output.status.Count == 0)
+                {
+                    if (btnChoose != null)
+                    {
+                        btnChoose.IsSelected = false;
+                    }
+                }
+
+            };
+
+        }
+
+
+
+
+        /// <summary>
+        /// 浣忓畢鍒楄〃鐐瑰嚮浜嬩欢
+        /// </summary>
+        void LoadDialog_ChangeFloor()
+        {
+            string nowSelectId = null;
+            btnFloor.MouseUpEventHandler += (sender, e) =>
+            {
+                var listAllFun = new List<Function>();
+                listAllFun.AddRange(allocatedList);
+
+                //鏄剧ず涓嬫媺鐣岄潰
+                var form = new FloorRoomSelectPopupView();
+                form.ShowDeviceFunctionView(btnFloor, listAllFun, (selectId, listFun) =>
+                {
+                    nowSelectId = selectId;
+                    //閲嶆柊鍒锋柊璁惧鍒楄〃
+                    this.LoadFunctionListRow(listFun);
+                }, nowSelectId);
+            };
+        }
+
+
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputSettingPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputSettingPage.cs
new file mode 100644
index 0000000..5f6e9d6
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/AddOutputSettingPage.cs
@@ -0,0 +1,995 @@
+锘�//using System;
+//using System.Collections.Generic;
+//using HDL_ON.Entity;
+//using HDL_ON.UI.CSS;
+//using Shared;
+
+//namespace HDL_ON.UI
+//{
+//    public class AddOutputSettingPage : FrameLayout
+//    {
+//        FrameLayout bodyView;
+//        VerticalScrolViewLayout contentView;
+//        Button btnOnText;
+//        Button btnBrightnessText;
+
+//        SecurityAlarm securityAlarm;
+//        Function alarmFunction;
+//        Action refreshAction;
+
+
+//        List<SecurityOutput> outputList = new List<SecurityOutput>();
+
+
+//        public AddOutputSettingPage(SecurityAlarm alarm,Function function, Action action)
+//        {
+//            bodyView = this;
+//            securityAlarm = alarm;
+//            refreshAction = action;
+//            alarmFunction = function;
+//        }
+
+//        public void LoadPage()
+//        {
+//            bodyView.BackgroundColor = CSS_Color.BackgroundColor;
+
+//            new TopViewDiv(bodyView, Language.StringByID(StringId.AddAlarmTarget)).LoadTopView();
+
+//            contentView = new VerticalScrolViewLayout()
+//            {
+//                Y = Application.GetRealHeight(64),
+//                Height = Application.GetRealHeight(520),
+//                ScrollEnabled = false,
+//            };
+//            bodyView.AddChidren(contentView);
+
+//                var output = securityAlarm.output.Find((obj) => obj.sid == alarmFunction.sid);
+//            if (output == null)
+//            {
+//                output = new SecurityOutput();
+//                output.sid = alarmFunction.sid;
+//            }
+//            else
+//            {
+//                output.addCondition = true;
+//            }
+//            inputList.Add(output);
+
+//            LoadFunctionRow(alarmFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.OnOff));
+
+//            foreach (var attr in alarmFunction.attributes)
+//            {
+
+
+
+//                switch (attr.key)
+//                {
+//                    case FunctionAttributeKey.SetTemp:
+//                        LoadFunctionRow(alarmFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.SetTemp));
+//                        break;
+//                    case FunctionAttributeKey.Mode:
+
+//                        LoadFunctionRow(alarmFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.Mode));
+//                        break;
+//                    case FunctionAttributeKey.FanSpeed:
+//                        LoadFunctionRow(alarmFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed));
+//                        break;
+//                    case FunctionAttributeKey.Percent:
+//                        LoadFunctionRow(alarmFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.Percent));
+//                        break;
+//                    case FunctionAttributeKey.Brightness:
+//                        LoadFunctionRow(alarmFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.Brightness));
+//                        break;
+//                    case FunctionAttributeKey.FadeTime:
+//                        LoadFunctionRow(alarmFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.FadeTime));
+//                        break;
+//                }
+//            }
+
+//            var bottomView = new FrameLayout()
+//            {
+//                Y = Application.GetRealHeight(591),
+//                Height = Application.GetRealHeight(106),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(16),
+//            };
+//            bodyView.AddChidren(bottomView);
+
+//            var btnConfrim = new Button()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Y = Application.GetRealHeight(12),
+//                Width = Application.GetRealWidth(220),
+//                Height = Application.GetRealWidth(44),
+//                TextAlignment = TextAlignment.Center,
+//                TextColor = CSS_Color.MainBackgroundColor,
+//                BackgroundColor = CSS_Color.MainColor,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//                IsBold = true,
+//                Radius = (uint)Application.GetRealWidth(22),
+//                TextID = StringId.Complete
+//            };
+//            bottomView.AddChidren(btnConfrim);
+
+//            btnConfrim.MouseUpEventHandler = (sender, e) =>
+//            {
+//            };
+//        }
+
+
+//        /// <summary>
+//        /// 鍔犺浇鍔熻兘Row
+//        /// </summary>
+//        void LoadFunctionRow(FunctionAttributes sceneStatus)
+//        {
+//            if (sceneStatus == null)
+//                return;
+//            #region Row code
+//            var row = new FrameLayout()
+//            {
+//                Height = Application.GetRealHeight(50),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//            };
+//            contentView.AddChidren(row);
+
+
+//            if (sceneStatus.key != FunctionAttributeKey.OnOff)
+//            {
+//                row.AddChidren(new Button() { X = Application.GetRealWidth(16), Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor });
+//            }
+//            else
+//            {
+//                if (sceneStatus.state == "stop")
+//                {
+//                    sceneStatus.state = "on";
+//                }
+//            }
+//            Button btnRight = new Button()
+//            {
+//                X = Application.GetRealWidth(339),
+//                Gravity = Gravity.CenterVertical,
+//                Width = Application.GetMinRealAverage(16),
+//                Height = Application.GetMinRealAverage(16),
+//                UnSelectedImagePath = "Public/Right.png",
+//            };
+//            row.AddChidren(btnRight);
+
+
+//            var showCode = "";
+
+//            var btnFunctionText = new Button()
+//            {
+//                Width = Application.GetRealWidth(330),
+//                TextAlignment = TextAlignment.CenterRight,
+//                TextColor = CSS_Color.PromptingColor1,
+//                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//                Text = sceneFunctionStatus.GetValueText(showCode) + sceneFunctionStatus.GetUintString()
+//            };
+//            row.AddChidren(btnFunctionText);
+
+
+
+//            if (sceneStatus.key == FunctionAttributeKey.OnOff)
+//            {
+//                btnOnText = btnFunctionText;
+//            }
+//            else if (sceneStatus.key == FunctionAttributeKey.Brightness || sceneStatus.key == FunctionAttributeKey.Percent)
+//            {
+//                btnBrightnessText = btnFunctionText;
+//            }
+
+//            var btnFunctionName = new Button()
+//            {
+//                X = Application.GetRealWidth(16),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//                Text = sceneStatus.GetNameText()
+//            };
+//            row.AddChidren(btnFunctionName);
+//            btnFunctionName.MouseUpEventHandler = (sender, e) =>
+//            {
+//                switch (sceneStatus.key)
+//                {
+//                    case FunctionAttributeKey.OnOff:
+//                        LoadEditDialog_OnOff(sceneStatus, btnFunctionText);
+//                        break;
+//                    case FunctionAttributeKey.Brightness:
+//                        LoadEditDialog_Percent(sceneStatus, btnFunctionText);
+//                        break;
+//                    case FunctionAttributeKey.Mode:
+//                        var statusList = new List<string>();
+//                        var tr = alarmFunction.localFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.Mode);
+//                        foreach (var t in tr.value)
+//                        {
+//                            statusList.Add(t);
+//                        }
+//                        LoadEditDialog_FunctionPar(sceneStatus, btnFunctionText, statusList);
+//                        break;
+//                    case FunctionAttributeKey.FanSpeed:
+//                        var fanStatusList = new List<string>();
+//                        var tr1 = alarmFunction.localFunction.attributes.Find((obj) => obj.key == FunctionAttributeKey.FanSpeed);
+//                        foreach (var t in tr1.value)
+//                        {
+//                            fanStatusList.Add(t);
+//                        }
+//                        LoadEditDialog_FunctionPar(sceneStatus, btnFunctionText, fanStatusList);
+//                        break;
+//                    case FunctionAttributeKey.SetTemp:
+//                        LoadEditDialog_Temp(sceneStatus, btnFunctionText);
+//                        break;
+//                    case FunctionAttributeKey.FadeTime:
+
+//                        break;
+//                    case "cct":
+//                        break;
+//                    case FunctionAttributeKey.Percent:
+//                        LoadEditDialog_Percent(sceneStatus, btnFunctionText);
+//                        break;
+//                }
+//            };
+
+//            #endregion
+//        }
+
+
+
+//        #region 灞炴�ч�夋嫨寮圭獥
+//        /// <summary>
+//        /// 鍔犺浇寮�鍏抽�夋嫨寮圭獥
+//        /// </summary>
+//        /// <param name="function"></param>
+//        /// <param name="btn"></param>
+//        void LoadEditDialog_OnOff(SceneFunctionStatus trait, Button btn)
+//        {
+//            Dialog dialog = new Dialog();
+
+//            var pView = new FrameLayout()
+//            {
+//                BackgroundColor = CSS_Color.DialogTransparentColor1,
+//            };
+//            dialog.AddChidren(pView);
+
+//            var optionBaseView = new FrameLayout()
+//            {
+//                Y = Application.GetRealHeight(500),
+//                Height = Application.GetRealHeight(160),
+//                AnimateSpeed = 0.3f,
+//                Animate = Animate.DownToUp,
+//            };
+//            pView.AddChidren(optionBaseView);
+
+//            var optionView = new VerticalScrolViewLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(100),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//                ScrollEnabled = false,
+//            };
+//            optionBaseView.AddChidren(optionView);
+
+//            var btnOn = new Button()
+//            {
+//                Height = Application.GetRealHeight(50),
+//                TextAlignment = TextAlignment.Center,
+//                TextColor = CSS_Color.TextualColor,
+//                SelectedTextColor = CSS_Color.MainColor,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//                TextID = StringId.On,
+//                IsSelected = trait.value.ToString() == "on"
+//            };
+//            optionView.AddChidren(btnOn);
+
+//            optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+//            var btnOff = new Button()
+//            {
+//                Height = Application.GetRealHeight(50),
+//                TextAlignment = TextAlignment.Center,
+//                TextColor = CSS_Color.TextualColor,
+//                SelectedTextColor = CSS_Color.MainColor,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//                TextID = StringId.OFF,
+//                IsSelected = trait.value.ToString() == "off"
+//            };
+//            optionView.AddChidren(btnOff);
+
+//            var btnCancel = new Button()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Y = Application.GetRealHeight(8) + optionView.Bottom,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(50),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//                TextID = StringId.Cancel,
+//                TextColor = CSS_Color.WarningColor,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//            };
+//            optionBaseView.AddChidren(btnCancel);
+
+//            dialog.Show();
+
+//            pView.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//            };
+
+//            btnCancel.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//            };
+//            btnOn.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//                trait.value = "on";
+//                alarmFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = "on";
+//                btn.Text = trait.GetValueText() + trait.GetUintString();
+
+//                var temp = alarmFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness);
+//                if (temp == null)
+//                {
+//                    temp = alarmFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent);
+//                }
+//                if (temp != null)
+//                {
+//                    if (temp.value == "0")
+//                    {
+//                        temp.value = "100";
+//                    }
+//                    btnBrightnessText.Text = temp.GetValueText() + "%";
+//                }
+//            };
+//            btnOff.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//                trait.value = "off";
+//                alarmFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = "off";
+//                btn.Text = trait.GetValueText() + trait.GetUintString();
+
+//                var temp = alarmFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Brightness);
+//                if (temp == null)
+//                {
+//                    temp = alarmFunction.status.Find((obj) => obj.key == FunctionAttributeKey.Percent);
+//                }
+//                if (temp != null)
+//                {
+//                    if (temp.value != "0")
+//                    {
+//                        temp.value = "0";
+//                    }
+//                    btnBrightnessText.Text = temp.GetValueText() + "%";
+//                }
+//            };
+
+//        }
+
+//        /// <summary>
+//        /// 鍔犺浇娓╁害閫夋嫨寮圭獥
+//        /// </summary>
+//        /// <param name="function"></param>
+//        /// <param name="btn"></param>
+//        void LoadEditDialog_Temp(SceneFunctionStatus trait, Button btn)
+//        {
+//            double temp = 16;
+//            double.TryParse(trait.value, out temp);
+//            trait.value = temp.ToString();
+
+//            List<string> pickerItems = new List<string>();
+//            if (trait == null)
+//            {
+//                return;
+//            }
+
+//            Dialog dialog = new Dialog();
+
+//            var pView = new FrameLayout()
+//            {
+//                BackgroundColor = CSS_Color.DialogTransparentColor1,
+//            };
+//            dialog.AddChidren(pView);
+
+//            var optionBaseView = new FrameLayout()
+//            {
+//                Y = Application.GetRealHeight(456 - 60),
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(260),
+//                AnimateSpeed = 0.3f,
+//                Animate = Animate.DownToUp,
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            pView.AddChidren(optionBaseView);
+
+//            var topView = new FrameLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(40),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            optionBaseView.AddChidren(topView);
+//            topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+//            var btnCancel = new Button()
+//            {
+//                X = Application.GetRealWidth(21),
+//                Width = Application.GetRealWidth(100),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = CSS_Color.PromptingColor1,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextID = StringId.Cancel,
+//            };
+//            topView.AddChidren(btnCancel);
+
+//            var btnConfrim = new Button()
+//            {
+//                Width = Application.GetRealWidth(320),
+//                TextAlignment = TextAlignment.CenterRight,
+//                TextColor = CSS_Color.MainColor,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextID = StringId.Confirm,
+//            };
+//            topView.AddChidren(btnConfrim);
+
+//            UIPickerView uIPickerView = new UIPickerView()
+//            {
+//                Y = Application.GetRealHeight(40),
+//                Height = Application.GetRealHeight(210),
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            for (int i = 16; i <= 32; i += 1)
+//            {
+//                pickerItems.Add(i.ToString() + trait.GetUintString());
+//            }
+//            uIPickerView.setNPicker(pickerItems, null, null);
+//            optionBaseView.AddChidren(uIPickerView);
+//            uIPickerView.setCurrentItems(pickerItems.IndexOf(trait.value.ToString()), 4, 5);
+
+//            string selectItem = pickerItems[0];
+//            if (pickerItems.Contains(trait.value + trait.GetUintString()))
+//            {
+//                selectItem = trait.value.ToString() + trait.GetUintString();
+//            }
+
+//            dialog.Show();
+
+//            pView.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//            };
+
+//            btnCancel.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//            };
+//            uIPickerView.OnSelectChangeEvent = (int1, int2, int3) => {
+//                selectItem = pickerItems[int1];
+//            };
+//            btnConfrim.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//                btn.Text = selectItem;
+//                //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.value.ToString() ;
+//                trait.value = selectItem.Replace(trait.GetUintString(), "");
+//            };
+
+//        }
+
+//        /// <summary>
+//        /// 鍔犺浇浜害閫夋嫨寮圭獥
+//        /// </summary>
+//        /// <param name="function"></param>
+//        /// <param name="btn"></param>
+//        void LoadEditDialog_Percent(SceneFunctionStatus trait, Button btn)
+//        {
+//            if (trait == null)
+//            {
+//                return;
+//            }
+
+//            Dialog dialog = new Dialog();
+
+//            var pView = new FrameLayout()
+//            {
+//                BackgroundColor = CSS_Color.DialogTransparentColor1,
+//            };
+//            dialog.AddChidren(pView);
+
+//            var optionBaseView = new FrameLayout()
+//            {
+//                Y = Application.GetRealHeight(467),
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(180),
+//                AnimateSpeed = 0.3f,
+//                Animate = Animate.DownToUp,
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            pView.AddChidren(optionBaseView);
+
+//            var topView = new FrameLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(40),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            optionBaseView.AddChidren(topView);
+//            topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+//            var btnTitle = new Button()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                TextAlignment = TextAlignment.Center,
+//                Width = Application.GetRealWidth(100),
+//                Text = trait.GetNameText(),
+//                IsBold = true,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//            };
+//            topView.AddChidren(btnTitle);
+
+//            var btnCancel = new Button()
+//            {
+//                X = Application.GetRealWidth(21),
+//                Width = Application.GetRealWidth(100),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = CSS_Color.PromptingColor1,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextID = StringId.Cancel,
+//            };
+//            topView.AddChidren(btnCancel);
+
+//            var btnConfrim = new Button()
+//            {
+//                Width = Application.GetRealWidth(320),
+//                TextAlignment = TextAlignment.CenterRight,
+//                TextColor = CSS_Color.MainColor,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextID = StringId.Confirm,
+//            };
+//            topView.AddChidren(btnConfrim);
+
+//            Button btnMinusSignIcon = new Button()
+//            {
+//                X = Application.GetRealWidth(26),
+//                Y = Application.GetRealHeight(118),
+//                Width = Application.GetMinRealAverage(24),
+//                Height = Application.GetMinRealAverage(24),
+//                UnSelectedImagePath = "Public/MinusSignIcon.png",
+//            };
+//            optionBaseView.AddChidren(btnMinusSignIcon);
+
+//            DiyImageSeekBar controlBar = new DiyImageSeekBar()
+//            {
+//                X = btnMinusSignIcon.Right + Application.GetRealWidth(12),
+//                Y = Application.GetRealHeight(100),//414,璁捐鏁版嵁
+//                Width = Application.GetRealWidth(220),
+//                Height = Application.GetRealHeight(54),
+//                SeekBarViewHeight = Application.GetRealHeight(8),
+//                ThumbImagePath = "Public/ThumbImage.png",
+//                ThumbImageHeight = Application.GetRealHeight(54),
+//                ProgressBarColor = CSS_Color.MainColor,
+//                ProgressTextColor = CSS_Color.FirstLevelTitleColor,
+//                ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//                MaxValue = 100,
+//                Progress = trait.value.ToString().Replace("{}", "") == "" ? 0 : Convert.ToInt32(trait.value.Replace("{}", "")),
+//                SeekBarPadding = Application.GetRealWidth(20),
+//            };
+//            optionBaseView.AddChidren(controlBar);
+
+//            Button btnPlusSgnIcon = new Button()
+//            {
+//                X = controlBar.Right + Application.GetRealWidth(12),
+//                Y = Application.GetRealHeight(118),
+//                Width = Application.GetMinRealAverage(24),
+//                Height = Application.GetMinRealAverage(24),
+//                UnSelectedImagePath = "Public/PlusSignIcon.png",
+//            };
+//            optionBaseView.AddChidren(btnPlusSgnIcon);
+
+//            btnMinusSignIcon.MouseUpEventHandler = (sender, e) =>
+//            {
+//                controlBar.Progress--;
+//            };
+//            btnPlusSgnIcon.MouseUpEventHandler = (sender, e) =>
+//            {
+//                controlBar.Progress++;
+//            };
+
+//            dialog.Show();
+//            pView.MouseUpEventHandler = (sender, e) =>
+//            {
+//                dialog.Close();
+//            };
+
+//            btnCancel.MouseUpEventHandler = (sender, e) =>
+//            {
+//                dialog.Close();
+//            };
+//            btnConfrim.MouseUpEventHandler = (sender, e) =>
+//            {
+//                dialog.Close();
+//                trait.value = controlBar.Progress.ToString();
+//                btn.Text = trait.value + trait.GetUintString();
+
+//                var temp = alarmFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff);
+//                if (temp != null)
+//                {
+//                    if (controlBar.Progress > 0)
+//                    {
+//                        temp.value = "on";
+//                    }
+//                    else
+//                    {
+//                        temp.value = "off";
+//                    }
+//                    btnOnText.Text = temp.GetValueText();
+//                }
+//            };
+//        }
+
+
+//        /// <summary>
+//        /// 鍔犺浇鍙樺寲閫熷害閫夋嫨寮圭獥
+//        /// </summary>
+//        /// <param name="function"></param>
+//        /// <param name="btn"></param>
+//        void LoadEditDialog_FadeTime(SceneFunctionStatus trait, Button btn)
+//        {
+//            if (trait == null)
+//            {
+//                return;
+//            }
+
+//            Dialog dialog = new Dialog();
+
+//            var pView = new FrameLayout()
+//            {
+//                BackgroundColor = CSS_Color.DialogTransparentColor1,
+//            };
+//            dialog.AddChidren(pView);
+
+//            var optionBaseView = new FrameLayout()
+//            {
+//                Y = Application.GetRealHeight(467),
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(180),
+//                AnimateSpeed = 0.3f,
+//                Animate = Animate.DownToUp,
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            pView.AddChidren(optionBaseView);
+
+//            var topView = new FrameLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(40),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            optionBaseView.AddChidren(topView);
+//            topView.AddChidren(new Button() { Y = Application.GetRealHeight(39), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor });
+
+//            var btnTitle = new Button()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                TextAlignment = TextAlignment.Center,
+//                Width = Application.GetRealWidth(100),
+//                Text = trait.GetNameText(),
+//                IsBold = true,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//            };
+//            topView.AddChidren(btnTitle);
+
+//            var btnCancel = new Button()
+//            {
+//                X = Application.GetRealWidth(21),
+//                Width = Application.GetRealWidth(100),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = CSS_Color.PromptingColor1,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextID = StringId.Cancel,
+//            };
+//            topView.AddChidren(btnCancel);
+
+//            var btnConfrim = new Button()
+//            {
+//                Width = Application.GetRealWidth(320),
+//                TextAlignment = TextAlignment.CenterRight,
+//                TextColor = CSS_Color.MainColor,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextID = StringId.Confirm,
+//            };
+//            topView.AddChidren(btnConfrim);
+
+//            Button btnMinusSignIcon = new Button()
+//            {
+//                X = Application.GetRealWidth(26),
+//                Y = Application.GetRealHeight(118),
+//                Width = Application.GetMinRealAverage(24),
+//                Height = Application.GetMinRealAverage(24),
+//                Text = "0s",
+//                TextColor = CSS_Color.PromptingColor1,
+//                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//            };
+//            optionBaseView.AddChidren(btnMinusSignIcon);
+
+//            DiyImageSeekBar controlBar = new DiyImageSeekBar()
+//            {
+//                X = btnMinusSignIcon.Right + Application.GetRealWidth(12),
+//                Y = Application.GetRealHeight(100),//414,璁捐鏁版嵁
+//                Width = Application.GetRealWidth(220),
+//                Height = Application.GetRealHeight(54),
+//                SeekBarViewHeight = Application.GetRealHeight(8),
+//                ThumbImagePath = "Public/ThumbImage.png",
+//                ThumbImageHeight = Application.GetRealHeight(54),
+//                ProgressBarColor = CSS_Color.MainColor,
+//                ProgressTextColor = CSS_Color.FirstLevelTitleColor,
+//                ProgressTextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//                MaxValue = 100,
+//                Progress = trait.value.ToString().Replace("{}", "") == "" ? 0 : Convert.ToInt32(trait.value.Replace("{}", "")),
+//                SeekBarPadding = Application.GetRealWidth(20),
+//            };
+//            optionBaseView.AddChidren(controlBar);
+
+//            Button btnPlusSgnIcon = new Button()
+//            {
+//                X = controlBar.Right + Application.GetRealWidth(12),
+//                Y = Application.GetRealHeight(118),
+//                Width = Application.GetMinRealAverage(24),
+//                Height = Application.GetMinRealAverage(24),
+//                Text = "10s",
+//                TextColor = CSS_Color.PromptingColor1,
+//                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+//            };
+//            optionBaseView.AddChidren(btnPlusSgnIcon);
+
+//            btnMinusSignIcon.MouseUpEventHandler = (sender, e) =>
+//            {
+//                controlBar.Progress--;
+//            };
+//            btnPlusSgnIcon.MouseUpEventHandler = (sender, e) =>
+//            {
+//                controlBar.Progress++;
+//            };
+
+//            dialog.Show();
+//            pView.MouseUpEventHandler = (sender, e) =>
+//            {
+//                dialog.Close();
+//            };
+
+//            btnCancel.MouseUpEventHandler = (sender, e) =>
+//            {
+//                dialog.Close();
+//            };
+//            btnConfrim.MouseUpEventHandler = (sender, e) =>
+//            {
+//                dialog.Close();
+//                trait.value = controlBar.Progress.ToString();
+//                btn.Text = trait.value + trait.GetUintString();
+//            };
+//        }
+
+
+//        /// <summary>
+//        /// 鍔犺浇鍔熻兘灞炴�ф暟鎹�夋嫨寮圭獥
+//        /// </summary>
+//        void LoadEditDialog_FunctionPar(SceneFunctionStatus trait, Button btn, List<string> statusList)
+//        {
+//            Button lastButton = new Button();
+//            var lastData = "";
+//            var lastText = "";
+//            Dialog dialog = new Dialog();
+
+//            if (DB_ResidenceData.Instance.GatewayType == 0)
+//            {
+//                if (SPK.AcSpkList().Contains(alarmFunction.localFunction.spk))
+//                {
+//                    //0 鍒跺喎1鍒剁儹锛�2閫氶锛�3鑷姩锛�4闄ゆ箍
+//                    for (int i = 0; i < statusList.Count; i++)
+//                    {
+//                        if (statusList[i] == "0")
+//                        {
+//                            statusList[i] = "cool";
+//                        }
+//                        else if (statusList[i] == "1")
+//                        {
+//                            statusList[i] = "heat";
+//                        }
+//                        else if (statusList[i] == "2")
+//                        {
+//                            statusList[i] = "fan";
+//                        }
+//                        else if (statusList[i] == "3")
+//                        {
+//                            statusList[i] = "auto";
+//                        }
+//                        else if (statusList[i] == "4")
+//                        {
+//                            statusList[i] = "dry";
+//                        }
+//                    }
+//                }
+//                else if (SPK.FhSpkList().Contains(alarmFunction.localFunction.spk))
+//                {
+//                    //1:鏅��,2:鐧藉ぉ,3:澶滄櫄,4:绂诲紑,5:鏃堕棿
+//                    for (int i = 0; i < statusList.Count; i++)
+//                    {
+//                        if (statusList[i] == "5")
+//                        {
+//                            statusList[i] = "timer";
+//                        }
+//                        else if (statusList[i] == "1")
+//                        {
+//                            statusList[i] = "normal";
+//                        }
+//                        else if (statusList[i] == "2")
+//                        {
+//                            statusList[i] = "day";
+//                        }
+//                        else if (statusList[i] == "3")
+//                        {
+//                            statusList[i] = "night";
+//                        }
+//                        else if (statusList[i] == "4")
+//                        {
+//                            statusList[i] = "away";
+//                        }
+//                    }
+
+//                }
+//            }
+
+//            var pView = new FrameLayout()
+//            {
+//                BackgroundColor = CSS_Color.DialogTransparentColor1,
+//            };
+//            dialog.AddChidren(pView);
+
+//            var optionBaseView = new FrameLayout()
+//            {
+//                Y = Application.GetRealHeight(579 - 50 * statusList.Count),
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(50 * statusList.Count + 50),
+//                AnimateSpeed = 0.3f,
+//                Animate = Animate.DownToUp,
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            pView.AddChidren(optionBaseView);
+
+//            var topView = new FrameLayout()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                Width = Application.GetRealWidth(343),
+//                Height = Application.GetRealHeight(50),
+//                BackgroundColor = CSS_Color.MainBackgroundColor,
+//                Radius = (uint)Application.GetRealWidth(12),
+//            };
+//            optionBaseView.AddChidren(topView);
+
+//            var btnTitle = new Button()
+//            {
+//                Gravity = Gravity.CenterHorizontal,
+//                TextAlignment = TextAlignment.Center,
+//                Width = Application.GetRealWidth(100),
+//                Text = trait.GetNameText(),
+//                IsBold = true,
+//                TextColor = CSS_Color.FirstLevelTitleColor,
+//                TextSize = CSS_FontSize.SubheadingFontSize,
+//            };
+//            topView.AddChidren(btnTitle);
+
+//            var btnCancel = new Button()
+//            {
+//                X = Application.GetRealWidth(21),
+//                Width = Application.GetRealWidth(100),
+//                TextAlignment = TextAlignment.CenterLeft,
+//                TextColor = CSS_Color.PromptingColor1,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextID = StringId.Cancel,
+//            };
+//            topView.AddChidren(btnCancel);
+
+//            var btnConfrim = new Button()
+//            {
+//                Width = Application.GetRealWidth(320),
+//                TextAlignment = TextAlignment.CenterRight,
+//                TextColor = CSS_Color.MainColor,
+//                TextSize = CSS_FontSize.TextFontSize,
+//                TextID = StringId.Complete,
+//            };
+//            topView.AddChidren(btnConfrim);
+//            int hei = 1;
+//            foreach (var m in statusList)
+//            {
+//                var row = new FrameLayout()
+//                {
+//                    Y = Application.GetRealHeight(50 * hei),
+//                    Height = Application.GetRealHeight(50),
+//                };
+//                optionBaseView.AddChidren(row);
+//                if (statusList.Count > hei)
+//                {
+//                    optionBaseView.AddChidren(new Button()
+//                    {
+//                        Gravity = Gravity.CenterHorizontal,
+//                        Y = row.Bottom,
+//                        Width = Application.GetRealWidth(343),
+//                        BackgroundColor = CSS_Color.DividingLineColor,
+//                        Height = 1,
+//                    });
+//                }
+//                hei++;
+
+//                var btnChoose = new Button()
+//                {
+//                    X = Application.GetRealWidth(303),
+//                    Gravity = Gravity.CenterVertical,
+//                    Width = Application.GetMinRealAverage(28),
+//                    Height = Application.GetMinRealAverage(28),
+//                    UnSelectedImagePath = "Public/ChooseIcon.png",
+//                    SelectedImagePath = "Public/ChooseOnIcon.png",
+
+//                };
+//                row.AddChidren(btnChoose);
+//                if (trait.value == m)
+//                {
+//                    lastButton = btnChoose;
+//                    btnChoose.IsSelected = true;
+//                }
+//                var btnPropertyTitle = new Button()
+//                {
+//                    X = Application.GetRealWidth(16),
+//                    TextAlignment = TextAlignment.CenterLeft,
+//                    TextColor = CSS_Color.FirstLevelTitleColor,
+//                    TextSize = CSS_FontSize.TextFontSize,
+//                    Tag = m,
+//                    Text = trait.GetValueText(m)
+//                };
+//                row.AddChidren(btnPropertyTitle);
+
+//                btnPropertyTitle.MouseUpEventHandler = (sender, e) => {
+//                    btnChoose.IsSelected = true;
+//                    if (lastButton != null)
+//                    {
+//                        lastButton.IsSelected = false;
+//                    }
+//                    lastButton = btnChoose;
+//                    lastData = btnPropertyTitle.Tag.ToString();
+//                    lastText = btnPropertyTitle.Text;
+//                };
+//            }
+
+
+
+
+//            dialog.Show();
+
+//            pView.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//            };
+
+//            btnCancel.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//            };
+//            btnConfrim.MouseUpEventHandler = (sender, e) => {
+//                dialog.Close();
+//                trait.value = lastData;
+//                //sceneFunction.status.Find((obj) => obj.key == FunctionAttributeKey.OnOff).value = trait.curValue.ToString() ;
+//                btn.Text = lastText;
+//            };
+
+//        }
+
+//        #endregion
+
+//    }
+//}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs
index 6ab343a..a883705 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs
@@ -1,4 +1,5 @@
 锘縰sing System;
+using HDL_ON.DriverLayer;
 using HDL_ON.Entity;
 using HDL_ON.UI.CSS;
 using Shared;
@@ -10,6 +11,11 @@
         /// 涓荤獥浣�
         /// </summary>
         FrameLayout bodyView;
+        /// <summary>
+        /// 鑷畾涔夊竷闃插尯鍩�
+        /// </summary>
+        HorizontalScrolViewLayout customDeploymentView;
+
         public ArmCenterPage()
         {
             bodyView = this;
@@ -53,6 +59,33 @@
                 Height = Application.GetRealWidth(16),
             });
 
+
+            #region 鎾ら槻鍖哄煙
+            var disarmView = new FrameLayout()
+            {
+                Height = 0,
+            };
+            contentView.AddChidren(disarmView);
+
+            var btnDisarm = new Button()
+            {
+                Width = Application.GetRealWidth(120),
+                Height = Application.GetRealHeight(44),
+                BackgroundColor = CSS_Color.WarningColor,
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.MainBackgroundColor,
+                Text = "鎾ら槻"
+            };
+            disarmView.AddChidren(btnDisarm);
+            btnDisarm.MouseUpEventHandler = (sender, e) => {
+                if (SecurityCenter.Security.CurrentDefenseMode != null)
+                {
+                    Control.Ins.ControlSecurity(SecurityCenter.Security.CurrentDefenseMode, "disable");
+                }
+            };
+
+            #endregion
+
             #region 鑷畾涔夊竷闃�
             //鑷畾涔夊竷闃叉爣棰�
             Button btnCustomDeploymentTitle = new Button()
@@ -67,7 +100,7 @@
             };
             contentView.AddChidren(btnCustomDeploymentTitle);
 
-            HorizontalScrolViewLayout customDeploymentView = new HorizontalScrolViewLayout()
+            customDeploymentView = new HorizontalScrolViewLayout()
             {
                 X = Application.GetRealWidth(23),
                 Height = Application.GetRealWidth(80),
@@ -75,28 +108,9 @@
             };
             contentView.AddChidren(customDeploymentView);
 
-            //customDeploymentView.AddChidren(new Button()
-            //{
-            //    Width = Application.GetRealWidth(23),
-            //});
-            var view = new ArmDiyView("FunctionIcon/ArmCenter/AtHomeDefenseIcon.png", "FunctionIcon/ArmCenter/AtHomeDefenseIconOn.png",
-                Language.StringByID(StringId.HouseDefense));
-            customDeploymentView.AddChidren(view);
-            EventHandler<MouseEventArgs> event1 = (sender, e) =>
-            {
-               ShowArmDialog(new SecurityAlarm());
-            };
-            view.SetClickEvent(event1);
-            
+            iniCustomDeploymentView();
 
-            if(FunctionList.List.securities.Count>3)
-            {
-                customDeploymentView.ScrollEnabled = true;
-            }
 
-            foreach (var mode in FunctionList.List.securities)
-            {
-            }
             #endregion
 
             contentView.AddChidren(new Button()
@@ -104,6 +118,8 @@
                 Height = Application.GetRealHeight(20),
             });
 
+            #region 鍥哄畾甯冮槻鍖哄煙
+            /*
             var fixedDeploymentView = new FrameLayout()
             {
                 Height = Application.GetRealHeight(133),
@@ -134,7 +150,6 @@
             };
             fixedDeploymentView.AddChidren(btnFixedDeploymentTip);
 
-            //鍥哄畾甯冮槻鍖哄煙
             var fixedDeploymentTypeView = new HorizontalScrolViewLayout()
             {
                 Y = btnFixedDeploymentTip.Bottom + Application.GetRealHeight(15),
@@ -148,7 +163,7 @@
                 Width = Application.GetRealWidth(24),
             });
 
-
+            #endregion
 
 
             //鐏惧鎶ヨ
@@ -163,10 +178,57 @@
             //闃茬洍鎶ヨ
             var burglarAlarmView = new FixedArmView("FunctionIcon/ArmCenter/BurglarAlarmIcon.png", Language.StringByID(StringId.BurglarAlarm), Language.StringByID(StringId.AlarmMute));
             fixedDeploymentTypeView.AddChidren(burglarAlarmView);
+            */
+            #endregion
+
+
+
+
+
+
 
         }
 
+        /// <summary>
+        /// 鍒濆鍖栬嚜瀹氫箟甯冮槻鍖哄煙
+        /// </summary>
+        private void iniCustomDeploymentView()
+        {
+            customDeploymentView.RemoveAll();
 
+            foreach (var mode in FunctionList.List.securities)
+            {
+                var armDiyView = new ArmDiyView("FunctionIcon/ArmCenter/AddDefenseIcon.png", "FunctionIcon/ArmCenter/AddDefenseIcon.png",
+                mode.name);
+                customDeploymentView.AddChidren(armDiyView);
+                EventHandler<MouseEventArgs> event2 = (sender, e) =>
+                        {
+                            ShowArmDialog(mode);
+                        };
+                armDiyView.SetClickEvent(event2);
+            }
+
+            if (FunctionList.List.securities.Count < 4)
+            {
+                var view = new ArmDiyView("FunctionIcon/ArmCenter/AddDefenseIcon.png", "FunctionIcon/ArmCenter/AddDefenseIcon.png",
+                  Language.StringByID(StringId.Custom));
+                customDeploymentView.AddChidren(view);
+                EventHandler<MouseEventArgs> event1 = (sender, e) =>
+                {
+                    Action refreshAction = () =>
+                    {
+                        iniCustomDeploymentView();
+                    };
+
+                    var addDefensePage = new AddAlarmDeploymentPage(new SecurityAlarm(), refreshAction);
+                    MainPage.BasePageView.AddChidren(addDefensePage);
+                    addDefensePage.LoadPage();
+                    MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                };
+                view.SetClickEvent(event1);
+            }
+
+        }
 
         private void ShowArmDialog(SecurityAlarm alarm)
         {
@@ -231,10 +293,19 @@
 
             dialog.Show();
 
+            btnOpen.MouseUpEventHandler = (sender, e) => {
+                Control.Ins.ControlSecurity(alarm,  "enable");  
+                dialog.Close();  
+            };
+
 
             btnCheckModify.MouseUpEventHandler = (sender, e) => {
                 dialog.Close();
-                var armSetPage = new ArmDeploymentSettingPage(alarm);
+                Action refreshAction = () =>
+                {
+                    iniCustomDeploymentView();
+                };
+                var armSetPage = new ArmDeploymentSettingPage(alarm,refreshAction);
                 MainPage.BasePageView.AddChidren(armSetPage);
                 armSetPage.LoadPage();
                 MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmDeploymentSettingPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmDeploymentSettingPage.cs
index cb86ac7..5de018c 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmDeploymentSettingPage.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmDeploymentSettingPage.cs
@@ -9,12 +9,28 @@
     public class ArmDeploymentSettingPage : FrameLayout
     {
         FrameLayout bodyView;
-        SecurityAlarm securityAlarm; 
+        /// <summary>
+        /// 涓婚鐣岄潰
+        /// </summary>
+        VerticalScrolViewLayout contentView;
+        /// <summary>
+        /// 杈撳叆鏉′欢鍒楄〃鍖哄煙鐣岄潰
+        /// </summary>
+        VerticalScrolViewLayout inputTargetView;
+        /// <summary>
+        /// 鍛婅鐩爣鍒楄〃鍖哄煙鐣岄潰
+        /// </summary>
+        VerticalScrolViewLayout outputTargetView;
 
-        public ArmDeploymentSettingPage(SecurityAlarm alarm )
+
+        SecurityAlarm securityAlarm;
+        Action refreshAction;
+
+        public ArmDeploymentSettingPage(SecurityAlarm alarm, Action action)
         {
             bodyView = this;
             securityAlarm = alarm;
+            refreshAction = action;
         }
 
         public void LoadPage()
@@ -23,10 +39,10 @@
 
             bodyView.BackgroundColor = CSS_Color.BackgroundColor;
 
-            VerticalScrolViewLayout contentView = new VerticalScrolViewLayout()
+            contentView = new VerticalScrolViewLayout()
             {
                 Y = Application.GetRealHeight(64),
-                Height = Application.GetRealHeight(667 - 64),
+                Height = Application.GetRealHeight(527),
             };
             bodyView.AddChidren(contentView);
 
@@ -86,54 +102,156 @@
             LoadEvent_EditSecurityAlarmName(btnDeploymentName);
             #endregion
 
+            /*
             #region 瑙﹀彂寤舵椂
-            //var delayedRow = new FrameLayout()
-            //{
-            //    Height = Application.GetRealHeight(50),
-            //    BackgroundColor = CSS_Color.MainBackgroundColor,
-            //};
-            //contentView.AddChidren(delayedRow);
+            var delayedRow = new FrameLayout()
+            {
+                Height = Application.GetRealHeight(50),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+            };
+            contentView.AddChidren(delayedRow);
 
-            //var btnDelayedTitle = new Button()
-            //{
-            //    X = Application.GetRealWidth(16),
-            //    Width = Application.GetRealWidth(72),
-            //    TextAlignment = TextAlignment.CenterLeft,
-            //    TextColor = CSS_Color.FirstLevelTitleColor,
-            //    TextSize = CSS_FontSize.TextFontSize,
-            //    TextID = StringId.Name,
-            //};
-            //delayedRow.AddChidren(btnDelayedTitle);
+            var btnDelayedTitle = new Button()
+            {
+                X = Application.GetRealWidth(16),
+                Width = Application.GetRealWidth(72),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                TextID = StringId.TriggerDelay,
+            };
+            delayedRow.AddChidren(btnDelayedTitle);
+            btnDelayedTitle.Text += ":";
 
-            //var btnDelayedText = new Button()
-            //{
-            //    X = Application.GetRealWidth(88),
-            //    Width = Application.GetRealWidth(230),
-            //    TextAlignment = TextAlignment.CenterLeft,
-            //    TextColor = CSS_Color.TextualColor,
-            //    TextSize = CSS_FontSize.TextFontSize,
-            //    Text = securityAlarm.name
-            //};
-            //delayedRow.AddChidren(btnDelayedText);
+            var btnDelayedText = new Button()
+            {
+                X = Application.GetRealWidth(88),
+                Width = Application.GetRealWidth(230),
+                TextAlignment = TextAlignment.CenterLeft,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = CSS_FontSize.TextFontSize,
+                Text = securityAlarm.name
+            };
+            delayedRow.AddChidren(btnDelayedText);
 
-            //var btnDelayedRight = new Button()
-            //{
-            //    X = Application.GetRealWidth(343),
-            //    Gravity = Gravity.CenterVertical,
-            //    Width = Application.GetMinRealAverage(16),
-            //    Height = Application.GetMinRealAverage(16),
-            //    UnSelectedImagePath = "Public/RightIcon.png",
-            //};
-            //delayedRow.AddChidren(btnDelayedRight);
+            var btnDelayedRight = new Button()
+            {
+                X = Application.GetRealWidth(343),
+                Gravity = Gravity.CenterVertical,
+                Width = Application.GetMinRealAverage(16),
+                Height = Application.GetMinRealAverage(16),
+                UnSelectedImagePath = "Public/RightIcon.png",
+            };
+            delayedRow.AddChidren(btnDelayedRight);
 
-            ////delayedRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(49), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
-            //LoadEvent_EditSecurityAlarmName(btnDelayedTitle);
+            //delayedRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(49), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
             #endregion
+            */
 
             #endregion
             contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.BackgroundColor });
 
-            #region 甯冮槻鍔熻兘\鎶ヨ鐘舵��
+            //甯冮槻鍔熻兘
+            iniDefenseView();
+            //鍛婅鐩爣
+            iniAlarmView();
+
+            #region 搴曢儴鍖哄煙
+            var bottomView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(591),
+                Height = Application.GetRealHeight(100),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(22),
+            };
+            this.AddChidren(bottomView);
+
+            var btnConfrim = new Button()
+            {
+                X = Application.GetRealWidth(78),
+                Y = Application.GetRealHeight(12),
+                Width = Application.GetRealWidth(220),
+                Height = Application.GetRealWidth(44),
+                Radius = (uint)Application.GetRealWidth(22),
+                BackgroundColor = CSS_Color.MainColor,
+                TextID = StringId.Confirm,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.MainBackgroundColor,
+                TextAlignment = TextAlignment.Center,
+            };
+            bottomView.AddChidren(btnConfrim);
+
+            btnConfrim.MouseUpEventHandler = (sender, e) =>
+            {
+                if (securityAlarm.input.Count == 0)
+                {
+                    var tip = new Tip()
+                    {
+                        Text = "璇烽�夋嫨甯冮槻鐩爣",
+                        CloseTime = 3,
+                        Direction = AMPopTipDirection.None
+                    };
+                    tip.Show(MainPage.BaseView);
+                    return;
+                }
+                if (securityAlarm.output.Count == 0)
+                {
+                    var tip = new Tip()
+                    {
+                        Text = "璇烽�夋嫨鍛婅鐩爣",
+                        CloseTime = 3,
+                        Direction = AMPopTipDirection.None
+                    };
+                    tip.Show(MainPage.BaseView);
+
+                    return;
+                }
+
+                var waitPage = new Loading();
+                waitPage.Start();
+                new System.Threading.Thread(() =>
+                {
+                    try
+                    {
+                        var code = securityAlarm.SaveInfo();
+                        if (code == StateCode.SUCCESS)
+                        {
+                            SecurityCenter.Security.GetSecurityAlarmList();
+                            Application.RunOnMainThread(() =>
+                            {
+                                this.RemoveFromParent();
+                                refreshAction?.Invoke();
+                            });
+                        }
+                        else
+                        {
+                            Application.RunOnMainThread(() =>
+                            {
+                                IMessageCommon.Current.ShowErrorInfoAlter(code);
+                            });
+                        }
+                    }
+                    catch { }
+                    finally
+                    {
+                        Application.RunOnMainThread(() => {
+                            waitPage.Hide();
+                        });
+                    }
+                })
+                { IsBackground = true }.Start();
+            };
+            #endregion
+
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栭儴鍒嗗姛鑳藉尯鍩�
+        /// </summary>
+        private void iniDefenseView()
+        {
+
+            #region 甯冮槻鍔熻兘
             var deploymentFunctionRow = new FrameLayout()
             {
                 Height = Application.GetRealHeight(44),
@@ -161,24 +279,80 @@
                 UnSelectedImagePath = "FunctionIcon/ArmCenter/AddTargetIcon.png",
             };
             deploymentFunctionRow.AddChidren(btnAddTarget);
+            ///娣诲姞杈撳叆鐩爣
+            btnAddTarget.MouseUpEventHandler = (sender, e) => {
+                Action<SecurityAlarm> action = (outTemp) => {
+                    securityAlarm = outTemp;
+                    iniInputTargetView();
+                };
+                var page = new AddInputPage(securityAlarm, action);
+                MainPage.BasePageView.AddChidren(page);
+                page.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
 
             deploymentFunctionRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(43), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
 
-            var inputTargetView = new VerticalScrolViewLayout()
+            inputTargetView = new VerticalScrolViewLayout()
             {
                 ScrollEnabled = false,
             };
             contentView.AddChidren(inputTargetView);
-            foreach (var target in securityAlarm.input)
-            {
-                inputTargetView.AddChidren(new InputRow(target.GetFunction().name, target.GetFunction().GetRoomListName()));
-            }
-            inputTargetView.Height = Application.GetRealHeight(65 * securityAlarm.input.Count);
+
+            iniInputTargetView();
 
             #endregion
             contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.BackgroundColor });
 
+        }
 
+        /// <summary>
+        /// 鍒濆鍖栬緭鍏ユ潯浠跺尯鍩熺晫闈�
+        /// </summary>
+        /// <param name=""></param>
+        private void iniInputTargetView()
+        {
+            inputTargetView.RemoveAll();
+            if (securityAlarm.input.Count > 0)
+            {
+                foreach (var target in securityAlarm.input)
+                {
+                    inputTargetView.AddChidren(new InputRow(target.GetFunction().name, target.GetFunction().GetRoomListName(), target.StateText()));
+                }
+                inputTargetView.Height = Application.GetRealHeight(65 * securityAlarm.input.Count);
+                //if (outputTargetView != null)
+                //{
+                //    contentView.AddChidren(outputTargetView);
+                //}
+            }
+            else
+            {
+                inputTargetView.AddChidren(new Button()
+                {
+                    Height = Application.GetRealHeight(65),
+                    TextAlignment = TextAlignment.Center,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextID = StringId.ThereIsNoAssociatedTaskDeploymentStatus,
+                    IsMoreLines = true,
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                });
+
+                inputTargetView.Height = Application.GetRealHeight(68);
+                //if(outputTargetView!= null)
+                //{
+                //    contentView.AddChidren(outputTargetView);
+                //}
+            }
+
+
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栧憡璀︾洰鏍囧尯鍩�
+        /// </summary>
+        private void iniAlarmView()
+        {
             #region 鍛婅鐩爣
             var outputRow = new FrameLayout()
             {
@@ -207,22 +381,63 @@
                 UnSelectedImagePath = "FunctionIcon/ArmCenter/AddTargetIcon.png",
             };
             outputRow.AddChidren(btnAddOutTarget);
+
+            btnAddOutTarget.MouseUpEventHandler = (sender, e) => {
+                Action<SecurityAlarm> action = (outTemp) => {
+                    securityAlarm = outTemp;
+                    iniAlarmListView();
+                };
+                var page = new AddOutputPage(securityAlarm, action);
+                MainPage.BasePageView.AddChidren(page);
+                page.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
             outputRow.AddChidren(new Button() { Gravity = Gravity.CenterHorizontal, Y = Application.GetRealHeight(43), Height = 1, BackgroundColor = CSS_Color.DividingLineColor });
 
 
-            var outputTargetView = new VerticalScrolViewLayout()
+            outputTargetView = new VerticalScrolViewLayout()
             {
                 ScrollEnabled = false,
             };
             contentView.AddChidren(outputTargetView);
-            foreach(var outTarget in securityAlarm.output)
-            {
-                inputTargetView.AddChidren(new OutputRow(outTarget.GetFunction().name, outTarget.GetFunction().GetRoomListName(),""));
-            }
-            outputTargetView.Height = Application.GetRealHeight(65 * securityAlarm.output.Count);
+
+            iniAlarmListView();
+
             #endregion
+            contentView.AddChidren(new Button() { Height = Application.GetRealHeight(8), BackgroundColor = CSS_Color.BackgroundColor });
 
         }
+
+        /// <summary>
+        /// 鍒濆鍖栧憡璀﹀垪琛ㄥ尯鍩�
+        /// </summary>
+        private void iniAlarmListView()
+        {
+            outputTargetView.RemoveAll();
+            if (securityAlarm.output.Count > 0)
+            {
+                foreach (var outTarget in securityAlarm.output)
+                {
+                    outputTargetView.AddChidren(new OutputRow(outTarget.GetFunction().name, outTarget.GetFunction().GetRoomListName(), "鎵撳紑"));
+                }
+                outputTargetView.Height = Application.GetRealHeight(65 * securityAlarm.output.Count);
+            }
+            else
+            {
+                outputTargetView.AddChidren(new Button()
+                {
+                    Height = Application.GetRealHeight(65),
+                    TextAlignment = TextAlignment.Center,
+                    TextSize = CSS_FontSize.TextFontSize,
+                    TextColor = CSS_Color.PromptingColor1,
+                    TextID = StringId.ThereIsNoAssociatedTaskDeploymentStatus,
+                    IsMoreLines = true,
+                    BackgroundColor = CSS_Color.MainBackgroundColor,
+                });
+            }
+        }
+
 
         /// <summary>
         /// 淇敼瀹夐槻鍚嶇О
@@ -233,174 +448,65 @@
             {
                 Action<string> callBack = (str) =>
                 {
-                    var waitPage = new Loading();
-                    bodyView.AddChidren(waitPage);
-                    waitPage.Start(Language.StringByID(StringId.PleaseWait));
-                    new System.Threading.Thread(() =>
+                    //鍚嶇О涓嶈兘涓虹┖
+                    if (string.IsNullOrEmpty(str))
                     {
-                        try
+                        new Tip()
                         {
-                            securityAlarm.name = str;
-                            var responsePack = new HttpServerRequest().EditSecurity(new List<SecurityAlarm>() { securityAlarm});
+                            CloseTime = 1,
+                            Text = Language.StringByID(StringId.NameCannotBeEmpty),
+                            Direction = AMPopTipDirection.None,
+                        }.Show(bodyView);
+                        return;
+                    }
 
-                            if (responsePack.Code == StateCode.SUCCESS)
-                            {
-                                Application.RunOnMainThread(() =>
-                                {
-                                    btnDeploymentName.Text = str;
-                                });
-                            }
-                            else
-                            {
-                                IMessageCommon.Current.ShowErrorInfoAlter(responsePack.Code);
-                            }
-                        }
-                        catch (Exception ex)
-                        {
-                            MainPage.Log($"update user name error : {ex.Message}");
-                        }
-                        finally
-                        {
-                            Application.RunOnMainThread(() =>
-                            {
-                                if (waitPage != null)
-                                {
-                                    waitPage.RemoveFromParent();
-                                    waitPage = null;
-                                }
-                            });
-                        }
-                    })
-                    { IsBackground = true }.Start();
+
+                    btnDeploymentName.Text = securityAlarm.name = str;
+
+                    //var waitPage = new Loading();
+                    //bodyView.AddChidren(waitPage);
+                    //waitPage.Start(Language.StringByID(StringId.PleaseWait));
+                    //new System.Threading.Thread(() =>
+                    //{
+                    //    try
+                    //    {
+                    //        securityAlarm.name = str;
+                    //        var responsePack = new HttpServerRequest().EditSecurity(new List<SecurityAlarm>() { securityAlarm});
+                    //        if (responsePack.Code == StateCode.SUCCESS)
+                    //        {
+                    //            Application.RunOnMainThread(() =>
+                    //            {
+                    //                btnDeploymentName.Text = str;
+                    //            });
+                    //        }
+                    //        else
+                    //        {
+                    //            IMessageCommon.Current.ShowErrorInfoAlter(responsePack.Code);
+                    //        }
+                    //    }
+                    //    catch (Exception ex)
+                    //    {
+                    //        MainPage.Log($"update user name error : {ex.Message}");
+                    //    }
+                    //    finally
+                    //    {
+                    //        Application.RunOnMainThread(() =>
+                    //        {
+                    //            if (waitPage != null)
+                    //            {
+                    //                waitPage.RemoveFromParent();
+                    //                waitPage = null;
+                    //            }
+                    //        });
+                    //    }
+                    //})
+                    //{ IsBackground = true }.Start();
                 };
                 new PublicAssmebly().LoadDialog_EditParater(StringId.Name, securityAlarm.name, callBack, StringId.NameCannotBeEmpty, 0, new List<string>());
             };
             btnDeploymentName.MouseUpEventHandler = eventHandler;
         }
 
-
     }
 
-    /// <summary>
-    /// 杈撳叆鏉′欢琛屾帶浠�
-    /// </summary>
-    public class InputRow : RowLayout
-    {
-        Button btnTitle;
-
-        Button btnSubTitle;
-
-        public InputRow(string title,string subtitle)
-        {
-            this.LineColor = 0x00000000;
-            this.Height = Application.GetRealHeight(65);
-            this.BackgroundColor = CSS_Color.MainBackgroundColor;
-
-            btnTitle = new Button()
-            {
-                X = Application.GetRealWidth(16),
-                Height = Application.GetRealHeight(44),
-                Width = Application.GetRealWidth(320),
-                Text = title,
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS_FontSize.TextFontSize,
-            };
-            this.AddChidren(btnTitle);
-
-            btnSubTitle = new Button()
-            {
-                X = Application.GetRealWidth(16),
-                Y = Application.GetRealHeight(24),
-                Height = Application.GetRealHeight(44),
-                Width = Application.GetRealWidth(320),
-                Text = subtitle,
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.PromptingColor1,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-            };
-            this.AddChidren(btnSubTitle);
-
-        }
-
-        public void SetClickEvent(EventHandler<MouseEventArgs> eventHandler)
-        {
-            this.MouseUpEventHandler = eventHandler;
-            btnTitle.MouseUpEventHandler = eventHandler;
-            btnSubTitle.MouseUpEventHandler = eventHandler;
-        }
-    }
-
-    /// <summary>
-    /// 杈撳嚭鏉′欢鎺т欢
-    /// </summary>
-    public class OutputRow : RowLayout
-    {
-        Button btnTitle;
-
-        Button btnSubTitle;
-
-        Button btnState;
-
-        Button btnRightIcon;
-
-        public OutputRow(string title, string subtitle,string state)
-        {
-            this.LineColor = 0x00000000;
-            this.Height = Application.GetRealHeight(65);
-            this.BackgroundColor = CSS_Color.MainBackgroundColor;
-
-            btnTitle = new Button()
-            {
-                X = Application.GetRealWidth(16),
-                Height = Application.GetRealHeight(44),
-                Width = Application.GetRealWidth(320),
-                Text = title,
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.FirstLevelTitleColor,
-                TextSize = CSS_FontSize.TextFontSize,
-            };
-            this.AddChidren(btnTitle);
-
-            btnSubTitle = new Button()
-            {
-                X = Application.GetRealWidth(16),
-                Y = Application.GetRealHeight(24),
-                Height = Application.GetRealHeight(44),
-                Width = Application.GetRealWidth(320),
-                Text = subtitle,
-                TextAlignment = TextAlignment.CenterLeft,
-                TextColor = CSS_Color.PromptingColor1,
-                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-            };
-            this.AddChidren(btnSubTitle);
-
-            btnState = new Button()
-            {
-                Width = Application.GetRealWidth(323),
-                TextAlignment = TextAlignment.CenterRight,
-                TextSize = CSS_FontSize.TextFontSize,
-                TextColor = CSS_Color.PromptingColor1,
-                Text = state
-            };
-            this.AddChidren(btnState);
-
-            btnRightIcon = new Button()
-            {
-                X = Application.GetRealWidth(339),
-                Gravity = Gravity.CenterHorizontal,
-                Width = Application.GetRealWidth(16),
-                Height = Application.GetRealWidth(16),
-                UnSelectedImagePath = "FunctionIcon/ArmCenter/RightIcon.png",
-            };
-            this.AddChidren(btnRightIcon);
-        }
-
-        public void SetClickEvent(EventHandler<MouseEventArgs> eventHandler)
-        {
-            btnState.MouseUpEventHandler = eventHandler;
-            btnTitle.MouseUpEventHandler = eventHandler;
-            btnSubTitle.MouseUpEventHandler = eventHandler;
-        }
-    }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs b/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs
index 37d1cfa..d46bdd0 100644
--- a/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs
+++ b/HDL_ON/UI/UI2/FuntionControlView/Light/RGBPageBLL.cs
@@ -310,6 +310,7 @@
                 System.Collections.Generic.Dictionary<string, string> d = new System.Collections.Generic.Dictionary<string, string>();
                 d.Add(FunctionAttributeKey.RGB, lightTemp.GetRGBcolorString(function));
                 Control.Ins.SendWriteCommand(function, d);
+                lastColor = new byte[] { 255, 255, 255 };
             };
         }
 

--
Gitblit v1.8.0