From db1b76418c083e74fe16a65cddddf578de3d09cc Mon Sep 17 00:00:00 2001
From: wei <kaede@kaededeMacBook-Air.local>
Date: 星期一, 19 四月 2021 09:29:10 +0800
Subject: [PATCH] 安防界面

---
 HDL-ON_Android/Assets/Language.ini                                         |   11 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AtHomeDefenseIcon.png    |    0 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                               |   12 
 HDL_ON/Common/ApiUtlis.cs                                                  |   51 +-
 HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs                |  128 ++++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/NoDefenseBigIcon.png     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HouseDefenseIcon.png     |    0 
 HDL_ON/HDL_ON.projitems                                                    |    4 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/DisasterAlarmIcon.png    |    0 
 HDL-ON_iOS/Resources/Language.ini                                          |    6 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HolidayDefenseIconOn.png |    0 
 .vs/HDL_APP_Project/xs/UserPrefs.xml                                       |   49 +-
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/InDefenseBigIcon.png     |    0 
 HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneAddPage.cs                    |  377 +++++++++++++++---
 HDL_ON/Entity/Function/Security.cs                                         |  234 +++++++++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/BurglarAlarmIcon.png     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AtHomeDefenseIconOn.png  |    0 
 HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs                       |    4 
 HDL_ON/Entity/FunctionList.cs                                              |   35 +
 HDL_ON/UI/UI0-Public/TopViewDiv.cs                                         |   27 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HouseDefenseIconOn.png   |    0 
 HDL_ON/DAL/Server/NewAPI.cs                                                |   47 ++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AddDefenseIcon.png       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HolidayDefenseIcon.png   |    0 
 HDL_ON/Common/R.cs                                                         |    1 
 HDL_ON/DAL/Server/HttpServerRequest.cs                                     |  168 ++++++++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HistoryIcon.png          |    0 
 27 files changed, 1,018 insertions(+), 136 deletions(-)

diff --git a/.vs/HDL_APP_Project/xs/UserPrefs.xml b/.vs/HDL_APP_Project/xs/UserPrefs.xml
index f7957ac..5c3a958 100644
--- a/.vs/HDL_APP_Project/xs/UserPrefs.xml
+++ b/.vs/HDL_APP_Project/xs/UserPrefs.xml
@@ -1,22 +1,15 @@
 锘�<Properties StartupConfiguration="{09712674-2A38-407B-B1E2-560B2C352F9A}|Default">
   <MonoDevelop.Ide.ItemProperties.HDL-ON__iOS automaticSigning="False" PreferredExecutionTarget="MonoDevelop.IPhone.IPhoneSimulatorTarget.26569F89-0BA9-4C06-81F2-764A3AF2E1B7" />
-  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/DAL/DriverLayer/Control_Udp.cs">
+  <MonoDevelop.Ide.Workbench ActiveDocument="HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs">
     <Files>
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneAddPage.cs" Line="36" Column="20" />
-      <File FileName="HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs" />
-      <File FileName="HDL-ON_Android/Application.cs" />
-      <File FileName="HDL_ON/DAL/Server/HttpUtil.cs" />
-      <File FileName="HDL_ON/UI/MainPage.cs" />
-      <File FileName="HDL_ON/Common/R.cs" />
-      <File FileName="HDL-ON_Android/Assets/Language.ini" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneFunctionListChoosePage.cs" Line="300" Column="56" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneEditPage.cs" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SceneAddPage.cs" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneCatchFunctionListPage.cs" Line="104" Column="56" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/IntelligencePage.cs" Line="634" Column="40" />
-      <File FileName="HDL_ON/DAL/DriverLayer/Control.cs" Line="300" Column="1" />
-      <File FileName="HDL_ON/UI/UI2/3-Intelligence/Scene/SetSceneFunctionInfoPage.cs" Line="147" Column="36" />
-      <File FileName="HDL_ON/DAL/DriverLayer/Control_Udp.cs" Line="159" Column="1" />
+      <File FileName="HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs" Line="66" Column="1" />
+      <File FileName="HDL_ON/Common/ApiUtlis.cs" Line="367" Column="38" />
+      <File FileName="HDL_ON/Entity/FunctionList.cs" Line="143" Column="31" />
+      <File FileName="HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs" Line="565" Column="50" />
+      <File FileName="HDL_ON/Entity/Enumerative/MyEnum.cs" Line="171" Column="9" />
+      <File FileName="HDL_ON/Entity/Room.cs" Line="58" Column="23" />
+      <File FileName="HDL_ON/UI/BindingResidence/BindingResidencePage.cs" Line="1" Column="1" />
+      <File FileName="HDL_ON/UI/UI2/1-HomePage/MessageCenterPage.cs" Line="1" Column="1" />
     </Files>
     <Pads>
       <Pad Id="ProjectPad">
@@ -25,32 +18,31 @@
             <Node name="HDL_ON" expanded="True">
               <Node name="Common" expanded="True" />
               <Node name="DAL" expanded="True">
-                <Node name="DriverLayer" expanded="True">
-                  <Node name="Control_Udp.cs" selected="True" />
-                </Node>
+                <Node name="Server" expanded="True" />
               </Node>
               <Node name="Entity" expanded="True">
+                <Node name="Enumerative" expanded="True" />
                 <Node name="Function" expanded="True" />
               </Node>
               <Node name="UI" expanded="True">
-                <Node name="UI0-Public" expanded="True" />
+                <Node name="BindingResidence" 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="Scene" expanded="True" />
+                  <Node name="1-HomePage" expanded="True">
+                    <Node name="MessageCenterPage.cs" selected="True" />
                   </Node>
-                  <Node name="4-PersonalCenter" expanded="True">
-                    <Node name="MemberManagement" expanded="True" />
+                  <Node name="FuntionControlView" expanded="True">
+                    <Node name="ArmCenter" expanded="True" />
                   </Node>
-                  <Node name="FuntionControlView" expanded="True" />
                 </Node>
               </Node>
             </Node>
             <Node name="HDL-ON_Android" expanded="True">
               <Node name="Assets" expanded="True" />
             </Node>
-            <Node name="HDL-ON_iOS" expanded="True" />
+            <Node name="HDL-ON_iOS" expanded="True">
+              <Node name="Other" expanded="True" />
+              <Node name="Resources" expanded="True" />
+            </Node>
           </Node>
         </State>
       </Pad>
@@ -68,7 +60,6 @@
     <BreakpointStore>
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs" relfile="HDL_ON/UI/UI2/4-PersonalCenter/PirDevice/Method.cs" line="34" column="1" />
       <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs" relfile="HDL_ON/UI/UI2/FuntionControlView/1ContorlPage/AcControlPage.cs" line="313" column="1" />
-      <Breakpoint file="/Users/kaede/Desktop/HDL_APP_Project/HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneCatchFunctionListPage.cs" relfile="HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneCatchFunctionListPage.cs" line="210" column="1" />
     </BreakpointStore>
   </MonoDevelop.Ide.DebuggingService.Breakpoints>
   <MultiItemStartupConfigurations />
diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
index e5c9d89..4be6895 100644
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -328,7 +328,7 @@
 324=Scene delay
 325=Delay setting
 326=Delay
-327=Catch Scene
+327=Capture the scene
 328=Film scene
 329=General
 330=Automatic mode
@@ -426,8 +426,7 @@
 439=Real time power consumption: {0} kw
 440=Next step
 441=Please select all areas of capture status
-442=Generate scene
-
+442=Custom deployment
 
 1000=Room Humidity
 1001=V-chip
@@ -1107,7 +1106,7 @@
 324=鍦烘櫙寤舵椂
 325=寤舵椂璁剧疆
 326=寤舵椂
-327=鎹曡幏鍦烘櫙
+327=鎹曟崏鍦烘櫙
 328=鐢靛奖鍦烘櫙
 329=鏅��
 330=鑷姩妯″紡
@@ -1204,8 +1203,8 @@
 438=婀垮害:{0}%    绌烘皵:{1}    椋庨��:{2}绾�
 439=瀹炴椂鍔熻��: {0}kW
 440=涓嬩竴姝�
-441=璇烽�夋嫨鎹曡幏鐘舵�佺殑鍖哄煙
-442=鐢熸垚鍦烘櫙
+441=璇烽�夋嫨鎹曟崏鐘舵�佺殑鍖哄煙
+442=鑷畾涔夊竷闃�
 
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index e767896..b18bd6a 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -1219,6 +1219,18 @@
       <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\airFreshjinmao_blue.png" />
       <BundleResource Include="Resources\Phone\FunctionIcon\Icon\HomeIcon\airFreshjinmao_white.png" />
       <BundleResource Include="Resources\Phone\Public\RightSlideBackIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\DisasterAlarmIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\InDefenseBigIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\AddDefenseIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\HouseDefenseIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\HolidayDefenseIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\AtHomeDefenseIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\AtHomeDefenseIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\NoDefenseBigIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\HolidayDefenseIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\HouseDefenseIconOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\BurglarAlarmIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\ArmCenter\HistoryIcon.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
index 3923d05..4be6895 100644
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -426,6 +426,7 @@
 439=Real time power consumption: {0} kw
 440=Next step
 441=Please select all areas of capture status
+442=Custom deployment
 
 1000=Room Humidity
 1001=V-chip
@@ -1105,7 +1106,7 @@
 324=鍦烘櫙寤舵椂
 325=寤舵椂璁剧疆
 326=寤舵椂
-327=鎹曡幏鍦烘櫙
+327=鎹曟崏鍦烘櫙
 328=鐢靛奖鍦烘櫙
 329=鏅��
 330=鑷姩妯″紡
@@ -1202,7 +1203,8 @@
 438=婀垮害:{0}%    绌烘皵:{1}    椋庨��:{2}绾�
 439=瀹炴椂鍔熻��: {0}kW
 440=涓嬩竴姝�
-441=璇烽�夋嫨鎹曡幏鐘舵�佺殑鍖哄煙
+441=璇烽�夋嫨鎹曟崏鐘舵�佺殑鍖哄煙
+442=鑷畾涔夊竷闃�
 
 1000=瀹ゅ唴婀垮害
 1001=绔ラ攣
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AddDefenseIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AddDefenseIcon.png
new file mode 100644
index 0000000..0eceeb6
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AddDefenseIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AtHomeDefenseIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AtHomeDefenseIcon.png
new file mode 100644
index 0000000..a662e7c
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AtHomeDefenseIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AtHomeDefenseIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AtHomeDefenseIconOn.png
new file mode 100644
index 0000000..ff57647
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/AtHomeDefenseIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/BurglarAlarmIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/BurglarAlarmIcon.png
new file mode 100644
index 0000000..082eecf
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/BurglarAlarmIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/DisasterAlarmIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/DisasterAlarmIcon.png
new file mode 100644
index 0000000..b213453
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/DisasterAlarmIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HistoryIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HistoryIcon.png
new file mode 100644
index 0000000..3e3be55
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HistoryIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HolidayDefenseIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HolidayDefenseIcon.png
new file mode 100644
index 0000000..0e0d1f1
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HolidayDefenseIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HolidayDefenseIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HolidayDefenseIconOn.png
new file mode 100644
index 0000000..b532639
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HolidayDefenseIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HouseDefenseIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HouseDefenseIcon.png
new file mode 100644
index 0000000..e41b150
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HouseDefenseIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HouseDefenseIconOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HouseDefenseIconOn.png
new file mode 100644
index 0000000..a434791
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/HouseDefenseIconOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/InDefenseBigIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/InDefenseBigIcon.png
new file mode 100644
index 0000000..7f4bbd7
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/InDefenseBigIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/NoDefenseBigIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/NoDefenseBigIcon.png
new file mode 100644
index 0000000..0555432
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/ArmCenter/NoDefenseBigIcon.png
Binary files differ
diff --git a/HDL_ON/Common/ApiUtlis.cs b/HDL_ON/Common/ApiUtlis.cs
index 2013562..95d8510 100644
--- a/HDL_ON/Common/ApiUtlis.cs
+++ b/HDL_ON/Common/ApiUtlis.cs
@@ -106,26 +106,6 @@
                 }
                 endTime = DateTime.Now.AddSeconds(5);
                 MainPage.Log($"鍒锋柊涓汉淇℃伅鎴愬姛");
-
-                //int count = 0;
-                //while (count < 10)
-                //{
-                //    if (DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
-                //    {
-                //        System.Threading.Thread.Sleep(200);
-                //    }
-                //    else
-                //    {
-                //        break;
-                //    }
-                //    count++;
-                //}
-                //if (DB_ResidenceData.Instance.CheckWhetherGatewayIdIsNull())
-                //{
-                //    return;
-                //}
-
-
                 try
                 {
                     //===================鎴块棿=======================
@@ -275,6 +255,8 @@
                         MainPage.Log($"璇诲彇浜戠鍦烘櫙鏁版嵁澶辫触:Code:{pack.Code}; Msg:{pack.message}");
                     }
 
+                    //===================璇诲彇瀹夐槻鍒楄〃==========================
+                    GetSecurityList();
                     //===================璇诲彇閫昏緫鍒楄〃==========================
                     UI.UI2.Intelligence.Automation.MainView.GetLogicList();
                     //===================璇诲彇鍙瀵硅鏁版嵁==========================
@@ -371,5 +353,34 @@
                 }
             }
         }
+
+        /// <summary>
+        /// 鑾峰彇瀹夐槻鍒楄〃
+        /// </summary>
+        public void GetSecurityList()
+        {
+            var pack = Ins.HttpRequest.GetSecurityList();
+            if (pack.Code == StateCode.SUCCESS)
+            {
+                var packList = Newtonsoft.Json.JsonConvert.DeserializeObject<List<Security>>(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<Security>>(infoListPack.Data.ToString());
+                foreach (var function in infoList)
+                {
+                    function.SaveFile();
+                    FunctionList.List.IniFunctionList(function.savePath, true);
+                }
+            }
+            else
+            {
+                MainPage.Log($"璇诲彇瀹夐槻鍒楄〃澶辫触:Code:{pack.Code}; Msg:{pack.message}");
+            }
+
+        }
     }
 }
\ No newline at end of file
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
index a06d9be..a04ca38 100644
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -4,6 +4,7 @@
 {
     public static class StringId
     {
+        public const int CustomDeployment = 443;
         public const int GenerateScene = 442;
         public const int ChooseCatchZone = 441;
         public const int NextStep = 440;
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
index 0ba5b75..e7d32ab 100644
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -2192,7 +2192,173 @@
         #endregion
 
 
-        #region Kaede --鎴块棿鍔熻兘--------------------------
+        #region Kaede -- 瀹夐槻鎺ュ彛____________________________
+        /// <summary>
+        /// 鑾峰彇瀹夐槻鍒楄〃
+        /// </summary>
+        public ResponsePackNew GetSecurityList()
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_List, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 鑾峰彇瀹夐槻璇︽儏
+        /// </summary>
+        /// <param name="sidList">瀹夐槻sid闆嗗悎</param>
+        /// <param name="userSecurityIds">瀹夐槻浜戠id</param>
+        /// <returns></returns>
+        public ResponsePackNew GetSecurityInfo(List<string> sidList, List<string> userSecurityIds)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
+            //sids userSecurityIds 涓嶈兘鍚屾椂涓虹┖
+            d.Add("sids", sidList);
+            d.Add("userSecurityIds", userSecurityIds);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_Info, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 娣诲姞瀹夐槻
+        /// </summary>
+        public ResponsePackNew AddSecurity(List<Security> securities)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
+            d.Add("securitys", securities);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_Add, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 缂栬緫瀹夐槻
+        /// </summary>
+        public ResponsePackNew EditSecurity(List<Security> securities)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
+            d.Add("securitys", securities);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_Edit, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 鍒犻櫎瀹夐槻
+        /// </summary>
+        /// <param name="sidList">瀹夐槻sid</param>
+        /// <param name="userSecurityIds">瀹夐槻浜戠id</param>
+        /// <returns></returns>
+        public ResponsePackNew DeleteSecurity(List<string> sidList, List<string> userSecurityIds)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
+            //sids userSecurityIds 涓嶈兘鍚屾椂涓虹┖
+            d.Add("sids", sidList);
+            d.Add("userSecurityIds", userSecurityIds);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_Delete, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 璇诲彇瀹夐槻闃插尯鐘舵��
+        /// </summary>
+        /// <param name="sidList">瀹夐槻sid</param>
+        /// <param name="userSecurityIds">瀹夐槻浜戠id</param>
+        /// <returns></returns>
+        public ResponsePackNew ReadSecurityStatus(List<string> sidList, List<string> userSecurityIds)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
+            //sids userSecurityIds 涓嶈兘鍚屾椂涓虹┖
+            d.Add("sids", sidList);
+            d.Add("userSecurityIds", userSecurityIds);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_StatusRead, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 璁剧疆瀹夐槻闃插尯鐘舵��
+        /// </summary>
+        public ResponsePackNew SetSecurityStatus(List<SecurityState> securityStates)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("securitys", securityStates);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_StatusSet, requestJson);
+            return pack;
+        }
+
+        /// <summary>
+        /// 瀹夐槻bypass璁剧疆
+        /// </summary>
+        public ResponsePackNew SetSecurityBypass(List<SecurityBypass> securityBypassStates)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("securitys", securityBypassStates);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_BypassSet, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 瀹夐槻bypass璇诲彇
+        /// </summary>
+        /// <param name="sidList">瀹夐槻sid</param>
+        /// <param name="userSecurityIds">瀹夐槻浜戠id</param>
+        /// <returns></returns>
+        public ResponsePackNew ReadSecurityBypass(List<string> sidList, List<string> userSecurityIds)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);
+            //sids userSecurityIds 涓嶈兘鍚屾椂涓虹┖
+            d.Add("sids", sidList);
+            d.Add("userSecurityIds", userSecurityIds);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_BypassRead, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 鏌ヨ瀹夐槻鎵�鏈夎褰�
+        /// </summary>
+        public ResponsePackNew GetSecurityLogList(string pageSize,string pageNo)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("pageSize", pageSize);
+            d.Add("pageNo", pageNo);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_ListSecurityLog, requestJson);
+            return pack;
+        }
+        /// <summary>
+        /// 鏌ヨ瀹夐槻鎶ヨ璁板綍
+        /// </summary>
+        public ResponsePackNew GetSecurityAlarmLogList(string pageSize, string pageNo)
+        {
+            Dictionary<string, object> d = new Dictionary<string, object>();
+            d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
+            d.Add("pageSize", pageSize);
+            d.Add("pageNo", pageNo);
+            var requestJson = HttpUtil.GetSignRequestJson(d);
+            var pack = HttpUtil.RequestHttpsPostFroHome(NewAPI.Api_Post_Security_ListAlarmLog, requestJson);
+            return pack;
+        }
+
+        #endregion
+
+
+        #region Kaede --绗笁鏂瑰搧鐗屽姛鑳�--------------------------
         /// <summary>
         /// 鑾峰彇绗笁鏂瑰搧鐗屽垪琛�
         /// </summary>
diff --git a/HDL_ON/DAL/Server/NewAPI.cs b/HDL_ON/DAL/Server/NewAPI.cs
index dfb9735..569ee79 100644
--- a/HDL_ON/DAL/Server/NewAPI.cs
+++ b/HDL_ON/DAL/Server/NewAPI.cs
@@ -427,6 +427,53 @@
 
         #endregion
 
+        #region Kaede -- 瀹夐槻鎺ュ彛____________________________
+        /// <summary>
+        /// 鑾峰彇瀹夐槻鍒楄〃
+        /// </summary>
+        public const string Api_Post_Security_List = "/home-wisdom/app/security/list";
+        /// <summary>
+        /// 鑾峰彇瀹夐槻璇︽儏
+        /// </summary>
+        public const string Api_Post_Security_Info = "/home-wisdom/app/security/info";
+        /// <summary>
+        /// 娣诲姞瀹夐槻
+        /// </summary>
+        public const string Api_Post_Security_Add = "/home-wisdom/app/security/add";
+        /// <summary>
+        /// 缂栬緫瀹夐槻
+        /// </summary>
+        public const string Api_Post_Security_Edit = "/home-wisdom/app/security/update";
+        /// <summary>
+        /// 鍒犻櫎瀹夐槻
+        /// </summary>
+        public const string Api_Post_Security_Delete = "/home-wisdom/app/security/delete";
+        /// <summary>
+        /// 璇诲彇瀹夐槻闃插尯鐘舵��
+        /// </summary>
+        public const string Api_Post_Security_StatusRead = "/home-wisdom/app/security/statusRead";
+        /// <summary>
+        /// 璁剧疆瀹夐槻闃插尯鐘舵��
+        /// </summary>
+        public const string Api_Post_Security_StatusSet = "/home-wisdom/app/security/statusSet";
+        /// <summary>
+        /// 瀹夐槻bypass璁剧疆
+        /// </summary>
+        public const string Api_Post_Security_BypassSet = "/home-wisdom/app/security/bypassSet";
+        /// <summary>
+        /// 瀹夐槻bypass璇诲彇
+        /// </summary>
+        public const string Api_Post_Security_BypassRead = "/home-wisdom/app/security/bypassRead";
+        /// <summary>
+        /// 鏌ヨ瀹夐槻鎵�鏈夎褰�
+        /// </summary>
+        public const string Api_Post_Security_ListSecurityLog = "/home-wisdom/app/security/listSecurityLog";
+        /// <summary>
+        /// 鏌ヨ瀹夐槻鎶ヨ璁板綍
+        /// </summary>
+        public const string Api_Post_Security_ListAlarmLog = "/home-wisdom/app/security/listAlarmLog";
+
+        #endregion
 
 
         #region 鈻�  -- 鎴块棿銆佽澶囥�佸満鏅垎浜玙__________________________
diff --git a/HDL_ON/Entity/Function/Security.cs b/HDL_ON/Entity/Function/Security.cs
new file mode 100644
index 0000000..332764e
--- /dev/null
+++ b/HDL_ON/Entity/Function/Security.cs
@@ -0,0 +1,234 @@
+锘縰sing System;
+using System.Collections.Generic;
+using HDL_ON.Common;
+
+namespace HDL_ON.Entity
+{
+    public class Security
+    {
+        /// <summary>
+        /// 瀹夐槻sid
+        /// </summary>
+        public string sid;
+        /// <summary>
+        /// 瀹夐槻鍚嶇О
+        /// </summary>
+        public string name;
+        /// <summary>
+        /// 瀹夐槻寤舵椂
+        /// </summary>
+        public string delay;
+        /// <summary>
+        /// 鐘舵�� enable甯冮槻銆乨isable鎾掗槻
+        /// </summary>
+        public string status;
+        /// <summary>
+        /// 绫诲瀷
+        /// "all"--鍏ㄥ畢甯冮槻锛�
+        /// "normal"--鏅�氭ā寮�,
+        /// "all_day":24灏忔椂,
+        /// "mute"锛氶潤闊�
+        /// </summary>
+        public string type;
+        /// <summary>
+        /// 鏇存柊鏃堕棿
+        /// </summary>
+        public string modifyTime;
+        /// <summary>
+        /// 瀹夐槻杈撳叆鏉′欢
+        /// </summary>
+        public List<SecurityInput> input = new  List<SecurityInput>();
+        /// <summary>
+        /// 瀹夐槻杈撳嚭
+        /// </summary>
+        public List<SecurityOutput> output = new List<SecurityOutput>();
+        /// <summary>
+        /// 瀹夐槻閫氱煡閰嶇疆
+        /// </summary>
+        public SecurityNoticeConfig noticeConfig = new SecurityNoticeConfig();
+        /// <summary>
+        /// 瀹夐槻鎺ㄩ�侀厤缃�
+        /// </summary>
+        public List<SecurityPushConfig> pushConfigs = new List<SecurityPushConfig>();
+
+        /// <summary>
+        /// 鏁版嵁瀛樺偍鏂囦欢鍚�
+        /// </summary>
+        [Newtonsoft.Json.JsonIgnore]
+        public string savePath
+        {
+            get
+            {
+                return "SecurityData_" + sid;
+            }
+        }
+        /// <summary>
+        /// 淇濆瓨鏂囦欢
+        /// </summary>
+        public void SaveFile()
+        {
+            var ssd = System.Text.Encoding.UTF8.GetBytes(Newtonsoft.Json.JsonConvert.SerializeObject(this));
+            FileUtlis.Files.WriteFileByBytes(savePath, ssd);
+        }
+    }
+
+    /// <summary>
+    /// 瀹夐槻鐘舵�侀厤缃�
+    /// </summary>
+    public class SecurityState
+    {
+        /// <summary>
+        /// 瀹夐槻浜戠id
+        /// </summary>
+        public string userSecurityId;
+        /// <summary>
+        /// 缃戝叧id 缃戝叧id 濡傛灉浼犵殑鏄痵id璇ュ瓧娈甸渶瑕佷紶
+        /// </summary>
+        public string gatewayId;
+        /// <summary>
+        /// 瀹夐槻sid
+        /// </summary>
+        public string sid;
+        /// <summary>
+        /// 鐘舵�� enable甯冮槻銆乨isable鎾掗槻
+        /// </summary>
+        public string status;
+    }
+
+    /// <summary>
+    /// 瀹夐槻bypass璁剧疆瀵硅薄
+    /// </summary>
+    public class SecurityBypass
+    {
+        /// <summary>
+        /// 瀹夐槻浜戠id
+        /// </summary>
+        public string userSecurityId;
+        /// <summary>
+        /// 杈撳叆璁惧bypass鐘舵�佸垪琛�
+        /// </summary>
+        public List<SecurityBypassInput> input = new List<SecurityBypassInput>();
+        
+    }
+    /// <summary>
+    /// 杈撳叆璁惧bypass鐘舵��
+    /// </summary>
+    public class SecurityBypassInput
+    {
+        /// <summary>
+        /// 璁惧sid
+        /// </summary>
+        public string sid;
+        /// <summary>
+        /// true:鍚敤
+        /// false:鍋滅敤锛堜复鏃禸ypass锛�
+        /// </summary>
+        public string bypass;
+    }
+
+
+    /// <summary>
+    /// 瀹夐槻杈撳叆
+    /// </summary>
+public class SecurityInput
+    {
+        /// <summary>
+        /// 杈撳叆鏉′欢锛堝姛鑳斤級鐨剆id
+        /// 杈撳叆璁惧sid
+        /// </summary>
+        public string sid;
+        /// <summary>
+        /// Bypass璁剧疆 true:鍚敤涓�乫alse:涓存椂bypass涓�
+        /// </summary>
+        public string bypass;
+        /// <summary>
+        /// 瀹夐槻杈撳叆鏉′欢
+        /// </summary>
+        public List<SecurityInputCondition> condition = new List<SecurityInputCondition>();
+        
+    }
+    /// <summary>
+    /// 瀹夐槻杈撳叆鏉′欢
+    /// </summary>
+    public class SecurityInputCondition
+    {
+        /// <summary>
+        /// 灞炴��(鏉′欢)鍚嶇О
+        /// </summary>
+        public string key;
+        /// <summary>
+        /// 鎿嶄綔锛堟墽琛岋級鏉′欢
+        /// < 灏忎簬 > 澶т簬  ==绛変簬
+        /// </summary>
+        public string comparator;
+        /// <summary>
+        /// 鏉′欢鍊肩被鍨�
+        /// int \float\ string
+        /// </summary>
+        public string data_type = "string";
+        /// <summary>
+        /// 鍊�	
+        /// </summary>
+        public string value;
+    }
+
+    /// <summary>
+    /// 瀹夐槻杈撳嚭
+    /// </summary>
+    public class SecurityOutput
+    {
+        /// <summary>
+        /// 鎺у埗鐩爣绫诲瀷
+        /// 璁惧锛�0锛屽満鏅�1锛岃嚜鍔ㄥ寲2
+        /// </summary>
+        public string target_type;
+        /// <summary>
+        /// 杈撳嚭鐩爣鐨剆id
+        /// </summary>
+        public string sid;
+        /// <summary>
+        /// 瀹夐槻杈撳嚭鐘舵��
+        /// </summary>
+        public List<SecurityOutputStatus> status = new List<SecurityOutputStatus>();
+    }
+    /// <summary>
+    /// 瀹夐槻杈撳嚭鐘舵��
+    /// </summary>
+    public class SecurityOutputStatus
+    {
+        public string key;
+        public string value;
+    }
+
+    /// <summary>
+    /// 瀹夐槻閫氱煡閰嶇疆
+    /// </summary>
+    public class SecurityNoticeConfig
+    {
+        /// <summary>
+        /// 鏄惁寮�鍚�氱煡
+        /// </summary>
+        public bool enable;
+        /// <summary>
+        /// 閫氱煡鍐呭
+        /// </summary>
+        public string noticeContent;
+        
+    }
+    /// <summary>
+    /// 瀹夐槻鎺ㄩ�侀厤缃�
+    /// </summary>
+    public class SecurityPushConfig
+    {
+        /// <summary>
+        /// 鎺ㄩ�佹柟寮�
+        /// APP:app push
+        /// SMS:鐭俊
+        /// </summary>
+        public string pushMethod;
+        /// <summary>
+        /// 鎺ㄩ�佺洰鏍�
+        /// </summary>
+        public List<string> pushTarget = new List<string>();
+    }
+}
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
index 5725ed5..9f60e5f 100644
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -101,7 +101,6 @@
             return Functions.FindAll((obj) => spkList.Contains(obj.spk));
         }
     
-      
         /// <summary>
         /// 绾㈠瀹濆垪琛�
         /// </summary>
@@ -137,6 +136,11 @@
         /// 鍦烘櫙鍒楄〃
         /// </summary>
         public List<Scene> scenes = new List<Scene>();
+
+        /// <summary>
+        /// 瀹夐槻鍒楄〃
+        /// </summary>
+        public List<Security> securities = new List<Security>();
 
         /// <summary>
         /// 鍔犺浇鍔熻兘鍒楄〃
@@ -176,13 +180,40 @@
                 }
                 Functions.Add(tempFunction);
             }
-            if (filePath.StartsWith("SceneData_"))
+            else if (filePath.StartsWith("SceneData_"))
             {
                 var sceneDataBytes = FileUtlis.Files.ReadFile(filePath);
                 var sceneDataString = System.Text.Encoding.UTF8.GetString(sceneDataBytes);
                 var tempScene = Newtonsoft.Json.JsonConvert.DeserializeObject<Scene>(sceneDataString);
                 List.scenes.Add(tempScene);
             }
+            else if (filePath.StartsWith("SecurityData_"))
+            {
+                var dataBytes = FileUtlis.Files.ReadFile(filePath);
+                var dataString = System.Text.Encoding.UTF8.GetString(dataBytes);
+                var temp = Newtonsoft.Json.JsonConvert.DeserializeObject<Security>(dataString);
+                if (temp == null)
+                {
+                    MainPage.Log("null");
+                    FileUtlis.Files.DeleteFile(filePath);
+                    return;
+                }
+                if (checkRepeat == true)
+                {
+                    //妫�娴嬮噸澶�
+                    for (int i = 0; i < securities.Count; i++)
+                    {
+                        if (securities[i].sid == temp.sid)
+                        {
+                            //鍏堢Щ闄ゆ帀鍐嶅姞
+                            securities.RemoveAt(i);
+                            securities.Add(temp);
+                            return;
+                        }
+                    }
+                }
+                securities.Add(temp);
+            }
         }
 
         /// <summary>
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 198f53a..622e4e7 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -397,6 +397,8 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Video\ObjectClass.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Scene\CatchSceneAddPage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Scene\CatchSceneCatchFunctionListPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmCenter\ArmCenterPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\Security.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)DAL\" />
@@ -440,6 +442,6 @@
     <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Video\View\" />
     <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Energy\" />
     <Folder Include="$(MSBuildThisFileDirectory)DAL\ThirdPartySdk\" />
-    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Arm\" />
+    <Folder Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\ArmCenter\" />
   </ItemGroup>
 </Project>
\ No newline at end of file
diff --git a/HDL_ON/UI/UI0-Public/TopViewDiv.cs b/HDL_ON/UI/UI0-Public/TopViewDiv.cs
index 080a209..02a2f3d 100644
--- a/HDL_ON/UI/UI0-Public/TopViewDiv.cs
+++ b/HDL_ON/UI/UI0-Public/TopViewDiv.cs
@@ -340,7 +340,7 @@
         /// <summary>
         /// 鎴愬憳椤堕儴鏍�
         /// </summary>
-        public void LoadTopView_MemberTopView(Action callBack, Action action)
+        public void LoadTopView_MemberTopView(Action addAction, Action action)
         {
             LoadTopView();
             backAction = action;
@@ -357,7 +357,30 @@
 
             btnAddIcon.MouseUpEventHandler += (sender, e) =>
             {
-                callBack?.Invoke();
+                addAction?.Invoke();
+            };
+        }
+        /// <summary>
+        /// 瀹夐槻涓績椤堕儴鏍�
+        /// </summary>
+        public void LoadTopView_ArmCenter(Action skipAction)//(Action callBack, Action action)
+        {
+            //LoadTopView();
+            //backAction = action;
+
+            var btnAddIcon = new Button()
+            {
+                X = Application.GetRealWidth(337),
+                Y = Application.GetRealHeight(29),
+                Width = Application.GetMinRealAverage(28),
+                Height = Application.GetMinRealAverage(28),
+                UnSelectedImagePath = "FunctionIcon/ArmCenter/HistoryIcon.png",
+            };
+            contentView.AddChidren(btnAddIcon);
+
+            btnAddIcon.MouseUpEventHandler += (sender, e) =>
+            {
+                skipAction?.Invoke();
             };
         }
     }
diff --git a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
index 75aaa60..fdf56a2 100644
--- a/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
+++ b/HDL_ON/UI/UI2/2-Classification/ClassificationPage.cs
@@ -507,9 +507,7 @@
                         }
                         break;
                     case ShowFunction.SecurityCenter:
-#if DEBUG
-                        functionCount = 1;
-#endif
+                        functionCount = FunctionList.List.securities.Count;
                         break;
 
                 }
diff --git a/HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneAddPage.cs b/HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneAddPage.cs
index 352dc86..61abb45 100644
--- a/HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneAddPage.cs
+++ b/HDL_ON/UI/UI2/3-Intelligence/Scene/CatchSceneAddPage.cs
@@ -1,5 +1,7 @@
 锘縰sing System;
 using System.Collections.Generic;
+using System.Threading;
+using HDL_ON.DAL.Server;
 using HDL_ON.Entity;
 using HDL_ON.UI.CSS;
 using Shared;
@@ -19,6 +21,36 @@
         private Button btnChooseZoneViewTitle;
         private VerticalScrolViewLayout functionListView;
         private Button btnComplete;
+
+        #region 鍥炬爣閫夋嫨閮ㄥ垎鍥炬爣
+        /// <summary>
+        /// 鑳屾櫙鍥鹃�夐」鍖哄煙
+        /// </summary>
+        FrameLayout pictureOptionView;
+        /// <summary>
+        /// 鑳屾櫙鍥鹃�夐」閫夋嫨鍖哄煙
+        /// </summary>
+        VerticalScrolViewLayout optionView;
+        /// <summary>
+        /// 榛樿鍥惧簱鎸夐挳
+        /// </summary>
+        Button btnDefaultGallery;
+        /// <summary>
+        /// 鎷嶇収鎸夐挳
+        /// </summary>
+        Button btnTakePicture;
+        /// <summary>
+        /// 鐩稿唽鎸夐挳
+        /// </summary>
+        Button btnAlbum;
+        /// <summary>
+        /// 鍙栨秷鎸夐挳
+        /// </summary>
+        Button btnCancel;
+        #endregion
+
+
+
         /// <summary>
         /// 鎹曟崏鐨勫尯鍩熷垪琛�
         /// </summary>
@@ -37,7 +69,6 @@
                 RemoveFromParent();
             };
         }
-
 
         public void LoadPage()
         {
@@ -74,6 +105,14 @@
 
             //2020-12-03 淇敼鍥剧墖鍔犺浇鏂规硶
             ImageUtlis.Current.LoadLocalOrNetworkImages(scene.ImagePath, addSceneImageView);
+
+            /// <summary>
+            /// 淇敼鍦烘櫙鑳屾櫙浜嬩欢
+            /// </summary>
+            addSceneImageView.MouseUpEventHandler = (sender, e) =>
+            {
+                LoadPictureOptionView();
+            };
 
             #region 鍦烘櫙鍚嶇Оrow
             sceneNameView = new FrameLayout()
@@ -174,71 +213,6 @@
                 BackgroundColor = CSS_Color.BackgroundColor,
             });
             #endregion
-            #region 鍦烘櫙寤舵椂row
-            /*
-            if (DB_ResidenceData.Instance.GatewayType == 1)
-            {
-                FrameLayout sceneDelayRow = new FrameLayout()
-                {
-                    Y = sceneNameView.Bottom,
-                    Height = Application.GetRealWidth(50),
-                };
-                contentView.AddChidren(sceneDelayRow);
-
-                Button btnSceneDelayRight = new Button()
-                {
-                    X = Application.GetRealWidth(339),
-                    Gravity = Gravity.CenterVertical,
-                    Width = Application.GetMinRealAverage(16),
-                    Height = Application.GetMinRealAverage(16),
-                    UnSelectedImagePath = "Public/Right.png",
-                };
-                sceneDelayRow.AddChidren(btnSceneDelayRight);
-
-                var btnSceneDelayInfo = new Button()
-                {
-                    Width = Application.GetRealWidth(327),
-                    TextAlignment = TextAlignment.CenterRight,
-                    TextColor = CSS_Color.PromptingColor1,
-                    TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
-                    Text = scene.GetDelayText()
-                };
-                sceneDelayRow.AddChidren(btnSceneDelayInfo);
-
-                Button btnSceneDelayTitle = new Button()
-                {
-                    X = Application.GetRealWidth(16),
-                    //Width = Application.GetRealWidth(90),
-                    TextAlignment = TextAlignment.CenterLeft,
-                    TextColor = CSS_Color.FirstLevelTitleColor,
-                    TextSize = CSS_FontSize.TextFontSize,
-                    TextID = StringId.SceneDelay,
-                };
-                sceneDelayRow.AddChidren(btnSceneDelayTitle);
-
-                btnSceneDelayTitle.MouseUpEventHandler = (sender, e) =>
-                {
-                    Action<string> action = (obj) => {
-                        scene.delay = obj;
-                        btnSceneDelayInfo.Text = scene.GetDelayText();
-                    };
-                    Dictionary<string, string> items = new Dictionary<string, string>();
-                    items.Add("30", "30s");
-                    items.Add("60", "1min");
-                    items.Add("120", "2min");
-                    items.Add("300", "5min");
-                    new PublicAssmebly().SetSceneDelayDialog(items, action, scene.delay);
-                };
-
-                contentView.AddChidren(new Button()
-                {
-                    Y = sceneDelayRow.Bottom,
-                    Height = Application.GetRealHeight(8),
-                    BackgroundColor = CSS_Color.BackgroundColor,
-                });
-            }
-            */
-            #endregion
 
             #region 閫夋嫨鍖哄煙
             FrameLayout chooseZoneView = new FrameLayout()
@@ -273,8 +247,6 @@
                 BackgroundColor = CSS_Color.BackgroundColor,
             };
             contentView.AddChidren(btnLine1);
-
-
 
             #endregion
 
@@ -342,8 +314,6 @@
                 }
             };
         }
-
-
 
         /// <summary>
         /// 鍔犺浇鍔熻兘鍒楄〃
@@ -432,6 +402,273 @@
             }
         }
 
+        /// <summary>
+        /// 鍔犺浇鍥炬爣閫夋嫨閫夐」
+        /// </summary>
+        void LoadPictureOptionView()
+        {
+            var pView = new FrameLayout()
+            {
+                BackgroundColor = CSS_Color.DialogTransparentColor1,
+            };
+            bodyView.AddChidren(pView);
+
+            pictureOptionView = new FrameLayout()
+            {
+                Y = Application.GetRealHeight(445),
+                Height = Application.GetRealHeight(250),
+                AnimateSpeed = 0.3f,
+                Animate = Animate.DownToUp,
+            };
+            pView.AddChidren(pictureOptionView);
+
+            optionView = new VerticalScrolViewLayout()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(343),
+                Height = Application.GetRealHeight(150),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                Radius = (uint)Application.GetRealWidth(12),
+            };
+            pictureOptionView.AddChidren(optionView);
+
+            btnDefaultGallery = new Button()
+            {
+                Height = Application.GetRealHeight(50),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.DefaultGallery,
+            };
+            optionView.AddChidren(btnDefaultGallery);
+
+            optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor });
+
+            btnTakePicture = new Button()
+            {
+                Height = Application.GetRealHeight(50),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.TakePicture,
+            };
+            optionView.AddChidren(btnTakePicture);
+
+            optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor });
+
+            btnAlbum = new Button()
+            {
+                Height = Application.GetRealHeight(50),
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                SelectedTextColor = CSS_Color.MainColor,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextID = StringId.Album,
+            };
+            optionView.AddChidren(btnAlbum);
+
+            optionView.AddChidren(new Button() { Height = Application.GetRealHeight(1), Width = Application.GetRealWidth(343), BackgroundColor = CSS_Color.DividingLineColor });
+
+            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,
+            };
+            pictureOptionView.AddChidren(btnCancel);
+
+
+            LoadEvent_PictureOptionViewEventList(pView);
+        }
+
+        /// <summary>
+        /// 鍔犺浇鑳屾櫙鍥鹃�夋嫨鍖哄煙浜嬩欢鍒楄〃
+        /// </summary>
+        void LoadEvent_PictureOptionViewEventList(FrameLayout pView)
+        {
+            pictureOptionView.MouseUpEventHandler = (sender, e) =>
+            {
+                pictureOptionView.Parent.RemoveFromParent();
+            };
+            pView.MouseUpEventHandler = (sender, e) =>
+            {
+                pictureOptionView.Parent.RemoveFromParent();
+            };
+
+            btnCancel.MouseUpEventHandler = (sender, e) =>
+            {
+                pictureOptionView.Parent.RemoveFromParent();
+            };
+            btnTakePicture.MouseDownEventHandler = (sender, e) => {
+                btnTakePicture.IsSelected = true;
+            };
+            btnTakePicture.MouseUpEventHandler = (sender, e) =>
+            {
+                btnTakePicture.IsSelected = false;
+
+                var imageName = Guid.NewGuid().ToString();
+                CropImage.TakePicture((imagePath) =>
+                {
+                    CropImageCallBack(imagePath);
+
+                }, imageName, 4, 3);
+
+                pictureOptionView.Parent.RemoveFromParent();
+            };
+            btnAlbum.MouseDownEventHandler = (sender, e) => {
+                btnAlbum.IsSelected = true;
+            };
+
+            btnAlbum.MouseUpEventHandler = (sender, e) =>
+            {
+                btnAlbum.IsSelected = false;
+
+                //浠庣浉鍐岄�夋嫨鍥剧墖瑁佸壀
+                var imageName = Guid.NewGuid().ToString();
+                //var imageName = scene.sid;
+                CropImage.SelectPicture((imagePath) =>
+                {
+                    CropImageCallBack(imagePath);
+                }, imageName, 4, 3);
+
+
+                //if (pageTitleId == StringId.EditScene)
+                //{
+                //    scene.SaveFunctionData();
+                //}
+                pictureOptionView.Parent.RemoveFromParent();
+            };
+
+            btnDefaultGallery.MouseUpEventHandler = (sender, e) => {
+                pictureOptionView.Parent.RemoveFromParent();
+                Action<string> action = (obj) => {
+                    scene.ImagePath = obj;
+                    addSceneImageView.ImageBytes = null;//瑙e喅鏈塈mageBytes涓嶅姞杞絀magePath
+                    addSceneImageView.ImagePath = scene.ImagePath;
+                };
+
+                var galleryPage = new GalleryPage(scene.ImagePath, action);
+                MainPage.BasePageView.AddChidren(galleryPage);
+                galleryPage.LoadPage(true);
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+
+        }
+
+        /// <summary>
+        /// 瑁佸壀瀹岀収鐗囧洖璋冿紝缁熶竴澶勭悊
+        /// </summary>
+        /// <param name="imagePath">瑁佸壀鍚庣殑鐪熷疄璺緞</param>
+        /// <param name="imageName">鑷畾涔夌殑鍥剧墖鍚嶇О</param>
+        void CropImageCallBack(string selectImagePath)
+        {
+            if (string.IsNullOrEmpty(selectImagePath) == true)
+            {
+                return;
+            }
+
+            //涓婁紶鎴愬姛鍒板洖璋�
+            Action<string> uploadSuccessAction = (imageUrl) =>
+            {
+                //2020-12-03 闇�瑕佽鏈�鏂扮殑鍥剧墖璺緞鍚屾鍒颁簯绔�
+                scene.ImagePath = imageUrl;
+            };
+            //涓婁紶鍥剧墖鍒颁簯绔�
+            UploadImage(selectImagePath, addSceneImageView, scene, uploadSuccessAction);
+        }
+
+        /// <summary>
+        /// 涓婁紶鍥剧墖鏂规硶
+        /// </summary>
+        /// <param name="selectImagePath">瑁佸壀鍚庣殑鍥剧墖璺緞</param>
+        /// <param name="imageView"></param>
+        /// <param name="uploadSuccessAction"></param>
+        void UploadImage(string selectImagePath, ImageView imageView, Scene mScene, Action<string> uploadSuccessAction)
+        {
+            try
+            {
+                //MainPage.Log("SelectPicture 瑁佸壀鍥剧墖杩斿洖璺緞: " + selectImagePath);
+                //1.璇诲彇瑁佸壀鍚庣殑鍥剧墖锛岀劧鍚庡垹闄�
+                var imageBytes = Shared.IO.FileUtils.ReadFile(selectImagePath);
+                System.IO.File.Delete(selectImagePath);
+
+                var waitPage = new Loading();
+                bodyView.AddChidren(waitPage);
+                waitPage.Start(Language.StringByID(StringId.PleaseWait));
+                //寮�濮嬩笂浼�
+                new Thread(() =>
+                {
+                    try
+                    {
+                        var newImageName = mScene.name.Trim() + ".png";
+                        var uploadImageObj = new UploadImageObj()
+                        {
+                            prefix = "Scene" + Utlis.GetTimestamp(),
+                            fileName = newImageName,
+                            uid = mScene.sid,
+                            content = imageBytes,
+                        };
+
+                        var imageUrl = ImageUtlis.Current.UploadImage(uploadImageObj);
+                        if (!string.IsNullOrEmpty(imageUrl) && imageUrl.Contains(newImageName))
+                        {
+                            //涓婁紶鎴愬姛
+                            Application.RunOnMainThread(() =>
+                            {
+                                //Utlis.WriteLine("涓婁紶鎴愬姛锛�" + imageUrl);
+                                //1.2濡傛灉鏄嚜瀹氫箟鍥剧墖鍒犻櫎涔嬪墠鐨�
+                                if (!string.IsNullOrEmpty(imageView.ImagePath) && !imageView.ImagePath.Contains("Classification/Room/Roombg"))
+                                {
+                                    //Utlis.WriteLine("鍒犻櫎: " + imageView.ImagePath);
+                                    System.IO.File.Delete(imageView.ImagePath);
+                                }
+                                //閲嶅懡鍚嶄繚瀛�
+                                ImageUtlis.Current.WriteFileByBytes(imageUrl, imageBytes);
+                                imageView.ImagePath = null;
+                                imageView.ImageBytes = imageBytes;
+                                //涓婁紶鎴愬姛
+                                Utlis.ShowTip(Language.StringByID(StringId.UploadSuccessfully));
+                                uploadSuccessAction?.Invoke(imageUrl);
+                            });
+                        }
+                        else
+                        {
+                            //涓婁紶澶辫触
+                            Application.RunOnMainThread(() =>
+                            {
+                                //涓婁紶澶辫触
+                                Utlis.ShowTip(Language.StringByID(StringId.UploadFailed));
+                            });
+                        }
+
+                    }
+                    catch (Exception ex)
+                    {
+                    }
+                    finally
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            if (waitPage != null)
+                            {
+                                waitPage.RemoveFromParent();
+                                waitPage = null;
+                            }
+                        });
+                    }
+                })
+                { IsBackground = true }.Start();
+            }
+            catch { }
+        }
 
     }
 }
diff --git a/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs
new file mode 100644
index 0000000..d80b17d
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/ArmCenter/ArmCenterPage.cs
@@ -0,0 +1,128 @@
+锘縰sing System;
+using HDL_ON.UI.CSS;
+using Shared;
+namespace HDL_ON.UI.UI2.FuntionControlView.ArmCenter
+{
+    public class ArmCenterPage : FrameLayout
+    {
+        /// <summary>
+        /// 涓荤獥浣�
+        /// </summary>
+        FrameLayout bodyView;
+        public ArmCenterPage()
+        {
+            bodyView = this;
+        }
+
+        public void LoadPage()
+        {
+            Action skipAction = () => {
+
+            };
+
+            new TopViewDiv(bodyView, Language.StringByID(StringId.Setting)).LoadTopView_ArmCenter(skipAction);
+
+            VerticalScrolViewLayout contentView = new VerticalScrolViewLayout()
+            {
+                Height = Application.GetRealHeight(603),
+                BackgroundColor = CSS_Color.MainBackgroundColor,
+                ScrollEnabled = false,
+            };
+            bodyView.AddChidren(contentView);
+
+            contentView.AddChidren(new Button()
+            {
+                Height =Application.GetRealWidth(32),
+            });
+
+            //瀹夐槻鐘舵�佽儗鏅浘
+            Button btnArmTipIcon = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(198),
+                Height = Application.GetRealWidth(198),
+                UnSelectedImagePath = "FunctionIcon/ArmCenter/NoDefenseBigIcon.png",
+                SelectedImagePath = "FunctionIcon/ArmCenter/InDefenseBigIcon.png",
+            };
+            contentView.AddChidren(btnArmTipIcon);
+
+            contentView.AddChidren(new Button()
+            {
+                Height = Application.GetRealWidth(16),
+            });
+
+            //鑷畾涔夊竷闃叉爣棰�
+            Button btnCustomDeploymentTitle = new Button()
+            {
+                X = Application.GetRealWidth(24),
+                Height = Application.GetRealWidth(54),
+                TextAlignment = TextAlignment.CenterLeft,
+                IsBold = true,
+                TextSize = CSS_FontSize.SubheadingFontSize,
+                TextColor = CSS_Color.FirstLevelTitleColor,
+                TextID = StringId.CustomDeployment,
+            };
+            contentView.AddChidren(btnCustomDeploymentTitle);
+
+            HorizontalScrolViewLayout customDeploymentView = new HorizontalScrolViewLayout()
+            {
+                X = Application.GetRealWidth(23),
+                Height = Application.GetRealWidth(80),
+            };
+            contentView.AddChidren(customDeploymentView);
+
+
+
+
+
+
+
+        }
+    }
+
+
+    /// <summary>
+    /// 瀹夐槻鑷畾涔夋帶浠�
+    /// </summary>
+    public class ArmDiyView
+    {
+        public FrameLayout ArmDiyButton;
+
+        /// <summary>
+        /// 
+        /// </summary>
+        /// <param name="IconPath">鍥剧墖璺緞</param>
+        /// <param name="Text">鏄剧ず鏂囨湰</param>
+        public ArmDiyView(string UnSelectedIconPath, string SelectedIconPath, string Text)
+        {
+            ArmDiyButton = new FrameLayout()
+            {
+                Width = Application.GetRealWidth(82),
+                Height = Application.GetRealWidth(80),
+            };
+
+            Button btnIcon = new Button()
+            {
+                Gravity = Gravity.CenterHorizontal,
+                Width = Application.GetRealWidth(40),
+                Height = Application.GetRealWidth(40),
+                UnSelectedImagePath = UnSelectedIconPath,
+                SelectedImagePath = SelectedIconPath,
+            };
+            ArmDiyButton.AddChidren(btnIcon);
+
+            Button btnText = new Button()
+            {
+                Y = Application.GetRealWidth(40),
+                Height = Application.GetRealWidth(41),
+                Text = Text,
+                TextAlignment = TextAlignment.Center,
+                TextColor = CSS_Color.TextualColor,
+                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
+            };
+            ArmDiyButton.AddChidren(btnText);
+
+        }
+            
+    }
+}

--
Gitblit v1.8.0