From 48c07e0a371f67b97abc7c2e61d7f23d060324fc Mon Sep 17 00:00:00 2001
From: wxr <464027401@qq.com>
Date: 星期四, 28 一月 2021 18:24:53 +0800
Subject: [PATCH] Merge branch 'dev-tzy' into NewFilePath

---
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/MuteSelect.png           |    0 
 HDL-ON_Android/Assets/Language.ini                                                     |   37 
 HDL-ON_iOS/HDL-ON_iOS.csproj                                                           |   51 
 HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomClickButton.cs                        |   39 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/SuctionSelect.png        |    0 
 HDL_ON/UI/UI0-Stan/Controls/CompoundControls/ProgressBar.cs                            |  139 
 HDL_ON/HDL_ON.projitems                                                                |   49 
 HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalListRefreshControl.cs       |  217 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlRight.png          |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointMode.png        |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/AirCleanerThiinIcon.png            |    0 
 HDL-ON_Android/Resources/Resource.designer.cs                                          |    3 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HandMode.png                   |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HandMode.png                    |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlUp.png            |    0 
 HDL_ON/UI/UI0-Stan/Controls/NormalControls/NormalViewControl.cs                        |   34 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/SleepMode.png                  |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Battery.png              |    0 
 HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalFrameControl.cs             |  234 +
 HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalListControl.cs              |  211 +
 HDL_ON/UI/UI0-Stan/Controls/CompoundControls/SeekBarImageControl.cs                    |  248 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AutoModeSelect.png              |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AreaMode.png              |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AreaModeSelect.png        |    0 
 HDL_ON/Entity/Function/WeepRobot.cs                                                    |   10 
 HDL_ON/UI/UI0-Stan/Form/Base/CommonFormBase.cs                                         |  323 ++
 HDL_ON/UI/UI2/.DS_Store                                                                |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/SleepModeSelect.png             |    0 
 HDL_ON/UI/UI0-Stan/Controls/CompoundControls/DialogTitleMenuControl.cs                 |  154 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlDown.png           |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlLeft.png           |    0 
 HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomItemSelectControl.cs                  |  203 +
 HDL_ON/UI/UI0-Stan/Controls/NormalControls/IconBigViewControl.cs                       |   82 
 HDL_ON/UI/UI0-Stan/Logic/HdlFormLogic.cs                                               |  323 ++
 HDL-ON_iOS/Resources/Language.ini                                                      |   39 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobotThinIcon.png              |    0 
 HDL_ON/UI/UI0-Stan/Controls/CompoundControls/NormalSelectControl.cs                    |  144 
 HDL_ON/UI/CSS/CSS.cs                                                                   |    5 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HandModeSelect.png              |    0 
 HDL_ON/DAL/DriverLayer/Control.cs                                                      |   26 
 HDL_ON/DAL/.DS_Store                                                                   |    0 
 HDL_ON/Entity/Function/AirCleaner.cs                                                   |   10 
 HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs                                    |   63 
 HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomItemEditorControl.cs                  |  137 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobotThinIcon.png               |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AirCleanerOff.png              |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud3.png      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/SleepModeSelect.png            |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HeightGear.png                  |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud3.png       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AutoModeSelect.png             |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/CleanSelect.png          |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Suction.png               |    0 
 HDL_ON/UI/UI0-Stan/Controls/NormalControls/PicViewControl.cs                           |   24 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs                      |  880 +++++
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HeightGear.png                 |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AirCleanerOn.png               |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/WallMode.png              |    0 
 HDL_ON/.DS_Store                                                                       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Battery.png               |    0 
 HDL_ON/DAL/Server/HttpServerRequest.cs                                                 |    2 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/VoiceSelect.png          |    0 
 HDL_ON/UI/UI0-Stan/Resourse/HdlControlResourse.cs                                      |   49 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AirCleanerOn.png                |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Clean.png                 |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AreaModeSelect.png       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/LowGear.png                     |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlEnable.png         |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointMode.png       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AutoMode.png                    |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/MidGearSelect.png              |    0 
 HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameLayoutStatuControl.cs             |  217 +
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ChargeSelect.png         |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HandModeSelect.png             |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlUp.png             |    0 
 HDL_ON/UI/UI0-Stan/Form/HideOptionDirectoryListForm.cs                                 |   85 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/ComfortableMode.png            |    0 
 HDL-ON_Android/HDL-ON_Android.csproj                                                   |   47 
 HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/NormalFrameLayout.cs                   |   15 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs                       |  484 +++
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HeightGearSelect.png           |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/SleepMode.png                   |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/LowGear.png                    |    0 
 HDL_ON/UI/UI0-Stan/Controls/BaseControl/RowLayoutBase.cs                               |   60 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AutoModeSelect.png       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/WallMode.png             |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/VoiceSelect.png           |    0 
 HDL_ON/UI/.DS_Store                                                                    |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Clean.png                |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/AirCleanerThiinIcon.png             |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AirCleanerOff.png               |    0 
 HDL_ON/UI/UI0-Stan/Enum/CommonEnum.cs                                                  |  115 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/MidGear.png                    |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AutoMode.png                   |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/Fan.png                         |    0 
 HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomTimeSelectControl.cs                  |  136 
 HDL_ON/Entity/Function/Function.cs                                                     |   29 
 HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs                                  |   11 
 HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameRowControl.cs                     |  391 ++
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/LowGearSelect.png              |    0 
 HDL_ON/UI/UI0-Stan/Form/HideOptionSearchAllFile.cs                                     |  181 +
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/Fan.png                        |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Suction.png              |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/MuteSelect.png            |    0 
 HDL_ON/UI/UI0-Stan/Controls/BaseControl/TextInputBase.cs                               |  344 ++
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlLeft.png          |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ChargeSelect.png          |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/MidGearSelect.png               |    0 
 HDL_ON/Entity/.DS_Store                                                                |    0 
 HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs                                              |   12 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/CleanSelect.png           |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointModeSelect.png |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/LowGearSelect.png               |    0 
 HDL_ON/UI/UI0-Stan/Controls/BaseControl/FrameLayoutBase.cs                             |  111 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/Time.png                       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Voice.png                |    0 
 HDL_ON/UI/UI0-Stan/Controls/NormalControls/IconViewControl.cs                          |   32 
 HDL_ON/UI/UI0-Stan/Logic/HdlFileLogic.cs                                               |  292 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud4.png       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/Time.png                        |    0 
 HDL_ON/UI/UI0-Stan/Controls/CompoundControls/FanGearSeekBarControl.cs                  |   70 
 HDL_ON/UI/UI2/FuntionControlView/.DS_Store                                             |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AutoMode.png             |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/WallModeSelect.png        |    0 
 HDL_ON/UI/UI0-Stan/Controls/TextInputControls/TextInputControl.cs                      |   43 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/ComfortableMode.png             |    0 
 HDL_ON/UI/UI0-Stan/Form/DeviceFunctionCardCommonForm.cs                                |  296 +
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/ComfortableModeSelect.png      |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud4.png      |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AutoMode.png              |    0 
 HDL_ON/UI/UI0-Stan/Logic/HdlMessageLogic.cs                                            |   96 
 HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomDialogCommon.cs                       |  124 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/WallModeSelect.png       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/ComfortableModeSelect.png       |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Mute.png                  |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/MidGear.png                     |    0 
 HDL_ON/UI/UI0-Stan/Form/Base/EditorCommonForm.cs                                       |  320 ++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HeightGearSelect.png            |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointModeSelect.png  |    0 
 HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs                             |  277 +
 HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalFrameRefreshControl.cs      |  235 +
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AutoModeSelect.png        |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AreaMode.png             |    0 
 HDL_ON/Entity/FunctionList.cs                                                          |   38 
 HDL_ON/UI/UI0-Stan/Controls/RowLayoutControls/RowLayoutControl.cs                      |   70 
 HDL_ON/UI/UI0-Stan/Controls/NormalControls/MostRightIconControl.cs                     |   78 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Charge.png                |    0 
 HDL_ON/UI/UI0-Stan/Controls/BaseControl/ButtonCtrBase.cs                               |  340 ++
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlDisable.png       |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Mute.png                 |    0 
 HDL_ON/UI/UI0-Stan/Logic/HdlThreadLogic.cs                                             |  117 
 HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameListControl.cs                    |  100 
 HDL_ON/UI/UI0-Stan/Controls/CompoundControls/DirectionImageControl.cs                  |  259 +
 HDL_ON/UI/UI0-Stan/Form/HideOptionFileContentForm.cs                                   |   91 
 HDL_ON/Common/R.cs                                                                     |  143 
 HDL_ON/UI/UI0-Stan/Controls/MessageControls/ShowMsgControl.cs                          |  335 ++
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlDisable.png        |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Charge.png               |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlDown.png          |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlRight.png         |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/SuctionSelect.png         |    0 
 HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Voice.png                 |    0 
 HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlEnable.png        |    0 
 163 files changed, 9,310 insertions(+), 20 deletions(-)

diff --git a/HDL-ON_Android/Assets/Language.ini b/HDL-ON_Android/Assets/Language.ini
old mode 100644
new mode 100755
index 98a2494..4e6df03
--- a/HDL-ON_Android/Assets/Language.ini
+++ b/HDL-ON_Android/Assets/Language.ini
@@ -1034,6 +1034,7 @@
 378=鍙樺寲鏃堕棿
 379=鍙樺寲閫熷害
 380=姝ゅ鍔熻兘鏆傛湭寮�鏀撅綖
+381=閲嶆柊鍔犺浇
 400=娆㈣繋鍥炲
 401=浜岀淮鐮佸け鏁堬紝璇烽噸璇�
 402=閲嶈瘯
@@ -1044,6 +1045,42 @@
 407=闃呰
 408=纭娣诲姞
 
+1000=瀹ゅ唴婀垮害
+1001=绔ラ攣
+1002=璐熺瀛�
+1003=鏉�鑿�
+1004=鍔犳箍
+1005=婊よ姱澶嶄綅
+1006=鐏厜
+1007=鑷姩妯″紡
+1008=鎵嬪姩妯″紡
+1009=寮哄姴妯″紡
+1010=鐫$湢妯″紡
+1011=瀹氭椂
+1012=閫夋嫨椋庨��
+1013=妗�
+1014=璇风‘璁ゆ槸鍚﹀凡瀹為檯閲嶇疆婊よ姱骞舵寜{0}鐓ц鏄庝功瑕佹眰鎿嶄綔璁惧杩涜婊よ姱{0}瀵垮懡閲嶆柊璁℃椂
+1015=浣庢。
+1016=涓。
+1017=楂樻。
+1018=瀹氭椂璁剧疆
+1019=灏忔椂
+1020=婊よ姱浣跨敤锛�
+1021=绌烘皵鍑�鍖栧櫒
+1022=褰撳墠椋庨��
+1023=鍙栨秷瀹氭椂
+1024=鎵湴鏈哄櫒浜�
+1025=鍚稿姏璋冭妭
+1026=鍚稿姏1妗�
+1027=鍚稿姏2妗�
+1028=鍚稿姏3妗�
+1029=鍏呯數
+1030=澹伴煶
+1031=闈欓煶
+1032=娓呮壂妯″紡
+1033=鑰楁潗绠$悊
+1034=鍘嗗彶璁板綍
+
 5000=闊充箰
 5001=缁勫悎
 5002=璁剧疆
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/AirCleanerThiinIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/AirCleanerThiinIcon.png
new file mode 100755
index 0000000..5000333
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/AirCleanerThiinIcon.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AirCleanerOff.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AirCleanerOff.png
new file mode 100755
index 0000000..b54bfcc
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AirCleanerOff.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AirCleanerOn.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AirCleanerOn.png
new file mode 100755
index 0000000..d0ff021
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AirCleanerOn.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AutoMode.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AutoMode.png
new file mode 100755
index 0000000..75fe12d
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AutoMode.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AutoModeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AutoModeSelect.png
new file mode 100755
index 0000000..79a22f9
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/AutoModeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/ComfortableMode.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/ComfortableMode.png
new file mode 100755
index 0000000..ce48e58
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/ComfortableMode.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/ComfortableModeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/ComfortableModeSelect.png
new file mode 100755
index 0000000..f5766e9
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/ComfortableModeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud3.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud3.png
new file mode 100755
index 0000000..42359dd
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud3.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud4.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud4.png
new file mode 100755
index 0000000..ad3a695
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud4.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/Fan.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/Fan.png
new file mode 100755
index 0000000..d86e7e3
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/Fan.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HandMode.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HandMode.png
new file mode 100755
index 0000000..4b60248
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HandMode.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HandModeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HandModeSelect.png
new file mode 100755
index 0000000..f88f99b
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HandModeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HeightGear.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HeightGear.png
new file mode 100755
index 0000000..3be9831
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HeightGear.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HeightGearSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HeightGearSelect.png
new file mode 100755
index 0000000..ab32cf8
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/HeightGearSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/LowGear.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/LowGear.png
new file mode 100755
index 0000000..5dec4f7
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/LowGear.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/LowGearSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/LowGearSelect.png
new file mode 100755
index 0000000..f4c23c4
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/LowGearSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/MidGear.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/MidGear.png
new file mode 100755
index 0000000..df4e40b
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/MidGear.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/MidGearSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/MidGearSelect.png
new file mode 100755
index 0000000..7b77e7a
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/MidGearSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/SleepMode.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/SleepMode.png
new file mode 100755
index 0000000..8b816ab
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/SleepMode.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/SleepModeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/SleepModeSelect.png
new file mode 100755
index 0000000..b1b0157
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/SleepModeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/Time.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/Time.png
new file mode 100755
index 0000000..34cca34
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/Fan/Time.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AreaMode.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AreaMode.png
new file mode 100755
index 0000000..96b1720
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AreaMode.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AreaModeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AreaModeSelect.png
new file mode 100755
index 0000000..f47bfdc
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AreaModeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AutoMode.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AutoMode.png
new file mode 100755
index 0000000..836bfee
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AutoMode.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AutoModeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AutoModeSelect.png
new file mode 100755
index 0000000..202c14a
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/AutoModeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Battery.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Battery.png
new file mode 100755
index 0000000..3c41f72
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Battery.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Charge.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Charge.png
new file mode 100755
index 0000000..93fae74
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Charge.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ChargeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ChargeSelect.png
new file mode 100755
index 0000000..060cb86
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ChargeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Clean.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Clean.png
new file mode 100755
index 0000000..31f1838
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Clean.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/CleanSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/CleanSelect.png
new file mode 100755
index 0000000..8b69572
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/CleanSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlDisable.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlDisable.png
new file mode 100755
index 0000000..543aa27
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlDisable.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlDown.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlDown.png
new file mode 100755
index 0000000..e273ad8
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlDown.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlEnable.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlEnable.png
new file mode 100755
index 0000000..65f03ac
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlEnable.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlLeft.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlLeft.png
new file mode 100755
index 0000000..9475750
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlLeft.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlRight.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlRight.png
new file mode 100755
index 0000000..b47b341
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlRight.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlUp.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlUp.png
new file mode 100755
index 0000000..6f47cf4
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/ControlUp.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointMode.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointMode.png
new file mode 100755
index 0000000..c578af9
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointMode.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointModeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointModeSelect.png
new file mode 100755
index 0000000..22e6a34
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointModeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Mute.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Mute.png
new file mode 100755
index 0000000..5d2afa0
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Mute.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/MuteSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/MuteSelect.png
new file mode 100755
index 0000000..5aff45a
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/MuteSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Suction.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Suction.png
new file mode 100755
index 0000000..ac23684
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Suction.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/SuctionSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/SuctionSelect.png
new file mode 100755
index 0000000..d61139c
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/SuctionSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Voice.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Voice.png
new file mode 100755
index 0000000..a01c743
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/Voice.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/VoiceSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/VoiceSelect.png
new file mode 100755
index 0000000..f585989
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/VoiceSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/WallMode.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/WallMode.png
new file mode 100755
index 0000000..a214558
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/WallMode.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/WallModeSelect.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/WallModeSelect.png
new file mode 100755
index 0000000..eb00f9c
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobot/WallModeSelect.png
Binary files differ
diff --git a/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobotThinIcon.png b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobotThinIcon.png
new file mode 100755
index 0000000..669e09e
--- /dev/null
+++ b/HDL-ON_Android/Assets/Phone/FunctionIcon/Electrical/WeepRobotThinIcon.png
Binary files differ
diff --git a/HDL-ON_Android/HDL-ON_Android.csproj b/HDL-ON_Android/HDL-ON_Android.csproj
index 6fd6c59..cadddce 100644
--- a/HDL-ON_Android/HDL-ON_Android.csproj
+++ b/HDL-ON_Android/HDL-ON_Android.csproj
@@ -680,6 +680,53 @@
     <AndroidAsset Include="Assets\Phone\LogicIcon\changesinoutdoor.png" />
     <AndroidAsset Include="Assets\Phone\PersonalCenter\UserTypebg2.png" />
     <AndroidAsset Include="Assets\Phone\LogicIcon\sensor.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\AirCleanerThiinIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobotThinIcon.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\MuteSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\Battery.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\ControlRight.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\AreaMode.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\AutoMode.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\FixedPointModeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\Charge.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\CleanSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\ControlUp.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\SuctionSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\WallMode.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\FixedPointMode.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\ControlLeft.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\AreaModeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\ControlDisable.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\ChargeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\Suction.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\Clean.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\AutoModeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\ControlDown.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\VoiceSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\Mute.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\WallModeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\Voice.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\WeepRobot\ControlEnable.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\SleepModeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\Fan.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\LowGear.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\HandModeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\Time.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\MidGearSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\AutoMode.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\AirCleanerOff.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\HandMode.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\HeightGearSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\ComfortableMode.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\MidGear.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\SleepMode.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\AirCleanerOn.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\LowGearSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\AutoModeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\DialogTitleMenuGroud3.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\HeightGear.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\ComfortableModeSelect.png" />
+    <AndroidAsset Include="Assets\Phone\FunctionIcon\Electrical\Fan\DialogTitleMenuGroud4.png" />
   </ItemGroup>
   <ItemGroup>
     <AndroidNativeLibrary Include="libs\armeabi-v7a\libelianjni.so" />
diff --git a/HDL-ON_Android/Resources/Resource.designer.cs b/HDL-ON_Android/Resources/Resource.designer.cs
index 52baaa6..506131b 100644
--- a/HDL-ON_Android/Resources/Resource.designer.cs
+++ b/HDL-ON_Android/Resources/Resource.designer.cs
@@ -2,6 +2,7 @@
 //------------------------------------------------------------------------------
 // <auto-generated>
 //     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
 //
 //     Changes to this file may cause incorrect behavior and will be lost if
 //     the code is regenerated.
@@ -14,7 +15,7 @@
 {
 	
 	
-	[global::System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
+	[System.CodeDom.Compiler.GeneratedCodeAttribute("Xamarin.Android.Build.Tasks", "1.0.0.0")]
 	public partial class Resource
 	{
 		
diff --git a/HDL-ON_iOS/HDL-ON_iOS.csproj b/HDL-ON_iOS/HDL-ON_iOS.csproj
index b811ebc..c66cced 100644
--- a/HDL-ON_iOS/HDL-ON_iOS.csproj
+++ b/HDL-ON_iOS/HDL-ON_iOS.csproj
@@ -52,7 +52,7 @@
         <MtouchExtraArgs>-gcc_flags="-dead_strip -ObjC";-w</MtouchExtraArgs>
         <MtouchI18n>cjk</MtouchI18n>
         <MtouchLink>SdkOnly</MtouchLink>
-        <CodesignProvision>ComHdlOnProDevelopment20210116-2</CodesignProvision>
+        <CodesignProvision>onpro0804</CodesignProvision>
     </PropertyGroup>
     <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|iPhone' ">
         <DebugType>none</DebugType>
@@ -658,8 +658,53 @@
       <BundleResource Include="Resources\Phone\Public\ListCellbg\ListCellbg5.png" />
       <BundleResource Include="Resources\Phone\LogicIcon\location.png" />
       <BundleResource Include="Resources\Phone\LoginIcon\changesinoutdoor.png" />
-      <BundleResource Include="Resources\Phone\PersonalCenter\UserTypebg2.png" />
-      <BundleResource Include="Resources\Phone\LogicIcon\sensor.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\AirCleanerThiinIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobotThinIcon.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\SleepModeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\Fan.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\LowGear.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\HandModeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\Time.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\MidGearSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\AutoMode.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\AirCleanerOff.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\HandMode.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\HeightGearSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\ComfortableMode.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\MidGear.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\SleepMode.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\AirCleanerOn.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\LowGearSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\AutoModeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\DialogTitleMenuGroud3.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\HeightGear.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\ComfortableModeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\Fan\DialogTitleMenuGroud4.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\MuteSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\Battery.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\ControlRight.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\AreaMode.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\AutoMode.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\FixedPointModeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\Charge.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\CleanSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\ControlUp.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\SuctionSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\WallMode.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\FixedPointMode.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\ControlLeft.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\AreaModeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\ControlDisable.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\ChargeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\Suction.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\Clean.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\AutoModeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\ControlDown.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\VoiceSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\Mute.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\WallModeSelect.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\Voice.png" />
+      <BundleResource Include="Resources\Phone\FunctionIcon\Electrical\WeepRobot\ControlEnable.png" />
     </ItemGroup>
     <ItemGroup>
       <ITunesArtwork Include="iTunesArtwork" />
diff --git a/HDL-ON_iOS/Resources/Language.ini b/HDL-ON_iOS/Resources/Language.ini
old mode 100644
new mode 100755
index 00d1fa1..8440e0e
--- a/HDL-ON_iOS/Resources/Language.ini
+++ b/HDL-ON_iOS/Resources/Language.ini
@@ -1037,6 +1037,7 @@
 378=鍙樺寲鏃堕棿
 379=鍙樺寲閫熷害
 380=姝ゅ鍔熻兘鏆傛湭寮�鏀撅綖
+381=閲嶆柊鍔犺浇
 400=娆㈣繋鍥炲
 401=浜岀淮鐮佸け鏁堬紝璇烽噸璇�
 402=閲嶈瘯
@@ -1050,6 +1051,42 @@
 410=浣犲綋鍓嶈繕鏈坊鍔犱换浣曞钩鍙拌澶�
 411=鍏朵粬骞冲彴璁惧鍧囩敱绗笁鏂规湇鍔″晢鎻愪緵鏀寔
 412=娣诲姞
+
+1000=瀹ゅ唴婀垮害
+1001=绔ラ攣
+1002=璐熺瀛�
+1003=鏉�鑿�
+1004=鍔犳箍
+1005=婊よ姱澶嶄綅
+1006=鐏厜
+1007=鑷姩妯″紡
+1008=鎵嬪姩妯″紡
+1009=寮哄姴妯″紡
+1010=鐫$湢妯″紡
+1011=瀹氭椂
+1012=閫夋嫨椋庨��
+1013=妗�
+1014=璇风‘璁ゆ槸鍚﹀凡瀹為檯閲嶇疆婊よ姱骞舵寜{0}鐓ц鏄庝功瑕佹眰鎿嶄綔璁惧杩涜婊よ姱{0}瀵垮懡閲嶆柊璁℃椂
+1015=浣庢。
+1016=涓。
+1017=楂樻。
+1018=瀹氭椂璁剧疆
+1019=灏忔椂
+1020=婊よ姱浣跨敤锛�
+1021=绌烘皵鍑�鍖栧櫒
+1022=褰撳墠椋庨��
+1023=鍙栨秷瀹氭椂
+1024=鎵湴鏈哄櫒浜�
+1025=鍚稿姏璋冭妭
+1026=鍚稿姏1妗�
+1027=鍚稿姏2妗�
+1028=鍚稿姏3妗�
+1029=鍏呯數
+1030=澹伴煶
+1031=闈欓煶
+1032=娓呮壂妯″紡
+1033=鑰楁潗绠$悊
+1034=鍘嗗彶璁板綍
 
 5000=闊充箰
 5001=缁勫悎
@@ -1226,6 +1263,8 @@
 7122=涓嶅湪绾�
 
 
+
+
 9000=璇蜂娇鐢ㄦ柊鐨勬墜鏈鸿处鍙风櫥褰旳PP
 9001=璇蜂娇鐢ㄦ柊鐨勯偖绠辫处鍙风櫥褰旳PP
 9002=鐧诲綍鎵嬫満淇敼瀹屾垚
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/AirCleanerThiinIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/AirCleanerThiinIcon.png
new file mode 100755
index 0000000..5000333
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/AirCleanerThiinIcon.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AirCleanerOff.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AirCleanerOff.png
new file mode 100755
index 0000000..b54bfcc
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AirCleanerOff.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AirCleanerOn.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AirCleanerOn.png
new file mode 100755
index 0000000..d0ff021
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AirCleanerOn.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AutoMode.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AutoMode.png
new file mode 100755
index 0000000..75fe12d
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AutoMode.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AutoModeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AutoModeSelect.png
new file mode 100755
index 0000000..79a22f9
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/AutoModeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/ComfortableMode.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/ComfortableMode.png
new file mode 100755
index 0000000..ce48e58
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/ComfortableMode.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/ComfortableModeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/ComfortableModeSelect.png
new file mode 100755
index 0000000..f5766e9
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/ComfortableModeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud3.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud3.png
new file mode 100755
index 0000000..42359dd
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud3.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud4.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud4.png
new file mode 100755
index 0000000..ad3a695
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/DialogTitleMenuGroud4.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/Fan.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/Fan.png
new file mode 100755
index 0000000..d86e7e3
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/Fan.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HandMode.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HandMode.png
new file mode 100755
index 0000000..4b60248
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HandMode.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HandModeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HandModeSelect.png
new file mode 100755
index 0000000..f88f99b
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HandModeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HeightGear.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HeightGear.png
new file mode 100755
index 0000000..3be9831
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HeightGear.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HeightGearSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HeightGearSelect.png
new file mode 100755
index 0000000..ab32cf8
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/HeightGearSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/LowGear.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/LowGear.png
new file mode 100755
index 0000000..5dec4f7
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/LowGear.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/LowGearSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/LowGearSelect.png
new file mode 100755
index 0000000..f4c23c4
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/LowGearSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/MidGear.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/MidGear.png
new file mode 100755
index 0000000..df4e40b
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/MidGear.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/MidGearSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/MidGearSelect.png
new file mode 100755
index 0000000..7b77e7a
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/MidGearSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/SleepMode.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/SleepMode.png
new file mode 100755
index 0000000..8b816ab
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/SleepMode.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/SleepModeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/SleepModeSelect.png
new file mode 100755
index 0000000..b1b0157
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/SleepModeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/Time.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/Time.png
new file mode 100755
index 0000000..34cca34
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/Fan/Time.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AreaMode.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AreaMode.png
new file mode 100755
index 0000000..96b1720
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AreaMode.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AreaModeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AreaModeSelect.png
new file mode 100755
index 0000000..f47bfdc
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AreaModeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AutoMode.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AutoMode.png
new file mode 100755
index 0000000..836bfee
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AutoMode.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AutoModeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AutoModeSelect.png
new file mode 100755
index 0000000..202c14a
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/AutoModeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Battery.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Battery.png
new file mode 100755
index 0000000..3c41f72
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Battery.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Charge.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Charge.png
new file mode 100755
index 0000000..93fae74
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Charge.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ChargeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ChargeSelect.png
new file mode 100755
index 0000000..060cb86
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ChargeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Clean.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Clean.png
new file mode 100755
index 0000000..31f1838
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Clean.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/CleanSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/CleanSelect.png
new file mode 100755
index 0000000..8b69572
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/CleanSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlDisable.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlDisable.png
new file mode 100755
index 0000000..543aa27
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlDisable.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlDown.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlDown.png
new file mode 100755
index 0000000..e273ad8
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlDown.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlEnable.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlEnable.png
new file mode 100755
index 0000000..65f03ac
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlEnable.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlLeft.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlLeft.png
new file mode 100755
index 0000000..9475750
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlLeft.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlRight.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlRight.png
new file mode 100755
index 0000000..b47b341
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlRight.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlUp.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlUp.png
new file mode 100755
index 0000000..6f47cf4
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/ControlUp.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointMode.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointMode.png
new file mode 100755
index 0000000..c578af9
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointMode.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointModeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointModeSelect.png
new file mode 100755
index 0000000..22e6a34
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/FixedPointModeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Mute.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Mute.png
new file mode 100755
index 0000000..5d2afa0
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Mute.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/MuteSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/MuteSelect.png
new file mode 100755
index 0000000..5aff45a
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/MuteSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Suction.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Suction.png
new file mode 100755
index 0000000..ac23684
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Suction.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/SuctionSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/SuctionSelect.png
new file mode 100755
index 0000000..d61139c
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/SuctionSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Voice.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Voice.png
new file mode 100755
index 0000000..a01c743
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/Voice.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/VoiceSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/VoiceSelect.png
new file mode 100755
index 0000000..f585989
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/VoiceSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/WallMode.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/WallMode.png
new file mode 100755
index 0000000..a214558
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/WallMode.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/WallModeSelect.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/WallModeSelect.png
new file mode 100755
index 0000000..eb00f9c
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobot/WallModeSelect.png
Binary files differ
diff --git a/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobotThinIcon.png b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobotThinIcon.png
new file mode 100755
index 0000000..669e09e
--- /dev/null
+++ b/HDL-ON_iOS/Resources/Phone/FunctionIcon/Electrical/WeepRobotThinIcon.png
Binary files differ
diff --git a/HDL_ON/.DS_Store b/HDL_ON/.DS_Store
new file mode 100644
index 0000000..dfce005
--- /dev/null
+++ b/HDL_ON/.DS_Store
Binary files differ
diff --git a/HDL_ON/Common/R.cs b/HDL_ON/Common/R.cs
old mode 100644
new mode 100755
index 280ae05..26caecc
--- a/HDL_ON/Common/R.cs
+++ b/HDL_ON/Common/R.cs
@@ -17,6 +17,7 @@
         public const int Retry = 402;
         public const int QRCodeIsInvalid = 401;
         public const int WellComBackHome = 400;
+        public const int DoReloadAgain = 381;
         public const int FunctionNotOpen = 380;
         public const int FadeSpeed = 379;
         public const int FadeTime = 378;
@@ -404,8 +405,146 @@
         public const int LoginByEmail = 4;
 
 
-
-
+        /// <summary>
+        /// 瀹ゅ唴婀垮害
+        /// </summary>
+        public const int IndoorHumidity = 1000;
+        /// <summary>
+        /// 绔ラ攣
+        /// </summary>
+        public const int V_chip = 1001;
+        /// <summary>
+        /// 璐熺瀛�
+        /// </summary>
+        public const int Anion = 1002;
+        /// <summary>
+        /// 鏉�鑿�
+        /// </summary>
+        public const int Sterilization = 1003;
+        /// <summary>
+        /// 鍔犳箍
+        /// </summary>
+        public const int Humidification = 1004;
+        /// <summary>
+        /// 婊よ姱澶嶄綅
+        /// </summary>
+        public const int FilterElementReset = 1005;
+        /// <summary>
+        /// 鐏厜
+        /// </summary>
+        public const int Lighting = 1006;
+        /// <summary>
+        /// 鑷姩妯″紡
+        /// </summary>
+        public const int AutoMode = 1007;
+        /// <summary>
+        /// 鎵嬪姩妯″紡
+        /// </summary>
+        public const int HandMode = 1008;
+        /// <summary>
+        /// 寮哄姴妯″紡
+        /// </summary>
+        public const int StrongMode = 1009;
+        /// <summary>
+        /// 鐫$湢妯″紡
+        /// </summary>
+        public const int SleepMode = 1010;
+        /// <summary>
+        /// 瀹氭椂
+        /// </summary>
+        public const int Timing = 1011;
+        /// <summary>
+        /// 閫夋嫨椋庨��
+        /// </summary>
+        public const int WindSpeedSelection = 1012;
+        /// <summary>
+        /// 妗�
+        /// </summary>
+        public const int Gear = 1013;
+        /// <summary>
+        /// 璇风‘璁ゆ槸鍚﹀凡瀹為檯閲嶇疆婊よ姱骞舵寜{0}鐓ц鏄庝功瑕佹眰鎿嶄綔璁惧杩涜婊よ姱{0}瀵垮懡閲嶆柊璁℃椂
+        /// </summary>
+        public const int FilterElementResetMsg = 1014;
+        /// <summary>
+        /// 浣庢。
+        /// </summary>
+        public const int LowGear = 1015;
+        /// <summary>
+        /// 涓。
+        /// </summary>
+        public const int MidGear = 1016;
+        /// <summary>
+        /// 楂樻。
+        /// </summary>
+        public const int HeightGear = 1017;
+        /// <summary>
+        /// 瀹氭椂璁剧疆
+        /// </summary>
+        public const int TimingSetting = 1018;
+        /// <summary>
+        /// 灏忔椂
+        /// </summary>
+        public const int Hour1 = 1019;
+        /// <summary>
+        /// 婊よ姱浣跨敤锛�
+        /// </summary>
+        public const int UseOfFilterElement = 1020;
+        /// <summary>
+        /// 绌烘皵鍑�鍖栧櫒
+        /// </summary>
+        public const int AirCleaner = 1021;
+        /// <summary>
+        /// 褰撳墠椋庨��
+        /// </summary>
+        public const int CurrentWindSpeed = 1022;
+        /// <summary>
+        /// 鍙栨秷瀹氭椂
+        /// </summary>
+        public const int CancelTiming = 1023;
+        /// <summary>
+        /// 鎵湴鏈哄櫒浜�
+        /// </summary>
+        public const int WeepRobot = 1024;
+        /// <summary>
+        /// 鍚稿姏璋冭妭
+        /// </summary>
+        public const int SuctionAdjustment = 1025;
+        /// <summary>
+        ///鍚稿姏1妗�
+        /// </summary>
+        public const int SuctionOneGear = 1026;
+        /// <summary>
+        /// 鍚稿姏2妗�
+        /// </summary>
+        public const int SuctionTwoGear = 1027;
+        /// <summary>
+        /// 鍚稿姏3妗�
+        /// </summary>
+        public const int SuctionThreeGear = 1028;
+        /// <summary>
+        /// 鍏呯數
+        /// </summary>
+        public const int Charge = 1029;
+        /// <summary>
+        /// 澹伴煶
+        /// </summary>
+        public const int Voice = 1030;
+        /// <summary>
+        /// 闈欓煶
+        /// </summary>
+        public const int Mute = 1031;
+        /// <summary>
+        /// 娓呮壂妯″紡
+        /// </summary>
+        public const int CleanMode = 1032;
+        /// <summary>
+        /// 鑰楁潗绠$悊
+        /// </summary>
+        public const int ConsumablesManagement = 1033;
+        /// <summary>
+        /// 鍘嗗彶璁板綍
+        /// </summary>
+        public const int HistoryLog = 1034;
 
 
         public const int a31Music = 5000;
diff --git a/HDL_ON/DAL/.DS_Store b/HDL_ON/DAL/.DS_Store
new file mode 100644
index 0000000..a9cb932
--- /dev/null
+++ b/HDL_ON/DAL/.DS_Store
Binary files differ
diff --git a/HDL_ON/DAL/DriverLayer/Control.cs b/HDL_ON/DAL/DriverLayer/Control.cs
old mode 100644
new mode 100755
index 84a426e..089f706
--- a/HDL_ON/DAL/DriverLayer/Control.cs
+++ b/HDL_ON/DAL/DriverLayer/Control.cs
@@ -279,8 +279,9 @@
         /// </summary>
         /// <param name="commandString"></param>
         /// <param name="function"></param>
+        /// <param name="useRemote">鏄惁鐩存帴浣跨敤杩滅▼鍙戦��</param>
         /// <returns></returns>
-        public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary)
+        public void SendWriteCommand(Function function, Dictionary<string, string> commandDictionary, bool useRemote = false)
         {
             function.controlCounter++;
             function.refreshTime = DateTime.Now;
@@ -310,7 +311,7 @@
             MainPage.Log($"鍙戦�佹暟鎹�:{Newtonsoft.Json.JsonConvert.SerializeObject(commandDictionary)}");
 
             //杩滅▼閫氳
-            if (Ins.IsRemote)
+            if (Ins.IsRemote || useRemote == true)
             {
                 DAL.Server.HttpServerRequest httpServer = new DAL.Server.HttpServerRequest();
                 //ALink鎺у埗銆丅us鎺у埗浣跨敤鍚屼竴涓帴鍙f帶鍒讹紝鐢变簯绔礋璐hВ鏋�
@@ -875,14 +876,27 @@
                                     }
                                     break;
                                 case SPK.ElectricTV:
+                                    break;
+                                case SPK.ElectricTuyaAirCleaner:
+                                case SPK.ElectricTuyaFan:
+                                case SPK.ElectricTuyaWeepRobot:
+                                    //璁惧鐘舵�佹帹閫�
+                                    var myDevice = Stan.HdlDeviceStatuPushLogic.Current.UpdateDeviceStatu(updateTemp);
+                                    if (myDevice != null)
+                                    {
+                                        localObj = myDevice;
+                                    }
                                     break;
                                 default:
                                     break;
                             }
-                            HomePage.UpdataFunctionStates(localObj);
-                            RoomPage.UpdataStates(localObj);
-                            FunctionPage.UpdataStates(localObj);
-                            ClassificationPage.UpdataInfo(localObj);
+                            if (localObj != null)
+                            {
+                                HomePage.UpdataFunctionStates(localObj);
+                                RoomPage.UpdataStates(localObj);
+                                FunctionPage.UpdataStates(localObj);
+                                ClassificationPage.UpdataInfo(localObj);
+                            }
                         }
                     }
                     catch (Exception ex)
diff --git a/HDL_ON/DAL/Server/HttpServerRequest.cs b/HDL_ON/DAL/Server/HttpServerRequest.cs
old mode 100644
new mode 100755
index dac0006..369d632
--- a/HDL_ON/DAL/Server/HttpServerRequest.cs
+++ b/HDL_ON/DAL/Server/HttpServerRequest.cs
@@ -1810,7 +1810,7 @@
         {
             Dictionary<string, object> d = new Dictionary<string, object>();
             d.Add("homeId", DB_ResidenceData.Instance.CurrentRegion.RegionID);
-            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway.gatewayId);//DriverLayer.Control.Ins.GatewayId);
+            d.Add("gatewayId", DB_ResidenceData.Instance.HomeGateway == null ? "0" : DB_ResidenceData.Instance.HomeGateway.gatewayId);//DriverLayer.Control.Ins.GatewayId);
             d.Add("actions", actionObjs);
 
             var requestJson = HttpUtil.GetSignRequestJson(d);
diff --git a/HDL_ON/Entity/.DS_Store b/HDL_ON/Entity/.DS_Store
new file mode 100644
index 0000000..1095c65
--- /dev/null
+++ b/HDL_ON/Entity/.DS_Store
Binary files differ
diff --git a/HDL_ON/Entity/Function/AirCleaner.cs b/HDL_ON/Entity/Function/AirCleaner.cs
new file mode 100755
index 0000000..5ed7559
--- /dev/null
+++ b/HDL_ON/Entity/Function/AirCleaner.cs
@@ -0,0 +1,10 @@
+锘縰sing System;
+namespace HDL_ON.Entity
+{
+    public class AirCleaner : Function
+    {
+        public AirCleaner()
+        {
+        }
+    }
+}
diff --git a/HDL_ON/Entity/Function/Function.cs b/HDL_ON/Entity/Function/Function.cs
old mode 100644
new mode 100755
index bf517fe..81bfa9d
--- a/HDL_ON/Entity/Function/Function.cs
+++ b/HDL_ON/Entity/Function/Function.cs
@@ -649,7 +649,19 @@
         /// 褰撳墠鍊�
         /// </summary>
         public object curValue = new object();
-
+        /// <summary>
+        /// curValue鐨勭炕璇戝��,鏈�鍧忕殑缁撴灉涔熷彧浼氳繑鍥瀞tring.Empty
+        /// </summary>
+        public string realValue
+        {
+            get
+            {
+                var myValue = curValue.ToString();
+                //娌欓洉瀹氫箟鐨刼bject绫诲瀷
+                if (myValue.Contains("{") == true) { return string.Empty; }
+                return myValue;
+            }
+        }
     }
     /// <summary>
     /// 鍔熻兘灞炴�ч敭鍚嶅垪琛�
@@ -878,8 +890,19 @@
         /// <summary>
         /// 瀹剁數銆侀鎵�
         /// </summary>
-        public const string ElectricFan = "electrical.fan";
-
+        public const string ElectricFan = "electrical.fan";
+        /// <summary>
+        /// 瀹剁數銆佹秱楦︾┖姘斿噣鍖栧櫒
+        /// </summary>
+        public const string ElectricTuyaAirCleaner = "electrical.Q1RsefNf91tIXyyQ";
+        /// <summary>
+        /// 瀹剁數銆佹秱楦︾數椋庢墖
+        /// </summary>
+        public const string ElectricTuyaFan = "electrical.tyqborgovyzytytz";
+        /// <summary>
+        /// 瀹剁數銆佹秱楦︽壂鍦版満鍣ㄤ汉
+        /// </summary>
+        public const string ElectricTuyaWeepRobot = "electrical.ai6HtccKFIw3dxo3";
     }
 
 
diff --git a/HDL_ON/Entity/Function/WeepRobot.cs b/HDL_ON/Entity/Function/WeepRobot.cs
new file mode 100755
index 0000000..1e39a13
--- /dev/null
+++ b/HDL_ON/Entity/Function/WeepRobot.cs
@@ -0,0 +1,10 @@
+锘縰sing System;
+namespace HDL_ON.Entity
+{
+    public class WeepRobot : Function
+    {
+        public WeepRobot()
+        {
+        }
+    }
+}
\ No newline at end of file
diff --git a/HDL_ON/Entity/FunctionList.cs b/HDL_ON/Entity/FunctionList.cs
old mode 100644
new mode 100755
index 5898500..a6b3d33
--- a/HDL_ON/Entity/FunctionList.cs
+++ b/HDL_ON/Entity/FunctionList.cs
@@ -67,10 +67,20 @@
                 {
                     tVs = new List<TV>();
                 }
+                if (airCleaners == null)
+                {
+                    airCleaners = new List<AirCleaner>();
+                }
+                if (weepRobots == null)
+                {
+                    weepRobots = new List<WeepRobot>();
+                }
                 var list = new List<Function>();
                 list.AddRange(fans);
                 list.AddRange(switchSockets);
-                list.AddRange(tVs);
+                list.AddRange(tVs);
+                list.AddRange(airCleaners);
+                list.AddRange(weepRobots);
                 return list;
             }
         }
@@ -85,7 +95,16 @@
         /// <summary>
         /// 瀹剁數鍒楄〃
         /// </summary>
-        public List<SwitchSocket> switchSockets = new List<SwitchSocket>();
+        public List<SwitchSocket> switchSockets = new List<SwitchSocket>();
+        /// <summary>
+        /// 绌烘皵鍑�鍖栧櫒鍒楄〃
+        /// </summary>
+        public List<AirCleaner> airCleaners = new List<AirCleaner>();
+        /// <summary>
+        /// 鎵湴鏈哄櫒浜哄垪琛�
+        /// </summary>
+        public List<WeepRobot> weepRobots = new List<WeepRobot>();
+
         #endregion
         /// <summary>
         /// 鐜浼犳劅鍣ㄥ垪琛�
@@ -189,6 +208,21 @@
                             var fan = Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(functionDataString);
                             List.fans.Add(fan);
                             deviceFunctionList.Add(fan);
+                            break;
+                        case SPK.ElectricTuyaAirCleaner:
+                            var airCleaner = Newtonsoft.Json.JsonConvert.DeserializeObject<AirCleaner>(functionDataString);
+                            List.airCleaners.Add(airCleaner);
+                            deviceFunctionList.Add(airCleaner);
+                            break;
+                        case SPK.ElectricTuyaFan:
+                            var tuyaFan = Newtonsoft.Json.JsonConvert.DeserializeObject<Fan>(functionDataString);
+                            List.fans.Add(tuyaFan);
+                            deviceFunctionList.Add(tuyaFan);
+                            break;
+                        case SPK.ElectricTuyaWeepRobot:
+                            var tuyaWeepRobot = Newtonsoft.Json.JsonConvert.DeserializeObject<WeepRobot>(functionDataString);
+                            List.weepRobots.Add(tuyaWeepRobot);
+                            deviceFunctionList.Add(tuyaWeepRobot);
                             break;
                         case SPK.SensorSmoke:
                         case SPK.SensorWater:
diff --git a/HDL_ON/HDL_ON.projitems b/HDL_ON/HDL_ON.projitems
index 33b53b8..9a6b1e0 100644
--- a/HDL_ON/HDL_ON.projitems
+++ b/HDL_ON/HDL_ON.projitems
@@ -278,6 +278,55 @@
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\3-Intelligence\Automation\EmptyClass.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\4-PersonalCenter\AddFunction\AddThirdPartyBrandListpage.cs" />
     <Compile Include="$(MSBuildThisFileDirectory)Entity\Integratedbrand\IntegratedBrand.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\AirCleaner.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)Entity\Function\WeepRobot.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Electrical\TuyaAirCleanerPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Electrical\TuyaFanPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI2\FuntionControlView\Electrical\TuyaWeepRobotPage.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Resourse\HdlControlResourse.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Form\HideOptionDirectoryListForm.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Form\HideOptionSearchAllFile.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Form\DeviceFunctionCardCommonForm.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Form\HideOptionFileContentForm.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Form\Base\CommonFormBase.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Form\Base\EditorCommonForm.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Enum\CommonEnum.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Logic\HdlFileLogic.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Logic\HdlThreadLogic.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Logic\HdlDeviceStatuPushLogic.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Logic\HdlMessageLogic.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Logic\HdlFormLogic.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BottomControls\BottomItemEditorControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BottomControls\BottomDialogCommon.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BottomControls\BottomTimeSelectControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BottomControls\BottomItemSelectControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BottomControls\BottomClickButton.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\NormalControls\PicViewControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\NormalControls\NormalViewControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\NormalControls\IconViewControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\NormalControls\MostRightIconControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\NormalControls\IconBigViewControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\TextInputControls\TextInputControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\FrameLayoutControls\NormalFrameLayout.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\FrameLayoutControls\FrameRowControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\FrameLayoutControls\FrameLayoutStatuControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\FrameLayoutControls\FrameListControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\MessageControls\ShowMsgControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BaseControl\TextInputBase.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BaseControl\ButtonCtrBase.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BaseControl\FrameLayoutBase.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\BaseControl\RowLayoutBase.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\RowLayoutControls\RowLayoutControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\ListViewLayoutControls\VerticalListControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\ListViewLayoutControls\VerticalListRefreshControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\ListViewLayoutControls\VerticalFrameRefreshControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\ListViewLayoutControls\VerticalFrameControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\CompoundControls\DialogTitleMenuControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\CompoundControls\NormalSelectControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\CompoundControls\DirectionImageControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\CompoundControls\SeekBarImageControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\CompoundControls\FanGearSeekBarControl.cs" />
+    <Compile Include="$(MSBuildThisFileDirectory)UI\UI0-Stan\Controls\CompoundControls\ProgressBar.cs" />
   </ItemGroup>
   <ItemGroup>
     <Folder Include="$(MSBuildThisFileDirectory)UI\" />
diff --git a/HDL_ON/UI/.DS_Store b/HDL_ON/UI/.DS_Store
new file mode 100644
index 0000000..fc80acb
--- /dev/null
+++ b/HDL_ON/UI/.DS_Store
Binary files differ
diff --git a/HDL_ON/UI/CSS/CSS.cs b/HDL_ON/UI/CSS/CSS.cs
index ff5eff9..665a74c 100644
--- a/HDL_ON/UI/CSS/CSS.cs
+++ b/HDL_ON/UI/CSS/CSS.cs
@@ -121,6 +121,11 @@
     {
         #region 瀛椾綋澶у皬
         /// <summary>
+        /// 鐗圭骇寮鸿皟瀛楀彿
+        /// 26
+        /// </summary>
+        public const int EmphasisFontSize_ExLevel = 26;
+        /// <summary>
         /// 涓�绾у己璋冨瓧鍙�
         /// 24
         /// </summary>
diff --git a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
old mode 100644
new mode 100755
index 0c58f50..e1641d3
--- a/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
+++ b/HDL_ON/UI/UI0-Public/PublicAssmeblyBLL.cs
@@ -93,6 +93,18 @@
                         MainPage.BasePageView.AddChidren(tvView);
                         tvView.LoadPage(btnCollectionIcon, btnName, btnFromFloor);
                         MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+                        break;
+                    case SPK.ElectricTuyaAirCleaner:
+                        var airCleaner = new TuyaAirCleanerPage();
+                        airCleaner.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
+                        break;
+                    case SPK.ElectricTuyaFan:
+                        var tuyaFan = new TuyaFanPage();
+                        tuyaFan.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
+                        break;
+                    case SPK.ElectricTuyaWeepRobot:
+                        var weepRobot = new TuyaWeepRobotPage();
+                        weepRobot.AddForm(function, btnCollectionIcon, btnName, btnFromFloor);
                         break;
                     case SPK.MusicStandard:
                         Music.A31MusicModel.Current = (function as Music.A31MusicModel);//褰撳墠鎾斁鍣�
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BaseControl/ButtonCtrBase.cs b/HDL_ON/UI/UI0-Stan/Controls/BaseControl/ButtonCtrBase.cs
new file mode 100644
index 0000000..5386392
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BaseControl/ButtonCtrBase.cs
@@ -0,0 +1,340 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// Botton鐨勬渶鍒濆師鍨�(涓嶅缓璁慨鏀瑰拰鐩存帴浣跨敤):鏍囧噯瀛椾綋鍜岄鑹诧紝鏂囧瓧鍚戝乏闈犻綈,14鍙峰瓧
+    /// </summary>
+    public class ButtonCtrBase : Button
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 璁剧疆鑳藉惁瑙︾偣鍑讳簨浠�
+        /// </summary>
+        private bool m_CanClick = true;
+        /// <summary>
+        /// 璁剧疆鑳藉惁瑙︾偣鍑讳簨浠�
+        /// </summary>
+        public bool CanClick
+        {
+            get { return m_CanClick; }
+            set
+            {
+                if (m_CanClick == value) { return; }
+
+                m_CanClick = value;
+                //鑳藉鐐瑰嚮,鍒欐樉绀烘病鏈夌偣鍑昏繃鐨勭姸鎬�
+                if (m_CanClick == true) { this.SetNotClickStatu(); }
+                //涓嶈兘鐐瑰嚮,鍒欐樉绀哄凡缁忕偣鍑讳簡鐨勭姸鎬�
+                else { this.SetClickStatu(); }
+            }
+        }
+        /// <summary>
+        /// 澹版槑姝ゅ彉閲�,鏃ㄥ湪瀛愮嚎绋嬩篃鑳藉鍘昏幏鍙栦竴涓帶浠剁殑涓婚敭
+        /// </summary>
+        public string MainKey = string.Empty;
+
+        /// <summary>
+        /// 鐐瑰嚮鐨勫潗鏍�
+        /// </summary>
+        private System.Drawing.Point downPoint = new System.Drawing.Point();
+
+        /// <summary>
+        /// 鎺т欢鐨勭偣鍑讳簨浠�(鑷畾涔夊皝瑁呬簨浠�,姝や簨浠惰璁ゅ彲涓烘墽琛屾寜閽寜涓嬩簨浠�,鍙桟anClick灞炴�ф帶鍒�)
+        /// </summary>
+        public Action<Button, MouseEventArgs> ButtonClickEvent = null;
+        /// <summary>
+        /// 鎺т欢鐨勬寜涓嬩簨浠�(鑷畾涔夊皝瑁呬簨浠�,姝や簨浠惰璁ゅ彲涓烘墽琛屾寜閽寜涓嬩簨浠�,鍙桟anClick灞炴�ф帶鍒�)
+        /// </summary>
+        public Action<Button, MouseEventArgs> ButtonDownClickEvent = null;
+        /// <summary>
+        /// 鎺т欢瑙﹀彂绉诲姩鐨勪簨浠�(鑷韩鎷ユ湁绠楁硶,褰撶Щ鍔ㄥ灏戝儚绱犲悗,瑙﹀彂浜嬩欢,娉ㄦ剰,璇ヤ簨浠跺彲鑳戒細棰戠箒鐨勮Е鍙�)
+        /// </summary>
+        public Action ButtonHappenMoveEvent = null;
+
+        #endregion
+
+        #region 鈻� 閲嶅啓褰摜鐨勫睘鎬____________________
+
+        /// <summary>
+        /// 閲嶅啓Text灞炴��
+        /// </summary>
+        public new string Text
+        {
+            //鍏堣繖涔堝紕鍏堝惂
+            get { return base.Text == null ? string.Empty : base.Text; }
+            set
+            {
+                base.Text = value == null ? string.Empty : value;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// Botton鐨勬渶鍒濆師鍨�(涓嶅缓璁慨鏀瑰拰鐩存帴浣跨敤):鏍囧噯瀛椾綋鍜岄鑹诧紝鏂囧瓧鍚戝乏闈犻綈,14鍙峰瓧
+        /// </summary>
+        public ButtonCtrBase()
+        {
+#if __IOS__
+            //閲嶅啓淇敼鏂囨湰鍒拌竟妗嗙殑鍐呰竟璺濅负0
+            (this.uiView as MyButton).ContentEdgeInsets = new UIKit.UIEdgeInsets(0, 0, 0, 0);
+#endif
+            //娴嬭瘯锛屽叏浣撴寜閽负14鍙峰瓧
+            this.TextSize = CSS_FontSize.TextFontSize;
+
+            this.TextColor = CSS_Color.TextualColor;
+            this.TextAlignment = TextAlignment.CenterLeft;
+
+            //鐐瑰嚮浜嬩欢
+            this.MouseUpEventHandler += ButtonBase_MouseUpEventHandler;
+            //鎸変笅浜嬩欢
+            this.MouseDownEventHandler += ButtonBase_MouseDownEventHandler;
+            //绉诲姩浜嬩欢
+            this.MouseMoveEventHandler += ButtonBase_MouseMoveEventHandler;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠跺ぇ灏�(涓嶄互骞冲潎鍊艰繘琛岀湡瀹炴暟鍊艰绠�)
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="i_Height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public void InitSize(int i_Width, int i_Height, bool real = true)
+        {
+            if (real == true)
+            {
+                i_Width = Application.GetRealWidth(i_Width);
+                i_Height = Application.GetRealHeight(i_Height);
+            }
+            this.Height = i_Height;
+            this.Width = i_Width;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠跺ぇ灏�(涓嶄互骞冲潎鍊艰繘琛岀湡瀹炴暟鍊艰绠�)
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public void InitSize(int i_Width, bool real = false)
+        {
+            if (real == true)
+            {
+                i_Width = Application.GetRealWidth(i_Width);
+            }
+            this.Width = i_Width;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栧浘鏍囨帶浠跺ぇ灏�(浠ュ钩鍧囧�艰繘琛岀湡瀹炴暟鍊艰绠�)
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="i_Height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public void InitIconSize(int i_Width, int i_Height, bool real = true)
+        {
+            if (real == true)
+            {
+                i_Width = this.GetPictrueRealSize(i_Width);
+                i_Height = this.GetPictrueRealSize(i_Height);
+            }
+
+            this.Height = i_Height;
+            this.Width = i_Width;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栧浘鐗囨帶浠跺ぇ灏�
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="i_Height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public void InitPictrueSize(int i_Width, int i_Height, bool real = true)
+        {
+            if (real == true)
+            {
+                i_Width = Application.GetRealWidth(i_Width);
+                i_Height = Application.GetRealWidth(i_Height);
+            }
+
+            this.Height = i_Height;
+            this.Width = i_Width;
+        }
+
+        #endregion
+
+        #region 鈻� 鐐瑰嚮浜嬩欢___________________________
+
+        /// <summary>
+        /// 鐐瑰嚮浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ButtonBase_MouseUpEventHandler(object sender, MouseEventArgs e)
+        {
+            if (ButtonClickEvent == null)
+            {
+                this.MouseUpEventHandler -= ButtonBase_MouseUpEventHandler;
+                return;
+            }
+            if (CanClick == true)
+            {
+                try
+                {
+                    this.ButtonClickEvent(this, e);
+                }
+                catch (Exception ex)
+                {
+                    //鍑虹幇鏈煡閿欒
+                    HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鎸変笅浜嬩欢___________________________
+
+        /// <summary>
+        /// 鎸変笅浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ButtonBase_MouseDownEventHandler(object sender, MouseEventArgs e)
+        {
+            //璁板綍璧峰綋鍓嶇偣鍑荤殑鍧愭爣
+            downPoint.X = (int)e.X;
+            downPoint.Y = (int)e.Y;
+
+            if (CanClick == false || this.ButtonDownClickEvent == null)
+            {
+                //涓嶈兘鐐瑰嚮
+                return;
+            }
+
+            try
+            {
+                this.ButtonDownClickEvent(this, e);
+            }
+            catch (Exception ex)
+            {
+                //鍑虹幇鏈煡閿欒
+                HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 绉诲姩浜嬩欢___________________________
+
+        /// <summary>
+        /// 绉诲姩浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ButtonBase_MouseMoveEventHandler(object sender, MouseEventArgs e)
+        {
+            if (this.ButtonHappenMoveEvent == null)
+            {
+                this.MouseMoveEventHandler -= ButtonBase_MouseMoveEventHandler;
+                return;
+            }
+            int value = (int)e.X - this.downPoint.X;
+            if (value >= 30 || value <= -30)
+            {
+                //瑙﹀彂绉诲姩浜嬩欢
+                this.ButtonHappenMoveEvent();
+                return;
+            }
+            value = (int)e.Y - this.downPoint.Y;
+            if (value >= 30 || value <= -30)
+            {
+                //瑙﹀彂绉诲姩浜嬩欢
+                this.ButtonHappenMoveEvent();
+                return;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 璁剧疆鐐瑰嚮鐘舵�乢______________________
+
+        /// <summary>
+        /// 璁剧疆鐐瑰嚮鍚庣殑鐘舵��(姝ゆ柟娉曠敱鍚勮嚜鎺т欢杩涜閲嶈浇)
+        /// </summary>
+        public virtual void SetClickStatu()
+        {
+        }
+
+        /// <summary>
+        /// 璁剧疆闈炵偣鍑诲悗鐨勭姸鎬�(姝ゆ柟娉曠敱鍚勮嚜鎺т欢杩涜閲嶈浇)
+        /// </summary>
+        public virtual void SetNotClickStatu()
+        {
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鎺т欢鎽ф瘉
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            ButtonClickEvent = null;
+            ButtonDownClickEvent = null;
+
+            if (this.Parent != null)
+            {
+                base.RemoveFromParent();
+            }
+        }
+
+        /// <summary>
+        /// 鏍规嵁鏂囨湰,璁$畻瀹冨疄闄呯殑瀹藉害
+        /// </summary>
+        /// <returns></returns>
+        public int GetRealWidthByText()
+        {
+            if (string.IsNullOrEmpty(this.Text) == true) { return Application.GetRealWidth(25); }
+
+            return base.GetTextWidth();
+        }
+
+        /// <summary>
+        /// 鏍规嵁鏂囨湰,璁$畻瀹冮渶瑕佺殑鎬昏鏁�
+        /// </summary>
+        /// <returns></returns>
+        public int GetRealRowCountByText()
+        {
+            //鍏堣幏鍙栧畠鐨勭湡瀹炲搴�
+            int realWidth = this.GetRealWidthByText();
+            int row = realWidth / this.Width;
+            if (realWidth % this.Width > 0)
+            {
+                row++;
+            }
+            return row;
+        }
+
+        /// <summary>
+        /// 璁$畻鍥剧墖鐨勭湡瀹為珮瀹藉害
+        /// </summary>
+        /// <param name="i_size"></param>
+        /// <returns></returns>
+        public int GetPictrueRealSize(int i_size)
+        {
+            return Application.GetRealWidth(i_size);
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BaseControl/FrameLayoutBase.cs b/HDL_ON/UI/UI0-Stan/Controls/BaseControl/FrameLayoutBase.cs
new file mode 100755
index 0000000..cca0156
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BaseControl/FrameLayoutBase.cs
@@ -0,0 +1,111 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// FrameLayout鐨勬渶鍒濆師鍨�
+    /// </summary>
+    public class FrameLayoutBase : FrameLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 璁剧疆鑳藉惁瑙︾偣鍑讳簨浠�
+        /// </summary>
+        public bool CanClick = true;
+        /// <summary>
+        /// 澹版槑姝ゅ彉閲�,鏃ㄥ湪瀛愮嚎绋嬩篃鑳藉鍘昏幏鍙栦竴涓帶浠剁殑涓婚敭
+        /// </summary>
+        public string MainKey = string.Empty;
+        /// <summary>
+        /// 鎺т欢鐨勭偣鍑讳簨浠�(鑷畾涔夊皝瑁呬簨浠�,姝や簨浠惰璁ゅ彲涓烘墽琛屾寜閽寜涓嬩簨浠�,鍙桟anClick灞炴�ф帶鍒�)
+        /// </summary>
+        public Action<object, MouseEventArgs> ButtonClickEvent = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// FrameLayout鐨勬渶鍒濆師鍨�
+        /// </summary>
+        public FrameLayoutBase()
+        {
+            //鐐瑰嚮浜嬩欢
+            this.MouseUpEventHandler += ButtonBase_MouseUpEventHandler;
+        }
+
+        #endregion
+
+        #region 鈻� 鐐瑰嚮浜嬩欢___________________________
+
+        /// <summary>
+        /// 鐐瑰嚮浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void ButtonBase_MouseUpEventHandler(object sender, MouseEventArgs e)
+        {
+            if (ButtonClickEvent == null)
+            {
+                this.MouseUpEventHandler -= ButtonBase_MouseUpEventHandler;
+                return;
+            }
+            if (CanClick == true)
+            {
+                try
+                {
+                    this.ButtonClickEvent(this, e);
+                }
+                catch (Exception ex)
+                {
+                    //鍑虹幇鏈煡閿欒
+                    HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 璁$畻鍥剧墖鐨勭湡瀹為珮瀹藉害
+        /// </summary>
+        /// <param name="i_size"></param>
+        /// <returns></returns>
+        public int GetPictrueRealSize(int i_size)
+        {
+            return Application.GetRealWidth(i_size);
+        }
+
+        /// <summary>
+        /// 鎺т欢鎽ф瘉
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            ButtonClickEvent = null;
+
+            if (this.Parent != null)
+            {
+                base.RemoveFromParent();
+            }
+        }
+
+        /// <summary>
+        /// 鈽嗏槅绉婚櫎鍏ㄩ儴鎺т欢鈽嗏槅
+        /// </summary>
+        public override void RemoveAll()
+        {
+            if (this.Parent != null)
+            {
+                base.RemoveAll();
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BaseControl/RowLayoutBase.cs b/HDL_ON/UI/UI0-Stan/Controls/BaseControl/RowLayoutBase.cs
new file mode 100755
index 0000000..ea29b62
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BaseControl/RowLayoutBase.cs
@@ -0,0 +1,60 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// RowLayout鐨勬渶鍒濆師鍨�
+    /// </summary>
+    public class RowLayoutBase : RowLayout
+    {
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// FrameLayout鐨勬渶鍒濆師鍨�
+        /// </summary>
+        public RowLayoutBase()
+        {
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 璁$畻鍥剧墖鐨勭湡瀹為珮瀹藉害
+        /// </summary>
+        /// <param name="i_size"></param>
+        /// <returns></returns>
+        public int GetPictrueRealSize(int i_size)
+        {
+            return Application.GetRealWidth(i_size);
+        }
+
+        /// <summary>
+        /// 鎺т欢绉婚櫎
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            if (this.Parent != null)
+            {
+                base.RemoveFromParent();
+            }
+        }
+
+        /// <summary>
+        /// 鈽嗏槅绉婚櫎鍏ㄩ儴鎺т欢鈽嗏槅
+        /// </summary>
+        public override void RemoveAll()
+        {
+            if (this.Parent != null)
+            {
+                base.RemoveAll();
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BaseControl/TextInputBase.cs b/HDL_ON/UI/UI0-Stan/Controls/BaseControl/TextInputBase.cs
new file mode 100755
index 0000000..29d8059
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BaseControl/TextInputBase.cs
@@ -0,0 +1,344 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 杈撳叆妗嗘帶浠剁殑鏈�鍒濆師鍨�(涓嶅缓璁慨鏀瑰拰鐩存帴浣跨敤):鏍囧噯瀛椾綋棰滆壊锛屾枃瀛楀悜宸﹂潬榻�,14鍙峰瓧
+    /// </summary>
+    public class TextInputBase : EditText
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鑱斿姩搴曠嚎
+        /// </summary>
+        private NormalViewControl btnLineTemp = null;
+        /// <summary>
+        /// 鑱斿姩搴曠嚎(鍏夋爣杩涙潵涔嬪悗,绾跨殑棰滆壊浼氬彉)
+        /// </summary>
+        public NormalViewControl btnLine
+        {
+            set
+            {
+                this.btnLineTemp = value;
+            }
+        }
+        /// <summary>
+        /// 鑱斿姩澶栨
+        /// </summary>
+        private NormalFrameLayout frameBorder = null;
+        /// <summary>
+        /// 鑱斿姩澶栨(鍏夋爣杩涙潵涔嬪悗,澶栨鐨勯鑹蹭細鍙�)
+        /// </summary>
+        public NormalFrameLayout FrameBorder
+        {
+            set
+            {
+                this.frameBorder = value;
+            }
+        }
+
+        /// <summary>
+        /// 杈撳叆缁撴潫鐨勪簨浠�
+        /// </summary>
+        public Action FinishInputEvent = null;
+        /// <summary>
+        /// 鍊兼敼鍙樹簨浠�(鍙桵axByte灞炴�ч檺鍒�)
+        /// </summary>
+        public Action<string> TextChangedEvent = null;
+        /// <summary>
+        /// 鎸囧畾璇ヨ緭鍏ユ鏄惁涓轰笉鍙渷鐣�(榛樿涓篺alse)
+        /// </summary>
+        public bool MustInput = false;
+
+        private int m_MaxByte = -1;
+        /// <summary>
+        /// 鏈�澶ц緭鍏yte闀垮害
+        /// </summary>
+        public int MaxByte
+        {
+            get { return m_MaxByte; }
+            set
+            {
+                m_MaxByte = value;
+                this.TextChangeEventHandler -= this.TxtCode_TextChangedEvent;
+                if (m_MaxByte > 0)
+                {
+                    this.TextChangeEventHandler += this.TxtCode_TextChangedEvent;
+                }
+            }
+        }
+
+        private bool m_UseFocusColor = false;
+        /// <summary>
+        /// 鍏夋爣杩涘叆鏂囨湰妗嗘椂,鏄惁璁╁瓧浣撻鑹插彉鏇�(榛樿涓嶄娇鐢�)
+        /// </summary>
+        public bool UseFocusColor
+        {
+            set
+            {
+                m_UseFocusColor = value;
+                if (m_UseFocusColor == true)
+                {
+                    //鐏拌壊瀛椾綋
+                    this.TextColor = CSS_Color.PromptingColor1;
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 杈撳叆妗嗘帶浠剁殑鏈�鍒濆師鍨�(涓嶅缓璁慨鏀瑰拰鐩存帴浣跨敤):鏍囧噯瀛椾綋棰滆壊锛屾枃瀛楀悜宸﹂潬榻�,14鍙峰瓧
+        /// </summary>
+        public TextInputBase()
+        {
+            //娴嬭瘯锛屽叏浣撹緭鍏ユ涓�14鍙峰瓧
+            this.TextSize = CSS_FontSize.TextFontSize;
+
+            this.PlaceholderTextColor = CSS_Color.PromptingColor1;
+            this.TextColor = CSS_Color.TextualColor;
+            this.TextAlignment = TextAlignment.CenterLeft;
+
+            //鐒︾偣浜嬩欢
+            this.FoucsChanged += this.TxtCode_FoucsChangedEvent;
+            //鎸変笅鍥炶溅閿簨浠�
+            this.EditorEnterAction += this.EditorEnterEvent;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠跺ぇ灏�(涓嶄互骞冲潎鍊艰繘琛岀湡瀹炴暟鍊艰绠�)
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="i_Height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public void InitSize(int i_Width, int i_Height, bool real = true)
+        {
+            if (real == true)
+            {
+                i_Width = Application.GetRealWidth(i_Width);
+                i_Height = Application.GetRealHeight(i_Height);
+            }
+
+            this.Height = i_Height;
+            this.Width = i_Width;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠跺ぇ灏�(涓嶄互骞冲潎鍊艰繘琛岀湡瀹炴暟鍊艰绠�)
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public void InitSize(int i_Width, bool real = true)
+        {
+            if (real == true)
+            {
+                i_Width = Application.GetRealWidth(i_Width);
+            }
+
+            this.Height = HdlControlResourse.NormalControlHeight;
+            this.Width = i_Width;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠跺ぇ灏�(浠ュ钩鍧囧�艰繘琛岀湡瀹炴暟鍊艰绠�)
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="i_Height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public void InitAvgSize(int i_Width, int i_Height, bool real = true)
+        {
+            if (real == true)
+            {
+                i_Width = this.GetPictrueRealSize(i_Width);
+                i_Height = this.GetPictrueRealSize(i_Height);
+            }
+
+            this.Height = i_Height;
+            this.Width = i_Width;
+        }
+
+        #endregion
+
+        #region 鈻� 浜嬩欢_______________________________
+
+        /// <summary>
+        /// 鐒︾偣鍙樻洿浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="e"></param>
+        private void TxtCode_FoucsChangedEvent(object sender, FocusEventArgs e)
+        {
+            if (e.Focus == false)
+            {
+                if (btnLineTemp != null)
+                {
+                    btnLineTemp.BackgroundColor = CSS_Color.MainColor;
+                }
+                if (frameBorder != null)
+                {
+                    frameBorder.BorderColor = CSS_Color.MainColor;
+                }
+                if (m_UseFocusColor == true)
+                {
+                    //鐏拌壊瀛椾綋
+                    this.TextColor = CSS_Color.PromptingColor1;
+                }
+            }
+            else
+            {
+                if (btnLineTemp != null)
+                {
+                    btnLineTemp.BackgroundColor = CSS_Color.DividingLineColor;
+                }
+                if (frameBorder != null)
+                {
+                    frameBorder.BorderColor = CSS_Color.DividingLineColor;
+                }
+                if (m_UseFocusColor == true)
+                {
+                    //姝e父瀛椾綋
+                    this.TextColor = CSS_Color.TextualColor;
+                }
+            }
+        }
+
+        /// <summary>
+        /// 杈撳叆瀹屾垚浜嬩欢
+        /// </summary>
+        /// <param name="view"></param>
+        private void EditorEnterEvent(View view)
+        {
+            //妫�娴嬫渶澶ц緭鍑築yte
+            string msg = this.CheckMaxByte();
+            if (msg != null)
+            {
+                HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, msg);
+                return;
+            }
+            this.FinishInputEvent?.Invoke();
+        }
+
+        /// <summary>
+        /// 鍊兼敼鍙樹簨浠�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="value"></param>
+        private void TxtCode_TextChangedEvent(object sender, string value)
+        {
+            var byteData = Encoding.UTF8.GetBytes(value);
+            var newValue = value;
+
+            //濡傛灉杈撳叆鐨勫��,宸茬粡澶т簬鎸囧畾鐨刡yte鏁�,鍒欐埅鍙�
+            if (byteData.Length > this.m_MaxByte)
+            {
+                //鎴彇鎸囧畾鐨刡yte瀛楄妭
+                newValue = Encoding.UTF8.GetString(byteData, 0, this.m_MaxByte);
+                //鏈�鍚庝竴浣嶄笉瑕�,鍥犱负鎴彇鐨勬渶鍚庝竴浣嶅彲鑳芥槸涔辩爜
+                newValue = newValue.Substring(0, newValue.Length - 1);
+                //鎷兼帴涓婂畠鐨勪笅涓�浣�,鐒跺悗妫�娴�
+                var checkValue = newValue + value[newValue.Length];
+                if (Encoding.UTF8.GetBytes(checkValue).Length <= this.m_MaxByte)
+                {
+                    //姝eソ鍖归厤byte鏁�
+                    newValue = checkValue;
+                }
+                this.Text = newValue;
+                //灏嗗厜鏍囪嚦浜庢渶鍚�
+#if __Android__
+                this.SetSelectionEnd();
+#endif
+            }
+            this.TextChangedEvent?.Invoke(newValue);
+        }
+
+        #endregion
+
+        #region 鈻� 妫�娴嬮敊璇痏__________________________
+
+        /// <summary>
+        /// 妫�娴嬫纭��,瀛樺湪閿欒鏃�,杩斿洖閿欒鏂囨湰,鏃犻敊璇繑鍥瀗ull
+        /// </summary>
+        /// <returns></returns>
+        public string CheckError()
+        {
+            //鎵ц妫�娴嬮敊璇�
+            string error = this.DoCheckError();
+            if (error != null)
+            {
+                //鐒︾偣鎺у埗
+                this.Foucs = true;
+                return error;
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鎵ц妫�娴嬮敊璇�
+        /// </summary>
+        /// <returns></returns>
+        private string DoCheckError()
+        {
+            //妫�娴嬫渶澶ц緭鍑築yte
+            string msg = this.CheckMaxByte();
+            if (msg != null) { return msg; }
+
+            //妫�娴嬪繀椤昏緭鍏�
+            if (this.MustInput == true && this.Text.Trim() == string.Empty)
+            {
+                if (string.IsNullOrEmpty(this.PlaceholderText) == false)
+                {
+                    return this.PlaceholderText;
+                }
+                //璇ュ唴瀹逛笉鑳界渷鐣�
+                return "Please Input Content!";
+            }
+
+            return null;
+        }
+
+        /// <summary>
+        /// 妫�娴嬫渶澶ц緭鍏yte
+        /// </summary>
+        /// <returns></returns>
+        private string CheckMaxByte()
+        {
+            return null;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 璁$畻鍥剧墖鐨勭湡瀹為珮瀹藉害
+        /// </summary>
+        /// <param name="i_size"></param>
+        /// <returns></returns>
+        public int GetPictrueRealSize(int i_size)
+        {
+            return Application.GetRealWidth(i_size);
+        }
+
+        /// <summary>
+        /// 鎺т欢绉婚櫎
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            this.FinishInputEvent = null;
+            this.TextChangedEvent = null;
+            if (this.Parent != null)
+            {
+                base.RemoveFromParent();
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomClickButton.cs b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomClickButton.cs
new file mode 100755
index 0000000..d1ec836
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomClickButton.cs
@@ -0,0 +1,39 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓瓨鍦ㄤ簬BodyFrameLayout搴曢儴杩涜鍗曞嚮鐨勬寜閽湬
+    /// </summary>
+    public class BottomClickButton : ButtonCtrBase
+    {
+        /// <summary>
+        /// Y杞村潗鏍�
+        /// </summary>
+        public int Yaxis = 0;
+
+        /// <summary>
+        /// 鍋氭垚涓�涓瓨鍦ㄤ簬BodyFrameLayout搴曢儴杩涜鍗曞嚮鐨勬寜閽�
+        /// </summary>
+        /// <param name="i_width">鏈変簺鐣岄潰寰堢壒娈�,涓嶇粺涓�鎸夐敭瀹藉害,鎵�浠ラ鐣欐鍙傛暟</param>
+        public BottomClickButton(int i_width = 188)
+        {
+            this.Yaxis = Application.GetRealHeight(539);
+
+            //杩欎釜鏄竴鑸綅缃�
+            this.Y = this.Yaxis;
+            this.Width = Application.GetRealWidth(i_width);
+            this.Height = Application.GetRealHeight(44);
+            this.TextAlignment = TextAlignment.Center;
+            this.TextColor = CSS_Color.MainBackgroundColor;
+            this.Gravity = Gravity.CenterHorizontal;
+            this.Radius = (uint)Application.GetRealHeight(44) / 2;
+            this.TextSize = CSS_FontSize.SubheadingFontSize;
+            this.IsBold = true;
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomDialogCommon.cs b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomDialogCommon.cs
new file mode 100755
index 0000000..e1c2277
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomDialogCommon.cs
@@ -0,0 +1,124 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 搴曢儴寮圭獥鐨勫簳灞傚叡閫�
+    /// </summary>
+    public class BottomDialogCommon
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍙栨秷鎺т欢
+        /// </summary>
+        public NormalViewControl btnCancel = null;
+        /// <summary>
+        ///  纭鎺т欢
+        /// </summary>
+        public NormalViewControl btnConfirm = null;
+        /// <summary>
+        /// 鏍囬
+        /// </summary>
+        public string StrTitle = null;
+        /// <summary>
+        /// 琛岄珮搴�
+        /// </summary>
+        public int RowHeight = Application.GetRealHeight(50);
+        /// <summary>
+        /// 琛屾暟
+        /// </summary>
+        public int RowCount = 0;
+        /// <summary>
+        /// 鐐瑰嚮鑳屾櫙鏃�,鏄惁鍏抽棴寮圭獥
+        /// </summary>
+        public bool ClickBackClose = true;
+        /// <summary>
+        /// 鏁翠釜寮圭獥瀵硅薄
+        /// </summary>
+        private Dialog FrameDialog = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栧簳灞傛帶浠�(杩斿洖鐨勬槸鍥涘懆鏈夊渾瑙掔殑鐧借壊鍖哄煙鎺т欢),姝ゆ柟娉曠敱灏佽鎺т欢搴曞眰璋冪敤,璇峰嬁闅忎究璋冪敤
+        /// </summary>
+        public NormalFrameLayout InitBaseControl()
+        {
+            //鏁翠釜鐏拌壊鐣岄潰
+            this.FrameDialog?.Close();
+            this.FrameDialog = new Dialog();
+
+            var dialogBody = new NormalFrameLayout();
+            FrameDialog.AddChidren(dialogBody);
+            FrameDialog.Show();
+            dialogBody.ButtonClickEvent += (sender, e) =>
+            {
+                if (ClickBackClose == true && this.btnCancel != null)
+                {
+                    this.btnCancel.ButtonClickEvent?.Invoke(this.btnCancel, null);
+                }
+            };
+
+            //鐧借壊鑳屾櫙
+            var frameWhiteBack = new NormalFrameLayout();
+            frameWhiteBack.Width = Application.GetRealWidth(343);
+            frameWhiteBack.Height = RowHeight * (RowCount + 1);
+            frameWhiteBack.Radius = (uint)Application.GetRealWidth(12);
+            frameWhiteBack.Gravity = Gravity.CenterHorizontal;
+            frameWhiteBack.Y = dialogBody.Height - RowHeight * (RowCount + 1) - Application.GetRealHeight(20);
+            frameWhiteBack.BackgroundColor = CSS_Color.MainBackgroundColor;
+            dialogBody.AddChidren(frameWhiteBack);
+
+            //鍙栨秷
+            this.btnCancel = new NormalViewControl(90, 48, true);
+            btnCancel.X = HdlControlResourse.XXLeft;
+            btnCancel.Y = Application.GetRealHeight(2);
+            btnCancel.TextColor = CSS_Color.PromptingColor1;
+            btnCancel.TextID = StringId.Cancel;
+            frameWhiteBack.AddChidren(btnCancel);
+
+            //鏍囬
+            var btnTitle = new NormalViewControl(243, 22, true);
+            btnTitle.Y = Application.GetRealHeight(15);
+            btnTitle.TextAlignment = TextAlignment.Center;
+            btnTitle.Gravity = Gravity.CenterHorizontal;
+            btnTitle.IsBold = true;
+            btnTitle.TextSize = CSS_FontSize.SubheadingFontSize;
+            btnTitle.TextColor = CSS_Color.FirstLevelTitleColor;
+            btnTitle.Text = this.StrTitle;
+            frameWhiteBack.AddChidren(btnTitle);
+
+            //纭
+            this.btnConfirm = new NormalViewControl(90, 48, true);
+            btnConfirm.X = frameWhiteBack.Width - Application.GetRealWidth(90) - btnCancel.X;
+            btnConfirm.Y = btnCancel.Y;
+            btnConfirm.TextAlignment = TextAlignment.CenterRight;
+            btnConfirm.TextColor = CSS_Color.MainColor;
+            btnConfirm.TextID = StringId.Confirm;
+            frameWhiteBack.AddChidren(btnConfirm);
+
+            return frameWhiteBack;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍏抽棴鐣岄潰
+        /// </summary>
+        public virtual void Close()
+        {
+            this.FrameDialog?.Close();
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomItemEditorControl.cs b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomItemEditorControl.cs
new file mode 100755
index 0000000..fae40c6
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomItemEditorControl.cs
@@ -0,0 +1,137 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 搴曢儴椤圭洰缂栬緫鎺т欢
+    /// </summary>
+    public class BottomItemEditorControl : BottomDialogCommon
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 缁撴潫浜嬩欢(0:鐐瑰嚮浜嗗彇娑� 1:鐐瑰嚮浜嗙‘瀹�)
+        /// </summary>
+        public Action<int> FinishEvent = null;
+        /// <summary>
+        /// 鍒楄〃鎺т欢
+        /// </summary>
+        private VerticalListControl listView = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鏈夋爣棰樼殑寮圭獥鍨嬭彍鍗曠紪杈戞帶浠�
+        /// </summary>
+        /// <param name="i_RowCount">鑿滃崟琛屾暟(涓嶅惈鏍囬)</param>
+        /// <param name="i_title">鏍囬</param>
+        /// <param name="clickBackClose">鐐瑰嚮鑳屾櫙鏃�,鏄惁鍏抽棴寮圭獥</param>
+        public BottomItemEditorControl(int i_RowCount, string i_title, bool clickBackClose = true)
+        {
+            //鏈�澶ф樉绀�7涓�
+            base.RowCount = i_RowCount > 7 ? 7 : i_RowCount;
+            base.ClickBackClose = clickBackClose;
+            base.StrTitle = i_title;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠�
+        /// </summary>
+        private void InitControl()
+        {
+            //宸茬粡鍒濆鍖�
+            if (base.btnCancel != null) { return; }
+
+            //鍒濆鍖栧簳灞傛帶浠�
+            var frameWhiteBack = base.InitBaseControl();
+            //鍙栨秷
+            base.btnCancel.ButtonClickEvent += (sender, e) =>
+            {
+                base.Close();
+                this.FinishEvent?.Invoke(0);
+                this.FinishEvent = null;
+            };
+
+            //纭
+            base.btnConfirm.ButtonClickEvent += (sender, e) =>
+            {
+                base.Close();
+                this.FinishEvent?.Invoke(1);
+                this.FinishEvent = null;
+            };
+
+            //鍒楄〃鎺т欢
+            this.listView = new VerticalListControl();
+            listView.Y = btnConfirm.Bottom;
+            listView.Height = this.RowCount * this.RowHeight;
+            frameWhiteBack.AddChidren(listView);
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鑿滃崟___________________________
+
+        /// <summary>
+        /// 娣诲姞鑿滃崟琛�
+        /// </summary>
+        /// <param name="i_textView">宸﹁竟鏄剧ず鐨勬枃瀛�</param>
+        /// <param name="i_textValue">鍙宠竟鏄剧ず鐨勫��(</param>
+        /// <param name="clickEvent">鍗曞嚮鑿滃崟鎵ц鐨勪簨浠�(鍙傛暟涓哄彸杈规樉绀哄�肩殑閭d釜鎺т欢)</param>
+        public void AddRowMenu(string i_textView, string i_textValue, Action<NormalViewControl> clickEvent)
+        {
+            //鍏堝垵濮嬪寲鎺т欢
+            this.InitControl();
+
+            //瀹冪殑涓婁竴琛�
+            var rowBefor = this.listView.GetChildren(this.listView.ChildrenCount - 1) as FrameRowControl;
+            if (rowBefor != null)
+            {
+                //鐢诲簳绾�
+                var btnLine = rowBefor.AddBottomLine();
+                btnLine.Width = rowBefor.Width - Application.GetRealWidth(20) * 2;
+                btnLine.Gravity = Gravity.CenterHorizontal;
+            }
+
+            //琛�
+            var rowContr = new FrameRowControl();
+            rowContr.LeftOffset = Application.GetRealWidth(20) - HdlControlResourse.XXLeft;
+            rowContr.RightOffset = - rowContr.LeftOffset;
+            rowContr.Width = this.listView.Width;
+            rowContr.Height = this.RowHeight;
+            this.listView.AddChidren(rowContr);
+            //鏄剧ず鏂囨湰
+            var btnView = rowContr.AddLeftCaption(i_textView, 150);
+            btnView.Width = btnView.GetRealWidthByText();
+            btnView.TextColor = CSS_Color.FirstLevelTitleColor;
+            //娣诲姞鍙崇澶�
+            rowContr.AddRightArrow();
+            //娣诲姞鍙宠竟鐨勬枃鏈�
+            var btnValue = rowContr.AddMostRightView(i_textValue, 150);
+            rowContr.ButtonClickEvent += (sender, e) =>
+            {
+                clickEvent?.Invoke(btnValue);
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍏抽棴鐣岄潰
+        /// </summary>
+        public override void Close()
+        {
+            base.Close();
+            this.FinishEvent = null;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomItemSelectControl.cs b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomItemSelectControl.cs
new file mode 100755
index 0000000..aaff1c0
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomItemSelectControl.cs
@@ -0,0 +1,203 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 搴曢儴椤圭洰閫夋嫨鎺т欢
+    /// </summary>
+    public class BottomItemSelectControl: BottomDialogCommon
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 缁撴潫浜嬩欢,鍙互澶氶��(0:鐐瑰嚮浜嗗彇娑�,绗簩鍙傛暟涓簄ull 1:鐐瑰嚮浜嗙‘瀹�,绗簩鍙傛暟涓洪�夋嫨鐨勭储寮�,浠�0寮�濮�)
+        /// </summary>
+        public Action<int, List<int>> FinishEvent = null;
+        /// <summary>
+        /// 缁撴潫浜嬩欢,鍙兘閫夋嫨涓�涓�(0:鐐瑰嚮浜嗗彇娑�,绗簩鍙傛暟涓簄ull 1:鐐瑰嚮浜嗙‘瀹�,绗簩鍙傛暟涓洪�夋嫨鐨勭储寮�,浠�0寮�濮�)
+        /// </summary>
+        public Action<int, int> FinishOnlyEvent = null;
+        /// <summary>
+        /// 閫夋嫨鐨勭储寮�
+        /// </summary>
+        private List<int> ListSelect = new List<int>();
+        /// <summary>
+        /// 鍒楄〃鎺т欢
+        /// </summary>
+        private VerticalListControl listView = null;
+        /// <summary>
+        /// 褰撳墠閫夋嫨鐨勫浘鏍囨帶浠�
+        /// </summary>
+        private MostRightIconControl btnNowSelectIcon = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鏈夋爣棰樼殑寮圭獥鍨嬭彍鍗曢�夋嫨鎺т欢
+        /// </summary>
+        /// <param name="i_RowCount">鑿滃崟琛屾暟(涓嶅惈鏍囬)</param>
+        /// <param name="i_title">鏍囬</param>
+        /// <param name="clickBackClose">鐐瑰嚮鑳屾櫙鏃�,鏄惁鍏抽棴寮圭獥</param>
+        public BottomItemSelectControl(int i_RowCount, string i_title, bool clickBackClose = true)
+        {
+            //鏈�澶ф樉绀�7涓�
+            base.RowCount = i_RowCount > 7 ? 7 : i_RowCount;
+            base.ClickBackClose = clickBackClose;
+            base.StrTitle = i_title;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠�
+        /// </summary>
+        private void InitControl()
+        {
+            //宸茬粡鍒濆鍖�
+            if (base.btnCancel != null) { return; }
+
+            //鍒濆鍖栧簳灞傛帶浠�
+            var frameWhiteBack = base.InitBaseControl();
+            //鍙栨秷
+            base.btnCancel.ButtonClickEvent += (sender, e) =>
+            {
+                base.Close();
+                this.FinishEvent?.Invoke(0, null);
+                this.FinishOnlyEvent?.Invoke(0, 0);
+                this.FinishEvent = null;
+                this.FinishOnlyEvent = null;
+            };
+
+            base.btnConfirm.ButtonClickEvent += (sender, e) =>
+            {
+                //鏈夐�夋嫨鎵嶈兘鐐圭‘璁�
+                if (this.ListSelect.Count > 0)
+                {
+                    base.Close();
+                    this.FinishEvent?.Invoke(1, this.ListSelect);
+                    this.FinishOnlyEvent?.Invoke(1, this.ListSelect[0]);
+                    this.FinishEvent = null;
+                    this.FinishOnlyEvent = null;
+                }
+            };
+
+            //鍒楄〃鎺т欢
+            this.listView = new VerticalListControl();
+            listView.Y = btnConfirm.Bottom;
+            listView.Height = this.RowCount * this.RowHeight;
+            frameWhiteBack.AddChidren(listView);
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鑿滃崟___________________________
+
+        /// <summary>
+        /// 娣诲姞鑿滃崟琛�
+        /// </summary>
+        /// <param name="i_listText">鏄剧ず鐨勫垪琛ㄦ枃瀛�</param>
+        /// <param name="i_listSelect">榛樿閫夋嫨</param>
+        public void AddRowMenu(List<string> i_listText, List<int> i_listSelect)
+        {
+            foreach (var index in i_listSelect)
+            {
+                if (index >= 0)
+                {
+                    //鑸嶅純鎺変竴浜涢潪娉曠殑鏁版嵁
+                    this.ListSelect.Add(index);
+                }
+            }
+
+            //鍏堝垵濮嬪寲鎺т欢
+            this.InitControl();
+
+            for (int index = 0; index < i_listText.Count; index++)
+            {
+                //鐢熸垚琛屾帶浠�
+                this.CreatRowControl(i_listText[index], index);
+            }
+        }
+
+        /// <summary>
+        /// 鐢熸垚琛屾帶浠�
+        /// </summary>
+        /// <param name="i_text">鏄剧ず鏂囨湰</param>
+        /// <param name="i_index">绱㈠紩</param>
+        private void CreatRowControl(string i_text, int i_index)
+        {
+            //瀹冪殑涓婁竴琛�
+            var rowBefor = this.listView.GetChildren(this.listView.ChildrenCount - 1) as FrameRowControl;
+            if (rowBefor != null)
+            {
+                //鐢诲簳绾�
+                var btnLine = rowBefor.AddBottomLine();
+                btnLine.Width = rowBefor.Width - Application.GetRealWidth(20) * 2;
+                btnLine.Gravity = Gravity.CenterHorizontal;
+            }
+
+            //琛�
+            var rowContr = new FrameRowControl();
+            rowContr.LeftOffset = Application.GetRealWidth(20) - HdlControlResourse.XXLeft;
+            rowContr.RightOffset = HdlControlResourse.XXLeft - Application.GetRealWidth(12);
+            rowContr.Width = this.listView.Width;
+            rowContr.Height = this.RowHeight;
+            this.listView.AddChidren(rowContr);
+            //鏄剧ず鏂囨湰
+            var btnView = rowContr.AddLeftCaption(i_text, 150);
+            btnView.TextColor = CSS_Color.FirstLevelTitleColor;
+            //閫夋嫨鍥炬爣
+            var btnIcon = rowContr.AddMostRightEmptyIcon(28, 28);
+            btnIcon.MainKey = i_index.ToString();
+            btnIcon.UnSelectedImagePath = "Public/ChooseIcon.png";
+            btnIcon.SelectedImagePath = "Public/ChooseOnIcon.png";
+            if (this.ListSelect.Contains(i_index) == true)
+            {
+                btnIcon.IsSelected = true;
+                this.btnNowSelectIcon = btnIcon;
+            }
+            rowContr.ButtonClickEvent += (sender, e) =>
+            {
+                btnIcon.IsSelected = !btnIcon.IsSelected;
+                if (btnIcon.IsSelected == true)
+                {
+                    this.ListSelect.Add(i_index);
+                    if (this.FinishOnlyEvent != null)
+                    {
+                        //濡傛灉閫夋嫨浜嗗彧鑳介�夋嫨涓�涓殑妯″紡,鍒欏彇娑堟帀涓婁竴娆$殑閫夋嫨
+                        if (this.btnNowSelectIcon != null)
+                        {
+                            this.btnNowSelectIcon.IsSelected = false;
+                            this.ListSelect.Remove(Convert.ToInt32(this.btnNowSelectIcon.MainKey));
+                        }
+                        this.btnNowSelectIcon = btnIcon;
+                    }
+                }
+                else
+                {
+                    this.ListSelect.Remove(i_index);
+                    this.btnNowSelectIcon = null;
+                }
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍏抽棴鐣岄潰
+        /// </summary>
+        public override void Close()
+        {
+            base.Close();
+            this.FinishEvent = null;
+            this.FinishOnlyEvent = null;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomTimeSelectControl.cs b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomTimeSelectControl.cs
new file mode 100755
index 0000000..faf33e6
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/BottomControls/BottomTimeSelectControl.cs
@@ -0,0 +1,136 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 搴曢儴鏃堕棿閫夋嫨鎺т欢
+    /// </summary>
+    public class BottomTimeSelectControl : BottomDialogCommon
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 缁撴潫浜嬩欢(0:鐐瑰嚮浜嗗彇娑�  1:鐐瑰嚮浜嗙‘瀹�,绗簩,涓夊弬鏁颁负鏃跺拰鍒�)
+        /// </summary>
+        public Action<int, int, int> FinishEvent = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 搴曢儴鏃堕棿閫夋嫨鎺т欢
+        /// </summary>
+        /// <param name="i_title">鏍囬</param>
+        /// <param name="clickBackClose">鐐瑰嚮鑳屾櫙鏃�,鏄惁鍏抽棴寮圭獥</param>
+        public BottomTimeSelectControl(string i_title = "", bool clickBackClose = true)
+        {
+            base.ClickBackClose = clickBackClose;
+            base.StrTitle = i_title;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠�
+        /// </summary>
+        /// <param name="i_hour">榛樿閫夋嫨鏃�</param>
+        /// <param name="i_minute">榛樿閫夋嫨鍒�</param>
+        public void InitControl(int i_hour, int i_minute)
+        {
+            //宸茬粡鍒濆鍖�
+            if (base.btnCancel != null) { return; }
+
+            //鍒濆鍖栧簳灞傛帶浠�
+            var frameWhiteBack = base.InitBaseControl();
+            frameWhiteBack.Height = Application.GetRealHeight(297);
+            frameWhiteBack.Y = frameWhiteBack.Parent.Height - Application.GetRealHeight(297 + 20);
+
+            //閫夋嫨鐨勬椂涓庡垎
+            int selectHour = 0;
+            int selectMinute = 0;
+
+            //鍙栨秷
+            base.btnCancel.ButtonClickEvent += (sender, e) =>
+            {
+                base.Close();
+                this.FinishEvent?.Invoke(0, 0, 0);
+                this.FinishEvent = null;
+            };
+            //纭
+            base.btnConfirm.ButtonClickEvent += (sender, e) =>
+            {
+                //鏈夐�夋嫨浜嗘墠鑳界偣纭
+                if (selectHour != 0 || selectMinute != 0)
+                {
+                    base.Close();
+                    this.FinishEvent?.Invoke(1, selectHour, selectMinute);
+                    this.FinishEvent = null;
+                }
+            };
+
+            //绾�
+            var btnLine = new NormalViewControl(frameWhiteBack.Width, HdlControlResourse.BottomLineHeight, false);
+            btnLine.BackgroundColor = CSS_Color.PromptingColor2;
+            btnLine.Y = btnCancel.Bottom;
+            frameWhiteBack.AddChidren(btnLine);
+
+            //鏃堕棿鎺т欢
+            var pickerView = new UIPickerView();
+            //鏃�
+            var strhour = Language.StringByID(StringId.h);
+            //鍒�
+            var strMinute = Language.StringByID(StringId.m);
+            //XX鏃�
+            var listHour = new List<string> { "00" + strhour };
+            //XX鍒�
+            var listMinute = new List<string> { "00" + strMinute };
+            for (int i = 1; i <= 23; i++)
+            {
+                listHour.Add(i.ToString().PadLeft(2, '0') + strhour);
+            }
+            for (int i = 1; i <= 58; i++)
+            {
+                listMinute.Add(i.ToString().PadLeft(2, '0') + strMinute);
+            }
+            pickerView.Height = frameWhiteBack.Height - btnLine.Bottom;
+            pickerView.Width = frameWhiteBack.Width - Application.GetRealWidth(8) * 2;
+            pickerView.Y = btnLine.Bottom;
+            pickerView.Gravity = Gravity.CenterHorizontal;
+            frameWhiteBack.AddChidren(pickerView);
+            //榛樿绱㈠紩
+            var index1 = listHour.IndexOf(i_hour.ToString().PadLeft(2, '0') + strhour);
+            if (index1 == -1) { index1 = 0; }
+            var index2 = listMinute.IndexOf(i_minute.ToString().PadLeft(2, '0') + strMinute);
+            if (index2 == -1) { index2 = 0; }
+
+            pickerView.setNPicker(listHour, listMinute, null);
+            pickerView.setCurrentItems(index1, index2, 0);
+
+            pickerView.OnSelectChangeEvent = (value1, value2, value3) =>
+            {
+                //鏇存敼绱㈠紩
+                selectHour = Convert.ToInt32(listHour[value1].Substring(0, 2));
+                selectMinute = Convert.ToInt32(listMinute[value2].Substring(0, 2));
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍏抽棴鐣岄潰
+        /// </summary>
+        public override void Close()
+        {
+            base.Close();
+            this.FinishEvent = null;
+        }
+
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/DialogTitleMenuControl.cs b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/DialogTitleMenuControl.cs
new file mode 100755
index 0000000..1b4a3dc
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/DialogTitleMenuControl.cs
@@ -0,0 +1,154 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鏈夋爣棰樼殑寮圭獥鍨嬭彍鍗曢�夋嫨鎺т欢(Y杞存渶濂藉噺鎺�12)
+    /// </summary>
+    public class DialogTitleMenuControl : NormalFrameLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍒楄〃鎺т欢
+        /// </summary>
+        private VerticalListControl listView = null;
+        /// <summary>
+        /// 鏍囬(鍒濆鍖栦箣鍚庝細缃┖)
+        /// </summary>
+        private string StrTitle = null;
+        /// <summary>
+        /// 琛岄珮搴�
+        /// </summary>
+        private int RowHeight = HdlControlResourse.ListViewRowHeight;
+        /// <summary>
+        /// 琛屾暟
+        /// </summary>
+        private int RowCount = 0;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鏈夋爣棰樼殑寮圭獥鍨嬭彍鍗曢�夋嫨鎺т欢(Y杞存渶濂藉噺鎺�12)
+        /// </summary>
+        /// <param name="i_RowCount">鑿滃崟琛屾暟(涓嶅惈鏍囬)</param>
+        /// <param name="i_title">鏍囬</param>
+        public DialogTitleMenuControl(int i_RowCount, string i_title)
+        {
+            //鏈�澶ф樉绀�5涓�
+            this.RowCount = i_RowCount > 5 ? 5 : i_RowCount;
+            this.StrTitle = i_title;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠�
+        /// </summary>
+        private void InitControl()
+        {
+            //宸茬粡鍒濆鍖栬繃,涓嶉渶瑕佸啀娆″垵濮嬪寲
+            if (this.StrTitle == null) { return; }
+
+            this.BackgroundImagePath = "FunctionIcon/Electrical/Fan/DialogTitleMenuGroud" + this.RowCount + ".png";
+
+            //鏍囬琛�
+            var rowTitle = new FrameRowControl();
+            rowTitle.LeftOffset = Application.GetRealWidth(24) - HdlControlResourse.XXLeft;
+            rowTitle.Y = Application.GetRealHeight(8);
+            rowTitle.Width = this.Width;
+            rowTitle.Height = this.RowHeight;
+            this.AddChidren(rowTitle);
+            //鏍囬
+            var btnTitle = rowTitle.AddLeftCaption(this.StrTitle, 100);
+            //浠嶺杞村紑濮�,閾烘弧鏁翠竴琛�
+            btnTitle.Width = rowTitle.Width - btnTitle.X;
+            btnTitle.TextColor = CSS_Color.FirstLevelTitleColor;
+            btnTitle.TextSize = CSS_FontSize.SubheadingFontSize;
+            //绾�
+            var btnLine = rowTitle.AddBottomLine();
+            btnLine.Width = rowTitle.Width - Application.GetRealWidth(24) * 2;
+            btnLine.Gravity = Gravity.CenterHorizontal;
+            btnLine.BackgroundColor = CSS_Color.BackgroundColor;
+
+            this.StrTitle = null;
+
+            //鍒楄〃鎺т欢
+            this.listView = new VerticalListControl();
+            listView.Y = rowTitle.Bottom;
+            listView.Height = this.RowCount * this.RowHeight;
+            this.AddChidren(listView);
+
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鑿滃崟___________________________
+
+        /// <summary>
+        /// 娣诲姞鑿滃崟琛�(瀹冩渶缁堢殑鐖舵帶浠堕渶瑕佹墜鍔ㄥ叧闂�)
+        /// </summary>
+        /// <param name="i_textValue">鏄剧ず鐨勬枃瀛�</param>
+        /// <param name="i_iconPath">鍥剧墖(</param>
+        /// <param name="i_select">鏄惁鏄�夋嫨鐘舵��</param>
+        /// <param name="clickEvent">鍗曞嚮鑿滃崟鎵ц鐨勪簨浠�</param>
+        public void AddRowMenu(string i_textValue, string i_iconPath, bool i_select, Action clickEvent)
+        {
+            //鍏堝垵濮嬪寲鎺т欢
+            this.InitControl();
+
+            uint fontColor = i_select == true ? CSS_Color.MainColor : CSS_Color.FirstLevelTitleColor;
+            //鐢熸垚琛屾帶浠�
+            var frameRow = this.CreatRowControl(i_iconPath, i_textValue, fontColor);
+            frameRow.ButtonClickEvent += (sender, e) =>
+            {
+                //璋冪敤鍥炶皟鍑芥暟
+                clickEvent?.Invoke();
+                clickEvent = null;
+            };
+        }
+
+        /// <summary>
+        /// 鐢熸垚琛屾帶浠�
+        /// </summary>
+        /// <param name="i_iconPath">鍥炬爣</param>
+        /// <param name="i_text">鏄剧ず鐨勬枃瀛�</param>
+        /// <param name="i_fontColor">瀛椾綋棰滆壊</param>
+        /// <returns></returns>
+        private FrameRowControl CreatRowControl(string i_iconPath, string i_text, uint i_fontColor)
+        {
+            //瀹冪殑涓婁竴琛�
+            var rowBefor = this.listView.GetChildren(this.listView.ChildrenCount - 1) as FrameRowControl;
+            if (rowBefor != null)
+            {
+                //鐢诲簳绾�
+                var btnLine = rowBefor.AddBottomLine();
+                btnLine.Width = rowBefor.Width - Application.GetRealWidth(24) * 2;
+                btnLine.Gravity = Gravity.CenterHorizontal;
+                btnLine.BackgroundColor = CSS_Color.BackgroundColor;
+            }
+
+            //琛�
+            var rowContr = new FrameRowControl();
+            rowContr.LeftOffset = Application.GetRealWidth(24) - HdlControlResourse.XXLeft;
+            rowContr.Width = this.Width;
+            rowContr.Height = this.RowHeight;
+            this.listView.AddChidren(rowContr);
+            //鍥炬爣
+            rowContr.AddLeftIcon(24, i_iconPath);
+            //鏄剧ず鏂囨湰
+            var btnView = rowContr.AddLeftCaption(i_text, 92);
+            //浠嶺杞村紑濮�,閾烘弧鏁翠竴琛�
+            btnView.Width = rowContr.Width - btnView.X;
+            btnView.TextColor = i_fontColor;
+
+            return rowContr;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/DirectionImageControl.cs b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/DirectionImageControl.cs
new file mode 100755
index 0000000..739bc8c
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/DirectionImageControl.cs
@@ -0,0 +1,259 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鎺у埗涓婁笅宸﹀彸鍋滄鐨勫浘鍍忔帶浠�
+    /// </summary>
+    public class DirectionImageControl : NormalFrameLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鎺у埗浜嬩欢(涓嶆敮鎸丒nable鍜孌isable,閮藉綊涓篗id)
+        /// </summary>
+        public Action<DirectionEnum> ControlEvent = null;
+        /// <summary>
+        /// 鏄惁浣跨敤鐐瑰嚮鐗规晥,涓�鏃﹁缃负true,鍒欑偣鍑讳箣鍚�,浼氳嚜鍔ㄨ繕鍘熷洖Enable鐘舵��
+        /// </summary>
+        public bool UseClickStau = false;
+        /// <summary>
+        /// 鑳藉惁鎺у埗鏂瑰悜
+        /// </summary>
+        private bool CanDirection = false;
+        /// <summary>
+        /// 鍚勫浘鐗囪矾寰� 0:鍙互鎺у埗 1:涓嶅彲浠ユ帶鍒� 2:涓� 3:涓� 4:宸� 5:鍙�
+        /// </summary>
+        private List<string> listIconPath = new List<string>();
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖�
+        /// </summary>
+        /// <param name="i_enablePath">鍙互鎺у埗鐨勮儗鏅浘</param>
+        /// <param name="i_disablePath">涓嶅彲浠ユ帶鍒剁殑鑳屾櫙鍥�</param>
+        /// <param name="i_upPath">鐐瑰嚮鍚戜笂鐨勮儗鏅浘</param>
+        /// <param name="i_downPath">鐐瑰嚮鍚戜笅鐨勮儗鏅浘</param>
+        /// <param name="i_leftPath">鐐瑰嚮鍚戝乏鐨勮儗鏅浘</param>
+        /// <param name="i_rightPath">鐐瑰嚮鍚戝彸鐨勮儗鏅浘</param>
+        public void InitControl(string i_enablePath, string i_disablePath, string i_upPath, string i_downPath,
+            string i_leftPath, string i_rightPath)
+        {
+            this.listIconPath.Add(i_enablePath);
+            this.listIconPath.Add(i_disablePath);
+            this.listIconPath.Add(i_upPath);
+            this.listIconPath.Add(i_downPath);
+            this.listIconPath.Add(i_leftPath);
+            this.listIconPath.Add(i_rightPath);
+
+            this.BackgroundImagePath = i_disablePath;
+            this.CanDirection = false;
+            //鍒濆鍖栨寜閽�
+            this.IntiButtion();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨寜閽�
+        /// </summary>
+        private void IntiButtion()
+        {
+            //姝d腑闂寸殑鎸夐挳
+            var btnMid = new PicViewControl(70, 70);
+            btnMid.Gravity = Gravity.Center;
+            this.AddChidren(btnMid);
+            btnMid.ButtonClickEvent += (sender, e) =>
+            {
+                //鍒ゆ柇鑳藉惁鐐瑰嚮
+                if (this.CanClick == false) { return; }
+                //寮�鍚瓑寰呯嚎绋�(涓嶅厑璁哥媯鐐�)
+                this.StartWaitThread();
+
+                this.ControlEvent?.Invoke(DirectionEnum.Mid);
+            };
+
+            //涓婃寜閽�
+            var btnUp = new PicViewControl(52, 52);
+            this.AddChidren(btnUp);
+            btnUp.X = (this.Width - btnUp.Width) / 2;
+            btnUp.ButtonClickEvent += (sender, e) =>
+            {
+                //鏂瑰悜鐐瑰嚮
+                this.DirectionClickEvent(DirectionEnum.Up);
+            };
+            btnUp.ButtonDownClickEvent += (sender, e) =>
+            {
+                //鎸夐敭鎸変笅
+                this.DirectionDownClickEvent(DirectionEnum.Up);
+            };
+
+            //涓嬫寜閽�
+            var btnDown = new PicViewControl(btnUp.Width, btnUp.Height, false);
+            btnDown.X = btnUp.X;
+            this.AddChidren(btnDown);
+            btnDown.Y = this.Height - btnDown.Height;
+            btnDown.ButtonClickEvent += (sender, e) =>
+            {
+                //鏂瑰悜鐐瑰嚮
+                this.DirectionClickEvent(DirectionEnum.Down);
+            };
+            btnDown.ButtonDownClickEvent += (sender, e) =>
+            {
+                //鎸夐敭鎸変笅
+                this.DirectionDownClickEvent(DirectionEnum.Down);
+            };
+
+            //宸︽寜閽�
+            var btnLeft = new PicViewControl(btnUp.Width, btnUp.Height, false);
+            this.AddChidren(btnLeft);
+            btnLeft.Y = (this.Height - btnLeft.Height) / 2;
+            btnLeft.ButtonClickEvent += (sender, e) =>
+            {
+                //鏂瑰悜鐐瑰嚮
+                this.DirectionClickEvent(DirectionEnum.Left);
+            };
+            btnLeft.ButtonDownClickEvent += (sender, e) =>
+            {
+                //鎸夐敭鎸変笅
+                this.DirectionDownClickEvent(DirectionEnum.Left);
+            };
+
+            //鍙虫寜閽�
+            var btnRight = new PicViewControl(btnUp.Width, btnUp.Height, false);
+            btnRight.Y = btnLeft.Y;
+            this.AddChidren(btnRight);
+            btnRight.X = this.Width - btnRight.Width;
+            btnRight.ButtonClickEvent += (sender, e) =>
+            {
+                //鏂瑰悜鐐瑰嚮
+                this.DirectionClickEvent(DirectionEnum.Right);
+            };
+            btnRight.ButtonDownClickEvent += (sender, e) =>
+            {
+                //鎸夐敭鎸変笅
+                this.DirectionDownClickEvent(DirectionEnum.Right);
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 澶栭儴璁剧疆鍥剧墖_______________________
+
+        /// <summary>
+        /// 璁剧疆鍥剧墖鏄剧ず
+        /// </summary>
+        /// <param name="direction">鏂瑰悜鏋氫妇(涓嶆敮鎸丮id)</param>
+        public void SetDirectionImage(DirectionEnum direction)
+        {
+            if (direction == DirectionEnum.Mid)
+            {
+                //涓嶆敮鎸丮id
+                return;
+            }
+            if (direction == DirectionEnum.Disable)
+            {
+                //涓嶈兘鎺у埗鏂瑰悜
+                this.CanDirection = false;
+            }
+            else if (direction == DirectionEnum.Enable)
+            {
+                //鑳藉鎺у埗鏂瑰悜
+                this.CanDirection = true;
+            }
+
+            string iconPath = this.listIconPath[((int)direction) - 1];
+            if (this.BackgroundImagePath != iconPath)
+            {
+                this.BackgroundImagePath = iconPath;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鏂瑰悜鐐瑰嚮___________________________
+
+        /// <summary>
+        /// 鏂瑰悜鐐瑰嚮
+        /// </summary>
+        /// <param name="direction"></param>
+        private void DirectionClickEvent(DirectionEnum direction)
+        {
+            //鍒ゆ柇鑳藉惁鐐瑰嚮
+            if (this.CanClick == false || this.CanDirection == false)
+            {
+                return;
+            }
+
+            //濡傛灉浣跨敤鐗规晥鐨勮瘽
+            if (this.UseClickStau == true)
+            {
+                //鍒囨崲鍥剧墖
+                this.SetDirectionImage(direction);
+                //寮�鍚瓑寰呯嚎绋�(涓嶅厑璁哥媯鐐�)
+                this.StartWaitThread();
+            }
+            else
+            {
+                //鍒囨崲鍥剧墖
+                this.SetDirectionImage(DirectionEnum.Enable);
+            }
+            this.ControlEvent?.Invoke(direction);
+        }
+
+        /// <summary>
+        /// 鏂瑰悜鎸夐敭鎸変笅浜嬩欢
+        /// </summary>
+        /// <param name="direction"></param>
+        private void DirectionDownClickEvent(DirectionEnum direction)
+        {
+            //濡傛灉涓嶄娇鐢ㄧ壒鏁堢殑璇�
+            if (this.CanClick == false || this.CanDirection == false || this.UseClickStau == true)
+            {
+                return;
+            }
+            //鍒囨崲鍥剧墖
+            this.SetDirectionImage(direction);
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 寮�鍚瓑寰呯嚎绋�(涓嶅厑璁哥媯鐐�)
+        /// </summary>
+        private void StartWaitThread()
+        {
+            this.CanClick = false;
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                System.Threading.Thread.Sleep(300);
+                this.CanClick = true;
+
+                //濡傛灉涓嶄娇鐢ㄧ壒鏁堢殑璇�
+                if (this.UseClickStau == false)
+                {
+                    return;
+                }
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //鍥剧墖杩樺師
+                    if (this.BackgroundImagePath != this.listIconPath[0])
+                    {
+                        this.BackgroundImagePath = this.listIconPath[0];
+                    }
+
+                }, ShowErrorMode.NO);
+
+            }, ShowErrorMode.NO);
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/FanGearSeekBarControl.cs b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/FanGearSeekBarControl.cs
new file mode 100755
index 0000000..483447b
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/FanGearSeekBarControl.cs
@@ -0,0 +1,70 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 椋庢墖妗d綅杩涘害鏉℃帶浠�
+    /// </summary>
+    public class FanGearSeekBarControl : SeekBarImageControl
+    {
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 椋庢墖妗d綅杩涘害鏉℃帶浠�
+        /// </summary>
+        /// <param name="i_width">瀹藉害,闈炵湡瀹炲��,瀹為檯瀹藉害浼氬姞涓婂乏鍙抽棿璺�</param>
+        public FanGearSeekBarControl(int i_width) : base(i_width)
+        {
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠�
+        /// </summary>
+        /// <param name="i_maxGear">鏈�澶ф。浣�</param>
+        public void InitControl(int i_maxGear)
+        {
+            //妗d綅鏂囧瓧鎺т欢鐨勫搴�
+            int contrWidth = Application.GetRealWidth(8);
+            //妗d綅鏂囧瓧涔嬮棿鐨勯棿璺�(闇�瑕佸噺鍘诲乏鍙充袱杈圭殑闂磋窛)
+            int contrSpace = (this.Width - this.SeekBarPadding * 2 - contrWidth * i_maxGear) / (i_maxGear - 1);
+            //鍒濆X杞翠笌婊戝姩鏉′竴鑷�
+            int XX = this.X + this.SeekBarPadding;
+            //鐢熸垚妗d綅鎺т欢
+            for (int i = 1; i <= i_maxGear; i++)
+            {
+                //妗d綅鎺т欢
+                var btnGear = new NormalViewControl(contrWidth, Application.GetRealHeight(18), false);
+                btnGear.X = XX;
+                btnGear.Y = this.Bottom;
+                btnGear.Text = i.ToString();
+                btnGear.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+                btnGear.TextColor = CSS_Color.PromptingColor1;
+                this.Parent.AddChidren(btnGear);
+                //X杞村線鍙虫帹绉�
+                if (i == i_maxGear)
+                {
+                    //鏈�鍚庝竴涓椂,鍙埌瀹冪殑鍙宠竟
+                    XX = btnGear.Right;
+                }
+                else
+                {
+                    XX = btnGear.Right + contrSpace;
+                }
+            }
+            //鏈�鍚庡啀鎵撲笂涓�涓�愭。銆戝瓧
+            var btnGearView = new NormalViewControl(60, 18, true);
+            btnGearView.X = XX + Application.GetRealWidth(4);
+            btnGearView.Y = this.Bottom;
+            btnGearView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnGearView.TextColor = CSS_Color.PromptingColor1;
+            btnGearView.Text = "锛�" + Language.StringByID(StringId.Gear) + "锛�";
+            this.Parent.AddChidren(btnGearView);
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/NormalSelectControl.cs b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/NormalSelectControl.cs
new file mode 100755
index 0000000..0bea533
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/NormalSelectControl.cs
@@ -0,0 +1,144 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓畝鍗曠殑閫夋嫨鎺т欢
+    /// </summary>
+    public class NormalSelectControl : FrameRowControl
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鏄剧ず鏂囨湰
+        /// </summary>
+        private string textValue = string.Empty;
+        /// <summary>
+        /// 涓嬮儴鏄剧ず鏂囨湰
+        /// </summary>
+        private string textBottomValue = null;
+        /// <summary>
+        /// 鏂囨湰鎺т欢
+        /// </summary>
+        private NormalViewControl btnText = null;
+        /// <summary>
+        /// 閫夋嫨鎺т欢
+        /// </summary>
+        private MostRightIconControl btnSelect = null;
+        /// <summary>
+        /// 鐘舵��
+        /// </summary>
+        private StatuMode Statu = StatuMode.UnSelect;
+        /// <summary>
+        /// 鏄惁澶勪簬閫夋嫨鐘舵��
+        /// </summary>
+        public bool IsSelected
+        {
+            get { return Statu == StatuMode.Select; }
+            set
+            {
+                if (value == false)
+                {
+                    this.SetUnselectStatu();
+                }
+                else
+                {
+                    this.SetSelectStatu();
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓畝鍗曠殑閫夋嫨鎺т欢
+        /// </summary>
+        /// <param name="i_text">鏄剧ず鏂囨湰</param>
+        /// <param name="i_ChidrenYaxis">瀛愭帶浠禮杞村亸绉婚噺(銆愬垪琛ㄦ帶浠剁殑rowSpace/2銆戝嵆鍙�,涓嶆噦榛樿涓�0鍗冲彲)</param>
+        public NormalSelectControl(string i_text, int i_ChidrenYaxis = 0) : base(i_ChidrenYaxis)
+        {
+            this.textValue = i_text;
+        }
+
+        /// <summary>
+        /// 鍋氭垚涓�涓畝鍗曠殑閫夋嫨鎺т欢
+        /// </summary>
+        /// <param name="i_topText">涓婇儴鏄剧ず鏂囨湰</param>
+        /// <param name="i_bottomText">涓嬮儴鏄剧ず鏂囨湰</param>
+        /// <param name="i_ChidrenYaxis">瀛愭帶浠禮杞村亸绉婚噺(銆愬垪琛ㄦ帶浠剁殑rowSpace/2銆戝嵆鍙�,涓嶆噦榛樿涓�0鍗冲彲)</param>
+        public NormalSelectControl(string i_topText, string i_bottomText, int i_ChidrenYaxis = 0) : base(i_ChidrenYaxis)
+        {
+            this.textValue = i_topText;
+            this.textBottomValue = i_bottomText;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栧唴閮ㄦ帶浠�
+        /// </summary>
+        /// <param name="iconParh">宸︿晶鍥炬爣</param>
+        public void InitControl(string iconParh = "")
+        {
+            //鍥剧墖
+            if (iconParh != "")
+            {
+                var btnIcon = this.AddLeftIcon(28);
+                btnIcon.UnSelectedImagePath = iconParh;
+            }
+            if (this.textBottomValue == null)
+            {
+                //鏄剧ず鏂囨湰
+                btnText = this.AddLeftCaption(this.textValue, 208);
+                btnText.TextColor = CSS_Color.FirstLevelTitleColor;
+            }
+            else
+            {
+                //鏄剧ず鏂囨湰
+                btnText = this.AddTopView(this.textValue, 208);
+                this.AddBottomView(this.textBottomValue, 208);
+            }
+            //閫夋嫨鎺т欢
+            btnSelect = this.AddMostRightEmptyIcon(21, 21);
+            btnSelect.Visible = false;
+            btnSelect.UnSelectedImagePath = "Public/ChooseOnIcon.png";
+        }
+
+        #endregion
+
+        #region 鈻� 閫夋嫨鐘舵�乢__________________________
+
+        /// <summary>
+        /// 璁惧畾閫夋嫨鐘舵��
+        /// </summary>
+        private void SetSelectStatu()
+        {
+            if (Statu == StatuMode.Select)
+            {
+                return;
+            }
+            btnSelect.Visible = true;
+            //鐘舵�佸彉鏇�
+            Statu = StatuMode.Select ;
+        }
+
+        /// <summary>
+        /// 璁剧疆闈為�夋嫨鐘舵��
+        /// </summary>
+        private void SetUnselectStatu()
+        {
+            if (Statu == StatuMode.UnSelect)
+            {
+                return;
+            }
+            btnSelect.Visible = false;
+            //鐘舵�佸彉鏇�
+            Statu = StatuMode.UnSelect;
+        }
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/ProgressBar.cs b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/ProgressBar.cs
new file mode 100755
index 0000000..179c36d
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/ProgressBar.cs
@@ -0,0 +1,139 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 杩涘害鏉�(鍦嗗舰)
+    /// </summary>
+    public class ProgressBar
+    {
+        /// <summary>
+        /// 鏈�澶у��
+        /// </summary>
+        private static decimal Max = 100;
+        /// <summary>
+        /// 褰撳墠鍊�
+        /// </summary>
+        private static decimal m_value = 0;
+        /// <summary>
+        /// 闄勫姞鏂囨湰
+        /// </summary>
+        private static string appendText = string.Empty;
+        /// <summary>
+        /// 杞湀鐨勬帶浠�
+        /// </summary>
+        private static Loading waitPage = null;
+
+        /// <summary>
+        /// 鏄剧ず杩涘害鏉�
+        /// </summary>
+        /// <param name="text">鍒濆鏂囨湰</param>
+        public static void Show(string text = "")
+        {
+            m_value = 0;
+            HdlThreadLogic.Current.RunMain(() =>
+            {
+                if (waitPage == null)
+                {
+                    //鍙栧綋鍓嶆渶椤跺眰鐨勭晫闈�
+                    var frame = MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1) as FrameLayout;
+                    if (frame != null)
+                    {
+                        //鍔犺浇Loading鏁堟灉
+                        waitPage = new Loading();
+                        frame.AddChidren(waitPage);
+                        waitPage.Start(text);
+                    }
+                }
+            }, ShowErrorMode.NO);
+        }
+
+        /// <summary>
+        /// 闅愯棌杩涘害鏉�
+        /// </summary>
+        public static void Close()
+        {
+            m_value = 0;
+            Max = 0;
+            HdlThreadLogic.Current.RunMain(() =>
+            {
+                if (waitPage != null)
+                {
+                    waitPage.RemoveFromParent();
+                    waitPage = null;
+                }
+            }, ShowErrorMode.NO);
+        }
+
+        /// <summary>
+        /// 杩涘害鍊艰瀹�(鏁板瓧)
+        /// </summary>
+        /// <param name="value">Value.</param>
+        public static void SetValue(decimal value)
+        {
+            m_value += value;
+            int value2 = (int)((m_value / Max) * 100);
+            if (value2 > 100)
+            {
+                value2 = 100;
+            }
+
+            SetValue(value2.ToString() + "%");
+        }
+
+        /// <summary>
+        /// 杩涘害鍊艰瀹�
+        /// </summary>
+        /// <param name="value">Value.</param>
+        /// <param name="text">闄勫姞鍊�</param>
+        public static void SetValue(decimal value, string text)
+        {
+            m_value += value;
+            int value2 = (int)((m_value / Max) * 100);
+            if (value2 > 100)
+            {
+                value2 = 100;
+            }
+
+            SetValue(value2.ToString() + "% " + text);
+        }
+
+        /// <summary>
+        /// 杩涘害鍊艰瀹�(鏂囨湰)
+        /// </summary>
+        /// <param name="text">Text.</param>
+        public static void SetValue(string text)
+        {
+            HdlThreadLogic.Current.RunMain(() =>
+            {
+                waitPage.Text = text + appendText;
+            }, ShowErrorMode.NO);
+        }
+
+        /// <summary>
+        /// 璁惧畾杩涘害鍊兼渶澶х殑鍊硷紙鍒嗘瘝锛�
+        /// </summary>
+        /// <param name="maxValue">璁惧畾杩涘害鍊兼渶澶х殑鍊硷紙鍒嗘瘝锛�</param>
+        public static void SetMaxValue(decimal maxValue)
+        {
+            Max = maxValue;
+        }
+
+        /// <summary>
+        /// 鍦ㄨ繘搴︽潯閲岄潰闄勫姞鑷畾涔夋枃鏈�
+        /// </summary>
+        /// <param name="i_text"></param>
+        public static void SetAppendText(string i_text)
+        {
+            appendText = i_text;
+            if (appendText != string.Empty)
+            {
+                //澶氬姞涓�涓┖鏍�
+                appendText = " " + appendText;
+            }
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/SeekBarImageControl.cs b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/SeekBarImageControl.cs
new file mode 100755
index 0000000..86a6b7a
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/CompoundControls/SeekBarImageControl.cs
@@ -0,0 +1,248 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 宸﹀彸婊戝姩鐨勮繘搴︽潯鎺т欢
+    /// </summary>
+    public class SeekBarImageControl : DiyImageSeekBar
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 杩涘害鍊兼敼鍙�,濡傛灉瑕佽缃垵濮嬭繘搴﹀��,姝ゅ彉閲忚鍦ㄨ缃垵濮嬭繘搴﹀�间箣鍓嶈繘琛岃缃�(绗竴涓弬鏁�0:婊戝姩鐨勬椂鍊�,1:鎵嬫寚寮硅捣鐨勬椂鍊�)
+        /// </summary>
+        public Action<int, int> ProgressChangedEvent = null;
+        /// <summary>
+        /// 杩涘害鏉″彲鐢ㄦ椂鐨勮儗鏅壊
+        /// </summary>
+        private uint ProgressBarEnableColor = 0;
+        /// <summary>
+        /// 杩涘害鏉′笉鍙敤鏃剁殑鑳屾櫙鑹�(榛樿鐏拌壊)
+        /// </summary>
+        public uint ProgressBarUnEnableColor = 0xffe8e8e8;
+        /// <summary>
+        /// 褰撳墠鍙敤鐘舵��
+        /// </summary>
+        private bool nowEnable = true;
+        /// <summary>
+        /// 鎺т欢鑳藉惁浣跨敤
+        /// </summary>
+        public new bool Enable
+        {
+            set
+            {
+                //鐘舵�佹病鏈夋敼鍙�
+                if (nowEnable == value) { return; }
+                nowEnable = value;
+
+                this.IsClickable = value;
+                if (value == true)
+                {
+                    //鍘熸潵鐨勯鑹�
+                    base.ProgressBarColor = ProgressBarEnableColor;
+                }
+                else
+                {
+                    //鐏拌壊
+                    base.ProgressBarColor = ProgressBarUnEnableColor;
+                }
+            }
+        }
+
+        /// <summary>
+        /// 杩涘害鏉¢鑹�
+        /// </summary>
+        public new uint ProgressBarColor
+        {
+            set
+            {
+                ProgressBarEnableColor = value;
+                base.ProgressBarColor = value;
+            }
+        }
+
+        private int m_SeekBarPadding = Application.GetRealWidth(20);
+        /// <summary>
+        /// 杩涘害鏉′笌宸﹀彸涓よ竟鐨勮竟妗嗙殑杈硅窛(閲嶅啓搴曞眰灞炴��)
+        /// </summary>
+        public new int SeekBarPadding
+        {
+            set
+            {
+                m_SeekBarPadding = value;
+                base.SeekBarPadding = value;
+            }
+            get
+            {
+                return m_SeekBarPadding;
+            }
+        }
+
+        private int m_MaxValue = 0;
+        /// <summary>
+        /// 杩涘害鏉℃渶澶у��(閲嶅啓搴曞眰灞炴��)
+        /// </summary>
+        public new int MaxValue
+        {
+            set
+            {
+                m_MaxValue = value;
+                base.MaxValue = value;
+            }
+        }
+
+        private int m_MinValue = 0;
+        /// <summary>
+        /// 杩涘害鏉℃渶灏忓��(閲嶅啓搴曞眰灞炴��)
+        /// </summary>
+        public new int MinValue
+        {
+            set
+            {
+                m_MinValue = value;
+                base.MinValue = value;
+            }
+        }
+        /// <summary>
+        /// 涓婃柟鏄剧ず鐨勬枃鏈�
+        /// </summary>
+        private Button btnTopView = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 宸﹀彸婊戝姩鐨勮繘搴︽潯鎺т欢(楂樺害涓�54 宸﹀彸闂磋窛涓�20)
+        /// </summary>
+        /// <param name="i_width">瀹藉害,闈炵湡瀹炲��,瀹為檯瀹藉害浼氬姞涓婂乏鍙抽棿璺�</param>
+        public SeekBarImageControl(int i_width)
+        {
+            this.Width = Application.GetRealWidth(i_width) + Application.GetRealWidth(20) * 2;
+            this.Height = Application.GetRealHeight(54);
+            //鍦嗙悆鐨勯珮搴�
+            this.ThumbImageHeight = Application.GetRealHeight(54);
+            this.ThumbImagePath = "Public/ThumbImage.png";
+            //杩涘害鏉$殑楂樺害搴�
+            this.SeekBarViewHeight = Application.GetRealHeight(8);
+            //涓婃柟鏄惁鏄剧ず鏂囨湰
+            this.IsProgressTextShow = false;
+            this.Gravity = Gravity.CenterHorizontal;
+            //杩涘害鏉¢鑹�
+            this.ProgressBarColor = CSS_Color.MainColor;
+            //宸﹀彸杈硅窛(鏈�濂戒笉瑕佹敼杩欎釜鏁板��,涓�鏃︽敼浜�,鍙兘浼氬共鎵板埌鍏朵粬鐣岄潰)
+            this.SeekBarPadding = Application.GetRealWidth(20);
+
+            //杩涘害鏉″�兼敼鍙樹簨浠�
+            this.OnProgressChangedEvent += this.MyProgressChangedEvent;
+            //鎵嬫寚寮硅捣浜嬩欢
+            this.OnStopTrackingTouchEvent += this.MyStopTrackingTouchEvent;
+        }
+
+        #endregion
+
+        #region 鈻� 浜嬩欢_______________________________
+
+        /// <summary>
+        /// 杩涘害鏉″�兼敼鍙樹簨浠�
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="value"></param>
+        private void MyProgressChangedEvent(object sender, int value)
+        {
+            if (this.ProgressChangedEvent == null)
+            {
+                this.OnProgressChangedEvent -= this.MyProgressChangedEvent;
+                return;
+            }
+
+            this.ProgressChangedEvent(0, value);
+        }
+
+        /// <summary>
+        /// 鎵嬫寚寮硅捣浜嬩欢
+        /// </summary>
+        /// <param name="sender"></param>
+        /// <param name="value"></param>
+        private void MyStopTrackingTouchEvent(object sender, int value)
+        {
+            if (this.ProgressChangedEvent == null)
+            {
+                this.OnStopTrackingTouchEvent -= this.MyStopTrackingTouchEvent;
+                return;
+            }
+            //寮硅捣浜嬩欢涓嶉渶瑕佸垽鏂椂闂�
+            this.ProgressChangedEvent(1, value);
+        }
+
+        #endregion
+
+        #region 鈻� 鑷畾涔変笂鏂规樉绀烘枃鏈琠________________
+
+        /// <summary>
+        /// 鍦ㄤ笂鏂规樉绀鸿嚜瀹氫箟鏂囨湰
+        /// </summary>
+        /// <param name="i_width">瀹藉害(鐪熷疄鍊�)</param>
+        /// <param name="textSize">鏂囧瓧澶у皬</param>
+        /// <param name="textColor">鏂囧瓧棰滆壊</param>
+        public void ShowCustomTextView(int i_width, int textSize, uint textColor)
+        {
+            if (this.btnTopView != null) { return; }
+
+            int contrHeight = Application.GetRealHeight(24);
+            this.btnTopView = new Button();
+            btnTopView.Width = i_width;
+            btnTopView.Height = contrHeight;
+            btnTopView.TextColor = textColor;
+            btnTopView.TextSize = textSize;
+            btnTopView.TextAlignment = TextAlignment.Center;
+            btnTopView.Y = this.Y - contrHeight + Application.GetRealHeight(20);
+            //鍒濆鍖栨椂,X杞村彲浠ヤ笉鐢ㄧ悊浼�
+
+            this.Parent.AddChidren(btnTopView);
+        }
+
+        /// <summary>
+        /// 璁剧疆鑷畾涔夋枃鏈俊鎭�
+        /// </summary>
+        /// <param name="i_text"></param>
+        public void SetCustomText(string i_text)
+        {
+            if (this.btnTopView == null) { return; }
+
+            this.btnTopView.Text = i_text;
+            //婊戞潯鏈�宸﹁竟鐨勮窛绂�
+            int XX = this.X + this.m_SeekBarPadding;
+            //褰撳墠婊戞潯鎵�鍦ㄧ殑澶ц嚧鐧惧垎姣�
+            int tempValue = this.Progress - this.m_MinValue;
+            if (tempValue < 0) { tempValue = 0; }
+            decimal persent = (decimal)tempValue / (this.m_MaxValue - this.m_MinValue);
+            //褰撳墠婊戞潯鎵�鍦ㄧ殑澶ц嚧浣嶇疆
+            XX += (int)((this.Width - this.m_SeekBarPadding * 2) * persent);
+            //鍥犱负瑕佸眳涓�,鎵�浠ュ噺鎺夎嚜瀹氫箟鎺т欢鐨勫搴︾殑涓�鑸�
+            XX = XX - this.btnTopView.Width / 2;
+
+            this.btnTopView.X = XX;
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鎺т欢鎽ф瘉
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            this.ProgressChangedEvent = null;
+            base.RemoveFromParent();
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameLayoutStatuControl.cs b/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameLayoutStatuControl.cs
new file mode 100755
index 0000000..73cbd27
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameLayoutStatuControl.cs
@@ -0,0 +1,217 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓偣鍑诲悗鑳藉鏄剧ず鐐瑰嚮鐘舵�佺殑鎺т欢(鍩哄眰鎺т欢)
+    /// </summary>
+    public class FrameLayoutStatuControl : FrameLayoutBase
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鐘舵�佽缃殑浜嬩欢(浼氶噸杞藉簳灞傛晥鏋�)
+        /// </summary>
+        public Action<bool> SelectStatuEvent;
+        /// <summary>
+        /// 瀛愭帶浠禮杞村亸绉婚噺(鍏遍�氬畾涔夎�屽凡)
+        /// </summary>
+        public int chidrenYaxis = 0;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓偣鍑诲悗鑳藉鏄剧ず鐐瑰嚮鐘舵�佺殑鎺т欢
+        /// </summary>
+        /// <param name="i_ChidrenYaxis">瀛愭帶浠禮杞村亸绉婚噺(銆愬垪琛ㄦ帶浠剁殑rowSpace/2銆戝嵆鍙�,涓嶆噦榛樿涓�0鍗冲彲)</param>
+        public FrameLayoutStatuControl(int i_ChidrenYaxis = 0)
+        {
+            this.chidrenYaxis = i_ChidrenYaxis;
+
+            //缃┖搴曞眰鐨勪簨浠�
+            this.MouseUpEventHandler = null;
+            this.MouseUpEventHandler += ChildrenUpEvent;
+        }
+
+        #endregion
+
+        #region 鈻� 缁戝畾浜嬩欢___________________________
+
+        /// <summary>
+        /// 鍙樻洿瀛愭帶浠剁殑缁戝畾妯″紡
+        /// </summary>
+        /// <param name="view">瀛愭帶浠�</param>
+        /// <param name="chidrenBindMode">鍙樻洿鐨勭粦瀹氭ā寮�</param>
+        public void ChangedChidrenBindMode(View view, ChidrenBindMode chidrenBindMode)
+        {
+            if (view is ButtonCtrBase)
+            {
+                //瀛愭帶浠剁Щ闄や簨浠�
+                ButtonCtrBase button = (ButtonCtrBase)view;
+                button.ButtonClickEvent -= ChildrenUpEvent;
+
+                this.BindChidrenEvent(view, chidrenBindMode);
+            }
+            else if (view is ImageView)
+            {
+                view.MouseUpEventHandler -= ChildrenUpEvent;
+
+                this.BindChidrenEvent(view, chidrenBindMode);
+            }
+            else if (view is ViewGroup)
+            {
+                ViewGroup groupContr = (ViewGroup)view;
+                for (int i = 0; i < groupContr.ChildrenCount; i++)
+                {
+                    var myView = groupContr.GetChildren(i);
+                    if (myView == null)
+                    {
+                        break;
+                    }
+                    if (myView is ButtonCtrBase)
+                    {
+                        //瀛愭帶浠剁Щ闄や簨浠�
+                        ButtonCtrBase button = (ButtonCtrBase)myView;
+                        button.ButtonClickEvent -= ChildrenUpEvent;
+                    }
+                }
+                //鑷韩绉婚櫎浜嬩欢
+                groupContr.MouseUpEventHandler -= ChildrenUpEvent;
+
+                this.BindChidrenEvent(view, chidrenBindMode);
+            }
+        }
+
+        /// <summary>
+        /// 缁戝畾瀛愭帶浠朵簨浠�(濡傛灉鏄鍚堟帶浠�,鍦ㄥ垵濮嬪寲瀹屾垚鍚�,璋冪敤ChangedChidrenBindMode)
+        /// </summary>
+        /// <param name="view"></param>
+        /// <param name="chidrenBindMode"></param>
+        private void BindChidrenEvent(View view, ChidrenBindMode chidrenBindMode)
+        {
+            if (chidrenBindMode == ChidrenBindMode.NotBind)
+            {
+                return;
+            }
+            if (view is ButtonCtrBase)
+            {
+                //涓哄瓙鎺т欢娣诲姞浜嬩欢
+                ButtonCtrBase button = (ButtonCtrBase)view;
+                button.ButtonClickEvent -= ChildrenUpEvent;
+                button.ButtonClickEvent += ChildrenUpEvent;
+            }
+            else if (view is ImageView)
+            {
+                //鑷韩涔熸坊鍔犱簨浠�
+                view.MouseUpEventHandler -= ChildrenUpEvent;
+                view.MouseUpEventHandler += ChildrenUpEvent;
+            }
+            else if (view is ViewGroup)
+            {
+                //涓哄瓙鎺т欢娣诲姞浜嬩欢
+                ViewGroup groupContr = (ViewGroup)view;
+                for (int i = 0; i < groupContr.ChildrenCount; i++)
+                {
+                    var myView = groupContr.GetChildren(i);
+                    if (myView == null)
+                    {
+                        break;
+                    }
+                    if (myView is ButtonCtrBase)
+                    {
+                        //涓哄瓙鎺т欢娣诲姞浜嬩欢
+                        ButtonCtrBase button = (ButtonCtrBase)myView;
+                        button.ButtonClickEvent -= ChildrenUpEvent;
+                        button.ButtonClickEvent += ChildrenUpEvent;
+                    }
+                }
+                //鑷韩涔熸坊鍔犱簨浠�
+                groupContr.MouseUpEventHandler -= ChildrenUpEvent;
+                groupContr.MouseUpEventHandler += ChildrenUpEvent;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞瀛愭帶浠禵________________________
+
+        /// <summary>
+        /// 娣诲姞瀛愭帶浠�
+        /// </summary>
+        /// <param name="view">瀛愭帶浠�</param>
+        /// <param name="chidrenBindMode">缁戝畾妯″紡</param>
+        public void AddChidren(View view, ChidrenBindMode chidrenBindMode = ChidrenBindMode.BindEvent)
+        {
+            base.AddChidren(view);
+
+            //缁戝畾瀛愭帶浠朵簨浠�
+            this.BindChidrenEvent(view, chidrenBindMode);
+        }
+
+        /// <summary>
+        /// 娣诲姞瀛愭帶浠�
+        /// </summary>
+        /// <param name="view"></param>
+        public override void AddChidren(View view)
+        {
+            this.AddChidren(view, ChidrenBindMode.NotBind);
+        }
+
+        #endregion
+
+        #region 鈻� 鎺т欢浜嬩欢___________________________
+
+        /// <summary>
+        /// 鐐瑰嚮鏉惧紑浜嬩欢
+        /// </summary>
+        /// <param name="sender">Sender.</param>
+        /// <param name="e">E.</param>
+        private void ChildrenUpEvent(object sender, MouseEventArgs e)
+        {
+            if (this.CanClick == false)
+            {
+                //涓嶅厑璁哥偣鍑�
+                return;
+            }
+            try
+            {
+                //璋冪敤濮旀墭
+                ButtonClickEvent?.Invoke(sender, e);
+            }
+            catch (Exception ex)
+            {
+                //鍑虹幇鏈煡閿欒
+                HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 绉婚櫎搴曞眰鎺т欢鑷韩鐨勫崟鍑讳簨浠�
+        /// </summary>
+        public void RemoveBaseClickEvent()
+        {
+            this.MouseUpEventHandler -= ChildrenUpEvent;
+        }
+
+        /// <summary>
+        /// 鎺т欢鎽ф瘉
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            this.SelectStatuEvent = null;
+
+            base.RemoveFromParent();
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameListControl.cs b/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameListControl.cs
new file mode 100755
index 0000000..e3fd6f1
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameListControl.cs
@@ -0,0 +1,100 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓垪琛ㄥ瀷鐨凢rameLayout(瀹冧笌VerticalListControl鍚屼竴鎬ц川,浣嗘槸瀹冩槸FrameLayout,瀹冧細鏀瑰彉楂樺害)
+    /// </summary>
+    public class FrameListControl : FrameLayoutBase
+    {
+        /// <summary>
+        /// 琛屼箣闂寸殑闂磋窛
+        /// </summary>
+        public int rowSpace = 0;
+
+        /// <summary>
+        /// 鍋氭垚涓�涓垪琛ㄥ瀷鐨凢rameLayout(瀹冧笌VerticalListControl鍚屼竴鎬ц川,浣嗘槸瀹冩槸FrameLayout,瀹冧細鏀瑰彉楂樺害)
+        /// </summary>
+        /// <param name="i_rowSpace">琛屼箣闂寸殑闂磋窛(杩欎釜鍊兼槸涓庤鎺т欢缁戝畾涓�璧蜂娇鐢ㄧ殑)</param>
+        public FrameListControl(int i_rowSpace = 0)
+        {
+            rowSpace = Application.GetRealHeight(i_rowSpace);
+        }
+
+        /// <summary>
+        /// 娣诲姞瀛愭帶浠�
+        /// </summary>
+        /// <param name="view"></param>
+        public override void AddChidren(View view)
+        {
+            if (view is FrameRowControl || view is RowLayoutControl)
+            {
+                //FrameRowLayout鎺т欢鐨勬椂鍊�,鐩存帴鎵╁ぇ瀹冪殑楂樺害
+                var intBottom = this.GetLocationMostLastViewBottom();
+                if (intBottom != -1)
+                {
+                    view.Y = intBottom;
+                }
+                base.AddChidren(view);
+                if (rowSpace > 0)
+                {
+                    view.Height += rowSpace;
+                }
+            }
+            else
+            {
+                //闈濬rameRowLayout鎺т欢鐨勬椂鍊�,璁$畻鐨勬槸鍧愭爣
+                var intBottom = this.GetLocationMostLastViewBottom();
+                if (intBottom != -1)
+                {
+                    view.Y = intBottom + rowSpace;
+                }
+                base.AddChidren(view);
+            }
+        }
+
+        /// <summary>
+        /// 璋冩暣鐪熷疄楂樺害
+        /// </summary>
+        /// <param name="bottomSpace">搴曢儴楂樺害(闈炵湡瀹炲��)</param>
+        public void AdjustRealHeight(int bottomSpace = 0)
+        {
+            int bottomHeight = -1;
+
+            for (int i = 0; i < this.ChildrenCount; i++)
+            {
+                var child = this.GetChildren(i);
+                if (child.Bottom > bottomHeight)
+                {
+                    bottomHeight = child.Bottom;
+                }
+            }
+            if (bottomHeight != -1)
+            {
+                this.Height = bottomHeight + bottomSpace;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+        /// </summary>
+        /// <returns></returns>
+        private int GetLocationMostLastViewBottom()
+        {
+            int bottomHeight = -1;
+
+            for (int i = 0; i < this.ChildrenCount; i++)
+            {
+                var child = this.GetChildren(i);
+                if (child.Bottom > bottomHeight)
+                {
+                    bottomHeight = child.Bottom;
+                }
+            }
+            return bottomHeight;
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameRowControl.cs b/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameRowControl.cs
new file mode 100755
index 0000000..d88f1c0
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/FrameRowControl.cs
@@ -0,0 +1,391 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓猂owLayout鍨嬬殑FrameLayout
+    /// </summary>
+    public class FrameRowControl : FrameLayoutStatuControl
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 姝ゆ帶浠剁殑璇嗗埆涓婚敭(鑷畾涔夎缃殑)
+        /// </summary>
+        public string MainKeys = string.Empty;
+        /// <summary>
+        /// 宸﹀亸绉婚噺,鍙拡瀵瑰唴缃帶浠舵湁鏁�(杩欐槸涓�涓湡瀹炲��,榛樿涓嶅亸绉汇�傛鏁颁负鍚戝彸鍋忕Щ,璐熸暟涓哄悜宸﹀亸绉�)
+        /// </summary>
+        public int LeftOffset = 0;
+        /// <summary>
+        /// 鍙冲亸绉婚噺,鍙拡瀵瑰唴缃帶浠舵湁鏁�(杩欐槸涓�涓湡瀹炲��,榛樿涓嶅亸绉汇�傛鏁颁负鍚戝彸鍋忕Щ,璐熸暟涓哄悜宸﹀亸绉�)
+        /// </summary>
+        public int RightOffset = 0;
+        /// <summary>
+        /// 宸﹁竟鍥炬爣鎺т欢鐨勫ぇ灏�
+        /// </summary>
+        private int leftIconSize = 0;
+        /// <summary>
+        /// 鍙宠竟鍥炬爣鎺т欢鐨勫ぇ灏�
+        /// </summary>
+        private int rightIconSize = 0;
+        /// <summary>
+        /// 搴曠嚎鎺т欢
+        /// </summary>
+        private NormalViewControl btnBottomLine = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓猂owLayout鍨嬬殑FrameLayout
+        /// </summary>
+        /// <param name="i_ChidrenYaxis">瀛愭帶浠禮杞村亸绉婚噺(銆愬垪琛ㄦ帶浠剁殑rowSpace/2銆戝嵆鍙�,涓嶆噦榛樿涓�0鍗冲彲)</param>
+        public FrameRowControl(int i_ChidrenYaxis = 0) : base(i_ChidrenYaxis)
+        {
+            this.Height = HdlControlResourse.ListViewRowHeight;
+            this.Width = Application.CurrentWidth;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞搴曠嚎___________________________
+
+        /// <summary>
+        /// <para>娣诲姞搴曠嚎(濡傛灉宸﹁竟鏈夊浘鏍囷紝鍒欏厛娣诲姞鍥炬爣锛屽啀娣诲姞搴曠嚎)</para>
+        /// <para>瀹冪殑闀垮害涓猴細褰撳墠鎺т欢瀹藉害-宸﹀彸鍥哄畾闂磋窛-宸﹁竟鍥剧墖瀹藉害(濡傛灉鏈�)-鍙宠竟鐨勫亸绉婚噺</para>
+        /// </summary>
+        public virtual NormalViewControl AddBottomLine()
+        {
+            if (this.btnBottomLine != null)
+            {
+                //宸茬粡娣诲姞浜嗗簳绾�
+                return btnBottomLine;
+            }
+            int lineWidth = this.Width - HdlControlResourse.XXLeft * 2 - LeftOffset - RightOffset;
+            int XX = HdlControlResourse.XXLeft + LeftOffset;
+            if (leftIconSize > 0)
+            {
+                lineWidth = lineWidth - leftIconSize - Application.GetRealWidth(12);
+                XX = XX + leftIconSize + Application.GetRealWidth(12);
+            }
+            this.btnBottomLine = new NormalViewControl(lineWidth, HdlControlResourse.BottomLineHeight, false);
+            btnBottomLine.X = XX;
+            btnBottomLine.Y = this.Height - HdlControlResourse.BottomLineHeight;
+            btnBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
+            base.AddChidren(btnBottomLine);
+
+            return btnBottomLine;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞宸﹁竟Caption____________________
+
+        /// <summary>
+        /// 娣诲姞宸﹁竟Caption(濡傛灉鏈夊浘鏍囷紝鍒欏厛娣诲姞鍥炬爣锛屽啀娣诲姞Caption)
+        /// </summary>
+        /// <param name="i_caption">鍐呭</param>
+        /// <param name="i_width">瀹藉害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        /// <returns></returns>
+        public NormalViewControl AddLeftCaption(string i_caption, int i_width, bool real = true)
+        {
+            if (real == true)
+            {
+                i_width = Application.GetRealWidth(i_width);
+            }
+            var contr = this.AddLeftCaption(i_caption, i_width, this.Height, false);
+            this.AddChidren(contr, ChidrenBindMode.BindEvent);
+            if (chidrenYaxis != 0)
+            {
+                contr.Y += chidrenYaxis;
+            }
+
+            return contr;
+        }
+
+        /// <summary>
+        /// 娣诲姞宸﹁竟Caption,姝ゆ柟娉曚笉浼氫富鍔ㄦ坊鍔犲埌鐖舵帶浠朵腑(濡傛灉鏈夊浘鏍囷紝鍒欏厛娣诲姞鍥炬爣锛屽啀娣诲姞Caption)
+        /// </summary>
+        /// <param name="i_caption">鍐呭</param>
+        /// <param name="i_width">瀹藉害</param>
+        /// <param name="i_height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        /// <returns></returns>
+        public NormalViewControl AddLeftCaption(string i_caption, int i_width, int i_height, bool real = true)
+        {
+            int XX = HdlControlResourse.XXLeft + LeftOffset;
+            if (this.leftIconSize > 0)
+            {
+                XX += this.leftIconSize + Application.GetRealWidth(12);
+            }
+            var btnCaption = new NormalViewControl(i_width, i_height, real);
+            btnCaption.X = XX;
+
+            btnCaption.Text = i_caption;
+
+            return btnCaption;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞宸﹁竟杈撳叆妗哶____________________
+
+        /// <summary>
+        /// 娣诲姞宸﹁竟杈撳叆妗�(濡傛灉鏈夊浘鏍囷紝鍒欏厛娣诲姞鍥炬爣锛屽啀娣诲姞杈撳叆妗�)
+        /// </summary>
+        /// <param name="i_txtValue">鍒濆鍐呭</param>
+        /// <param name="i_width">瀹藉害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        /// <returns></returns>
+        public TextInputControl AddLeftInput(string i_txtValue, int i_width, bool real = true)
+        {
+            if (real == true)
+            {
+                i_width = Application.GetRealWidth(i_width);
+            }
+            int XX = HdlControlResourse.XXLeft + LeftOffset;
+            if (this.leftIconSize > 0)
+            {
+                XX += this.leftIconSize + Application.GetRealWidth(12);
+            }
+            var contr = new TextInputControl(i_width, this.Height, false);
+            contr.Text = i_txtValue;
+            contr.X = XX;
+
+            this.AddChidren(contr, ChidrenBindMode.NotBind);
+            if (chidrenYaxis != 0)
+            {
+                contr.Y += chidrenYaxis;
+            }
+
+            return contr;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞宸﹁竟鍥炬爣_______________________
+
+        /// <summary>
+        /// 娣诲姞宸﹁竟鍥炬爣
+        /// </summary>
+        /// <param name="i_Iconsize">鍥炬爣澶у皬</param>
+        /// <param name="i_IconPath">鍥炬爣鍦板潃</param>
+        /// <returns></returns>
+        public IconViewControl AddLeftIcon(int i_Iconsize, string i_IconPath = null)
+        {
+            var btnIcon = new IconViewControl(i_Iconsize);
+            btnIcon.X = HdlControlResourse.XXLeft + LeftOffset;
+            btnIcon.Gravity = Gravity.CenterVertical;
+            if (i_IconPath != null)
+            {
+                btnIcon.UnSelectedImagePath = i_IconPath;
+            }
+            this.AddChidren(btnIcon, ChidrenBindMode.BindEvent);
+            if (chidrenYaxis != 0)
+            {
+                btnIcon.Y += chidrenYaxis;
+            }
+
+            this.leftIconSize = btnIcon.IconSize;
+            return btnIcon;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鍚戝彸鐨勫浘鏍嘷____________________
+
+        /// <summary>
+        /// 娣诲姞鍚戝彸鐨勫浘鏍�
+        /// </summary>
+        public IconViewControl AddRightArrow()
+        {
+            var btnRight = new IconViewControl(20);
+            btnRight.Gravity = Gravity.CenterVertical;
+            btnRight.X =this.Width - btnRight.IconSize - HdlControlResourse.XXLeft + RightOffset;
+            btnRight.UnSelectedImagePath = "Public/Right.png";
+            this.AddChidren(btnRight, ChidrenBindMode.BindEvent);
+
+            if (chidrenYaxis != 0)
+            {
+                btnRight.Y += chidrenYaxis;
+            }
+
+            this.rightIconSize = btnRight.Width;
+
+            return btnRight;
+        }
+
+        /// <summary>
+        /// 娣诲姞鏈�鍙宠竟鐨勭┖鐧藉浘鐗囨帶浠�
+        /// </summary>
+        /// <param name="i_width">鎺т欢绌哄害(闈炵湡瀹炲��)</param>
+        /// <param name="i_height">鎺т欢楂樺害(闈炵湡瀹炲��)</param>
+        /// <returns></returns>
+        public MostRightIconControl AddMostRightEmptyIcon(int i_width, int i_height)
+        {
+            //杩欐槸涓�涓鍚堟帶浠�
+            var btnContr = new MostRightIconControl(i_width, i_height);
+            btnContr.Height = this.Height;
+            int XX = this.Width - this.GetPictrueRealSize(i_width) - HdlControlResourse.XXLeft;
+            btnContr.X = XX - (btnContr.Width - this.GetPictrueRealSize(i_width)) / 2;
+
+            this.AddChidren(btnContr, ChidrenBindMode.NotBind);
+            btnContr.InitControl();
+            //澶嶅悎鎺т欢闇�瑕佺壒娈婂鐞�
+            this.ChangedChidrenBindMode(btnContr, ChidrenBindMode.BindEvent);
+            if (RightOffset != 0)
+            {
+                btnContr.X += RightOffset;
+            }
+
+            this.rightIconSize = this.GetPictrueRealSize(i_width);
+            if (chidrenYaxis != 0)
+            {
+                btnContr.btnIcon.Y += chidrenYaxis;
+            }
+
+            return btnContr;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鍙宠竟鐨勫紑鍏冲浘鏍嘷________________
+
+        /// <summary>
+        /// 娣诲姞鍙宠竟鐨勫紑鍏冲浘鏍�
+        /// </summary>
+        /// <returns></returns>
+        public MostRightIconControl AddMostRightSwitchIcon()
+        {
+            var btnSwitch = this.AddMostRightEmptyIcon(36, 36);
+            this.ChangedChidrenBindMode(btnSwitch, ChidrenBindMode.NotBind);
+            btnSwitch.UnSelectedImagePath = "Public/Switch_2.png";
+            btnSwitch.SelectedImagePath = "Public/SwitchOn_2.png";
+
+            return btnSwitch;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鏈�鍙崇殑鏄剧ず鏂囨湰_________________
+
+        /// <summary>
+        /// 娣诲姞鏈�鍙崇殑鏄剧ず鏂囨湰(濡傛灉鍙宠竟鏈夊浘鏍囩殑璇�,鍏堟坊鍔犲浘鏍囧悗,鍐嶆坊鍔犺繖涓枃鏈�)
+        /// </summary>
+        /// <param name="i_text"></param>
+        /// <param name="i_width"></param>
+        /// <param name="real"></param>
+        /// <returns></returns>
+        public NormalViewControl AddMostRightView(string i_text, int i_width, bool real = true)
+        {
+            if (real == true)
+            {
+                i_width = Application.GetRealWidth(i_width);
+            }
+            var btnContr = AddMostRightView(i_text, i_width, this.Height, false);
+            this.AddChidren(btnContr, ChidrenBindMode.BindEvent);
+            if (chidrenYaxis != 0)
+            {
+                btnContr.Y += chidrenYaxis;
+            }
+
+            return btnContr;
+        }
+
+        /// <summary>
+        /// 娣诲姞鏈�鍙崇殑鏄剧ず鏂囨湰,姝ゆ柟娉曚笉浼氫富鍔ㄦ坊鍔犲埌鐖舵帶浠朵腑(濡傛灉鍙宠竟鏈夊浘鏍囩殑璇�,鍏堟坊鍔犲浘鏍囧悗,鍐嶆坊鍔犺繖涓枃鏈�)
+        /// </summary>
+        /// <param name="i_caption">鍐呭</param>
+        /// <param name="i_width">瀹藉害</param>
+        /// <param name="i_height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        /// <returns></returns>
+        public NormalViewControl AddMostRightView(string i_text, int i_width, int i_height, bool real = true)
+        {
+            if (real == true)
+            {
+                i_width = Application.GetRealWidth(i_width);
+                i_height = Application.GetRealHeight(i_height);
+            }
+            var btnContr = new NormalViewControl(i_width, i_height, false);
+            if (rightIconSize != 0)
+            {
+                //琛岀殑瀹藉害鍑忓幓鏈�鍙宠竟闂磋窛,鍐嶅姞涓婂亸绉婚噺,鍐嶅噺鍘绘渶鍙宠竟鐨勫浘鐗囧搴�,鍐嶅噺鍘诲浘鐗囦笌鏂囧瓧鐨勯棿璺�,鏈�鍚庡噺鍘昏嚜韬殑瀹藉害
+                btnContr.X = this.Width - HdlControlResourse.XXLeft + RightOffset - rightIconSize - Application.GetRealWidth(12) - i_width;
+            }
+            else
+            {
+                //琛岀殑瀹藉害鍑忓幓鏈�鍙宠竟闂磋窛,鍐嶅姞涓婂亸绉婚噺,鏈�鍚庡噺鍘昏嚜韬殑瀹藉害
+                btnContr.X = this.Width - HdlControlResourse.XXLeft + RightOffset - i_width;
+            }
+            btnContr.Height = i_height;
+            btnContr.TextAlignment = TextAlignment.CenterRight;
+            btnContr.TextColor = CSS_Color.PromptingColor1;
+            btnContr.Text = i_text;
+            btnContr.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+
+            return btnContr;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞涓婇儴鐨勬樉绀烘枃鏈琠________________
+
+        /// <summary>
+        /// 娣诲姞涓婇儴鐨勬樉绀烘枃鏈�(濡傛灉鏈夊浘鏍囷紝鍒欏厛娣诲姞鍥炬爣锛屽啀娣诲姞鏂囨湰)
+        /// </summary>
+        /// <param name="i_caption">鍐呭</param>
+        /// <param name="i_width">瀹藉害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        /// <returns></returns>
+        public NormalViewControl AddTopView(string i_caption, int i_width, bool real = true)
+        {
+            if (real == true)
+            {
+                i_width = Application.GetRealWidth(i_width);
+            }
+            var contr = this.AddLeftCaption(i_caption, i_width, Application.GetRealHeight(21), false);
+            contr.TextSize = CSS_FontSize.SubheadingFontSize;
+            //褰撴寚瀹氬疄闄呭潗鏍囨椂,杩欓噷闇�瑕佺殑鍋忕Щ閲忎负2鍊�
+            contr.Y = Application.GetRealHeight(4) + this.chidrenYaxis * 2;
+            this.AddChidren(contr, ChidrenBindMode.BindEvent);
+
+            return contr;
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞涓嬮儴鐨勬樉绀烘枃鏈琠________________
+
+        /// <summary>
+        /// 娣诲姞涓嬮儴鐨勬樉绀烘枃鏈�(濡傛灉鏈夊浘鏍囷紝鍒欏厛娣诲姞鍥炬爣锛屽啀娣诲姞鏂囨湰)
+        /// </summary>
+        /// <param name="i_caption">鍐呭</param>
+        /// <param name="i_width">瀹藉害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        /// <returns></returns>
+        public NormalViewControl AddBottomView(string i_caption, int i_width, bool real = true)
+        {
+            if (real == true)
+            {
+                i_width = Application.GetRealWidth(i_width);
+            }
+            var contr = this.AddLeftCaption(i_caption, i_width, Application.GetRealHeight(17), false);
+            //褰撴寚瀹氬疄闄呭潗鏍囨椂,杩欓噷闇�瑕佺殑鍋忕Щ閲忎负2鍊�
+            contr.Y = Application.GetRealHeight(25) + this.chidrenYaxis * 2;
+            contr.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            contr.TextColor = CSS_Color.PromptingColor1;
+            this.AddChidren(contr, ChidrenBindMode.BindEvent);
+
+            return contr;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/NormalFrameLayout.cs b/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/NormalFrameLayout.cs
new file mode 100755
index 0000000..579459a
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/FrameLayoutControls/NormalFrameLayout.cs
@@ -0,0 +1,15 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鏅�氱殑FrameLayout
+    /// </summary>
+    public class NormalFrameLayout : FrameLayoutBase
+    {
+        //鐩墠娌℃湁浠�涔堢壒娈婄殑鍔熻兘
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalFrameControl.cs b/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalFrameControl.cs
new file mode 100755
index 0000000..d0cea75
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalFrameControl.cs
@@ -0,0 +1,234 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓噷闈㈠彧瑁匜rameLayout鐨勫垪琛ㄥ瀷鎺т欢(瀹冧笉浼氳皟鏁撮珮搴�,鏈夋甯�)
+    /// </summary>
+    public class VerticalFrameControl : VerticalScrolViewLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 琛屼箣闂寸殑闂磋窛
+        /// </summary>
+        public int rowSpace = 0;
+        /// <summary>
+        /// 妗屽竷鎺т欢
+        /// </summary>
+        private NormalFrameLayout m_frameTable = null;
+        /// <summary>
+        /// 妗屽竷鎺т欢(杩欎釜涓滆タ涓嶈兘鍒狅紝鍥犱负鏈変簺鐣岄潰闇�瑕佷粬鐨勬甯�)
+        /// </summary>
+        public NormalFrameLayout frameTable
+        {
+            get
+            {
+                if (m_frameTable == null) { this.InitFrameTable(); }
+                return m_frameTable;
+            }
+        }
+
+        /// <summary>
+        /// 涓�涓复鏃剁殑涓滆タ
+        /// </summary>
+        private FrameLayout frameBackTemp = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓垪琛ㄥ瀷鐨凢rameLayout(瀹冧笉浼氳皟鏁撮珮搴�)
+        /// </summary>
+        /// <param name="i_rowSpace">琛屼箣闂寸殑闂磋窛(杩欎釜鍊兼槸涓庤鎺т欢缁戝畾涓�璧蜂娇鐢ㄧ殑)</param>
+        public VerticalFrameControl(int i_rowSpace = 0)
+        {
+            rowSpace = Application.GetRealHeight(i_rowSpace);
+#if __IOS__
+            //鑷姩鍋忕Щ鍙栨秷
+            if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
+            {
+                (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never;
+            }
+#endif
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨甯冩帶浠�
+        /// </summary>
+        private void InitFrameTable()
+        {
+            if (this.m_frameTable != null && this.m_frameTable.Parent != null)
+            {
+                return;
+            }
+            this.m_frameTable = new NormalFrameLayout();
+            this.m_frameTable.Width = this.Width;
+            this.m_frameTable.Height = this.Height;
+            base.AddChidren(this.m_frameTable);
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞瀛愭帶浠禵________________________
+
+        /// <summary>
+        /// 娣诲姞Frame瀛愭帶浠�(娉ㄦ剰,瀹冩槸寰�涓嬪姞鎺т欢,鍙細鏀瑰彉鍧愭爣,妗屽竷澶у皬浼氬鍔�)
+        /// </summary>
+        /// <param name="view"></param>
+        public override void AddChidren(View view)
+        {
+            //鍒濆鍖栨甯冩帶浠�
+            this.InitFrameTable();
+
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(this.frameTable);
+            if (value != -1)
+            {
+                view.Y = value + rowSpace;
+            }
+            this.frameTable.AddChidren(view);
+            //璋冩暣妗屽竷楂樺害
+            if (this.frameTable.Height < view.Bottom)
+            {
+                this.frameTable.Height = view.Bottom;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 璋冩暣瀛怓rameLayout鐨勯珮搴�(鍙墿澶�,涓嶇缉灏�)
+        /// </summary>
+        /// <param name="frame"></param>
+        /// <param name="buttomSpace">搴曢儴绌虹櫧闂磋窛(鐪熷疄鍊�)</param>
+        public void AdjustChidrenFrameHeight(FrameLayout frame, int buttomSpace)
+        {
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(frame);
+            if (value != -1)
+            {
+                //璋冩暣妗屽竷楂樺害
+                if (frame.Height < value + buttomSpace)
+                {
+                    frame.Height = value + buttomSpace;
+                }
+            }
+        }
+
+        /// <summary>
+        /// 璋冩暣瀛怓rameLayout鐨勭湡瀹為珮搴�
+        /// </summary>
+        /// <param name="frame"></param>
+        /// <param name="minHeight">鏈�灏忛珮搴�</param>
+        public void AdjustChidrenFrameRealHeight(FrameLayout frame, int minHeight = -1)
+        {
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(frame);
+            if (minHeight != -1 && value < minHeight)
+            {
+                //娌℃湁瓒呰繃鏈�灏忛珮搴�
+                return;
+            }
+            if (value != -1)
+            {
+                //璋冩暣妗屽竷楂樺害
+                frame.Height = value;
+            }
+        }
+
+        /// <summary>
+        /// 璋冩暣妗屽竷楂樺害
+        /// </summary>
+        public void AdjustTableHeight()
+        {
+            //2020.05.25杩藉姞
+            if (this.frameBackTemp != null && this.frameBackTemp.Parent != null)
+            {
+                this.frameBackTemp.RemoveFromParent();
+            }
+
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(this.frameTable);
+            if (value != -1)
+            {
+                //璋冩暣妗屽竷楂樺害
+                this.frameTable.Height = value;
+            }
+            else
+            {
+                //杩樺師涓哄師鏉ョ殑楂樺害
+                this.RecoverTableHeight();
+            }
+        }
+
+        /// <summary>
+        /// 閽堝搴曢儴鐐瑰嚮鎸夐挳,璋冩暣鎺т欢鐪熷疄楂樺害
+        /// </summary>
+        /// <param name="correctionsValue">
+        /// <para>Y杞磋ˉ姝e��(鐪熷疄鍊�,鍒楄〃鎺т欢涓嶅湪bodyFramelayout鐨勬椂鍊欎娇鐢�)</para>
+        /// <para>涓�鑸负姝f暟,濡傛灉涓鸿礋鏁颁唬琛╞odyFramelayout瓒呭嚭浜嗛《閮�</para>
+        /// </param>
+        public void AdjustRealHeightByBottomButton(int correctionsValue = 0)
+        {
+            //璋冩暣妗屽竷楂樺害 2020.05.25杩藉姞
+            this.AdjustTableHeight();
+
+            var btnTemp = new BottomClickButton();
+            if (btnTemp.Yaxis >= this.frameTable.Height + correctionsValue)
+            {
+                //娌℃湁瓒呰繃
+                return;
+            }
+            //娣诲姞涓存椂鎺т欢,鐩磋嚦鍙互婊戝姩瓒呰繃搴曢儴鎸夐挳
+            int oldRowSpace = this.rowSpace;
+            this.rowSpace = 0;
+
+            this.frameBackTemp = new FrameLayout();
+            frameBackTemp.Height = HdlControlResourse.BodyFrameHeight - btnTemp.Yaxis + Application.GetRealHeight(8);
+            this.AddChidren(frameBackTemp);
+
+            this.rowSpace = oldRowSpace;
+        }
+
+        /// <summary>
+        /// 杩樺師妗屽竷楂樺害
+        /// </summary>
+        public void RecoverTableHeight()
+        {
+            if (this.m_frameTable != null)
+            {
+                m_frameTable.Height = this.Height;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+        /// </summary>
+        /// <returns></returns>
+        private int GetLocationMostLastViewBottom(FrameLayout frame)
+        {
+            int bottomHeight = -1;
+
+            if (frame == null) { return bottomHeight; }
+           
+            for (int i = 0; i < frame.ChildrenCount; i++)
+            {
+                var child = frame.GetChildren(i);
+                if (child.Bottom > bottomHeight)
+                {
+                    bottomHeight = child.Bottom;
+                }
+            }
+            return bottomHeight;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalFrameRefreshControl.cs b/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalFrameRefreshControl.cs
new file mode 100755
index 0000000..dd2e337
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalFrameRefreshControl.cs
@@ -0,0 +1,235 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓噷闈㈠彧瑁匜rameLayout鐨勫垪琛ㄥ瀷鎺т欢,鏈夊埛鏂板姛鑳�(鏈夋甯�,瀹冧笉浼氳皟鏁撮珮搴�)
+    /// </summary>
+    public class VerticalFrameRefreshControl : VerticalRefreshLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 琛屼箣闂寸殑闂磋窛
+        /// </summary>
+        public int rowSpace = 0;
+        /// <summary>
+        /// 妗屽竷鎺т欢
+        /// </summary>
+        private NormalFrameLayout m_frameTable = null;
+        /// <summary>
+        /// 妗屽竷鎺т欢
+        /// </summary>
+        public NormalFrameLayout frameTable
+        {
+            get
+            {
+                if (m_frameTable == null) { this.InitFrameTable(); }
+                return m_frameTable;
+            }
+        }
+
+        /// <summary>
+        /// 涓�涓复鏃剁殑涓滆タ
+        /// </summary>
+        private FrameLayout frameBackTemp = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓垪琛ㄥ瀷鐨凢rameLayout,鏈夊埛鏂板姛鑳�(瀹冧笉浼氳皟鏁撮珮搴�)
+        /// </summary>
+        /// <param name="i_rowSpace">琛屼箣闂寸殑闂磋窛(杩欎釜鍊兼槸涓庤鎺т欢缁戝畾涓�璧蜂娇鐢ㄧ殑)</param>
+        public VerticalFrameRefreshControl(int i_rowSpace = 0)
+        {
+            rowSpace = Application.GetRealHeight(i_rowSpace);
+            this.VerticalScrollBarEnabled = false;
+#if __IOS__
+            //鑷姩鍋忕Щ鍙栨秷
+            if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
+            {
+                (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never;
+            }
+#endif
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨甯冩帶浠�
+        /// </summary>
+        private void InitFrameTable()
+        {
+            if (this.m_frameTable != null && this.m_frameTable.Parent != null)
+            {
+                return;
+            }
+            this.m_frameTable = new NormalFrameLayout();
+            this.m_frameTable.Width = this.Width;
+            this.m_frameTable.Height = this.Height;
+            base.AddChidren(this.m_frameTable);
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞瀛愭帶浠禵________________________
+
+        /// <summary>
+        /// 娣诲姞瀛愭帶浠�(娉ㄦ剰,瀹冩槸寰�涓嬪姞鎺т欢,姝ゆ柟娉曟槸鍙敼鍙榊杞�)
+        /// </summary>
+        /// <param name="view"></param>
+        public override void AddChidren(View view)
+        {
+            //鍒濆鍖栨甯冩帶浠�
+            this.InitFrameTable();
+
+            int value = this.GetLocationMostLastViewBottom(this.frameTable);
+            if (value != -1)
+            {
+                view.Y = value + rowSpace;
+            }
+            this.frameTable.AddChidren(view);
+            //璋冩暣妗屽竷楂樺害
+            if (this.frameTable.Height < view.Bottom)
+            {
+                this.frameTable.Height = view.Bottom;
+            }
+        }
+
+        /// <summary>
+        /// 娣诲姞瀛愭帶浠�(娉ㄦ剰,瀹冩槸寰�涓嬪姞鎺т欢,姝ゆ柟娉曟槸鏀瑰彉楂樺害)
+        /// </summary>
+        /// <param name="view"></param>
+        public void AddChidren2(View view)
+        {
+            //鍒濆鍖栨甯冩帶浠�
+            this.InitFrameTable();
+
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(this.frameTable);
+            if (value != -1)
+            {
+                view.Y = value;
+            }
+            this.frameTable.AddChidren(view);
+            if (rowSpace > 0)
+            {
+                view.Height += rowSpace;
+            }
+            //璋冩暣妗屽竷楂樺害
+            if (this.frameTable.Height < view.Bottom)
+            {
+                this.frameTable.Height = view.Bottom;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 璋冩暣瀛怓rameLayout鐨勯珮搴�
+        /// </summary>
+        /// <param name="frame"></param>
+        /// <param name="buttomSpace">搴曢儴绌虹櫧闂磋窛(鐪熷疄鍊�)</param>
+        public void AdjustChidrenFrameHeight(FrameLayout frame, int buttomSpace)
+        {
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(frame);
+            if (value != -1)
+            {
+                //璋冩暣妗屽竷楂樺害
+                frame.Height = value + buttomSpace;
+            }
+        }
+
+        /// <summary>
+        /// 璋冩暣妗屽竷楂樺害
+        /// </summary>
+        /// <param name="buttomSpace">搴曢儴绌虹櫧闂磋窛(鐪熷疄鍊�)</param>
+        public void AdjustTableHeight(int buttomSpace = 0)
+        {
+            //2020.05.25杩藉姞
+            if (this.frameBackTemp != null && this.frameBackTemp.Parent != null)
+            {
+                this.frameBackTemp.RemoveFromParent();
+            }
+
+            //鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+            int value = this.GetLocationMostLastViewBottom(this.frameTable);
+            if (value != -1)
+            {
+                //璋冩暣妗屽竷楂樺害
+                this.frameTable.Height = value + buttomSpace;
+            }
+            else
+            {
+                //杩樺師涓哄師鏉ョ殑楂樺害
+                this.RecoverTableHeight();
+            }
+        }
+
+        /// <summary>
+        /// 閽堝搴曢儴鐐瑰嚮鎸夐挳,璋冩暣鎺т欢鐪熷疄楂樺害
+        /// </summary>
+        /// <param name="correctionsValue">Y杞磋ˉ姝e��(鐪熷疄鍊�,鍒楄〃鎺т欢涓嶅湪bodyFramelayout鐨勬椂鍊欎娇鐢�)</param>
+        public void AdjustRealHeightByBottomButton(int correctionsValue = 0)
+        {
+            //璋冩暣妗屽竷楂樺害 2020.05.25杩藉姞
+            this.AdjustTableHeight();
+
+            var btnTemp = new BottomClickButton();
+            if (btnTemp.Yaxis >= this.frameTable.Height + correctionsValue)
+            {
+                //娌℃湁瓒呰繃
+                return;
+            }
+            //娣诲姞涓存椂鎺т欢,鐩磋嚦鍙互婊戝姩瓒呰繃搴曢儴鎸夐挳
+            int oldRowSpace = this.rowSpace;
+            this.rowSpace = 0;
+
+            this.frameBackTemp = new FrameLayout();
+            frameBackTemp.Height = HdlControlResourse.BodyFrameHeight - btnTemp.Yaxis + Application.GetRealHeight(8);
+            this.AddChidren(frameBackTemp);
+
+            this.rowSpace = oldRowSpace;
+        }
+
+        /// <summary>
+        /// 杩樺師妗屽竷楂樺害
+        /// </summary>
+        public void RecoverTableHeight()
+        {
+            if (this.m_frameTable != null)
+            {
+                m_frameTable.Height = this.Height;
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍧愭爣搴曢儴鏈�涓嬮潰鐨勯偅涓帶浠剁殑搴曢儴鍧愭爣
+        /// </summary>
+        /// <returns></returns>
+        private int GetLocationMostLastViewBottom(FrameLayout frame)
+        {
+            int bottomHeight = -1;
+
+            if (frame == null) { return bottomHeight; }
+
+            for (int i = 0; i < frame.ChildrenCount; i++)
+            {
+                var child = frame.GetChildren(i);
+                if (child.Bottom > bottomHeight)
+                {
+                    bottomHeight = child.Bottom;
+                }
+            }
+            return bottomHeight;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalListControl.cs b/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalListControl.cs
new file mode 100755
index 0000000..e210cc8
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalListControl.cs
@@ -0,0 +1,211 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓笂涓嬪彲浠ユ粦鍔ㄧ殑鍒楄〃鎺т欢(瀹冧細璋冩暣楂樺害,鏃犳甯�)
+    /// </summary>
+    public class VerticalListControl : VerticalScrolViewLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 琛屼箣闂寸殑闂磋窛
+        /// </summary>
+        public int rowSpace = 0;
+        /// <summary>
+        /// 鏈�澶ч珮搴�
+        /// </summary>
+        private int maxHeight = -1;
+        /// <summary>
+        /// 涓�涓病浠�涔堢敤鐨勪笢瑗�
+        /// </summary>
+        private FrameLayout frameBackTemp = null;
+        /// <summary>
+        /// 鑷畾涔夌殑鑾峰彇瀛愭帶浠朵釜鏁�
+        /// </summary>
+        public new int ChildrenCount
+        {
+            get
+            {
+                int count = base.ChildrenCount;
+                if (frameBackTemp != null && frameBackTemp.Parent != null)
+                {
+                    count--;
+                }
+                return count < 0 ? 0 : count;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓笂涓嬪彲浠ユ粦鍔ㄧ殑鍒楄〃鎺т欢(瀹冧細璋冩暣楂樺害,鏃犳甯�)
+        /// </summary>
+        /// <param name="i_rowSpace">琛屼箣闂寸殑闂磋窛(杩欎釜鍊兼槸涓庤鎺т欢缁戝畾涓�璧蜂娇鐢ㄧ殑)</param>
+        public VerticalListControl(int i_rowSpace = 0)
+        {
+            this.rowSpace = Application.GetRealHeight(i_rowSpace);
+#if __IOS__
+            //鑷姩鍋忕Щ鍙栨秷
+            if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
+            {
+                (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never;
+            }
+#endif
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞瀛愭帶浠禵________________________
+
+        /// <summary>
+        /// 娣诲姞瀛愭帶浠�(FrameRowControl,RowLayoutControl浼氭敼鍙橀珮搴�)
+        /// </summary>
+        /// <param name="view"></param>
+        public override void AddChidren(View view)
+        {
+            base.AddChidren(view);
+            if (view is FrameRowControl || view is RowLayoutControl)
+            {
+                if (rowSpace > 0)
+                {
+                    view.Height += rowSpace;
+                }
+            }
+            if (maxHeight == -1)
+            {
+                maxHeight = this.Height;
+            }
+        }
+        #endregion
+
+        #region 鈻� 璋冩暣鐪熷疄楂樺害_______________________
+
+        /// <summary>
+        /// 杩樺師楂樺害
+        /// </summary>
+        public void RecoverHeight()
+        {
+            if (this.maxHeight != -1)
+            {
+                this.Height = this.maxHeight;
+#if __IOS__
+                this.ReLocation();
+#endif
+            }
+        }
+
+        /// <summary>
+        /// 璋冩暣鎺т欢鐪熷疄楂樺害(鍙拡瀵硅鎺т欢閮芥槸鐩稿悓楂樺害鐨�,楂樺害鍙細鍑忓皯,涓嶄細澧炲姞)
+        /// </summary>
+        /// <param name="bottomSpace">搴曢儴绌虹櫧闂磋窛(鐪熷疄鍊�)</param>
+        /// <param name="addSpace">褰撶湡瀹為珮搴﹁秴杩囧師鏈夐珮搴︽椂,鏄惁娣诲姞绌虹櫧</param>
+        public void AdjustRealHeight(int bottomSpace, bool addSpace = true)
+        {
+            //鎬讳箣,鍏堥噸缃嚦鏈�澶�
+            this.RecoverHeight();
+
+            int count = this.ChildrenCount;
+            if (count <= 0)
+            {
+                frameBackTemp?.RemoveFromParent();
+                frameBackTemp = null;
+                return;
+            }
+
+            //璋冩暣鍒楄〃鎺т欢鐨勯珮搴�
+            var realHeight = count * this.GetChildren(0).Height + bottomSpace;
+            if (realHeight < this.Height)
+            {
+                frameBackTemp?.RemoveFromParent();
+                frameBackTemp = null;
+                //缂╁皬鎺т欢楂樺害
+                this.Height = realHeight;
+#if __IOS__
+                this.ReLocation();
+#endif
+            }
+            else if (addSpace == true && bottomSpace > 0 && realHeight > this.maxHeight)
+            {
+                frameBackTemp?.RemoveFromParent();
+
+                frameBackTemp = new FrameLayout();
+                frameBackTemp.Height = bottomSpace;
+                this.AddChidren(frameBackTemp);
+            }
+        }
+
+        /// <summary>
+        /// 閽堝搴曢儴鐐瑰嚮鎸夐挳,璋冩暣鎺т欢鐪熷疄楂樺害
+        /// </summary>
+        /// <param name="bottomSpace">搴曢儴绌虹櫧闂磋窛(鐪熷疄鍊�,濡傛灉鍒楄〃鎺т欢鐪熷疄楂樺害娌℃湁瓒呰繃鏃�,浣跨敤姝ゅ��)</param>
+        /// <param name="correctionsValue">Y杞磋ˉ姝e��(鐪熷疄鍊�,鍒楄〃鎺т欢涓嶅湪bodyFramelayout鐨勬椂鍊欎娇鐢�)</param>
+        public void AdjustRealHeightByBottomButton(int bottomSpace, int correctionsValue = 0)
+        {
+            if (this.ChildrenCount == 0)
+            {
+                frameBackTemp?.RemoveFromParent();
+                frameBackTemp = null;
+                if (maxHeight != -1)
+                {
+                    //杩樺師涓烘渶澶ч珮搴�
+                    this.Height = maxHeight;
+#if __IOS__
+                    this.ReLocation();
+#endif
+                }
+                return;
+            }
+            var realHeight = this.ChildrenCount * this.GetChildren(0).Height + this.Y + correctionsValue;
+            var btnTemp = new BottomClickButton();
+            if (btnTemp.Yaxis >= realHeight)
+            {
+                //娌℃湁瓒呰繃
+                this.AdjustRealHeight(bottomSpace);
+                return;
+            }
+            //瓒呰繃鏃�,閲嶇疆鑷虫渶澶�
+            this.RecoverHeight();
+
+            //娣诲姞涓存椂鎺т欢,鐩磋嚦鍙互婊戝姩瓒呰繃搴曢儴鎸夐挳
+            frameBackTemp?.RemoveFromParent();
+            frameBackTemp = new FrameLayout();
+            frameBackTemp.Height = HdlControlResourse.BodyFrameHeight - btnTemp.Yaxis + bottomSpace;
+            this.AddChidren(frameBackTemp);
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鎺т欢绉婚櫎
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            if (this.Parent != null)
+            {
+                base.RemoveFromParent();
+            }
+        }
+
+        /// <summary>
+        /// 鈽嗏槅绉婚櫎鍏ㄩ儴鎺т欢鈽嗏槅
+        /// </summary>
+        public override void RemoveAll()
+        {
+            if (this.Parent != null)
+            {
+                base.RemoveAll();
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalListRefreshControl.cs b/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalListRefreshControl.cs
new file mode 100755
index 0000000..0e3320e
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/ListViewLayoutControls/VerticalListRefreshControl.cs
@@ -0,0 +1,217 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓笂涓嬪彲浠ユ粦鍔ㄧ殑鍒楄〃鎺т欢,鏈夊埛鏂板姛鑳�(瀹冧細璋冩暣楂樺害,鏃犳甯�)
+    /// </summary>
+    public class VerticalListRefreshControl : VerticalRefreshLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 琛屼箣闂寸殑闂磋窛
+        /// </summary>
+        public int rowSpace = 0;
+        /// <summary>
+        /// 鏈�澶ч珮搴�
+        /// </summary>
+        private int maxHeight = -1;
+        /// <summary>
+        /// 涓�涓病浠�涔堢敤鐨勪笢瑗�
+        /// </summary>
+        private FrameLayout frameBackTemp = null;
+        /// <summary>
+        /// 鑷畾涔夌殑鑾峰彇瀛愭帶浠朵釜鏁�
+        /// </summary>
+        public new int ChildrenCount
+        {
+            get
+            {
+                int count = base.ChildrenCount;
+                if (frameBackTemp != null && frameBackTemp.Parent != null)
+                {
+                    count--;
+                }
+                return count < 0 ? 0 : count;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓笂涓嬪彲浠ユ粦鍔ㄧ殑鍒楄〃鎺т欢,鏈夊埛鏂板姛鑳�(瀹冧細璋冩暣楂樺害,鏃犳甯�)
+        /// </summary>
+        /// <param name="i_rowSpace">琛屼箣闂寸殑闂磋窛(杩欎釜鍊兼槸涓庤鎺т欢缁戝畾涓�璧蜂娇鐢ㄧ殑)</param>
+        public VerticalListRefreshControl(int i_rowSpace = 0)
+        {
+            this.rowSpace = Application.GetRealHeight(i_rowSpace);
+            this.VerticalScrollBarEnabled = false;
+#if __IOS__
+            //鑷姩鍋忕Щ鍙栨秷
+            if (UIKit.UIDevice.CurrentDevice.CheckSystemVersion(11, 0))
+            {
+                (this.uiView as UIKit.UIScrollView).ContentInsetAdjustmentBehavior = UIKit.UIScrollViewContentInsetAdjustmentBehavior.Never;
+            }
+#endif
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞瀛愭帶浠禵________________________
+
+        /// <summary>
+        /// 娣诲姞瀛愭帶浠�(FrameRowControl,RowLayoutControl浼氭敼鍙橀珮搴�)
+        /// </summary>
+        /// <param name="view"></param>
+        public override void AddChidren(View view)
+        {
+            base.AddChidren(view);
+            if (view is FrameRowControl || view is RowLayoutControl)
+            {
+                if (rowSpace > 0)
+                {
+                    view.Height += rowSpace;
+                }
+            }
+            if (maxHeight == -1)
+            {
+                maxHeight = this.Height;
+            }
+        }
+        #endregion
+
+        #region 鈻� 璋冩暣鐪熷疄楂樺害_______________________
+
+        /// <summary>
+        /// 杩樺師楂樺害
+        /// </summary>
+        public void RecoverHeight()
+        {
+            if (this.maxHeight != -1)
+            {
+                this.Height = this.maxHeight;
+#if __IOS__
+                this.ReLocation();
+#endif
+            }
+        }
+
+        /// <summary>
+        /// 璋冩暣鎺т欢鐪熷疄楂樺害(鍙拡瀵硅鎺т欢閮芥槸鐩稿悓楂樺害鐨�,楂樺害鍙細鍑忓皯,涓嶄細澧炲姞)
+        /// </summary>
+        /// <param name="bottomSpace">搴曢儴绌虹櫧闂磋窛(鐪熷疄鍊�)</param>
+        /// <param name="addSpace">褰撶湡瀹為珮搴﹁秴杩囧師鏈夐珮搴︽椂,鏄惁娣诲姞绌虹櫧</param>
+        public void AdjustRealHeight(int bottomSpace, bool addSpace = true)
+        {
+            int count = this.ChildrenCount;
+            if (count <= 0)
+            {
+                frameBackTemp?.RemoveFromParent();
+                frameBackTemp = null;
+                if (maxHeight != -1)
+                {
+                    //杩樺師涓烘渶澶ч珮搴�
+                    this.Height = maxHeight;
+#if __IOS__
+                    this.ReLocation();
+#endif
+                }
+                return;
+            }
+
+            //璋冩暣鍒楄〃鎺т欢鐨勯珮搴�
+            var realHeight = count * this.GetChildren(0).Height + bottomSpace;
+            if (realHeight < this.Height)
+            {
+                frameBackTemp?.RemoveFromParent();
+                frameBackTemp = null;
+                //缂╁皬鎺т欢楂樺害
+                this.Height = realHeight;
+#if __IOS__
+                this.ReLocation();
+#endif
+            }
+            else if (addSpace == true && bottomSpace > 0 && realHeight > this.maxHeight)
+            {
+                frameBackTemp?.RemoveFromParent();
+
+                frameBackTemp = new FrameLayout();
+                frameBackTemp.Height = bottomSpace;
+                this.AddChidren(frameBackTemp);
+            }
+        }
+
+        /// <summary>
+        /// 閽堝搴曢儴鐐瑰嚮鎸夐挳,璋冩暣鎺т欢鐪熷疄楂樺害
+        /// </summary>
+        /// <param name="bottomSpace">搴曢儴绌虹櫧闂磋窛(鐪熷疄鍊�,濡傛灉鍒楄〃鎺т欢鐪熷疄楂樺害娌℃湁瓒呰繃鏃�,浣跨敤姝ゅ��)</param>
+        /// <param name="correctionsValue">Y杞磋ˉ姝e��(鐪熷疄鍊�,鍒楄〃鎺т欢涓嶅湪bodyFramelayout鐨勬椂鍊欎娇鐢�)</param>
+        public void AdjustRealHeightByBottomButton(int bottomSpace, int correctionsValue = 0)
+        {
+            if (this.ChildrenCount == 0)
+            {
+                frameBackTemp?.RemoveFromParent();
+                frameBackTemp = null;
+                if (maxHeight != -1)
+                {
+                    //杩樺師涓烘渶澶ч珮搴�
+                    this.Height = maxHeight;
+#if __IOS__
+                    this.ReLocation();
+#endif
+                }
+                return;
+            }
+            var realHeight = this.ChildrenCount * this.GetChildren(0).Height + this.Y + correctionsValue;
+            var btnTemp = new BottomClickButton();
+            if (btnTemp.Yaxis >= realHeight)
+            {
+                //娌℃湁瓒呰繃
+                this.AdjustRealHeight(bottomSpace);
+                return;
+            }
+            //瓒呰繃鏃�,閲嶇疆鑷虫渶澶�
+            this.RecoverHeight();
+
+            //娣诲姞涓存椂鎺т欢,鐩磋嚦鍙互婊戝姩瓒呰繃搴曢儴鎸夐挳
+            frameBackTemp?.RemoveFromParent();
+            frameBackTemp = new FrameLayout();
+            frameBackTemp.Height = HdlControlResourse.BodyFrameHeight - btnTemp.Yaxis + bottomSpace;
+            this.AddChidren(frameBackTemp);
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鎺т欢绉婚櫎
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            if (this.Parent != null)
+            {
+                base.RemoveFromParent();
+            }
+        }
+
+        /// <summary>
+        /// 鈽嗏槅绉婚櫎鍏ㄩ儴鎺т欢鈽嗏槅
+        /// </summary>
+        public override void RemoveAll()
+        {
+            if (this.Parent != null)
+            {
+                base.RemoveAll();
+            }
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/MessageControls/ShowMsgControl.cs b/HDL_ON/UI/UI0-Stan/Controls/MessageControls/ShowMsgControl.cs
new file mode 100755
index 0000000..521bfb9
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/MessageControls/ShowMsgControl.cs
@@ -0,0 +1,335 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鏄剧ず涓�涓俊鎭(璇蜂娇鐢℉dlMessageLogic璋冪敤)
+    /// </summary>
+    public class ShowMsgControl
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鐐瑰嚮纭鐨勪簨浠�
+        /// </summary>
+        public Action ConfirmClickEvent = null;
+        /// <summary>
+        /// 鐐瑰嚮鍙栨秷鐨勪簨浠�
+        /// </summary>
+        public Action CancelClickEvent = null;
+        /// <summary>
+        /// 淇℃伅绫诲瀷
+        /// </summary>
+        private ShowMsgType msgType = ShowMsgType.Confirm;
+        /// <summary>
+        /// 娑堟伅
+        /// </summary>
+        private string msgText = string.Empty;
+        /// <summary>
+        /// 纭鎸夐挳鐨勬枃鏈�
+        /// </summary>
+        private string buttonOkText = null;
+        /// <summary>
+        /// 鍙栨秷鎸夐挳鐨勬枃鏈�
+        /// </summary>
+        private string buttonCancelText = null;
+        /// <summary>
+        /// 鎻愮ず鎺т欢
+        /// </summary>
+        private Tip myTip = null;
+        /// <summary>
+        /// 绛夊緟鏃堕棿
+        /// </summary>
+        private int WaitTime = -1;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鏄剧ず涓�涓渶瑕佺‘璁ょ殑淇℃伅妗�
+        /// </summary>
+        /// <param name="i_msgType">淇℃伅绫诲瀷</param>
+        /// <param name="i_msg">淇℃伅</param>
+        /// <param name="i_buttonOkText">纭鎸夐挳鐨勬枃鏈�</param>
+        /// <param name="i_buttonCancelText">鍙栨秷鎸夐挳鐨勬枃鏈�</param>
+        /// <param name="i_waitTime">绛夊緟鏃堕棿,鍗曚綅涓虹,璁剧疆纭鎸夐挳鍦ㄥ闀挎椂闂村悗鎵嶈兘澶熺偣鍑�</param>
+        public ShowMsgControl(ShowMsgType i_msgType, string i_msg, string i_buttonOkText = null, string i_buttonCancelText = null, int i_waitTime = -1)
+        {
+            //纭鎸夐挳鏂囨湰
+            this.buttonOkText = i_buttonOkText == null ? Language.StringByID(StringId.Confirm) : i_buttonOkText;
+            this.buttonCancelText = i_buttonCancelText == null ? Language.StringByID(StringId.Cancel) : i_buttonCancelText;
+            this.msgType = i_msgType;
+            this.msgText = i_msg;
+            this.WaitTime = i_waitTime;
+
+            if (i_msgType == ShowMsgType.Tip)
+            {
+                myTip = new Tip();
+                myTip.Direction = AMPopTipDirection.None;
+                myTip.CloseTime = 2;
+                myTip.Text = i_msg;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鏄剧ず娑堟伅___________________________
+
+        /// <summary>
+        /// 鏄剧ず
+        /// </summary>
+        public void Show()
+        {
+            try
+            {
+                if (myTip != null)
+                {
+                    myTip.Show(MainPage.BasePageView);
+                    myTip = null;
+                    return;
+                }
+                //鍒濆鍖栨帶浠�
+                this.InitMsgControl();
+            }
+            catch { }
+        }
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖栨帶浠禵________________________
+
+        /// <summary>
+        /// 鍒濆鍖栨帶浠�
+        /// </summary>
+        private void InitMsgControl()
+        {
+            var dialogForm = new Dialog();
+            dialogForm.BackgroundColor = CSS_Color.DialogTransparentColor1;
+            //涓绘帶浠�
+            var frameMain = new NormalFrameLayout();
+            dialogForm.AddChidren(frameMain);
+            dialogForm.Show();
+
+            //璁$畻鐢�
+            var btnTemp = new ButtonCtrBase();
+            btnTemp.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnTemp.Text = msgText.Replace("\r\n", string.Empty);
+            //鑾峰彇杩欎釜鏄剧ず鐨勫唴瀹圭殑楂樺害
+            int rowCount = btnTemp.GetRealRowCountByText();
+            int contentHeight = rowCount * Application.GetRealHeight(18);
+            if (rowCount <= 2)
+            {
+                //瀹冩湁涓�涓渶灏忛珮搴�
+                contentHeight = Application.GetRealHeight(51);
+            }
+
+            //杩欎釜鍖哄煙鐨勯珮搴︽瘮渚嬩负锛氭樉绀哄唴瀹瑰埌涓婇儴鐨勮窛绂�(50)+鏄剧ず鍐呭鐨勯珮搴�+鏄剧ず鍐呭鍒板簳閮ㄧ殑璺濈(70)
+
+            //涓棿鍖哄煙
+            var frameCenter = new NormalFrameLayout();
+            frameCenter.Gravity = Gravity.Center;
+            frameCenter.Width = Application.GetRealWidth(270);
+            frameCenter.Height = Application.GetRealHeight(50) + contentHeight + Application.GetRealHeight(70);
+            frameCenter.BackgroundColor = CSS_Color.MainBackgroundColor;
+            frameCenter.BorderColor = 0x00000000;
+            frameCenter.BorderWidth = 0;
+            frameCenter.Radius = (uint)Application.GetMinRealAverage(10);
+            frameMain.AddChidren(frameCenter);
+
+            //鏍囬
+            var btnTitle = new NormalViewControl(frameCenter.Width, Application.GetRealHeight(22), false);
+            btnTitle.Y = Application.GetRealHeight(20);
+            btnTitle.TextColor = CSS_Color.MainColor;
+            btnTitle.TextSize = CSS_FontSize.SubheadingFontSize;
+            btnTitle.TextAlignment = TextAlignment.Center;
+            btnTitle.IsBold = true;
+            btnTitle.Text = Language.StringByID(StringId.Tip);
+            frameCenter.AddChidren(btnTitle);
+            //鎻愮ず鍐呭鎸夐挳
+            var btnMsg = new NormalViewControl(Application.GetRealWidth(258), contentHeight, false);
+            btnMsg.Y = btnTitle.Bottom + Application.GetRealHeight(8);
+            btnMsg.Gravity = Gravity.CenterHorizontal;
+            btnMsg.TextAlignment = TextAlignment.Center;
+            btnMsg.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnMsg.Text = msgText;
+            btnMsg.IsMoreLines = true;
+            frameCenter.AddChidren(btnMsg);
+
+            if (msgType == ShowMsgType.Confirm)
+            {
+                //鍒濆鍖栫‘璁ょ被鍨嬬殑搴曢儴鎸夐挳
+                this.InitBottomConfirmButton(dialogForm, frameCenter);
+            }
+            else
+            {
+                //鍒濆鍖栨櫘閫氱被鍨嬬殑搴曢儴鎸夐挳
+                this.InitBottomNormalButton(dialogForm, frameCenter);
+            }
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫‘璁ょ被鍨嬬殑搴曢儴鎸夐挳
+        /// </summary>
+        /// <param name="frameCenter"></param>
+        private void InitBottomConfirmButton(Dialog dialogForm, NormalFrameLayout frameCenter)
+        {
+            //鍙栨秷
+            var btnCancel = new NormalViewControl(frameCenter.Width / 2, Application.GetRealHeight(43), false);
+            btnCancel.Gravity = Gravity.BottomLeft;
+            btnCancel.TextAlignment = TextAlignment.Center;
+            btnCancel.TextSize = CSS_FontSize.SubheadingFontSize;
+            btnCancel.Text = this.buttonCancelText;
+            //btnCancel.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), HDLUtils.RectCornerBottomLeft);
+            frameCenter.AddChidren(btnCancel);
+            btnCancel.ButtonClickEvent += (sender, e) =>
+            {
+                //鍏抽棴鐣岄潰
+                dialogForm.Close();
+                //鍥炶皟鍑芥暟
+                this.CancelClickEvent?.Invoke();
+                this.ConfirmClickEvent = null;
+                this.CancelClickEvent = null;
+            };
+            //绾�
+            var btnLine = new NormalViewControl(frameCenter.Width / 2, HdlControlResourse.BottomLineHeight, false);
+            btnLine.Y = btnCancel.Y - HdlControlResourse.BottomLineHeight;
+            btnLine.BackgroundColor = CSS_Color.DividingLineColor;
+            frameCenter.AddChidren(btnLine);
+
+            //纭
+            var btnConfirm = new NormalViewControl(frameCenter.Width - btnCancel.Width, Application.GetRealHeight(45), false);
+            btnConfirm.X = btnCancel.Right;
+            btnConfirm.Y = btnLine.Y;
+            btnConfirm.TextAlignment = TextAlignment.Center;
+            btnConfirm.TextSize = CSS_FontSize.SubheadingFontSize;
+            btnConfirm.TextColor = CSS_Color.MainBackgroundColor;
+            btnConfirm.BackgroundColor = CSS_Color.MainColor;
+            btnConfirm.Text = this.buttonOkText;
+            frameCenter.AddChidren(btnConfirm);
+            btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), HDLUtils.RectCornerBottomRight);
+            btnConfirm.ButtonClickEvent += (sender, e) =>
+            {
+                //鍏抽棴鐣岄潰
+                dialogForm.Close();
+                //鍥炶皟鍑芥暟
+                this.ConfirmClickEvent?.Invoke();
+                this.ConfirmClickEvent = null;
+                this.CancelClickEvent = null;
+            };
+
+            //寮�鍚瓑寰呮椂闂�
+            this.StartWaitTime(btnConfirm);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨櫘閫氱被鍨嬬殑搴曢儴鎸夐挳
+        /// </summary>
+        /// <param name="dialogForm"></param>
+        /// <param name="frameCenter"></param>
+        private void InitBottomNormalButton(Dialog dialogForm, NormalFrameLayout frameCenter)
+        {
+            //纭
+            var btnConfirm = new NormalViewControl(frameCenter.Width, Application.GetRealHeight(45), false);
+            btnConfirm.Gravity = Gravity.BottomCenter;
+            btnConfirm.TextAlignment = TextAlignment.Center;
+            btnConfirm.TextSize = CSS_FontSize.SubheadingFontSize;
+            btnConfirm.TextColor = CSS_Color.MainBackgroundColor;
+            btnConfirm.BackgroundColor = CSS_Color.MainColor;
+            btnConfirm.Text = this.buttonOkText;
+            frameCenter.AddChidren(btnConfirm);
+            btnConfirm.SetCornerWithSameRadius((uint)Application.GetMinRealAverage(10), HDLUtils.RectCornerBottomLeft | HDLUtils.RectCornerBottomRight);
+            btnConfirm.ButtonClickEvent += (sender, e) =>
+            {
+                //鍏抽棴鐣岄潰
+                dialogForm.Close();
+                //鍥炶皟鍑芥暟
+                this.ConfirmClickEvent?.Invoke();
+                this.ConfirmClickEvent = null;
+                this.CancelClickEvent = null;
+            };
+
+            //寮�鍚瓑寰呮椂闂�
+            this.StartWaitTime(btnConfirm);
+        }
+
+        #endregion
+
+        #region 鈻� 寮�鍚瓑寰呮椂闂確______________________
+
+        /// <summary>
+        /// 寮�鍚瓑寰呮椂闂�(姝ゅ嚱鏁板彧鐢ㄤ簬瀹夊崜)
+        /// </summary>
+        /// <param name="btnConfirm">纭鎸夐挳</param>
+        private void StartWaitTime(NormalViewControl btnConfirm)
+        {
+            if (this.WaitTime <= 0)
+            {
+                return;
+            }
+
+            btnConfirm.CanClick = false;
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                //鏄剧ず鍓╀綑绛夊緟鏃堕棿
+                while (btnConfirm.Parent != null && this.WaitTime >= 0)
+                {
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        btnConfirm.Text = this.buttonOkText + "(" + this.WaitTime + ")";
+
+                    }, ShowErrorMode.NO);
+                    System.Threading.Thread.Sleep(1000);
+                    this.WaitTime--;
+                }
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //鍙互鐐瑰嚮
+                    btnConfirm.Text = this.buttonOkText;
+                    btnConfirm.CanClick = true;
+
+                }, ShowErrorMode.NO);
+            });
+        }
+
+        /// <summary>
+        /// 寮�鍚瓑寰呮椂闂�
+        /// </summary>
+        /// <param name="btnConfirm">纭鎸夐挳</param>
+        private void StartWaitTime(ButtonCtrBase btnConfirm)
+        {
+            if (this.WaitTime <= 0)
+            {
+                return;
+            }
+            //涓嶈兘鐐瑰嚮
+            btnConfirm.CanClick = false;
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                //鏄剧ず鍓╀綑绛夊緟鏃堕棿
+                while (btnConfirm.Parent != null && this.WaitTime >= 0)
+                {
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        btnConfirm.Text = this.buttonOkText + "(" + this.WaitTime + ")";
+                    }, ShowErrorMode.NO);
+                    System.Threading.Thread.Sleep(1000);
+                    this.WaitTime--;
+                }
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    //鍙互鐐瑰嚮
+                    btnConfirm.Text = this.buttonOkText;
+                    btnConfirm.CanClick = true;
+
+                }, ShowErrorMode.NO);
+            });
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/NormalControls/IconBigViewControl.cs b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/IconBigViewControl.cs
new file mode 100755
index 0000000..27b34a8
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/IconBigViewControl.cs
@@ -0,0 +1,82 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓姞澶х偣鍑诲尯鍩熺殑鍥炬爣鎺т欢
+    /// </summary>
+    public class IconBigViewControl : FrameLayoutStatuControl
+    {
+        /// <summary>
+        /// 鍥炬爣鎺т欢(杩笉寰楀繁锛岃繖涓笢瑗垮紑鏀惧嚭鍘�)
+        /// </summary>
+        public ButtonCtrBase btnIcon = null;
+        /// <summary>
+        /// UnSelectedImagePath
+        /// </summary>
+        public string UnSelectedImagePath
+        {
+            get { return btnIcon.UnSelectedImagePath; }
+            set { btnIcon.UnSelectedImagePath = value; }
+        }
+        /// <summary>
+        /// SelectedImagePath
+        /// </summary>
+        public string SelectedImagePath
+        {
+            get { return btnIcon.SelectedImagePath; }
+            set { btnIcon.SelectedImagePath = value; }
+        }
+        /// <summary>
+        /// IsSelected
+        /// </summary>
+        public bool IsSelected
+        {
+            get { return btnIcon.IsSelected; }
+            set { btnIcon.IsSelected = value; }
+        }
+
+        /// <summary>
+        /// X杞寸殑鐪熷疄鍋忕Щ閲�(璇风‘淇濆凡缁忚皟鐢↖nitControl鍒濆鍖栧嚱鏁�,鐢ㄦ硶:钃濇箹涓婄殑X杞�,鍑忔帀杩欎釜鍊煎嵆鍙�)
+        /// </summary>
+        public int XOffset
+        {
+            get { return (this.Width - btnIcon.Width) / 2; }
+        }
+
+        /// <summary>
+        /// Y杞寸殑鐪熷疄鍋忕Щ閲�(璇风‘淇濆凡缁忚皟鐢↖nitControl鍒濆鍖栧嚱鏁�,鐢ㄦ硶:钃濇箹涓婄殑Y杞�,鍑忔帀杩欎釜鍊煎嵆鍙�)
+        /// </summary>
+        public int YOffset
+        {
+            get { return (this.Height - btnIcon.Height) / 2; }
+        }
+
+        /// <summary>
+        /// 鍋氭垚涓�涓姞澶х偣鍑诲尯鍩熺殑鍥炬爣鎺т欢
+        /// </summary>
+        /// <param name="i_width">鎺т欢绌哄害</param>
+        /// <param name="i_height">鎺т欢楂樺害</param>
+        public IconBigViewControl(int i_width, int i_height)
+        {
+            this.Width = this.GetPictrueRealSize(38);
+            this.Height = this.GetPictrueRealSize(38);
+
+            this.btnIcon = new ButtonCtrBase();
+            btnIcon.Width = this.GetPictrueRealSize(i_width);
+            btnIcon.Height = this.GetPictrueRealSize(i_height);
+            btnIcon.Gravity = Gravity.Center;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖�
+        /// </summary>
+        public void InitControl()
+        {
+            this.AddChidren(btnIcon, ChidrenBindMode.BindEvent);
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/NormalControls/IconViewControl.cs b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/IconViewControl.cs
new file mode 100755
index 0000000..f5effe6
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/IconViewControl.cs
@@ -0,0 +1,32 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓樉绀哄浘鏍囩殑鎺т欢(闇�瑕佹墜鍔ㄥ紑鍚偣鍑荤姸鎬�)
+    /// </summary>
+    public class IconViewControl : ButtonCtrBase
+    {
+        /// <summary>
+        /// 鍥炬爣澶у皬
+        /// </summary>
+        public int IconSize = 0;
+        /// <summary>
+        /// 鍋氭垚涓�涓樉绀哄浘鏍囩殑鎺т欢(闇�瑕佹墜鍔ㄥ紑鍚偣鍑荤姸鎬�)
+        /// </summary>
+        /// <param name="size">澶у皬</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public IconViewControl(int size, bool real = true)
+        {
+            this.InitIconSize(size, size, real);
+            this.IconSize = size;
+            if (real == true)
+            {
+                this.IconSize = this.GetPictrueRealSize(size);
+            }
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/NormalControls/MostRightIconControl.cs b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/MostRightIconControl.cs
new file mode 100755
index 0000000..d6bbe29
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/MostRightIconControl.cs
@@ -0,0 +1,78 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚鏀惧湪鐢婚潰鍙宠竟鐨勭殑鍥炬爣鎺т欢(娉ㄦ剰,瀹冧笉鑳界敤鏉ュ仛銆愬悜鍙炽�戠殑鍥炬爣)
+    /// </summary>
+    public class MostRightIconControl : FrameLayoutStatuControl
+    {
+        /// <summary>
+        /// 鍥炬爣鎺т欢(杩笉寰楀繁锛岃繖涓笢瑗垮紑鏀惧嚭鍘�)
+        /// </summary>
+        public ButtonCtrBase btnIcon = null;
+        /// <summary>
+        /// UnSelectedImagePath
+        /// </summary>
+        public string UnSelectedImagePath
+        {
+            get { return btnIcon.UnSelectedImagePath; }
+            set { btnIcon.UnSelectedImagePath = value; }
+        }
+        /// <summary>
+        /// SelectedImagePath
+        /// </summary>
+        public string SelectedImagePath
+        {
+            get { return btnIcon.SelectedImagePath; }
+            set { btnIcon.SelectedImagePath = value; }
+        }
+        /// <summary>
+        /// IsSelected
+        /// </summary>
+        public bool IsSelected
+        {
+            get { return btnIcon.IsSelected; }
+            set { btnIcon.IsSelected = value; }
+        }
+
+        /// <summary>
+        /// X杞寸殑鐪熷疄鍋忕Щ閲�(璇风‘淇濆凡缁忚皟鐢↖nitControl鍒濆鍖栧嚱鏁�,鐢ㄦ硶:钃濇箹涓婄殑X杞�,鍑忔帀杩欎釜鍊煎嵆鍙�)
+        /// </summary>
+        public int XOffset
+        {
+            get { return (this.Width - btnIcon.Width) / 2; }
+        }
+
+        /// <summary>
+        /// 鍋氭垚鏀惧湪鐢婚潰鍙宠竟鐨勭殑鍥炬爣鎺т欢(娉ㄦ剰,瀹冧笉鑳界敤鏉ュ仛銆愬悜鍙炽�戠殑鍥炬爣)
+        /// </summary>
+        /// <param name="i_width">鎺т欢绌哄害</param>
+        /// <param name="i_height">鎺т欢楂樺害</param>
+        public MostRightIconControl(int i_width, int i_height)
+        {
+            this.Width = this.GetPictrueRealSize(38);
+            this.Height = HdlControlResourse.ListViewRowHeight;
+            this.Gravity = Gravity.CenterVertical;
+
+            int XX = Application.CurrentWidth - this.GetPictrueRealSize(i_width) - HdlControlResourse.XXLeft;
+            this.X = XX - this.GetPictrueRealSize((38 - i_width) / 2);
+
+            this.btnIcon = new ButtonCtrBase();
+            btnIcon.Width = this.GetPictrueRealSize(i_width);
+            btnIcon.Height = this.GetPictrueRealSize(i_height);
+            btnIcon.Gravity = Gravity.Center;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖�
+        /// </summary>
+        public void InitControl()
+        {
+            this.AddChidren(btnIcon, ChidrenBindMode.BindEvent);
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/NormalControls/NormalViewControl.cs b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/NormalViewControl.cs
new file mode 100755
index 0000000..7ebb328
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/NormalViewControl.cs
@@ -0,0 +1,34 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 骞冲嚒鏅�氱殑鎺т欢,鍩烘湰鍙槸鐢ㄦ潵鏄剧ず鉁�
+    /// </summary>
+    public class NormalViewControl : ButtonCtrBase
+    {
+        /// <summary>
+        /// 骞冲嚒鏅�氱殑鎺т欢,鍩烘湰鍙槸鐢ㄦ潵鏄剧ず(姝e父鏂囨湰瀛椾綋棰滆壊,鏂囧瓧鍚戝乏闈犻綈)
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="i_Height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public NormalViewControl(int i_Width, int i_Height, bool real)
+        {
+            this.InitSize(i_Width, i_Height, real);
+        }
+
+        /// <summary>
+        /// 骞冲嚒鏅�氱殑鎺т欢,鍩烘湰鍙槸鐢ㄦ潵鏄剧ず(姝e父鏂囨湰瀛椾綋棰滆壊,鏂囧瓧鍚戝乏闈犻綈),楂樺害涓烘爣鍑嗛珮搴�
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public NormalViewControl(int i_Width, bool real)
+        {
+            this.InitSize(i_Width, real);
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/NormalControls/PicViewControl.cs b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/PicViewControl.cs
new file mode 100755
index 0000000..7a902e3
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/NormalControls/PicViewControl.cs
@@ -0,0 +1,24 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓樉绀哄浘鐗囩殑鏅�氭帶浠垛湬
+    /// </summary>
+    public class PicViewControl : ButtonCtrBase
+    {
+        /// <summary>
+        /// 鍋氭垚涓�涓樉绀哄浘鐗囩殑鏅�氭帶浠�
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="i_Height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public PicViewControl(int i_Width, int i_Height, bool real = true)
+        {
+            this.InitPictrueSize(i_Width, i_Height, real);
+        }
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/RowLayoutControls/RowLayoutControl.cs b/HDL_ON/UI/UI0-Stan/Controls/RowLayoutControls/RowLayoutControl.cs
new file mode 100755
index 0000000..2e60642
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/RowLayoutControls/RowLayoutControl.cs
@@ -0,0 +1,70 @@
+锘縰sing Shared;
+using HDL_ON.UI.CSS;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓偣鍑昏兘澶熸樉绀洪�変腑鐘舵�佽儗鏅壊鐨凴owLayout(鎷ユ湁妗屽竷)
+    /// </summary>
+    public class RowLayoutControl : RowLayoutBase
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 妗屽竷鎺т欢
+        /// </summary>
+        private FrameRowControl m_frameTable = null;
+        /// <summary>
+        /// 妗屽竷鎺т欢
+        /// </summary>
+        public FrameRowControl frameTable
+        {
+            get
+            {
+                if (m_frameTable == null) { this.InitFrameTableControl(); }
+                return m_frameTable;
+            }
+        }
+        /// <summary>
+        /// 姝ゆ帶浠剁殑璇嗗埆涓婚敭(鑷畾涔夎缃殑)
+        /// </summary>
+        public string MainKeys = string.Empty;
+        /// <summary>
+        /// 瀛愭帶浠禮杞村亸绉婚噺(鍏遍�氬畾涔夎�屽凡,鏈変簺鐣岄潰闇�瑕佽繖绉嶇壒娈婃搷浣�)
+        /// </summary>
+        public int chidrenYaxis = 0;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓偣鍑昏兘澶熸樉绀洪�変腑鐘舵�佽儗鏅壊鐨凴owLayout(鎷ユ湁妗屽竷)
+        /// </summary>
+        /// <param name="ChidrenYaxis">瀛愭帶浠禮杞村亸绉婚噺(銆愬垪琛ㄦ帶浠剁殑rowSpace/2銆戝嵆鍙�,涓嶆噦榛樿涓�0鍗冲彲)</param>
+        public RowLayoutControl(int i_ChidrenYaxis = 0)
+        {
+            this.LineColor = CSS_Color.viewTranslucence;
+            this.SubViewWidth = Application.GetRealWidth(64);
+
+            this.chidrenYaxis = i_ChidrenYaxis;
+            this.Height = HdlControlResourse.ListViewRowHeight;
+            this.Width = Application.CurrentWidth;
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栨甯冩帶浠�
+        /// </summary>
+        private void InitFrameTableControl()
+        {
+            this.m_frameTable = new FrameRowControl(chidrenYaxis);
+            this.m_frameTable.Height = this.Height;
+            base.AddChidren(frameTable);
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Controls/TextInputControls/TextInputControl.cs b/HDL_ON/UI/UI0-Stan/Controls/TextInputControls/TextInputControl.cs
new file mode 100755
index 0000000..ec3605d
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Controls/TextInputControls/TextInputControl.cs
@@ -0,0 +1,43 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鍋氭垚涓�涓緭鍏ユ鎺т欢
+    /// </summary>
+    public class TextInputControl : TextInputBase
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍋氭垚涓�涓緭鍏ユ鎺т欢(姝e父鏂囨湰瀛椾綋棰滆壊)
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="i_Height">楂樺害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public TextInputControl(int i_Width, int i_Height, bool real = false)
+        {
+            this.InitSize(i_Width, i_Height, real);
+        }
+
+        /// <summary>
+        /// 鍋氭垚涓�涓緭鍏ユ鎺т欢(姝e父鏂囨湰瀛椾綋棰滆壊),楂樺害涓烘爣鍑嗛珮搴�
+        /// </summary>
+        /// <param name="i_Width">瀹藉害</param>
+        /// <param name="real">鏄惁璁$畻鐪熷疄鍊�</param>
+        public TextInputControl(int i_Width, bool real = false)
+        {
+            this.InitSize(i_Width, real);
+        }
+
+        #endregion
+
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Enum/CommonEnum.cs b/HDL_ON/UI/UI0-Stan/Enum/CommonEnum.cs
new file mode 100755
index 0000000..ed47b7e
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Enum/CommonEnum.cs
@@ -0,0 +1,115 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 淇℃伅鏄剧ず鐨勭被鍨�
+    /// </summary>
+    public enum ShowMsgType
+    {
+        /// <summary>
+        /// 鏅�氭彁绀虹被鍨�
+        /// </summary>
+        Normal = 1,
+        /// <summary>
+        /// 纭绫诲瀷
+        /// </summary>
+        Confirm = 2,
+        /// <summary>
+        /// 閿欒绫诲瀷
+        /// </summary>
+        Error = 3,
+        /// <summary>
+        /// Tip绫诲瀷
+        /// </summary>
+        Tip = 4,
+        /// <summary>
+        /// 鎻愰啋绫诲瀷
+        /// </summary>
+        Remind = 5
+    }
+
+    /// <summary>
+    /// 鏄剧ず閿欒妯″紡
+    /// </summary>
+    public enum ShowErrorMode
+    {
+        /// <summary>
+        /// 涓嶆樉绀洪敊璇�
+        /// </summary>
+        NO = 0,
+        /// <summary>
+        /// 鏄剧ず閿欒
+        /// </summary>
+        YES = 1,
+    }
+
+    /// <summary>
+    /// 鐘舵�佹帶浠舵坊鍔犲瓙鎺т欢浜嬩欢鐨勭粦瀹氭ā寮�
+    /// </summary>
+    public enum ChidrenBindMode
+    {
+        /// <summary>
+        /// 缁戝畾寮硅捣浜嬩欢,浣嗚鎺т欢鍗曞嚮鍚庯紝涓嶆樉绀洪�夋嫨鐘舵��
+        /// </summary>
+        BindEvent = 1,
+        /// <summary>
+        /// 涓嶇粦瀹氫簨浠讹紝涔熶笉鏄剧ず閫夋嫨鐘舵��
+        /// </summary>
+        NotBind = 2
+    }
+
+    /// <summary>
+    /// 鐘舵�佹ā寮�
+    /// </summary>
+    public enum StatuMode
+    {
+        /// <summary>
+        /// 閫夋嫨鐘舵��
+        /// </summary>
+        Select = 1,
+        /// <summary>
+        /// 闈為�夋嫨鐘舵��
+        /// </summary>
+        UnSelect = 0,
+        /// <summary>
+        /// 姝e父鐘舵��(涔熸病浠�涔堢壒娈婂惈涔夛紝灏辨槸姝e父鍛�)
+        /// </summary>
+        Normal = 2,
+        /// <summary>
+        /// 鍗曞嚮鐘舵��
+        /// </summary>
+        ClickStatu = 3
+    }
+
+    /// <summary>
+    /// 鏄剧ず閲嶆柊鍔犺浇妯″紡
+    /// </summary>
+    public enum ShowReLoadMode
+    {
+        /// <summary>
+        /// 涓嶆樉绀洪噸鏂板姞杞�
+        /// </summary>
+        NO = 0,
+        /// <summary>
+        /// 鏄剧ず閲嶆柊鍔犺浇
+        /// </summary>
+        YES = 1,
+    }
+
+    /// <summary>
+    /// 鏂瑰悜鏋氫妇
+    /// </summary>
+    public enum DirectionEnum
+    {
+        Mid = 0,
+        Enable = 1,
+        Disable = 2,
+        Up = 3,
+        Down = 4,
+        Left = 5,
+        Right = 6
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Form/Base/CommonFormBase.cs b/HDL_ON/UI/UI0-Stan/Form/Base/CommonFormBase.cs
new file mode 100755
index 0000000..86e2b4e
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Form/Base/CommonFormBase.cs
@@ -0,0 +1,323 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鐣岄潰鏈�鍩哄眰鐨勫簳灞傚叡閫�
+    /// </summary>
+    public class CommonFormBase : FrameLayout
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鐢婚潰鐨処D(鑷姩缂栧彿,鍞竴涓婚敭,鍜屽悇椤甸潰骞舵棤浠讳綍閫昏緫鍏崇郴,浣嗘槸瀹冪殑鐢ㄥ澶х潃鍛�)
+        /// </summary>
+        public string FormID = string.Empty;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫晫闈㈡鏋�
+        /// </summary>
+        public virtual void InitForm()
+        {
+            //灏嗗綋鍓嶇殑鐢婚潰淇濆瓨鍒板唴瀛樺綋涓�
+            HdlFormLogic.Current.AddActionForm(this);
+        }
+
+        /// <summary>
+        /// 鎵цShowForm()鏂规硶
+        /// </summary>
+        /// <param name="parameter">鍚姩鍙傛暟</param>
+        public virtual void LoadShowFormMethod(params object[] parameter)
+        {
+            this.LoadFormMethodByName(this, "ShowForm", parameter);
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞鐣岄潰___________________________
+
+        /// <summary>
+        /// 娣诲姞鐢婚潰,鍚姩鍙傛暟鐢辨寚瀹氱敾闈㈢殑ShowForm鍑芥暟鎵�鎸囧畾
+        /// </summary>
+        /// <param name="parameter">鍚姩鍙傛暟锛氬弬鏁扮敱鎸囧畾鐢婚潰鐨凷howForm鍑芥暟鎵�鎸囧畾</param>
+        public virtual void AddForm(params object[] parameter)
+        {
+            return;
+        }
+
+        /// <summary>
+        /// 娣诲姞鎸囧畾鐢婚潰锛屽苟绉婚櫎褰撳墠鐢婚潰锛屽惎鍔ㄥ弬鏁扮敱鎸囧畾鐢婚潰鐨凷howForm鍑芥暟鎵�鎸囧畾
+        /// </summary>
+        /// <param name="form">鐩爣鐣岄潰</param>
+        /// <param name="parameter">鍚姩鍙傛暟锛氬弬鏁扮敱鎸囧畾鐢婚潰鐨凷howForm鍑芥暟鎵�鎸囧畾</param>
+        public void AddFormAndCloseNowForm(CommonFormBase form, params object[] parameter)
+        {
+            //绉婚櫎褰撳墠鐢婚潰
+            this.CloseForm();
+            //娣诲姞鐢婚潰
+            form.AddForm(parameter);
+        }
+
+        #endregion
+
+        #region 鈻� 鍏抽棴鐣岄潰___________________________
+
+        /// <summary>
+        /// 鐢婚潰鍏抽棴涔嬪墠(搴曞眰鍙樻洿,涓嶈兘閲嶈浇CloseForm鏂规硶浜�)
+        /// </summary>
+        public virtual void CloseFormBefore()
+        {
+        }
+
+        /// <summary>
+        /// 鐢婚潰鍏抽棴涔嬪悗(鏂板)
+        /// </summary>
+        public virtual void CloseFormAfter()
+        {
+        }
+
+        /// <summary>
+        /// 鐢婚潰鍏抽棴
+        /// </summary>
+        public void CloseForm()
+        {
+            try
+            {
+                //鍏抽棴杩涘害鏉�
+                this.CloseProgressBar();
+
+                //鐢婚潰鍏抽棴涔嬪墠
+                this.CloseFormBefore();
+
+                //璋冪敤鐨勬槸Base鐨勭Щ闄ゆ帶浠跺嚱鏁�
+                //鑰屼笉鏄皟鐢╰his鐨勭Щ闄ゆ帶浠跺嚱
+                base.RemoveFromParent();
+
+                //浠庡垪琛ㄤ腑绉婚櫎(闃叉鐢婚潰浜岄噸娣诲姞)
+                HdlFormLogic.Current.RemoveActionForm(this);
+
+                //鐢婚潰鍏抽棴涔嬪悗
+                this.CloseFormAfter();
+            }
+            catch (Exception ex)
+            {
+                //鍑虹幇鏈煡閿欒
+                HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+            }
+        }
+
+        /// <summary>
+        /// 鐢婚潰鍏抽棴(鍦ㄧ敾闈㈤噷闈紝璇蜂笉瑕佽皟鐢ㄦ鏂规硶锛岃浣跨敤CloseForm()鏂规硶)
+        /// </summary>
+        public override void RemoveFromParent()
+        {
+            //鐢婚潰鍙虫粦鏃讹紝鍏抽棴鐢婚潰锛岃皟鐢ㄨ嚜瀹氫箟鐨凜loseForm()鏂规硶
+            this.CloseForm();
+        }
+
+        #endregion
+
+        #region 鈻� 鍦嗗舰杩涘害鏉________________________
+
+        /// <summary>
+        /// 杩涘害鏉″惎鍔�
+        /// </summary>
+        /// <param name="text">鍒濆鏂囨湰</param>
+        public void ShowProgressBar(string text = "")
+        {
+            if (this.FormID != HdlFormLogic.Current.NowActionFormID)
+            {
+                return;
+            }
+            ProgressBar.Show(text);
+        }
+
+        /// <summary>
+        /// 璁剧疆杩涘害鏉$殑淇℃伅鍊�(浼氳嚜鍔ㄨ绠楃櫨鍒嗘瘮,鍊肩疮鍔犳ā寮�)
+        /// </summary>
+        /// <param name="value">鍊�</param>
+        public void SetProgressValue(decimal value)
+        {
+            ProgressBar.SetValue(value);
+        }
+
+        /// <summary>
+        /// 璁剧疆杩涘害鏉$殑淇℃伅鍊�
+        /// </summary>
+        /// <param name="value">鍊�</param>
+        public void SetProgressValue(string value)
+        {
+            ProgressBar.SetValue(value);
+        }
+
+        /// <summary>
+        /// 璁剧疆杩涘害鏉$殑淇℃伅鍊�
+        /// </summary>
+        /// <param name="value">鍊�</param>
+        public void SetProgressMax(decimal value)
+        {
+            if (value == 0)
+            {
+                value = 100;
+            }
+            ProgressBar.SetMaxValue(value);
+        }
+
+        /// <summary>
+        /// 鍏抽棴杩涘害鏉�
+        /// </summary>
+        /// <param name="mode">鏄惁鏄剧ず閲嶆柊鍔犺浇鐨勭晫闈�</param>
+        public void CloseProgressBar(ShowReLoadMode mode = ShowReLoadMode.NO)
+        {
+            ProgressBar.Close();
+            if (mode == ShowReLoadMode.YES)
+            {
+                //鏄剧ず閲嶆柊鍔犺浇鐨勭晫闈�(涓昏鏄敤鍦ㄧ晫闈㈠姞杞介敊璇椂锛屽啀娆″姞杞�)
+                this.ShowReLoadView();
+            }
+        }
+
+        /// <summary>
+        /// 鏄剧ず閲嶆柊鍔犺浇鐨勭晫闈�(涓昏鏄敤鍦ㄧ晫闈㈠姞杞介敊璇椂锛屽啀娆″姞杞�)
+        /// </summary>
+        public virtual void ShowReLoadView()
+        {
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸殑鏂规硶_________________________
+
+        /// <summary>
+        /// 鏄剧ず淇℃伅妗�
+        /// </summary>
+        /// <param name="msgType">淇℃伅绫诲瀷</param>
+        /// <param name="msg">淇℃伅</param>
+        /// <param name="action">鍗曞嚮纭鍚庢墽琛岀殑鍥炶皟鍑芥暟</param>
+        /// <param name="buttonText">鎸夐挳鐨勬枃鏈�</param>
+        /// <param name="i_waitTime">绛夊緟鏃堕棿,鍗曚綅涓虹,璁剧疆纭鎸夐挳鍦ㄥ闀挎椂闂村悗鎵嶈兘澶熺偣鍑�</param>
+        public void ShowMassage(ShowMsgType msgType, string msg, Action action = null, string buttonText = null, int i_waitTime = -1)
+        {
+            HdlMessageLogic.Current.ShowMassage(msgType, msg, action, buttonText, i_waitTime);
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇褰撳墠姝e湪娲诲姩鐨勭晫闈㈡槸鍚︽槸褰撳墠杩欎釜鐣岄潰
+        /// </summary>
+        /// <returns></returns>
+        public bool NowFormIsAction()
+        {
+            return HdlFormLogic.Current.NowActionFormID == this.FormID;
+        }
+
+        /// <summary>
+        /// 璁$畻鍥剧墖鐨勭湡瀹為珮瀹藉害
+        /// </summary>
+        /// <param name="i_size"></param>
+        /// <returns></returns>
+        public int GetPictrueRealSize(int i_size)
+        {
+            return Application.GetRealWidth(i_size);
+        }
+
+        #endregion
+
+        #region 鈻� 鍙嶅皠鏂规硶___________________________
+
+
+        /// <summary>
+        /// 鎵ц鎸囧畾鐢婚潰鐨勬柟娉�
+        /// </summary>
+        /// <param name="formName">鎸囧畾鐢婚潰鐨勮嫳鏂囧悕</param>
+        /// <param name="method">鎸囧畾瑕佸姞杞界殑鏂规硶鍚�</param>
+        /// <param name="parameter">鍚姩鍙傛暟</param>
+        public object LoadFormMethodByName(string formName, string method, params object[] parameter)
+        {
+            var form = HdlFormLogic.Current.GetFormByName(formName);
+            if (form == null)
+            {
+                return null;
+            }
+            return this.LoadFormMethodByName(form, method, parameter);
+        }
+
+        /// <summary>
+        /// 鎵ц鎸囧畾鐢婚潰鐨勬柟娉�(娉ㄦ剰锛氳繖涓槸涓撻棬璋冪敤寮傛锛屽苟涓旂瓑寰呭紓姝ュ畬鎴愮殑楂樼鎶�鍑芥暟,涓嶈皟鐢ㄥ紓姝ョ殑鎯呭喌锛屽埆浣跨敤姝ゅ嚱鏁�)
+        /// </summary>
+        /// <param name="formName">鎸囧畾鐢婚潰鐨勮嫳鏂囧悕</param>
+        /// <param name="method">鎸囧畾瑕佸姞杞界殑鏂规硶鍚�</param>
+        /// <param name="parameter">鍚姩鍙傛暟</param>
+        public async Task<object> LoadFormMethodByNameAsync(string formName, string method, params object[] parameter)
+        {
+            var form = HdlFormLogic.Current.GetFormByName(formName);
+            if (form == null)
+            {
+                return null;
+            }
+            var task = this.LoadFormMethodByName(form, method, parameter) as Task;
+            await task;
+
+            var result = task.GetType().GetProperty("Result").GetValue(task, null);
+            return result;
+        }
+
+        /// <summary>
+        /// 鎵ц鎸囧畾鐢婚潰鐨勬柟娉�
+        /// </summary>
+        /// <param name="form">鎸囧畾鐢婚潰鐨勮嫳鏂囧悕</param>
+        /// <param name="method">鎸囧畾瑕佸姞杞界殑鏂规硶鍚�</param>
+        /// <param name="parameter">鍚姩鍙傛暟</param>
+        public object LoadFormMethodByName(CommonFormBase form, string method, params object[] parameter)
+        {
+            try
+            {
+                if (form == null)
+                {
+                    return null;
+                }
+                var myMethod = form.GetType().GetMethod(method);
+                return myMethod.Invoke(form, parameter);
+            }
+            catch (Exception ex)
+            {
+                //鍑虹幇鏈煡閿欒,鏁版嵁涓㈠け
+                HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+                return null;
+            }
+        }
+
+        /// <summary>
+        /// 浣跨敤鍙嶅皠鏂规硶锛屾墦寮�鎸囧畾鐨勭敾闈�(鍙敮鎸佺户鎵夸簬UserCenterCommonForm鐨勭敾闈�)
+        /// </summary>
+        /// <param name="fullName">鐢婚潰鐨勫懡鍚嶇┖闂�+鐢婚潰鐨勮嫳鏂囧悕</param>
+        /// <param name="parameter">鍚姩鍙傛暟</param>
+        public void LoadFormByFullName(string fullName, params object[] parameter)
+        {
+            System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
+            var form = (CommonFormBase)assembly.CreateInstance(fullName);
+            form.AddForm(parameter);
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佹洿鏂版帹閫乢__________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佹洿鏂版帹閫�
+        /// </summary>
+        /// <param name="i_LocalDevice">鏈湴璁惧瀵硅薄</param>
+        public virtual void DeviceStatuPush(Entity.Function i_LocalDevice)
+        {
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Form/Base/EditorCommonForm.cs b/HDL_ON/UI/UI0-Stan/Form/Base/EditorCommonForm.cs
new file mode 100755
index 0000000..0f0e916
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Form/Base/EditorCommonForm.cs
@@ -0,0 +1,320 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 涓汉涓績鐨勫叡閫氬熀灞傜敾闈紝缁ф壙浜庢鍏遍�氱殑鐢婚潰锛岃浣跨敤AddForm()鍑芥暟瀹炵幇娣诲姞鐢婚潰
+    /// 鐒跺悗鍦ㄥ悇鑷殑鐢婚潰涓紝瀹炵幇涓�涓猄howForm()鐨勫嚱鏁�(鍙傛暟鐢辨坊鍔犵敾闈㈡椂锛屼娇鐢ㄧ殑鍑芥暟鐨勫弬鏁版寚瀹�)
+    /// </summary>
+    public class EditorCommonForm : CommonFormBase
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 杩斿洖鎸夐敭鐨勭偣鍑讳簨浠�(濡傛灉瀹炵幇姝や簨浠�,鍒欏簳灞傜殑浜嬩欢灏嗕笉浼氬啀瑙﹀彂)
+        /// </summary>
+        public Action BackButtonClickEvent = null;
+        /// <summary>
+        /// TopMenuFrameLayout
+        /// </summary>
+        public NormalFrameLayout topMenuFrameLayout = null;
+        /// <summary>
+        /// TopFrameLayout
+        /// </summary>
+        public NormalFrameLayout topFrameLayout = null;
+        /// <summary>
+        /// bodyFrameLayout
+        /// </summary>
+        public NormalFrameLayout bodyFrameLayout = null;
+        /// <summary>
+        /// 缂撳瓨鍚姩鍙傛暟
+        /// </summary>
+        private object[] m_parameter = null;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫晫闈㈡鏋�
+        /// </summary>
+        public override void InitForm()
+        {
+            base.InitForm();
+
+            //鍒濆鍖栧ご閮ㄦ帶浠�
+            this.InitTopFrameLayout();
+
+            //鍒濆鍖栦腑閮ㄦ帶浠�
+            this.InitBodyFrameLayout();
+        }
+
+        /// <summary>
+        /// 鎵цShowForm()鏂规硶
+        /// </summary>
+        /// <param name="parameter">鍚姩鍙傛暟</param>
+        public override void LoadShowFormMethod(params object[] parameter)
+        {
+            this.m_parameter = parameter;
+            base.LoadShowFormMethod(parameter);
+        }
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖栫晫闈________________________
+
+        #region 鈻� Top________________________________
+
+        /// <summary>
+        /// 鍒濆鍖栧ご閮ㄦ帶浠�
+        /// </summary>
+        public void InitTopFrameLayout()
+        {
+            if (topFrameLayout != null)
+            {
+                return;
+            }
+
+            //TopMenuFrameLayout鍋氭垚
+            topMenuFrameLayout = new NormalFrameLayout();
+            topMenuFrameLayout.Height = HdlControlResourse.TopMenuFrameHeight;
+            topMenuFrameLayout.BackgroundColor = UI.CSS.CSS_Color.TopViewColor;
+            topMenuFrameLayout.Name = "topMenuFrameLayout";
+            this.AddChidren(topMenuFrameLayout);
+
+            //TopFrameLayout鍋氭垚
+            topFrameLayout = new NormalFrameLayout();
+            topFrameLayout.Height = HdlControlResourse.TopFrameHeight;
+            topFrameLayout.BackgroundColor = UI.CSS.CSS_Color.TopViewColor;
+            topFrameLayout.Y = topMenuFrameLayout.Bottom;
+            topFrameLayout.Name = "topFrameLayout";
+            this.AddChidren(topFrameLayout);
+
+            //杩斿洖閿�
+            var btnBack = new PicViewControl(40, 28);
+            btnBack.X = Application.GetRealWidth(10);
+            btnBack.Y = Application.GetRealHeight(9);
+            btnBack.UnSelectedImagePath = "Public/BackIcon.png";
+            topFrameLayout.AddChidren(btnBack);
+            topFrameLayout.AddTag("btnBack", btnBack);
+            //涓�涓姞澶ц繑鍥炴寜閿偣鍑诲尯鍩熺殑涓滆タ
+            var frameBtnBack = new NormalFrameLayout();
+            frameBtnBack.Width = Application.GetRealWidth(100);
+            topFrameLayout.AddChidren(frameBtnBack);
+            topFrameLayout.AddTag("frameBtnBack", frameBtnBack);
+            frameBtnBack.ButtonClickEvent += (sender, e) =>
+            {
+                if (this.BackButtonClickEvent != null)
+                {
+                    //濡傛灉瀹炵幇姝や簨浠�,鍒欏簳灞傜殑浜嬩欢灏嗕笉浼氬啀瑙﹀彂
+                    this.BackButtonClickEvent();
+                    return;
+                }
+                //鐢婚潰鍏抽棴
+                this.CloseForm();
+            };
+
+            //鏍囬
+            var btnTilte = new NormalViewControl(270, 25, true);
+            btnTilte.Gravity = Gravity.CenterHorizontal;
+            btnTilte.Y = Application.GetRealHeight(10);
+            btnTilte.TextAlignment = TextAlignment.Center;
+            btnTilte.TextSize = UI.CSS.CSS_FontSize.HeadlineFontSize;
+            btnTilte.TextColor = UI.CSS.CSS_Color.FirstLevelTitleColor;
+            topFrameLayout.AddChidren(btnTilte);
+            topFrameLayout.AddTag("txtTitle", btnTilte);
+        }
+
+        #endregion
+
+        #region 鈻� Middle_____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄦ帶浠�
+        /// </summary>
+        public void InitBodyFrameLayout()
+        {
+            if (bodyFrameLayout != null)
+            {
+                return;
+            }
+            bodyFrameLayout = new NormalFrameLayout();
+            bodyFrameLayout.Height = HdlControlResourse.BodyFrameHeight;
+            bodyFrameLayout.Y = topFrameLayout.Bottom;
+            bodyFrameLayout.BackgroundColor = UI.CSS.CSS_Color.BackgroundColor;
+            bodyFrameLayout.Name = "bodyFrameLayout";
+            this.AddChidren(bodyFrameLayout);
+        }
+
+        #endregion
+
+        #endregion
+
+        #region 鈻� 娣诲姞鐣岄潰___________________________
+
+        /// <summary>
+        /// 娣诲姞鐢婚潰,鍚姩鍙傛暟鐢辨寚瀹氱敾闈㈢殑ShowForm鍑芥暟鎵�鎸囧畾
+        /// </summary>
+        /// <param name="parameter">鍚姩鍙傛暟锛氬弬鏁扮敱鎸囧畾鐢婚潰鐨凷howForm鍑芥暟鎵�鎸囧畾</param>
+        public override void AddForm(params object[] parameter)
+        {
+            base.AddForm(parameter);
+
+            MainPage.BasePageView.AddChidren(this);
+            MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+
+            //鍒濆鍖栫晫闈㈡鏋�
+            this.InitForm();
+
+            //鎵цShowForm()鏂规硶
+            this.LoadShowFormMethod(parameter);
+        }
+
+        #endregion
+
+        #region 鈻� 鍏抽棴鐣岄潰___________________________
+
+        /// <summary>
+        /// 鐢婚潰鍏抽棴
+        /// </summary>
+        public override void CloseFormBefore()
+        {
+            base.CloseFormBefore();
+
+            this.BackButtonClickEvent = null;
+
+            this.m_parameter = null;
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+        }
+
+        #endregion
+
+        #region 鈻� 鏄剧ず閲嶆柊鍔犺浇_______________________
+
+        /// <summary>
+        /// 鏄剧ず閲嶆柊鍔犺浇鐨勭晫闈�(涓昏鏄敤鍦ㄧ晫闈㈠姞杞介敊璇椂锛屽啀娆″姞杞�)
+        /// </summary>
+        public override void ShowReLoadView()
+        {
+            HdlThreadLogic.Current.RunMain(() =>
+            {
+                if (bodyFrameLayout == null || bodyFrameLayout.Parent == null)
+                {
+                    return;
+                }
+                bodyFrameLayout.RemoveAll();
+                //鍒囨崲涓洪噸鏂板姞杞芥ā寮忔椂鐨勪簨浠�
+                this.ReLoadModelEventMethod();
+
+                var frame = new NormalFrameLayout();
+                bodyFrameLayout.AddChidren(frame);
+
+                //閲嶆柊鍔犺浇
+                var btnReLoad = new BottomClickButton();
+                btnReLoad.Gravity = Gravity.Center;
+                btnReLoad.TextID = StringId.DoReloadAgain;
+                frame.AddChidren(btnReLoad);
+                btnReLoad.ButtonClickEvent += (sender, e) =>
+                {
+                    //娓呴櫎鍏ㄩ儴鎺т欢
+                    this.ClearBodyFrame();
+
+                    //鎵цShowForm()鏂规硶瀹炵幇閲嶆柊鍔犺浇
+                    this.LoadShowFormMethod(this.m_parameter);
+                };
+
+                //娓呴櫎topFrameLayout鐨勯潪榛樿鐨勬帶浠�
+                var list = new List<View>();
+                for (int i = 0; i < topFrameLayout.ChildrenCount; i++)
+                {
+                    var view = topFrameLayout.GetChildren(i);
+                    if (view.Name == "btnBack" || view.Name == "txtTitle")
+                    {
+                        //杩欓噷鏄粯璁ょ殑搴曞眰鎺т欢
+                        continue;
+                    }
+                    list.Add(view);
+                }
+                foreach (var view in list)
+                {
+                    view?.RemoveFromParent();
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鍒囨崲涓恒�愰噸鏂板姞杞芥ā寮忋�戞椂鐨勪簨浠跺嚱鏁�,鏃ㄥ湪鍏抽棴鎵�鏈夌嚎绋嬩俊鎭�
+        /// </summary>
+        public virtual void ReLoadModelEventMethod()
+        {
+        }
+
+        #endregion
+
+        #region 鈻� 鐣岄潰閲嶆柊婵�娲讳簨浠禵__________________
+
+        /// <summary>
+        /// <para>鑷韩鐨勪笂灞傜晫闈㈠叧闂悗,瀹冭嚜韬浜庢渶涓婂眰鏃�,瑙﹀彂鐨勪簨浠�</para>
+        /// <para>閲嶅啓鐨勬椂鍊欒繑鍥炲�艰杩斿洖1(杩斿洖鍊兼槸缁欏簳灞備娇鐢ㄧ殑)</para>
+        /// </summary>
+        public virtual int FormActionAgainEvent()
+        {
+            return -1;
+        }
+
+        #endregion
+
+        #region 鈻� 娓呯┖BodyFrame______________________
+
+        /// <summary>
+        /// 娓呯┖BodyFrame
+        /// </summary>
+        public void ClearBodyFrame()
+        {
+            if (this.Parent == null)
+            {
+                return;
+            }
+            if (bodyFrameLayout == null || bodyFrameLayout.Parent == null)
+            {
+                return;
+            }
+            bodyFrameLayout.RemoveAll();
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸殑鏂规硶_________________________
+
+        /// <summary>
+        /// 璁剧疆鏍囬淇℃伅
+        /// </summary>
+        /// <param name="title">Title.</param>
+        public void SetTitleText(string title)
+        {
+            //璁剧疆澶撮儴淇℃伅
+            var btntitle = (Button)topFrameLayout.GetTagByKey("txtTitle");
+            btntitle.Text = title;
+        }
+
+        /// <summary>
+        /// 绉婚櫎杩斿洖閿�
+        /// </summary>
+        public void RemoveBackButton()
+        {
+            //绉婚櫎杩斿洖閿�
+            var back = (NormalViewControl)topFrameLayout.GetTagByKey("btnBack");
+            topFrameLayout.RemoveTag("btnBack");
+            back?.RemoveFromParent();
+
+            var back2 = (NormalFrameLayout)topFrameLayout.GetTagByKey("frameBtnBack");
+            topFrameLayout.RemoveTag("frameBtnBack");
+            back2?.RemoveFromParent();
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Form/DeviceFunctionCardCommonForm.cs b/HDL_ON/UI/UI0-Stan/Form/DeviceFunctionCardCommonForm.cs
new file mode 100755
index 0000000..a09506a
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Form/DeviceFunctionCardCommonForm.cs
@@ -0,0 +1,296 @@
+锘縰sing HDL_ON.Entity;
+using HDL_ON.UI.CSS;
+using Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 璁惧鍔熻兘鍗$墖鐨勫簳灞傜晫闈�
+    /// </summary>
+    public class DeviceFunctionCardCommonForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 褰撳墠鍥炶矾瀵硅薄
+        /// </summary>
+        public Function device = null;
+        /// <summary>
+        /// 鍙充笂瑙掗厤缃粨鏉熺殑浜嬩欢
+        /// </summary>
+        public Action SettionFinishEvent = null;
+        /// <summary>
+        /// 宸﹀彸鏁翠釜缈婚〉鐨勬帶浠�
+        /// </summary>
+        private PageLayout pageLayout = null;
+        /// <summary>
+        /// 璁惧鍚嶅瓧鎺т欢(鍒锋柊鐢ㄥ埌)
+        /// </summary>
+        public NormalViewControl btnDeviceName = null;
+        /// <summary>
+        /// 鎴块棿鍚嶅瓧鎺т欢(鍒锋柊鐢ㄥ埌)
+        /// </summary>
+        public NormalViewControl btnRoomName = null;
+        /// <summary>
+        /// 搴曢儴蹇嵎鎸夐挳1
+        /// </summary>
+        private NormalViewControl btnBottomOne = null;
+        /// <summary>
+        /// 搴曢儴蹇嵎鎸夐挳2
+        /// </summary>
+        private NormalViewControl btnBottomTwo = null;
+        /// <summary>
+        /// 绗竴绱㈠紩鐨勭櫧鑹插尯鍩熺殑妗屽竷鎺т欢
+        /// </summary>
+        public NormalFrameLayout FrameWhiteCentet1 = null;
+        /// <summary>
+        /// 绗簩绱㈠紩鐨勭櫧鑹插尯鍩熺殑妗屽竷鎺т欢(璇峰厛璋冪敤AddSecondPage鍑芥暟瀹屾垚娣诲姞)
+        /// </summary>
+        public NormalFrameLayout FrameWhiteCentet2 = null;
+
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        /// <param name="i_device">璁惧瀵硅薄</param>
+        /// <param name="btnHigherCollection">涓婁竴绾х晫闈㈢殑鏀惰棌鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        /// <param name="btnHigherDeviceName">涓婁竴绾х晫闈㈢殑璁惧鍚嶅瓧鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        /// <param name="btnHigherRoom">涓婁竴绾х晫闈㈢殑鎴块棿鍚嶅瓧鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        public void ShowForm(Function i_device, Button btnHigherCollection, Button btnHigherDeviceName, Button btnHigherRoom)
+        {
+            this.device = i_device;
+
+            //娣诲姞澶撮儴銆愯缃�戝浘鏍�
+            this.AddTopSettingIcon(btnHigherDeviceName, btnHigherRoom);
+
+            //鍒濆鍖栦腑閮ㄤ俊鎭�
+            this.InitMiddleFrame(btnHigherCollection);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+        /// </summary>
+        /// <param name="btnHigherCollection">涓婁竴绾х晫闈㈢殑鏀惰棌鎺т欢</param>
+        private void InitMiddleFrame(Button btnHigherCollection)
+        {
+            //娓呯┖bodyFrame
+            this.ClearBodyFrame();
+
+            //宸﹀彸鏁翠釜缈婚〉鐨勬帶浠�
+            this.pageLayout = new PageLayout();
+            pageLayout.IsShowPoint = false;
+            pageLayout.ScrollEnabled = false;
+            bodyFrameLayout.AddChidren(pageLayout);
+            pageLayout.PageChange += (sender, index) =>
+            {
+                //璁剧疆搴曢儴涓や釜鎸夐挳鐨勭姸鎬�
+                this.SetBottomTwoButtonStatu();
+            };
+
+            //鍒濆鍖栫涓�涓储寮曠殑妗屽竷
+            this.InitFrameWhiteContent1(btnHigherCollection);
+            //鍒濆鍖栫櫧鑹插唴瀹�(闇�瑕佽嚜涓诲疄鐜�)
+            this.InitFrameWhiteContent();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曠殑妗屽竷
+        /// </summary>
+        /// <param name="btnHigherCollection">涓婁竴绾х晫闈㈢殑鏀惰棌鎺т欢</param>
+        private void InitFrameWhiteContent1(Button btnHigherCollection)
+        {
+            //绗竴涓储寮曟甯冩槸蹇呭畾瀛樺湪鐨�
+            var frameTable1 = new FrameLayout();
+            frameTable1.Width = pageLayout.Width;
+            frameTable1.Height = pageLayout.Height;
+            pageLayout.AddChidren(frameTable1);
+            //绗竴涓储寮曠殑鐧借壊妗屽竷
+            this.FrameWhiteCentet1 = new NormalFrameLayout();
+            FrameWhiteCentet1.Gravity = Gravity.CenterHorizontal;
+            FrameWhiteCentet1.Y = Application.GetRealHeight(22);
+            FrameWhiteCentet1.Width = Application.GetRealWidth(327);
+            FrameWhiteCentet1.Height = Application.GetRealHeight(526);
+            FrameWhiteCentet1.BackgroundImagePath = "Public/Fragmentbg.png";
+            frameTable1.AddChidren(FrameWhiteCentet1);
+            //璁惧鍚嶅瓧
+            this.btnDeviceName = new NormalViewControl(270, 37, true);
+            btnDeviceName.X = Application.GetRealWidth(16);
+            btnDeviceName.Y = Application.GetRealHeight(18);
+            btnDeviceName.TextColor = CSS_Color.FirstLevelTitleColor;
+            btnDeviceName.TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel;
+            btnDeviceName.Text = device.name;
+            btnDeviceName.Width = btnDeviceName.GetRealWidthByText();
+            FrameWhiteCentet1.AddChidren(btnDeviceName);
+            //鎴块棿鍚嶅瓧
+            this.btnRoomName = new NormalViewControl(270, 21, true);
+            btnRoomName.X = Application.GetRealWidth(16);
+            btnRoomName.Y = btnDeviceName.Bottom;
+            btnRoomName.TextColor = CSS_Color.PromptingColor1;
+            btnRoomName.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnRoomName.Text = device.GetRoomListName();
+            btnRoomName.Width = btnRoomName.GetRealWidthByText();
+            FrameWhiteCentet1.AddChidren(btnRoomName);
+            //鎴愬憳娌℃湁鏀惰棌鍔熻兘
+            if (DB_ResidenceData.Instance.CurrentRegion.IsOthreShare == false)
+            {
+                var btnCollection = new IconViewControl(40);
+                btnCollection.X = Application.GetRealWidth(273);
+                btnCollection.Y = Application.GetRealHeight(16);
+                btnCollection.SelectedImagePath = "Collection/CollectionIcon.png";
+                btnCollection.UnSelectedImagePath = "Collection/CollectionGrayIcon.png";
+                btnCollection.IsSelected = device.collect;
+                FrameWhiteCentet1.AddChidren(btnCollection);
+                btnCollection.ButtonClickEvent += (sender, e) =>
+                {
+                    btnCollection.IsSelected = !btnCollection.IsSelected;
+                    device.collect = btnCollection.IsSelected;
+                    btnHigherCollection.IsSelected = device.collect;
+
+                    device.CollectFunction();
+                };
+            }
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫浜屼釜绱㈠紩鐨勬甯�
+        /// </summary>
+        private void InitFrameWhiteContent2()
+        {
+            this.pageLayout.ScrollEnabled = true;
+            //绗竴涓储寮曟甯冩槸蹇呭畾瀛樺湪鐨�
+            var frameTable2 = new FrameLayout();
+            frameTable2.Width = pageLayout.Width;
+            frameTable2.Height = pageLayout.Height;
+            pageLayout.AddChidren(frameTable2);
+            //绗竴涓储寮曠殑鐧借壊妗屽竷
+            this.FrameWhiteCentet2 = new NormalFrameLayout();
+            FrameWhiteCentet2.Gravity = Gravity.CenterHorizontal;
+            FrameWhiteCentet2.Y = Application.GetRealHeight(22);
+            FrameWhiteCentet2.Width = Application.GetRealWidth(327);
+            FrameWhiteCentet2.Height = Application.GetRealHeight(526);
+            FrameWhiteCentet2.BackgroundImagePath = "Public/Fragmentbg.png";
+            frameTable2.AddChidren(FrameWhiteCentet2);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插唴瀹�(闇�瑕佽嚜涓诲疄鐜�)
+        /// </summary>
+        public virtual void InitFrameWhiteContent()
+        {
+        }
+
+        #endregion
+
+        #region 鈻� 娣诲姞绗簩绱㈠紩椤礯____________________
+
+        /// <summary>
+        /// 娣诲姞绗簩绱㈠紩椤�
+        /// </summary>
+        public void AddSecondPage()
+        {
+            //鍒濆鍖栫浜屼釜绱㈠紩鐨勬甯�
+            this.InitFrameWhiteContent2();
+
+            //搴曢儴娣诲姞涓や釜鎸夐挳
+            this.btnBottomOne = new NormalViewControl(14, 6, true);
+            btnBottomOne.X = Application.GetRealWidth(170);
+            btnBottomOne.Y = FrameWhiteCentet1.Bottom + Application.GetRealHeight(30);
+            btnBottomOne.BackgroundColor = CSS_Color.MainColor;
+            btnBottomOne.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottomOne);
+            btnBottomOne.ButtonClickEvent += (sender, e) =>
+            {
+                this.pageLayout.PageIndex = 0;
+                //璁剧疆搴曢儴涓や釜鎸夐挳鐨勭姸鎬�
+                this.SetBottomTwoButtonStatu();
+            };
+            this.btnBottomTwo = new NormalViewControl(14, 6, true);
+            btnBottomTwo.X = btnBottomOne.Right + Application.GetRealWidth(8);
+            btnBottomTwo.Y = btnBottomOne.Y;
+            btnBottomTwo.BackgroundColor = 0xffadc7f7;
+            btnBottomTwo.Radius = (uint)Application.GetRealHeight(6) / 2;
+            bodyFrameLayout.AddChidren(btnBottomTwo);
+            btnBottomTwo.ButtonClickEvent += (sender, e) =>
+            {
+                this.pageLayout.PageIndex = 1;
+                //璁剧疆搴曢儴涓や釜鎸夐挳鐨勭姸鎬�
+                this.SetBottomTwoButtonStatu();
+            };
+        }
+
+        /// <summary>
+        /// 璁剧疆搴曢儴涓や釜鎸夐挳鐨勭姸鎬�
+        /// </summary>
+        private void SetBottomTwoButtonStatu()
+        {
+            if (this.btnBottomTwo == null) { return; }
+
+            if (this.pageLayout.PageIndex == 1)
+            {
+                this.btnBottomOne.BackgroundColor = 0xffadc7f7;
+                this.btnBottomTwo.BackgroundColor = CSS_Color.MainColor;
+            }
+            else
+            {
+                this.btnBottomOne.BackgroundColor = CSS_Color.MainColor;
+                this.btnBottomTwo.BackgroundColor = 0xffadc7f7;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 娣诲姞澶撮儴銆愯缃�戠殑鍥炬爣
+        /// </summary>
+        /// <param name="btnHigherCollection">涓婁竴绾х晫闈㈢殑鏀惰棌鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        /// <param name="btnHigherDeviceName">涓婁竴绾х晫闈㈢殑璁惧鍚嶅瓧鎺т欢(鍘熸潵on鐨勬鏋跺お鍧�)</param>
+        private void AddTopSettingIcon(Button btnHigherDeviceName, Button btnHigherRoom)
+        {
+            //濡傛灉鏄垚鍛樻病鏈夊姛鑳�
+            if (DB_ResidenceData.Instance.CurrentRegion.IsOthreShare == true)
+            {
+                return;
+            }
+            //璁剧疆鍥炬爣
+            var btnSetting = new PicViewControl(28, 28);
+            btnSetting.X = Application.GetRealWidth(337);
+            btnSetting.Y = Application.GetRealHeight(9);
+            btnSetting.UnSelectedImagePath = "Public/FuncInfoSetIcon.png";
+            topFrameLayout.AddChidren(btnSetting);
+
+            btnSetting.ButtonClickEvent += (sender, e) =>
+            {
+                var infoView = new UI.FunctionBaseInfoSetPage(this.device, () =>
+                {
+                    //鍒锋柊鏄剧ず
+                    btnHigherDeviceName.Text = this.device.name;
+                    btnHigherRoom.Text = this.device.GetRoomListName();
+
+                    //浠庢柊璁$畻瀹藉害
+                    this.btnDeviceName.Text = btnHigherDeviceName.Text;
+                    this.btnDeviceName.Width = this.btnDeviceName.GetRealWidthByText();
+
+                    this.btnRoomName.Text = btnHigherRoom.Text;
+                    this.btnRoomName.Width = this.btnRoomName.GetRealWidthByText();
+
+                    //鍥炶皟浜嬩欢
+                    this.SettionFinishEvent?.Invoke();
+                });
+                MainPage.BasePageView.AddChidren(infoView);
+                infoView.LoadPage();
+                MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1;
+            };
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Form/HideOptionDirectoryListForm.cs b/HDL_ON/UI/UI0-Stan/Form/HideOptionDirectoryListForm.cs
new file mode 100755
index 0000000..6c22b1f
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Form/HideOptionDirectoryListForm.cs
@@ -0,0 +1,85 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鏈湴缂撳瓨鏂囦欢澶瑰垪琛ㄧ殑鐣岄潰
+    /// </summary>
+    public class HideOptionDirectoryListForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        public void ShowForm()
+        {
+            //璁剧疆澶撮儴淇℃伅
+            base.SetTitleText("鏂囦欢澶瑰垪琛�");
+
+            //鍒濆鍖栦腑閮ㄤ俊鎭�
+            this.InitMiddleFrame();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+        /// </summary>
+        private void InitMiddleFrame()
+        {
+            var listView = new VerticalListControl(8);
+            listView.BackgroundColor = 0xffffffff;
+            listView.Height = bodyFrameLayout.Height;
+            bodyFrameLayout.AddChidren(listView);
+
+            //鏌ョ湅鍏ㄩ儴鏂囦欢
+            var row2 = new FrameRowControl(listView.rowSpace / 2);
+            listView.AddChidren(row2);
+            row2.AddLeftCaption("鏌ョ湅鍏ㄩ儴鏂囦欢", 278);
+            row2.AddRightArrow();
+
+            row2.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new HideOptionSearchAllFile();
+                form.AddForm(Shared.IO.FileUtils.RootPath);
+            };
+
+            listView.AdjustRealHeight(Application.GetRealHeight(8));
+        }
+
+        private void AddRowControl(VerticalListControl listView, string directory, string directoryValue, bool addLine)
+        {
+            if (System.IO.Directory.Exists(directoryValue) == false)
+            {
+                return;
+            }
+            var row1 = new FrameRowControl(listView.rowSpace / 2);
+            listView.AddChidren(row1);
+            row1.AddLeftCaption(directory, 278);
+            row1.AddRightArrow();
+            if (addLine == true)
+            {
+                row1.AddBottomLine();
+            }
+
+            row1.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new HideOptionSearchAllFile();
+                form.AddForm(directoryValue);
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Form/HideOptionFileContentForm.cs b/HDL_ON/UI/UI0-Stan/Form/HideOptionFileContentForm.cs
new file mode 100755
index 0000000..24a238b
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Form/HideOptionFileContentForm.cs
@@ -0,0 +1,91 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鏂囦欢鍐呭
+    /// </summary>
+    public class HideOptionFileContentForm : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        public void ShowForm(string i_file)
+        {
+            //璁剧疆澶撮儴淇℃伅
+            base.SetTitleText("鏂囦欢鍐呭");
+
+            //鍒濆鍖栦腑閮ㄤ俊鎭�
+            this.InitMiddleFrame(i_file);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+        /// </summary>
+        private void InitMiddleFrame(string i_file)
+        {
+            if (i_file == string.Empty) { return; }
+
+            this.ClearBodyFrame();
+
+            if (i_file.EndsWith(".png") == true || i_file.EndsWith(".jpg") == true || i_file.EndsWith(".JPG") == true)
+            {
+                var btnPic = new ImageView();
+                btnPic.Y = Application.GetRealHeight(21);
+                btnPic.Width = this.GetPictrueRealSize(308);
+                btnPic.Height = this.GetPictrueRealSize(154);
+                btnPic.Gravity = Gravity.CenterHorizontal;
+                btnPic.Radius= (uint)Application.GetRealHeight(6);
+                btnPic.ImageBytes = Shared.IO.FileUtils.ReadFile(i_file);
+                bodyFrameLayout.AddChidren(btnPic);
+            }
+            else
+            {
+                string textValue = System.Text.Encoding.UTF8.GetString(Shared.IO.FileUtils.ReadFile(i_file)).Trim();
+                this.SetTextContent(textValue);
+            }
+        }
+
+        /// <summary>
+        /// 鑷畾涔夎缃樉绀虹殑鏂囨湰
+        /// </summary>
+        /// <param name="i_text"></param>
+        public void SetTextContent(string textValue)
+        {
+            if (textValue.StartsWith("{") == true)
+            {
+                textValue = "{\r\n" + textValue.Substring(1);
+            }
+            if (textValue.EndsWith("}") == true)
+            {
+                textValue = textValue.Substring(0, textValue.Length - 1) + "\r\n}";
+            }
+
+            var btnText = new EditTextView();
+            btnText.Width = bodyFrameLayout.Width;
+            btnText.Height = bodyFrameLayout.Height;
+            btnText.TextAlignment = TextAlignment.TopLeft;
+            btnText.TextColor = UI.CSS.CSS_Color.MainColor;
+            btnText.Text = textValue;
+#if __Android__
+            btnText.Foucs = false;
+#endif
+            bodyFrameLayout.AddChidren(btnText);
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Form/HideOptionSearchAllFile.cs b/HDL_ON/UI/UI0-Stan/Form/HideOptionSearchAllFile.cs
new file mode 100755
index 0000000..32fe362
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Form/HideOptionSearchAllFile.cs
@@ -0,0 +1,181 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鏌ョ湅鍏ㄩ儴鏂囦欢
+    /// </summary>
+    public class HideOptionSearchAllFile : EditorCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        private string nowDirectory = string.Empty;
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鐢婚潰鏄剧ず(搴曞眰浼氬浐瀹氳皟鐢ㄦ鏂规硶锛屽�熶互瀹屾垚鐢婚潰鍒涘缓)
+        /// </summary>
+        public void ShowForm(string directory)
+        {
+            this.nowDirectory = directory;
+            //璁剧疆澶撮儴淇℃伅
+            base.SetTitleText("鏂囦欢鍒楄〃");
+
+            //鍒濆鍖栦腑閮ㄤ俊鎭�
+            this.InitMiddleFrame(nowDirectory);
+
+            this.BackButtonClickEvent = () =>
+            {
+                string rootPath = Shared.IO.FileUtils.RootPath.Trim('/');
+                if (this.nowDirectory.Trim('/') == rootPath)
+                {
+                    this.CloseForm();
+                    return;
+                }
+                string[] Arry = this.nowDirectory.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
+                string nextDir = string.Empty;
+                for (int i = 0; i < Arry.Length - 1; i++)
+                {
+                    nextDir += Arry[i] + "/";
+                }
+                //鍒濆鍖栦腑閮ㄤ俊鎭�
+                this.InitMiddleFrame(nextDir);
+            };
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栦腑閮ㄤ俊鎭�
+        /// </summary>
+        private void InitMiddleFrame(string directory)
+        {
+            this.nowDirectory = directory;
+            this.ClearBodyFrame();
+
+            var listDirectory = new List<string>();
+            var listAllFile = new List<string>();
+
+            //string rootPath = Shared.IO.FileUtils.RootPath.Trim('/');
+            //if (this.nowDirectory.Trim('/') == rootPath)
+            //{
+            //    //鏍圭洰褰曞彧瑕佷袱涓氨鍙互浜�
+            //    listDirectory.Add(Common.Config.Instance.Guid);
+            //    listDirectory.Add(Application.Skin != null ? Application.Skin : "Phone");
+            //}
+            //else
+            {
+                var files = System.IO.Directory.GetDirectories(directory);
+                foreach (var file in files)
+                {
+                    string[] arry = file.Split(new string[] { "/" }, StringSplitOptions.RemoveEmptyEntries);
+                    listDirectory.Add(arry[arry.Length - 1]);
+                }
+                listDirectory.Sort();
+
+                listAllFile = HdlFileLogic.Current.GetFileFromDirectory(directory.TrimEnd('/'));
+                listAllFile.Sort();
+            }
+
+            var listView = new VerticalListControl(8);
+            listView.BackgroundColor = 0xffffffff;
+            listView.Height = bodyFrameLayout.Height;
+            bodyFrameLayout.AddChidren(listView);
+
+            if (listDirectory.Count > 0)
+            {
+                var row1 = new RowLayoutControl(listView.rowSpace / 2);
+                listView.AddChidren(row1);
+                row1.frameTable.AddLeftCaption("銆愭枃浠跺す鍒楄〃銆�", 278);
+
+                for (int i = 0; i < listDirectory.Count; i++)
+                {
+                    this.AddDirectoryRowControl(listView, listDirectory[i], directory, i != listDirectory.Count - 1);
+                }
+            }
+
+            if (listAllFile.Count > 0)
+            {
+                var row1 = new RowLayoutControl(listView.rowSpace / 2);
+                listView.AddChidren(row1);
+                row1.frameTable.AddLeftCaption("銆愭枃浠跺垪琛ㄣ��", 278);
+                for (int i = 0; i < listAllFile.Count; i++)
+                {
+                    this.AddFileRowControl(listView, listAllFile[i], directory, i != listAllFile.Count - 1);
+                }
+            }
+            listView.AdjustRealHeightByBottomButton(Application.GetRealHeight(17));
+
+            var btnButon = new BottomClickButton();
+            btnButon.Text = "鍒犻櫎鏂囦欢澶�";
+            bodyFrameLayout.AddChidren(btnButon);
+            btnButon.ButtonClickEvent += (sender, e) =>
+            {
+                this.ShowMassage(ShowMsgType.Confirm, "鏄惁娓呴櫎璇ユ枃浠跺す", () =>
+                {
+                    try
+                    {
+                        System.IO.Directory.Delete(directory, true);
+                        this.CloseForm();
+                    }
+                    catch (Exception ex)
+                    {
+                        this.ShowMassage(ShowMsgType.Error, "娓呴櫎缂撳瓨鏂囦欢澶瑰紓甯�");
+                    }
+                });
+            };
+        }
+
+        private void AddDirectoryRowControl(VerticalListControl listView, string directoryName, string directory, bool addLine)
+        {
+            string dirNewName = directoryName;
+
+            var row1 = new RowLayoutControl(listView.rowSpace / 2);
+            listView.AddChidren(row1);
+            var btnName = row1.frameTable.AddLeftCaption(dirNewName, 278);
+            btnName.IsMoreLines = true;
+            if (addLine == true)
+            {
+                row1.frameTable.AddBottomLine();
+            }
+            row1.frameTable.AddRightArrow();
+
+            row1.frameTable.ButtonClickEvent += (sender, e) =>
+            {
+                //鍒濆鍖栦腑閮ㄤ俊鎭�
+                this.InitMiddleFrame(System.IO.Path.Combine(directory, directoryName));
+            };
+        }
+
+        private void AddFileRowControl(VerticalListControl listView, string fileName, string directory, bool addLine)
+        {
+            string fileNewName = fileName;
+
+            var row1 = new RowLayoutControl(listView.rowSpace / 2);
+            listView.AddChidren(row1);
+            var btnName = row1.frameTable.AddLeftCaption(fileNewName, 278);
+            btnName.IsMoreLines = true;
+            if (addLine == true)
+            {
+                row1.frameTable.AddBottomLine();
+            }
+            row1.frameTable.AddRightArrow();
+
+            row1.frameTable.ButtonClickEvent += (sender, e) =>
+            {
+                var form = new HideOptionFileContentForm();
+                form.AddForm(System.IO.Path.Combine(directory, fileName));
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs b/HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs
new file mode 100755
index 0000000..dfc9099
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Logic/HdlDeviceStatuPushLogic.cs
@@ -0,0 +1,63 @@
+锘縰sing HDL_ON.Entity;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 璁惧鐘舵�佹帹閫侀�昏緫(缁ф壙浜嶦ditorFormBase鐨勭晫闈笓鐢�)
+    /// </summary>
+    public class HdlDeviceStatuPushLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佹帹閫侀�昏緫(缁ф壙浜嶦ditorFormBase鐨勭晫闈笓鐢�)
+        /// </summary>
+        private static HdlDeviceStatuPushLogic m_Current = null;
+        /// <summary>
+        /// 璁惧鐘舵�佹帹閫侀�昏緫(缁ф壙浜嶦ditorFormBase鐨勭晫闈笓鐢�)
+        /// </summary>
+        public static HdlDeviceStatuPushLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlDeviceStatuPushLogic();
+                }
+                return m_Current;
+            }
+        }
+        #endregion
+
+        #region 鈻� 鐘舵�佹洿鏂癬__________________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佹洿鏂�
+        /// </summary>
+        /// <param name="updateData">浜戠鎺ㄩ�佺殑鏇存柊鏁版嵁</param>
+        public Function UpdateDeviceStatu(AlinkControlData updateData)
+        {
+            var localDevice = FunctionList.List.electricals.Find((obj) => obj.sid == updateData.sid);
+            if (localDevice != null)
+            {
+                foreach (var attr in updateData.status)
+                {
+                    var localAttr = localDevice.attributes.Find((obj) => obj.key == attr.key);
+                    if (localAttr != null)
+                    {
+                        //鏇存敼灞炴�у��
+                        localAttr.curValue = attr.value;
+                    }
+                }
+                //鍏ㄩ儴鐣岄潰鎺ㄩ��
+                HdlFormLogic.Current.DeviceStatuPush(localDevice);
+            }
+            return localDevice;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Logic/HdlFileLogic.cs b/HDL_ON/UI/UI0-Stan/Logic/HdlFileLogic.cs
new file mode 100755
index 0000000..9854c01
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Logic/HdlFileLogic.cs
@@ -0,0 +1,292 @@
+锘縰sing Newtonsoft.Json;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鏂囦欢鎿嶄綔鐨勯�昏緫
+    /// </summary>
+    public class HdlFileLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鏂囦欢鎿嶄綔鐨勯�昏緫
+        /// </summary>
+        private static HdlFileLogic m_Current = null;
+        /// <summary>
+        /// 鏂囦欢鎿嶄綔鐨勯�昏緫
+        /// </summary>
+        public static HdlFileLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlFileLogic();
+                }
+                return m_Current;
+            }
+        }
+        #endregion
+
+        #region 鈻� 鏂囦欢淇濆瓨鍜岃鍙朹____________________
+
+        /// <summary>
+        /// 鏂囦欢淇濆瓨(鏁村ぉ蹇樿,鎵�浠ュ缓涓�涓嚱鏁版潵鐜╃帺)
+        /// </summary>
+        /// <param name="fullName">鍏ㄨ矾寰�</param>
+        /// <param name="obj">闇�瑕佸簭鍒楀寲鐨勪笢瑗�</param>
+        public void SaveFileContent(string fullName, object obj)
+        {
+            var data = JsonConvert.SerializeObject(obj);
+            this.SaveTextToFile(fullName, data);
+        }
+
+        /// <summary>
+        /// 鏂囦欢淇濆瓨(鏁村ぉ蹇樿,鎵�浠ュ缓涓�涓嚱鏁版潵鐜╃帺)
+        /// </summary>
+        /// <param name="fullName">鍏ㄨ矾寰�</param>
+        /// <param name="textValue">鏂囨湰</param>
+        public void SaveTextToFile(string fullName, string textValue)
+        {
+            var byteData = Encoding.UTF8.GetBytes(textValue);
+            this.SaveByteToFile(fullName, byteData);
+        }
+
+        /// <summary>
+        /// 鏂囦欢淇濆瓨(鏁村ぉ蹇樿,鎵�浠ュ缓涓�涓嚱鏁版潵鐜╃帺)
+        /// </summary>
+        /// <param name="fullName">鍏ㄨ矾寰�</param>
+        /// <param name="byteData">byte鏁版嵁</param>
+        public void SaveByteToFile(string fullName, byte[] byteData)
+        {
+            if (byteData == null) { return; }
+            //鍐欏叆鍐呭
+            System.IO.FileStream fileStream = null;
+            try
+            {
+                fileStream = new System.IO.FileStream(fullName, System.IO.FileMode.Create, System.IO.FileAccess.Write);
+                fileStream.Write(byteData, 0, byteData.Length);
+                fileStream.Flush();
+            }
+            catch { }
+            finally
+            {
+                fileStream?.Close();
+            }
+        }
+
+        /// <summary>
+        /// 璇诲彇鏂囦欢,涓嶉檺鍒朵綇瀹�(鏂囦欢涓嶅瓨鍦ㄨ繑鍥瀗ull,鏁村ぉ蹇樿,鎵�浠ュ缓涓�涓嚱鏁版潵鐜╃帺)
+        /// </summary>
+        /// <param name="fullName">鍏ㄨ矾寰�</param>
+        /// <returns></returns>
+        public string ReadFileTextContent(string fullName)
+        {
+            //璇诲彇鏂囦欢
+            var varByte = this.ReadFileByteContent(fullName);
+            if (varByte == null)
+            {
+                return null;
+            }
+            return Encoding.UTF8.GetString(varByte);
+        }
+
+        /// <summary>
+        /// 璇诲彇鏂囦欢,涓嶉檺鍒朵綇瀹�,鏂囦欢涓嶅瓨鍦ㄨ繑鍥瀗ull
+        /// </summary>
+        /// <param name="fullName">鍏ㄨ矾寰�</param>
+        /// <returns></returns>
+        public byte[] ReadFileByteContent(string fullName)
+        {
+            if (System.IO.File.Exists(fullName) == false)
+            {
+                return null;
+            }
+            System.IO.FileStream fileStream = null;
+            try
+            {
+                fileStream = new System.IO.FileStream(fullName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
+                byte[] array = new byte[fileStream.Length];
+                fileStream.Read(array, 0, array.Length);
+                return array;
+            }
+            catch
+            {
+                return null;
+            }
+            finally
+            {
+                fileStream?.Close();
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鏂囦欢澶规搷浣滃嚱鏁癬____________________
+
+        /// <summary>
+        /// 鍒涘缓涓�涓枃浠跺す
+        /// </summary>
+        /// <param name="fullDirectory">闇�瑕佸垱寤虹殑鏂囦欢澶瑰叏璺緞</param>
+        /// <param name="clear">濡傛灉鏂囦欢澶瑰瓨鍦紝鏄惁闇�瑕佹竻绌烘枃浠跺す</param>
+        public void CreateDirectory(string fullDirectory, bool clear = false)
+        {
+            if (System.IO.Directory.Exists(fullDirectory) == false)
+            {
+                try
+                {
+                    System.IO.Directory.CreateDirectory(fullDirectory);
+                }
+                catch { }
+            }
+            else if (clear == true)
+            {
+                //濡傛灉瀛樺湪锛屽垯娓呯┖鍏ㄩ儴鏂囦欢
+                var files = System.IO.Directory.GetFiles(fullDirectory);
+                foreach (var file in files)
+                {
+                    this.DeleteFile(file);
+                }
+            }
+        }
+
+        /// <summary>
+        /// 鍒犻櫎鏂囦欢澶�
+        /// </summary>
+        /// <param name="fullDirectory">鏂囦欢澶瑰叏璺緞</param>
+        public void DeleteDirectory(string fullDirectory)
+        {
+            if (System.IO.Directory.Exists(fullDirectory) == true)
+            {
+                try { System.IO.Directory.Delete(fullDirectory, true); }
+                catch { }
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鎸囧畾鏂囦欢澶归噷闈㈢殑鍏ㄩ儴鏂囦欢 
+        /// </summary>
+        /// <param name="directory">鏂囦欢璺緞锛堝叏鍚嶏級</param>
+        /// <param name="onlyFileName">鍗曠函鍙槸鑾峰彇鏂囦欢鍚嶅瓧,濡傛灉涓篺alse鏃�,灏嗚繑鍥炴枃浠剁殑鍏ㄨ矾寰�</param>
+        /// <returns></returns>
+        public List<string> GetFileFromDirectory(string directory, bool onlyFileName = true)
+        {
+            if (System.IO.Directory.Exists(directory) == false)
+            {
+                return new List<string>();
+            }
+
+            var list = new List<string>();
+            try
+            {
+                //2020.07.10鐨勬椂鍊�,鍑虹幇杩囪幏鍙栧け璐ュ紓甯� 鎻愮ず:write fault on path
+                var files = System.IO.Directory.GetFiles(directory);
+                foreach (var file in files)
+                {
+                    string fileName = file;
+                    if (onlyFileName == true)
+                    {
+                        fileName = fileName.Substring(directory.Length + 1);
+                    }
+                    list.Add(fileName);
+                }
+            }
+            catch {}
+
+            return list;
+        }
+
+        /// <summary>
+        /// 灏嗘寚瀹氭枃浠跺す閲岄潰鐨勫叏閮ㄦ枃浠跺鍒跺埌鎸囧畾鐨勬枃浠跺す鍐�
+        /// </summary>
+        /// <param name="fullDirectory">澶嶅埗鍘熸枃浠跺す鍏ㄨ矾寰�</param>
+        /// <param name="targetDirectory">鐩爣鏂囦欢澶瑰叏璺緞</param>
+        public void CopyDirectoryFileToDirectory(string fullDirectory, string targetDirectory)
+        {
+            if (System.IO.Directory.Exists(targetDirectory) == false)
+            {
+                //鍒涘缓鐩爣鏂囦欢澶�
+                this.CreateDirectory(targetDirectory, false);
+            }
+
+            var listFile = this.GetFileFromDirectory(fullDirectory);
+            foreach (var file in listFile)
+            {
+                string oldFile = System.IO.Path.Combine(fullDirectory, file);
+                string newFile = System.IO.Path.Combine(targetDirectory, file);
+                //澶嶅埗鏂囦欢
+                this.CopyFile(oldFile, newFile);
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鏂囦欢鎿嶄綔鍑芥暟_______________________
+
+        /// <summary>
+        /// 鍒犻櫎鏂囦欢
+        /// </summary>
+        /// <param name="fullName">鏂囦欢鍏ㄥ悕</param>
+        /// <returns></returns>
+        public bool DeleteFile(string fullName)
+        {
+            if (System.IO.File.Exists(fullName) == true)
+            {
+                try
+                {
+                    System.IO.File.Delete(fullName);
+                    return true;
+                }
+                catch { return false; }
+            }
+            return true;
+        }
+
+        /// <summary>
+        /// 绉诲姩鏂囦欢
+        /// </summary>
+        /// <param name="oldFile">鍘熸枃浠�</param>
+        /// <param name="newFile">鐩爣鏂囦欢</param>
+        public void MoveFile(string oldFile, string newFile)
+        {
+            if (System.IO.File.Exists(oldFile) == true)
+            {
+                //濡傛灉鐩爣鏂囦欢瀛樺湪,鍒欏垏鎹负澶嶅埗鏂囦欢
+                if (System.IO.File.Exists(newFile) == true)
+                {
+                    this.CopyFile(oldFile, newFile);
+                    return;
+                }
+                try
+                {
+                    System.IO.File.Move(oldFile, newFile);
+                }
+                catch { }
+            }
+        }
+
+        /// <summary>
+        /// 绉诲姩鏂囦欢
+        /// </summary>
+        /// <param name="oldFile">鍘熸枃浠�</param>
+        /// <param name="newFile">鐩爣鏂囦欢</param>
+        public void CopyFile(string oldFile, string newFile)
+        {
+            if (System.IO.File.Exists(oldFile) == true)
+            {
+                try
+                {
+                    System.IO.File.Copy(oldFile, newFile, true);
+                }
+                catch { }
+            }
+        }
+
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Logic/HdlFormLogic.cs b/HDL_ON/UI/UI0-Stan/Logic/HdlFormLogic.cs
new file mode 100755
index 0000000..dd40fac
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Logic/HdlFormLogic.cs
@@ -0,0 +1,323 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鐣岄潰鐩稿叧鐨勯�昏緫
+    /// </summary>
+    public class HdlFormLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鐣岄潰鐩稿叧鐨勯�昏緫
+        /// </summary>
+        private static HdlFormLogic m_Current;
+        /// <summary>
+        /// 鐣岄潰鐩稿叧鐨勯�昏緫
+        /// </summary>
+        public static HdlFormLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlFormLogic();
+                }
+                return m_Current;
+            }
+        }
+
+        /// <summary>
+        /// <para>褰撳墠宸茬粡鎵撳紑浜嗙殑鐢婚潰(缁ф壙浜嶶serCenterCommonForm鎵嶈兘浣跨敤)銆�</para>
+        /// <para>鐢婚潰鎵撳紑鏃讹紝浼氳嚜鍔ㄨ拷鍑伙紝鐢婚潰鍏抽棴鏃讹紝鑷姩绉婚櫎銆�</para>
+        /// <para>鏂版坊鍔犵殑鐣岄潰浼氭斁鍦ㄥ墠闈�</para>
+        /// </summary>
+        private List<CommonFormBase> ListActionForm = new List<CommonFormBase>();
+        /// <summary>
+        /// 褰撳墠姝e湪鎿嶄綔鐨勭敾闈D(娌′汉浼氭噦瀹冧负浣曡瀛樺湪)
+        /// </summary>
+        public string NowActionFormID
+        {
+            get
+            {
+                return ListActionForm.Count > 0 ? ListActionForm[0].FormID : string.Empty;
+            }
+        }
+        /// <summary>
+        /// 鏄剧ず鐩戣鍐呭瓨鐨勬帶浠�
+        /// </summary>
+        private NormalViewControl btnMemory = null;
+
+        #endregion
+
+        #region 鈻� 娣诲姞鐣岄潰鐩稿叧_______________________
+
+        /// <summary>
+        /// 妫�娴嬭兘鍚︽坊鍔犵敾闈�
+        /// </summary>
+        /// <returns>true:鍙互杩藉姞 false:涓嶅彲杩藉姞</returns>
+        /// <param name="form">Form</param>
+        public bool CheckCanAddForm(CommonFormBase form)
+        {
+            //鑾峰彇鐢婚潰鑻辨枃鍚嶅瓧
+            string formId = GetFormID(form);
+
+            //鏆傛椂杩欐牱寮勭湅鐪嬶紝濡傛灉閲嶅锛屽垯鍏抽棴鎺夊師鏉ョ殑鐣岄潰
+            var formTemp = this.GetFormByName(formId);
+            formTemp?.CloseForm();
+
+            return true;
+        }
+
+        /// <summary>
+        /// 鎶婃墦寮�鐨勭敾闈㈡坊鍔犲埌鍐呭瓨涓�
+        /// </summary>
+        /// <param name="form">Form.</param>
+        public void AddActionForm(CommonFormBase form)
+        {
+            //鑾峰彇鐢婚潰鑻辨枃鍚嶅瓧
+            string formId = GetFormID(form);
+
+            //鍐呭瓨娣诲姞
+            form.FormID = formId;
+            this.ListActionForm.Insert(0, form);
+        }
+
+        /// <summary>
+        /// 浠庡垪琛ㄤ腑绉婚櫎鐢婚潰
+        /// </summary>
+        /// <param name="i_closeForm">鍏抽棴鐨勭晫闈�</param>
+        public void RemoveActionForm(CommonFormBase i_closeForm)
+        {
+            //鑾峰彇鐢婚潰ID
+            string formId = GetFormID(i_closeForm);
+            var removeForm = this.GetFormByName(formId);
+            if (removeForm == null)
+            {
+                return;
+            }
+            //绉婚櫎鐢婚潰
+            this.ListActionForm.Remove(removeForm);
+
+            var actionForm = MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1);
+            if (actionForm == null)
+            {
+                return;
+            }
+            //鍏抽棴鐨勭晫闈负EditorCommonForm鐨勬椂鍊�
+            if ((i_closeForm is EditorCommonForm) && (actionForm is EditorCommonForm))
+            {
+                //鎺ヤ笅鏉ユ縺娲荤殑鐣岄潰
+                try
+                {
+                    var Myform = actionForm as EditorCommonForm;
+                    //瑙﹀彂鐣岄潰鍐嶆婵�娲荤殑浜嬩欢
+                    Myform.FormActionAgainEvent();
+                }
+                catch { }
+            }
+        }
+
+        /// <summary>
+        /// 鑾峰彇鐢婚潰ID
+        /// </summary>
+        /// <returns>The form name.</returns>
+        /// <param name="form">Form.</param>
+        private string GetFormID(CommonFormBase form)
+        {
+            if (form.FormID != string.Empty)
+            {
+                return form.FormID;
+            }
+            //灏嗗懡鍚嶇┖闂村幓鎺�
+            string[] Arry = form.ToString().Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);
+            string formName = Arry[Arry.Length - 1].Trim();
+            return formName;
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佹洿鏂版帹閫乢__________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佹洿鏂版帹閫�
+        /// </summary>
+        /// <param name="i_LocalDevice">鏈湴璁惧瀵硅薄</param>
+        public void DeviceStatuPush(Entity.Function i_LocalDevice)
+        {
+            HdlThreadLogic.Current.RunMain(() =>
+            {
+                for (int i = 0; i < this.ListActionForm.Count; i++)
+                {
+                    this.ListActionForm[i]?.DeviceStatuPush(i_LocalDevice);
+                }
+            }, ShowErrorMode.NO);
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鑾峰彇褰撳墠姝e湪婵�娲荤殑鐣岄潰
+        /// </summary>
+        /// <returns></returns>
+        public CommonFormBase GetNowActionForm()
+        {
+            return MainPage.BasePageView.GetChildren(MainPage.BasePageView.ChildrenCount - 1) as CommonFormBase;
+        }
+
+        /// <summary>
+        /// 鏍规嵁鍚嶅瓧鑾峰彇鎸囧畾宸茬粡鎵撳紑浜嗙殑鐣岄潰
+        /// </summary>
+        /// <param name="i_formName"></param>
+        /// <returns></returns>
+        public CommonFormBase GetFormByName(string i_formName)
+        {
+            for (int i = 0; i < this.ListActionForm.Count; i++)
+            {
+                if (this.ListActionForm[i].FormID == i_formName)
+                {
+                    return this.ListActionForm[i];
+                }
+            }
+            return null;
+        }
+
+        /// <summary>
+        /// 鍏抽棴鎸囧畾鐨勭敾闈�
+        /// </summary>
+        /// <param name="formName">鎸囧畾瑕佸叧闂殑鐢婚潰鑻辨枃鍚嶅瓧</param>
+        public void CloseFormByFormName(string formName)
+        {
+            var form = this.GetFormByName(formName);
+            //鍏抽棴鎸囧畾鐢婚潰
+            form?.CloseForm();
+        }
+
+        /// <summary>
+        /// 鍒ゆ柇鎸囧畾鐨勭晫闈㈡槸鍚︽墦寮�
+        /// </summary>
+        /// <param name="formId"></param>
+        /// <returns></returns>
+        public bool IsFormOpen(string formId)
+        {
+            var form = this.GetNowActionForm();
+
+            return form != null ? form.FormID == formId : false;
+        }
+
+        /// <summary>
+        /// 鑾峰彇鍏ㄩ儴宸茬粡鎵撳紑浜嗙殑鐣岄潰
+        /// </summary>
+        /// <returns></returns>
+        public List<CommonFormBase> GetAllOpenForm()
+        {
+            var list = new List<CommonFormBase>();
+            try
+            {
+                for (int i = 0; i < this.ListActionForm.Count; i++)
+                {
+                    list.Add(this.ListActionForm[i]);
+                }
+                return list;
+            }
+            catch { return list; }
+        }
+
+#if __Android__
+        /// <summary>
+        /// 鏄剧ず鐩戝惉鍐呭瓨鐨勭晫闈�
+        /// </summary>
+        public void ShowMemoryListenView(int div)
+        {
+            this.btnMemory = new NormalViewControl(Application.MainPage.Width, HdlControlResourse.TopMenuFrameHeight, false);
+            btnMemory.TextAlignment = TextAlignment.Center;
+            btnMemory.BackgroundColor = 0xffffb9b9;
+            btnMemory.TextSize = 10;
+            btnMemory.IsMoreLines = true;
+            Application.MainPage.AddChidren(btnMemory);
+            if (div == 2)
+            {
+                btnMemory.Y = Application.MainPage.Height - this.btnMemory.Height;
+                btnMemory.BringToFront();
+                btnMemory.Animate = Animate.DownToUp;
+            }
+            else
+            {
+                btnMemory.BringToFront();
+                btnMemory.Animate = Animate.UpToDown;
+            }
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                int count = 0;
+                while (this.btnMemory != null)
+                {
+                    System.Threading.Thread.Sleep(1000);
+                    count++;
+                    if (count < 2) { continue; }
+                    count = 0;
+
+                    HdlThreadLogic.Current.RunMain(() =>
+                    {
+                        var obj = Application.Activity.GetSystemService(Android.Content.Context.ActivityService);
+                        var activityManager = (Android.App.ActivityManager)obj;
+                        var memoryInfos = activityManager.GetProcessMemoryInfo(new int[] { Android.OS.Process.MyPid() });
+
+                        if (memoryInfos.Length > 0)
+                        {
+                            string text = "PrivateDirty:" + (memoryInfos[0].TotalPrivateDirty) + "KB";
+                            text += "  Pss:" + (memoryInfos[0].TotalPss) + "KB\r\n";
+                            text += "PrivateDirty:" + (memoryInfos[0].TotalPrivateDirty / 1024) + "MB";
+                            text += "  Pss:" + (memoryInfos[0].TotalPss / 1024) + "MB";
+                            if (btnMemory != null)
+                            {
+                                btnMemory.Text = text;
+                            }
+                        }
+                        else
+                        {
+                            if (btnMemory != null)
+                            {
+                                btnMemory.Text = "鑾峰彇鍐呭瓨寮傚父";
+                            }
+                        }
+
+                        obj = null;
+                        activityManager = null;
+                        memoryInfos = null;
+                    });
+                }
+            });
+        }
+
+        /// <summary>
+        /// 鍏抽棴鐩戝惉鍐呭瓨鐨勭晫闈�
+        /// </summary>
+        public void CloseMemoryListenView()
+        {
+            if (this.btnMemory != null)
+            {
+                this.btnMemory.RemoveFromParent();
+                this.btnMemory = null;
+            }
+        }
+
+        /// <summary>
+        /// 鐩戞祴鏄惁鏄湪鐩戝惉
+        /// </summary>
+        /// <returns></returns>
+        public bool CheckIsListeningMemory()
+        {
+            return this.btnMemory != null;
+        }
+#endif
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Logic/HdlMessageLogic.cs b/HDL_ON/UI/UI0-Stan/Logic/HdlMessageLogic.cs
new file mode 100755
index 0000000..4931fd3
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Logic/HdlMessageLogic.cs
@@ -0,0 +1,96 @@
+锘縰sing System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 娑堟伅鐨勯�昏緫
+    /// </summary>
+    public class HdlMessageLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 娑堟伅鐨勯�昏緫
+        /// </summary>
+        private static HdlMessageLogic m_Current = null;
+        /// <summary>
+        /// 娑堟伅鐨勯�昏緫
+        /// </summary>
+        public static HdlMessageLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlMessageLogic();;
+                }
+                return m_Current;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸殑鏂规硶_________________________
+
+        /// <summary>
+        /// 鏄剧ず淇℃伅妗�
+        /// </summary>
+        /// <param name="msgType">淇℃伅绫诲瀷</param>
+        /// <param name="msg">淇℃伅</param>
+        /// <param name="action">鍗曞嚮纭鍚庢墽琛岀殑鍥炶皟鍑芥暟</param>
+        /// <param name="buttonText">鎸夐挳鐨勬枃鏈�</param>
+        /// <param name="i_waitTime">绛夊緟鏃堕棿,鍗曚綅涓虹,璁剧疆纭鎸夐挳鍦ㄥ闀挎椂闂村悗鎵嶈兘澶熺偣鍑�</param>
+        public void ShowMassage(ShowMsgType msgType, string msg, Action action = null, string buttonText = null, int i_waitTime = -1)
+        {
+            //绌哄璞℃椂锛屼笉鏄剧ず
+            if (string.IsNullOrEmpty(msg))
+            {
+                return;
+            }
+            HdlThreadLogic.Current.RunMain(() =>
+            {
+                var alert = new ShowMsgControl(msgType, msg, buttonText, null, i_waitTime);
+                if (action != null)
+                {
+                    alert.ConfirmClickEvent += () =>
+                    {
+                        try
+                        {
+                            //鍥炶皟鍑芥暟
+                            action?.Invoke();
+                        }
+                        catch (Exception ex)
+                        {
+                            //鍑虹幇鏈煡閿欒,鏁版嵁涓㈠け
+                            HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+                        }
+                        action = null;
+                    };
+                }
+                alert.Show();
+            });
+        }
+
+        /// <summary>
+        /// 鏄剧ずApp绋嬪簭鍑虹幇浜嗚嚧鍛介敊璇�
+        /// </summary>
+        /// <param name="ex"></param>
+        public void ShowAppProgramIsError(Exception ex)
+        {
+            this.ShowMassage(ShowMsgType.Error, "System Error!", () =>
+            {
+                string msg = ex.Message + "\r\n";
+                msg += ex.StackTrace;
+
+                var form = new HideOptionFileContentForm();
+                form.AddForm(string.Empty);
+                form.SetTextContent(msg);
+
+            }, "View Log");
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Logic/HdlThreadLogic.cs b/HDL_ON/UI/UI0-Stan/Logic/HdlThreadLogic.cs
new file mode 100755
index 0000000..c410fe0
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Logic/HdlThreadLogic.cs
@@ -0,0 +1,117 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 绾跨▼閫昏緫(鍒涘缓杩欎釜涓滆タ,鏄负浜哃og鍑哄姏)
+    /// </summary>
+    public class HdlThreadLogic
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 绾跨▼閫昏緫(鍒涘缓杩欎釜涓滆タ,鏄负浜哃og鍑哄姏)
+        /// </summary>
+        private static HdlThreadLogic m_Current = null;
+        /// <summary>
+        /// 绾跨▼閫昏緫(鍒涘缓杩欎釜涓滆タ,鏄负浜哃og鍑哄姏)
+        /// </summary>
+        public static HdlThreadLogic Current
+        {
+            get
+            {
+                if (m_Current == null)
+                {
+                    m_Current = new HdlThreadLogic();
+                }
+                return m_Current;
+            }
+        }
+        #endregion
+
+        #region 鈻� 绾跨▼鎵ц___________________________
+
+        /// <summary>
+        /// 瀛愮嚎绋嬫墽琛�(鍒涘缓杩欎釜涓滆タ,鏄负浜哃og鍑哄姏)
+        /// </summary>
+        public void RunThread(Action action, ShowErrorMode mode = ShowErrorMode.YES)
+        {
+            new System.Threading.Thread(() =>
+            {
+                try
+                {
+                    action.Invoke();
+                    action = null;
+                }
+                catch (Exception ex)
+                {
+                    if (mode == ShowErrorMode.YES)
+                    {
+                        Application.RunOnMainThread(() =>
+                        {
+                            //鍑虹幇鏈煡閿欒,鏁版嵁涓㈠け
+                            HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+                        });
+                    }
+                }
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鎵ц杩愯瀛愮嚎绋嬮噷闈㈢殑涓荤嚎绋�(鍒涘缓杩欎釜涓滆タ,鏄负浜哃og鍑哄姏)
+        /// </summary>
+        public void RunMainInThread(Action action, ShowErrorMode mode = ShowErrorMode.YES)
+        {
+            new System.Threading.Thread(() =>
+            {
+                Application.RunOnMainThread(() =>
+                {
+                    try
+                    {
+                        action.Invoke();
+                        action = null;
+                    }
+                    catch (Exception ex)
+                    {
+                        if (mode == ShowErrorMode.YES)
+                        {
+                            //鍑虹幇鏈煡閿欒,鏁版嵁涓㈠け
+                            HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+                        }
+                    }
+                });
+                
+            })
+            { IsBackground = true }.Start();
+        }
+
+        /// <summary>
+        /// 鎵ц杩愯浜庝富绾跨▼(鍒涘缓杩欎釜涓滆タ,鏄负浜哃og鍑哄姏)
+        /// </summary>
+        public void RunMain(Action action, ShowErrorMode mode = ShowErrorMode.YES)
+        {
+            Application.RunOnMainThread(() =>
+            {
+                try
+                {
+                    action.Invoke();
+                    action = null;
+                }
+                catch (Exception ex)
+                {
+                    if (mode == ShowErrorMode.YES)
+                    {
+                        //鍑虹幇鏈煡閿欒,鏁版嵁涓㈠け
+                        HdlMessageLogic.Current.ShowAppProgramIsError(ex);
+                    }
+                }
+            });
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI0-Stan/Resourse/HdlControlResourse.cs b/HDL_ON/UI/UI0-Stan/Resourse/HdlControlResourse.cs
new file mode 100755
index 0000000..0efd68c
--- /dev/null
+++ b/HDL_ON/UI/UI0-Stan/Resourse/HdlControlResourse.cs
@@ -0,0 +1,49 @@
+锘縰sing Shared;
+using System;
+using System.Collections.Generic;
+using System.Text;
+
+namespace HDL_ON.Stan
+{
+    /// <summary>
+    /// 鎺т欢绫荤殑Resourse
+    /// </summary>
+    public class HdlControlResourse
+    {
+        /// <summary>
+        /// 鐢婚潰TopFrameLayout鏈�涓婇潰鑿滃崟鐨勯珮搴�(楂樺害锛�20)
+        /// </summary>
+        public static int TopMenuFrameHeight = Application.GetRealHeight(20);
+        /// <summary>
+        /// 鐢婚潰TopFrameLayout鐨勯珮搴�(楂樺害锛�44)
+        /// </summary>
+        public static int TopFrameHeight = Application.GetRealHeight(44);
+        /// <summary>
+        /// 鐢婚潰BodyFrameLayout鐨勯珮搴�(涓嶈兘鐩存帴鎸囧畾鏁板��,涓嶇劧鏈夊彲鑳戒細鍑虹幇璇樊,瀵艰嚧鏃犳硶閾烘弧)
+        /// </summary>
+        public static int BodyFrameHeight
+        {
+            get { return MainPage.BasePageView.Height - TopMenuFrameHeight - TopFrameHeight; }
+        }
+        /// <summary>
+        /// X杞村乏杈圭殑鍋忕Щ閲�(16)
+        /// </summary>
+        public static int XXLeft = Application.GetRealWidth(16);
+        /// <summary>
+        /// VerticalScrolViewLayout鎺т欢涓�琛岀殑楂樺害(鍙拡瀵规爣鍑嗗瀷鍒楄〃寮忕敾闈�)
+        /// </summary>
+        public static int ListViewRowHeight = Application.GetRealHeight(44);
+        /// <summary>
+        /// 涓�鑸樉绀烘枃瀛楃殑鎺т欢鐨勯珮搴�
+        /// </summary>
+        public static int NormalControlHeight = Application.GetRealHeight(21);
+        /// <summary>
+        /// 搴曢儴鎸夐挳涓嶸erticalScrolViewLayout鎺т欢搴曢儴鐨勯棿璺�
+        /// </summary>
+        public static int BottomButtonAndListViewSpace = Application.GetRealHeight(10);
+        /// <summary>
+        /// 搴曠嚎楂樺害(鐩存帴鎸囧畾涓嶉渶瑕佸啀娆¤绠楃殑鐪熷疄鍊�)
+        /// </summary>
+        public static int BottomLineHeight = 1;
+    }
+}
diff --git a/HDL_ON/UI/UI2/.DS_Store b/HDL_ON/UI/UI2/.DS_Store
new file mode 100644
index 0000000..032f4a0
--- /dev/null
+++ b/HDL_ON/UI/UI2/.DS_Store
Binary files differ
diff --git a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
old mode 100644
new mode 100755
index 6473187..e3020d9
--- a/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
+++ b/HDL_ON/UI/UI2/2-Classification/FunctionControlZone.cs
@@ -159,11 +159,18 @@
                             case SPK.ElectricSocket:
                                 btnIcon.UnSelectedImagePath = "FunctionIcon/Socket/SocketThinIcon.png";
                                 break;
-                            case SPK.ElectricFan:
+                            case SPK.ElectricFan:
+                            case SPK.ElectricTuyaFan:
                                 btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/FanThinIcon.png";
                                 break;
                             case SPK.ElectricTV:
-                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/TVThinIcon.png";
+                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/TVThinIcon.png";
+                                break;
+                            case SPK.ElectricTuyaAirCleaner:
+                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/AirCleanerThiinIcon.png";
+                                break;
+                            case SPK.ElectricTuyaWeepRobot:
+                                btnIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobotThinIcon.png";
                                 break;
                         }
                         btnSwitch.IsSelected = function.trait_on_off.curValue.ToString() == "on";
diff --git a/HDL_ON/UI/UI2/FuntionControlView/.DS_Store b/HDL_ON/UI/UI2/FuntionControlView/.DS_Store
new file mode 100644
index 0000000..04f2c28
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/.DS_Store
Binary files differ
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs
new file mode 100755
index 0000000..ae89578
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaAirCleanerPage.cs
@@ -0,0 +1,880 @@
+锘縰sing Shared;
+using HDL_ON.Stan;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HDL_ON.UI.CSS;
+using HDL_ON.Entity;
+using HDL_ON.DriverLayer;
+
+namespace HDL_ON.UI
+{
+    /// <summary>
+    /// 娑傞甫绌烘皵鍑�鍖栧櫒鐨勬帶鍒剁晫闈�
+    /// </summary>
+    public class TuyaAirCleanerPage : DeviceFunctionCardCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鍥剧墖鎺т欢
+        /// </summary>
+        private PicViewControl btnPictrue = null;
+        /// <summary>
+        /// 婊よ姱浣跨敤鐜囨帶浠�
+        /// </summary>
+        private NormalViewControl btnUsePersent = null;
+        /// <summary>
+        /// 娓╁害
+        /// </summary>
+        private NormalViewControl btnTemperature = null;
+        /// <summary>
+        /// 婀垮害
+        /// </summary>
+        private NormalViewControl btnHumidity = null;
+        /// <summary>
+        /// PM2.5
+        /// </summary>
+        private NormalViewControl btnPm25 = null;
+        /// <summary>
+        /// 寮�鍏虫帶浠�
+        /// </summary>
+        private IconViewControl btnSwitch = null;
+        /// <summary>
+        /// 妯″紡鎺т欢
+        /// </summary>
+        private IconViewControl btnMode = null;
+        /// <summary>
+        /// 妯″紡鐨勬樉绀烘枃鏈帶浠�
+        /// </summary>
+        private NormalViewControl btnModeView = null;
+        /// <summary>
+        /// 椋庨�熸帶浠�
+        /// </summary>
+        private IconViewControl btnFan = null;
+        /// <summary>
+        /// 椋庨�熺殑鏄剧ず鏂囨湰鎺т欢
+        /// </summary>
+        private NormalViewControl btnFanView = null;
+        /// <summary>
+        /// 瀹氭椂鎺т欢
+        /// </summary>
+        private IconViewControl btnTime = null;
+        /// <summary>
+        /// 瀹氭椂鐨勬樉绀烘枃鏈帶浠�
+        /// </summary>
+        private NormalViewControl btnTimeView = null;
+        /// <summary>
+        /// 绔ラ攣寮�鍏虫帶浠�
+        /// </summary>
+        private MostRightIconControl btnLockSwitch = null;
+        /// <summary>
+        /// 璐熺瀛愬紑鍏虫帶浠�
+        /// </summary>
+        private MostRightIconControl btnAnionSwitch = null;
+        /// <summary>
+        /// 婊よ姱澶嶄綅寮�鍏虫帶浠�
+        /// </summary>
+        private MostRightIconControl btnResetSwitch = null;
+        /// <summary>
+        /// 绌烘皵璐ㄩ噺鏁版嵁
+        /// </summary>
+        private AirCleanerData airCleanerData = new AirCleanerData();
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public override void InitFrameWhiteContent()
+        {
+            base.SetTitleText(Language.StringByID(StringId.AirCleaner));
+
+            //娣诲姞绗簩绱㈠紩椤�
+            this.AddSecondPage();
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+            //鍒濆鍖栫浜屼釜绱㈠紩椤电殑鍐呭
+            this.InitFrameWhiteContent2();
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(this.device);
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
+        {
+            //鍥剧墖鎺т欢
+            this.btnPictrue = new PicViewControl(94, 130);
+            btnPictrue.Y = Application.GetRealHeight(90);
+            btnPictrue.Gravity = Gravity.CenterHorizontal;
+            btnPictrue.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/AirCleanerOff.png";
+            btnPictrue.SelectedImagePath = "FunctionIcon/Electrical/Fan/AirCleanerOn.png";
+            FrameWhiteCentet1.AddChidren(btnPictrue);
+            btnPictrue.ButtonClickEvent += (sender, e) =>
+            {
+                //鍙戦�佸紑鍏冲懡浠�
+                this.SendSwitchComand();
+            };
+
+            //婊よ姱浣跨敤
+            this.btnUsePersent = new NormalViewControl(FrameWhiteCentet1.Width, Application.GetRealHeight(20), false);
+            btnUsePersent.TextAlignment = TextAlignment.Center;
+            btnUsePersent.Y = btnPictrue.Bottom + Application.GetRealHeight(16);
+            btnUsePersent.TextColor = CSS.CSS_Color.MainColor;
+            FrameWhiteCentet1.AddChidren(btnUsePersent);
+            //娓╁害
+            this.btnTemperature = new NormalViewControl(106, 28, true);
+            btnTemperature.Y = btnUsePersent.Bottom + Application.GetRealHeight(23);
+            btnTemperature.TextSize = CSS.CSS_FontSize.EmphasisFontSize_Secondary;
+            btnTemperature.TextAlignment = TextAlignment.Center;
+            btnTemperature.Text = "22鈩�";
+            FrameWhiteCentet1.AddChidren(btnTemperature);
+            //瀹ゅ唴娓╁害
+            var btnTemperatureView = new NormalViewControl(btnTemperature.Width, Application.GetRealHeight(14), false);
+            btnTemperatureView.Y = btnTemperature.Bottom + Application.GetRealHeight(4);
+            btnTemperatureView.TextSize = CSS.CSS_FontSize.PromptFontSize_SecondaryLevel;
+            btnTemperatureView.TextAlignment = TextAlignment.Center;
+            btnTemperatureView.TextID = StringId.IndoorTemp;
+            FrameWhiteCentet1.AddChidren(btnTemperatureView);
+            //涓�鏉$珫绾�
+            var btnLine1 = new NormalViewControl(1, Application.GetRealHeight(19), false);
+            btnLine1.X = btnTemperature.Right;
+            btnLine1.Y = btnTemperature.Y + (btnTemperature.Height - Application.GetRealHeight(19)) / 2;
+            btnLine1.BackgroundColor = CSS.CSS_Color.TextualColor;
+            FrameWhiteCentet1.AddChidren(btnLine1);
+
+            //PM2.5
+            this.btnPm25 = new NormalViewControl(106, 28, true);
+            btnPm25.Y = btnTemperature.Y;
+            btnPm25.X = btnLine1.Right;
+            btnPm25.TextSize = CSS.CSS_FontSize.EmphasisFontSize_Secondary;
+            btnPm25.TextAlignment = TextAlignment.Center;
+            btnPm25.Text = "0";
+            FrameWhiteCentet1.AddChidren(btnPm25);
+            //PM2.5
+            var btnPm25View = new NormalViewControl(btnPm25.Width, Application.GetRealHeight(14), false);
+            btnPm25View.X = btnPm25.X;
+            btnPm25View.Y = btnTemperatureView.Y;
+            btnPm25View.TextSize = CSS.CSS_FontSize.PromptFontSize_SecondaryLevel;
+            btnPm25View.TextAlignment = TextAlignment.Center;
+            btnPm25View.Text = "PM2.5";
+            FrameWhiteCentet1.AddChidren(btnPm25View);
+
+            //涓�鏉$珫绾�
+            var btnLine2 = new NormalViewControl(1, btnLine1.Height, false);
+            btnLine2.X = btnPm25.Right;
+            btnLine2.Y = btnLine1.Y;
+            btnLine2.BackgroundColor = CSS_Color.TextualColor;
+            FrameWhiteCentet1.AddChidren(btnLine2);
+
+            //婀垮害
+            this.btnHumidity = new NormalViewControl(114, 28, true);
+            btnHumidity.Y = btnTemperature.Y;
+            btnHumidity.X = btnLine2.Right;
+            btnHumidity.TextSize = CSS.CSS_FontSize.EmphasisFontSize_Secondary;
+            btnHumidity.TextAlignment = TextAlignment.Center;
+            btnHumidity.Text = "50%";
+            FrameWhiteCentet1.AddChidren(btnHumidity);
+            //瀹ゅ唴婀垮害
+            var btnHumidityView = new NormalViewControl(btnHumidity.Width, Application.GetRealHeight(14), false);
+            btnHumidityView.X = btnHumidity.X;
+            btnHumidityView.Y = btnTemperatureView.Y;
+            btnHumidityView.TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel;
+            btnHumidityView.TextAlignment = TextAlignment.Center;
+            btnHumidityView.TextID = StringId.IndoorHumidity;
+            FrameWhiteCentet1.AddChidren(btnHumidityView);
+
+            //2021.01.26 鐩墠涓嶇敤娓╁害鍜屾箍搴�
+            btnTemperature.RemoveFromParent();
+            btnTemperatureView.RemoveFromParent();
+            btnLine1.RemoveFromParent();
+            btnLine2.RemoveFromParent();
+            btnHumidity.RemoveFromParent();
+            btnHumidityView.RemoveFromParent();
+
+            //椋庨�熷浘鏍�
+            this.btnFan = new IconViewControl(38);
+            btnFan.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/Fan.png";
+            btnFan.X = Application.GetRealWidth(40);
+            btnFan.Y = btnPm25View.Bottom + Application.GetRealHeight(40);
+            FrameWhiteCentet1.AddChidren(btnFan);
+            btnFan.ButtonClickEvent += (sender, e) =>
+            {
+                //鏄剧ず椋庨�熺晫闈�
+                this.ShowFanSpeedView();
+            };
+            this.btnFanView = new NormalViewControl(80, 18, true);
+            btnFanView.Y = btnFan.Bottom + Application.GetRealHeight(10);
+            btnFanView.X = btnFan.X - (Application.GetRealWidth(80) - btnFan.Width) / 2;
+            btnFanView.TextAlignment = TextAlignment.Center;
+            btnFanView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnFanView.Text = Language.StringByID(StringId.FanSpeed);
+            FrameWhiteCentet1.AddChidren(btnFanView);
+
+            //瀹氭椂鍥炬爣
+            this.btnTime = new IconViewControl(38);
+            btnTime.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/Time.png";
+            btnTime.Y = btnFan.Y;
+            btnTime.Gravity = Gravity.CenterHorizontal;
+            FrameWhiteCentet1.AddChidren(btnTime);
+            btnTime.ButtonClickEvent += (sender, e) =>
+            {
+                //鏄剧ず瀹氭椂鐣岄潰
+                this.ShowTimingSelectView();
+            };
+            this.btnTimeView = new NormalViewControl(80, 18, true);
+            btnTimeView.Y = btnFanView.Y;
+            btnTimeView.X = btnTime.X - (Application.GetRealWidth(80) - btnTime.Width) / 2;
+            btnTimeView.TextAlignment = TextAlignment.Center;
+            btnTimeView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            FrameWhiteCentet1.AddChidren(btnTimeView);
+
+            //妯″紡鍥炬爣
+            this.btnMode = new IconViewControl(38);
+            btnMode.Y = btnFan.Y;
+            btnMode.X = btnTime.Right + Application.GetRealWidth(66);
+            FrameWhiteCentet1.AddChidren(btnMode);
+            btnMode.ButtonClickEvent += (sender, e) =>
+            {
+                //鏄剧ず妯″紡鐣岄潰
+                this.ShowModeSelectView();
+            };
+            this.btnModeView = new NormalViewControl(80, 18, true);
+            btnModeView.Y = btnFanView.Y;
+            btnModeView.X = btnMode.X - (Application.GetRealWidth(80) - btnMode.Width) / 2;
+            btnModeView.TextAlignment = TextAlignment.Center;
+            btnModeView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            FrameWhiteCentet1.AddChidren(btnModeView);
+
+            //寮�鍏冲浘鏍�
+            this.btnSwitch = new IconViewControl(40);
+            btnSwitch.Gravity = Gravity.CenterHorizontal;
+            btnSwitch.Y = btnMode.Bottom + Application.GetRealHeight(61);
+            btnSwitch.UnSelectedImagePath = "Public/PowerClose.png";
+            btnSwitch.SelectedImagePath = "Public/PowerOpen.png";
+            FrameWhiteCentet1.AddChidren(btnSwitch);
+            btnSwitch.ButtonClickEvent += (sender, e) =>
+            {
+                //鍙戦�佸紑鍏冲懡浠�
+                this.SendSwitchComand();
+            };
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫浜屼釜绱㈠紩椤电殑鍐呭
+        /// </summary>
+        private void InitFrameWhiteContent2()
+        {
+            //寮�鍏�
+            var btnTitleName = new NormalViewControl(270, 37, true);
+            btnTitleName.X = Application.GetRealWidth(16);
+            btnTitleName.Y = Application.GetRealHeight(18);
+            btnTitleName.TextColor = CSS_Color.FirstLevelTitleColor;
+            btnTitleName.TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel;
+            btnTitleName.TextID = StringId.OnOff;
+            FrameWhiteCentet2.AddChidren(btnTitleName);
+
+            //绔ラ攣
+            var rowLock = new FrameRowControl();
+            rowLock.Height = Application.GetRealHeight(50);
+            rowLock.Width = FrameWhiteCentet2.Width;
+            rowLock.Y = Application.GetRealHeight(75);
+            FrameWhiteCentet2.AddChidren(rowLock);
+            rowLock.AddLeftCaption(Language.StringByID(StringId.V_chip), 200);
+            rowLock.AddBottomLine();
+            this.btnLockSwitch = rowLock.AddMostRightSwitchIcon();
+            btnLockSwitch.IsSelected = this.airCleanerData.Lock;
+            btnLockSwitch.ButtonClickEvent += (sender, e) =>
+            {
+                if (this.btnSwitch.IsSelected == false)
+                {
+                    //杩樻病鏈夋墦寮�寮�鍏�
+                    return;
+                }
+                //鍙戦�佷娇鑳藉懡浠�
+                this.SendEnableComand(btnLockSwitch, "lock", btnLockSwitch.IsSelected == true ? "false" : "true");
+            };
+
+            //璐熺瀛�
+            var rowAnion = new FrameRowControl();
+            rowAnion.Height = Application.GetRealHeight(50);
+            rowAnion.Width = FrameWhiteCentet2.Width;
+            rowAnion.Y = rowLock.Bottom;
+            FrameWhiteCentet2.AddChidren(rowAnion);
+            rowAnion.AddLeftCaption(Language.StringByID(StringId.Anion), 200);
+            rowAnion.AddBottomLine();
+            this.btnAnionSwitch = rowAnion.AddMostRightSwitchIcon();
+            btnAnionSwitch.IsSelected = this.airCleanerData.Anion;
+            btnAnionSwitch.ButtonClickEvent += (sender, e) =>
+            {
+                if (this.btnSwitch.IsSelected == false)
+                {
+                    //杩樻病鏈夋墦寮�寮�鍏�
+                    return;
+                }
+                //鍙戦�佷娇鑳藉懡浠�
+                this.SendEnableComand(btnAnionSwitch, "anion", btnAnionSwitch.IsSelected == true ? "false" : "true");
+            };
+
+            //婊よ姱澶嶄綅
+            var rowReset = new FrameRowControl();
+            rowReset.Height = Application.GetRealHeight(50);
+            rowReset.Width = FrameWhiteCentet2.Width;
+            rowReset.Y = rowAnion.Bottom;
+            FrameWhiteCentet2.AddChidren(rowReset);
+            rowReset.AddLeftCaption(Language.StringByID(StringId.FilterElementReset), 200);
+            rowReset.AddBottomLine();
+            this.btnResetSwitch = rowReset.AddMostRightSwitchIcon();
+            btnResetSwitch.IsSelected = this.airCleanerData.FilterReset;
+            btnResetSwitch.ButtonClickEvent += (sender, e) =>
+            {
+                if (this.btnSwitch.IsSelected == false)
+                {
+                    //杩樻病鏈夋墦寮�寮�鍏�
+                    return;
+                }
+                //璇风‘璁ゆ槸鍚﹀凡瀹為檯閲嶇疆婊よ姱骞舵寜{0}鐓ц鏄庝功瑕佹眰鎿嶄綔璁惧杩涜婊よ姱{0}瀵垮懡閲嶆柊璁℃椂
+                string msg = Language.StringByID(StringId.FilterElementResetMsg).Replace("{0}", "\r\n");
+                this.ShowMassage(ShowMsgType.Confirm, msg, () =>
+                {
+                    //鍙戦�佷娇鑳藉懡浠�
+                    this.SendEnableComand(btnResetSwitch, "filter_reset", btnResetSwitch.IsSelected == true ? "false" : "true");
+                });
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 鏄剧ず椋庨�熺晫闈______________________
+
+        /// <summary>
+        /// 鏄剧ず椋庨�熺晫闈�
+        /// </summary>
+        private void ShowFanSpeedView()
+        {
+            //鏁翠釜鐏拌壊鐣岄潰
+            var frameBack = new Dialog();
+
+            var dialogBody = new NormalFrameLayout();
+            frameBack.AddChidren(dialogBody);
+            dialogBody.ButtonClickEvent = (sender, e) =>
+            {
+                frameBack.Close();
+            };
+            frameBack.Show();
+
+            //鑿滃崟鎺т欢(閫夋嫨椋庨��)
+            var menuContr = new DialogTitleMenuControl(4, Language.StringByID(StringId.WindSpeedSelection));
+            menuContr.X = Application.GetRealWidth(5);
+            menuContr.Y = Application.GetRealHeight(240);
+            menuContr.Width = Application.GetRealWidth(160);
+            menuContr.Height = Application.GetRealHeight(200);
+            dialogBody.AddChidren(menuContr);
+
+            //浣庢。
+            var iconPath = this.airCleanerData.Gear == "1" ? "FunctionIcon/Electrical/Fan/LowGearSelect.png" : "FunctionIcon/Electrical/Fan/LowGear.png";
+            menuContr.AddRowMenu(Language.StringByID(StringId.LowGear), iconPath, this.airCleanerData.Gear == "1", () =>
+            {
+                frameBack.Close();
+                //鍙戦�侀閫熷懡浠�
+                this.SendFanSpeedComand("1");
+            });
+
+            //涓。
+            iconPath = this.airCleanerData.Gear == "2" ? "FunctionIcon/Electrical/Fan/MidGearSelect.png" : "FunctionIcon/Electrical/Fan/MidGear.png";
+            menuContr.AddRowMenu(Language.StringByID(StringId.MidGear), iconPath, this.airCleanerData.Gear == "2", () =>
+            {
+                frameBack.Close();
+                //鍙戦�侀閫熷懡浠�
+                this.SendFanSpeedComand("2");
+            });
+
+            //楂樻。
+            iconPath = this.airCleanerData.Gear == "3" ? "FunctionIcon/Electrical/Fan/HeightGearSelect.png" : "FunctionIcon/Electrical/Fan/HeightGear.png";
+            menuContr.AddRowMenu(Language.StringByID(StringId.HeightGear), iconPath, this.airCleanerData.Gear == "3", () =>
+            {
+                frameBack.Close();
+                //鍙戦�侀閫熷懡浠�
+                this.SendFanSpeedComand("3");
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 鏄剧ず瀹氭椂鐣岄潰_______________________
+
+        /// <summary>
+        /// 鏄剧ず瀹氭椂鐣岄潰
+        /// </summary>
+        private void ShowTimingSelectView()
+        {
+            var listText = new List<string>();
+            listText.Add(Language.StringByID(StringId.CancelTiming));
+            listText.Add("1" + Language.StringByID(StringId.Hour1));
+            listText.Add("2" + Language.StringByID(StringId.Hour1));
+            listText.Add("4" + Language.StringByID(StringId.Hour1));
+            listText.Add("8" + Language.StringByID(StringId.Hour1));
+
+            //榛樿閫夋嫨
+            int defultIndex = this.airCleanerData.Timing == string.Empty ? -1 : Convert.ToInt32(this.airCleanerData.Timing);
+            if (defultIndex == 0) { defultIndex = -1; }
+
+            var contr = new BottomItemSelectControl(5, Language.StringByID(StringId.TimingSetting));
+            contr.AddRowMenu(listText, new List<int> { defultIndex });
+            contr.FinishOnlyEvent += (div, selectIndex) =>
+            {
+                if (div == 1)
+                {
+                    if (selectIndex == 0)
+                    {
+                        //鍙戦�佸畾鏃跺懡浠�
+                        this.SendTimingComand("cancel");
+                    }
+                    else
+                    {
+                        //鍙戦�佸畾鏃跺懡浠�
+                        this.SendTimingComand(selectIndex.ToString());
+                    }
+
+                }
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 鏄剧ず妯″紡鐣岄潰_______________________
+
+        /// <summary>
+        /// 鏄剧ず妯″紡鐣岄潰
+        /// </summary>
+        private void ShowModeSelectView()
+        {
+            //鏁翠釜鐏拌壊鐣岄潰
+            var frameBack = new Dialog();
+
+            var dialogBody = new NormalFrameLayout();
+            frameBack.AddChidren(dialogBody);
+            dialogBody.ButtonClickEvent = (sender, e) =>
+            {
+                frameBack.Close();
+            };
+            frameBack.Show();
+
+            //鑿滃崟鎺т欢
+            var menuContr = new DialogTitleMenuControl(4, Language.StringByID(StringId.ChooseMode));
+            menuContr.X = Application.GetRealWidth(210);
+            menuContr.Y = Application.GetRealHeight(197);
+            menuContr.Width = Application.GetRealWidth(160);
+            menuContr.Height = Application.GetRealHeight(243);
+            dialogBody.AddChidren(menuContr);
+
+            //鑷姩妯″紡
+            var iconPath = this.airCleanerData.Mode == "auto" ? "FunctionIcon/Electrical/Fan/AutoModeSelect.png" : "FunctionIcon/Electrical/Fan/AutoMode.png";
+            menuContr.AddRowMenu(Language.StringByID(StringId.AutoMode), iconPath, this.airCleanerData.Mode == "auto", () =>
+            {
+                frameBack.Close();
+                //鍙戦�佹ā寮忓懡浠�
+                this.SendModeComand("auto");
+            });
+
+            //鎵嬪姩妯″紡
+            iconPath = this.airCleanerData.Mode == "manual" ? "FunctionIcon/Electrical/Fan/HandModeSelect.png" : "FunctionIcon/Electrical/Fan/HandMode.png";
+            menuContr.AddRowMenu(Language.StringByID(StringId.HandMode), iconPath, this.airCleanerData.Mode == "manual", () =>
+            {
+                frameBack.Close();
+                //鍙戦�佹ā寮忓懡浠�
+                this.SendModeComand("manual");
+            });
+
+            //寮哄姴妯″紡
+            iconPath = this.airCleanerData.Mode == "strong" ? "FunctionIcon/Electrical/Fan/ComfortableModeSelect.png" : "FunctionIcon/Electrical/Fan/ComfortableMode.png";
+            menuContr.AddRowMenu(Language.StringByID(StringId.StrongMode), iconPath, this.airCleanerData.Mode == "strong", () =>
+            {
+                frameBack.Close();
+                //鍙戦�佹ā寮忓懡浠�
+                this.SendModeComand("strong");
+            });
+
+            //鐫$湢妯″紡
+            iconPath = this.airCleanerData.Mode == "sleep" ? "FunctionIcon/Electrical/Fan/SleepModeSelect.png" : "FunctionIcon/Electrical/Fan/SleepMode.png";
+            menuContr.AddRowMenu(Language.StringByID(StringId.SleepMode), iconPath, this.airCleanerData.Mode == "sleep", () =>
+            {
+                frameBack.Close();
+                //鍙戦�佹ā寮忓懡浠�
+                this.SendModeComand("sleep");
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佸弽棣坃______________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佸弽棣�
+        /// </summary>
+        /// <param name="i_LocalDevice"></param>
+        public override void DeviceStatuPush(Function i_LocalDevice)
+        {
+            //涓嶆槸鍚屼竴涓笢瑗�
+            if (this.device.sid != i_LocalDevice.sid) { return; }
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(i_LocalDevice);
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+        }
+
+        #endregion
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        /// <summary>
+        /// 鍙戦�佹ā寮忓懡浠�
+        /// </summary>
+        /// <param name="value">auto:鑷姩  sleep:鐫$湢  manual:鎵嬪姩  strong:寮虹儓</param>
+        private void SendModeComand(string value)
+        {
+            this.btnMode.CanClick = false;
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                var dic = new Dictionary<string, string>();
+                dic.Add("mode", value);
+                Control.Ins.SendWriteCommand(this.device, dic, true);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    this.btnMode.CanClick = true;
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鍙戦�佸畾鏃跺懡浠�
+        /// </summary>
+        /// <param name="value">canel:鍙栨秷 1:1灏忔椂 2:2灏忔椂 3:4灏忔椂 4:8灏忔椂</param>
+        private void SendTimingComand(string value)
+        {
+            this.btnTime.CanClick = false;
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                var dic = new Dictionary<string, string>();
+                dic.Add("countdown", value);
+                Control.Ins.SendWriteCommand(this.device, dic, true);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    this.btnTime.CanClick = true;
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鍙戦�侀閫熷懡浠�
+        /// </summary>
+        /// <param name="value">1:浣庢。 2:涓。 3:楂樻。</param>
+        private void SendFanSpeedComand(string value)
+        {
+            this.btnFan.CanClick = false;
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                var dic = new Dictionary<string, string>();
+                dic.Add("speed", value);
+                Control.Ins.SendWriteCommand(this.device, dic, true);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    this.btnFan.CanClick = true;
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鍙戦�佸紑鍏冲懡浠�
+        /// </summary>
+        private void SendSwitchComand()
+        {
+            this.btnPictrue.CanClick = false;
+            this.btnSwitch.CanClick = false;
+
+            //鍏朵粬涓変釜鎸夐挳鐨勭偣鍑讳篃瑕佹帶鍒�
+            this.btnFan.CanClick = this.btnSwitch.IsSelected;
+            this.btnMode.CanClick = this.btnSwitch.IsSelected;
+            this.btnTime.CanClick = this.btnSwitch.IsSelected;
+
+            string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                var dic = new Dictionary<string, string>();
+                dic.Add(FunctionAttributeKey.OnOff, statu);
+                Control.Ins.SendWriteCommand(this.device, dic, true);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    this.btnPictrue.CanClick = true;
+                    this.btnSwitch.CanClick = true;
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鍙戦�佷娇鑳藉懡浠�
+        /// </summary>
+        private void SendEnableComand(MostRightIconControl btnSwitch, string sendKey, string value)
+        {
+            btnSwitch.CanClick = false;
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                var dic = new Dictionary<string, string>();
+                dic.Add(sendKey, value);
+                Control.Ins.SendWriteCommand(this.device, dic, true);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    btnSwitch.CanClick = true;
+                });
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu()
+        {
+            //=======妯″紡=======
+            //寮哄姴妯″紡
+            if (this.airCleanerData.Mode == "strong")
+            {
+                if (this.btnModeView.TextID != StringId.StrongMode)
+                {
+                    //鐩稿悓涓嶅彉鏇�
+                    this.btnMode.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/ComfortableModeSelect.png";
+                    this.btnModeView.TextID = StringId.StrongMode;
+                }
+            }
+            //鐫$湢妯″紡
+            else if (this.airCleanerData.Mode == "sleep")
+            {
+                if (this.btnModeView.TextID != StringId.SleepMode)
+                {
+                    //鐩稿悓涓嶅彉鏇�
+                    this.btnMode.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/SleepModeSelect.png";
+                    this.btnModeView.TextID = StringId.SleepMode;
+                }
+            }
+            //鎵嬪姩妯″紡
+            else if (this.airCleanerData.Mode == "manual")
+            {
+                if (this.btnModeView.TextID != StringId.HandMode)
+                {
+                    //鐩稿悓涓嶅彉鏇�
+                    this.btnMode.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/HandModeSelect.png";
+                    this.btnModeView.TextID = StringId.HandMode;
+                }
+            }
+            //鑷姩妯″紡
+            else
+            {
+                if (this.btnModeView.TextID != StringId.AutoMode)
+                {
+                    //鐩稿悓涓嶅彉鏇�
+                    this.btnMode.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/AutoModeSelect.png";
+                    this.btnModeView.TextID = StringId.AutoMode;
+                }
+            }
+
+            //寮�鍏�
+            if (this.btnSwitch.IsSelected != this.airCleanerData.Open)
+            {
+                //鐩稿悓涓嶅彉鏇�
+                this.btnSwitch.IsSelected = this.airCleanerData.Open;
+                this.btnPictrue.IsSelected = this.airCleanerData.Open;
+                //鍏朵粬涓変釜鎸夐挳鐨勭偣鍑讳篃瑕佹帶鍒�
+                this.btnFan.CanClick = this.airCleanerData.Open;
+                this.btnMode.CanClick = this.airCleanerData.Open;
+                this.btnTime.CanClick = this.airCleanerData.Open;
+            }
+
+            //=====椋庨��=====
+            //楂樻。
+            if (airCleanerData.Gear == "3")
+            {
+                if (this.btnFanView.TextID != StringId.HeightGear)
+                {
+                    //鐩稿悓涓嶅彉鏇�
+                    this.btnFan.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/HeightGearSelect.png";
+                    this.btnFanView.TextID = StringId.HeightGear;
+                }
+            }
+            //涓。
+            else if (airCleanerData.Gear == "2")
+            {
+                if (this.btnFanView.TextID != StringId.MidGear)
+                {
+                    //鐩稿悓涓嶅彉鏇�
+                    this.btnFan.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/MidGearSelect.png";
+                    this.btnFanView.TextID = StringId.MidGear;
+                }
+            }
+            //浣庢。
+            else
+            {
+                if (this.btnFanView.TextID != StringId.LowGear)
+                {
+                    //鐩稿悓涓嶅彉鏇�
+                    this.btnFan.UnSelectedImagePath = "FunctionIcon/Electrical/Fan/LowGearSelect.png";
+                    this.btnFanView.TextID = StringId.LowGear;
+                }
+            }
+
+            //瀹氭椂
+            if (airCleanerData.Timing == "1")
+            {
+                btnTimeView.Text = "1" + Language.StringByID(StringId.Hour1);
+            }
+            else if (airCleanerData.Timing == "2")
+            {
+                btnTimeView.Text = "2" + Language.StringByID(StringId.Hour1);
+            }
+            else if (airCleanerData.Timing == "3")
+            {
+                btnTimeView.Text = "4" + Language.StringByID(StringId.Hour1);
+            }
+            else if (airCleanerData.Timing == "4")
+            {
+                btnTimeView.Text = "8" + Language.StringByID(StringId.Hour1);
+            }
+            else
+            {
+                btnTimeView.Text = Language.StringByID(StringId.Timing);
+            }
+
+            //婊よ姱浣跨敤
+            this.btnUsePersent.Text = Language.StringByID(StringId.UseOfFilterElement) + airCleanerData.FilterPersent + "%";
+            //PM2.5
+            this.btnPm25.Text = airCleanerData.PM25Value.ToString();
+            //绔ラ攣
+            if (this.btnLockSwitch.IsSelected != this.airCleanerData.Lock)
+            {
+                this.btnLockSwitch.IsSelected = this.airCleanerData.Lock;
+            }
+            //璐熺瀛�
+            if (this.btnAnionSwitch.IsSelected != this.airCleanerData.Anion)
+            {
+                this.btnAnionSwitch.IsSelected = this.airCleanerData.Anion;
+            }
+            //婊よ姱澶嶄綅
+            if (this.btnResetSwitch.IsSelected != this.airCleanerData.FilterReset)
+            {
+                this.btnResetSwitch.IsSelected = this.airCleanerData.FilterReset;
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+        /// </summary>
+        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
+        {
+            foreach (var data in i_LocalDevice.attributes)
+            {
+                //妯″紡
+                if (data.key == "mode") { this.airCleanerData.Mode = data.realValue; }
+                //椋庨�熸。浣�
+                else if (data.key == "speed") { this.airCleanerData.Gear = data.realValue; }
+                //寮�鍏�
+                else if (data.key == "on_off") { this.airCleanerData.Open = data.realValue.ToLower() == "on"; }
+                //绔ラ攣
+                else if (data.key == "lock") { this.airCleanerData.Lock = data.realValue.ToLower() == "true"; }
+                //婊よ姱澶嶄綅
+                else if (data.key == "filter_reset") { this.airCleanerData.FilterReset = data.realValue.ToLower() == "true"; }
+                //璐熺瀛�
+                else if (data.key == "anion") { this.airCleanerData.Anion = data.realValue.ToLower() == "true"; }
+                //瀹氭椂
+                else if (data.key == "countdown")
+                {
+                    this.airCleanerData.Timing = data.realValue;
+                    if (this.airCleanerData.Timing == "cancel")
+                    {
+                        this.airCleanerData.Timing = "0";
+                    }
+                }
+                //绌烘皵璐ㄩ噺
+                else if (data.key == "pm25")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.airCleanerData.PM25Value = Convert.ToInt32(value);
+                    }
+                }
+                //婊よ姱浣跨敤鐜�
+                else if (data.key == "filter")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.airCleanerData.FilterPersent = Convert.ToInt32(value);
+                    }
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 缁撴瀯浣揰____________________________
+
+        /// <summary>
+        /// 绌烘皵鍑�鍖栧櫒鐨勬暟鎹�
+        /// </summary>
+        private class AirCleanerData
+        {
+            /// <summary>
+            /// 鏄惁鎵撳紑
+            /// </summary>
+            public bool Open = true;
+            /// <summary>
+            /// 妗d綅 1:浣庢。 2:涓。 3:楂樻。
+            /// </summary>
+            public string Gear = "0";
+            /// <summary>
+            /// auto:鑷姩  sleep:鐫$湢  manual:鎵嬪姩  strong:寮虹儓
+            /// </summary>
+            public string Mode = string.Empty;
+            /// <summary>
+            /// cancel:鍙栨秷 1:1灏忔椂 2:2灏忔椂 3:4灏忔椂 4:8灏忔椂
+            /// </summary>
+            public string Timing = "0";
+            /// <summary>
+            /// 绔ラ攣
+            /// </summary>
+            public bool Lock = false;
+            /// <summary>
+            /// 婊よ姱澶嶄綅
+            /// </summary>
+            public bool FilterReset = false;
+            /// <summary>
+            /// 璐熺瀛�
+            /// </summary>
+            public bool Anion = false;
+            /// <summary>
+            /// PM2.5鐨勫��
+            /// </summary>
+            public int PM25Value = 0;
+            /// <summary>
+            /// 婊よ姱浣跨敤鐜� 0-100
+            /// </summary>
+            public int FilterPersent = 0;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs
new file mode 100755
index 0000000..46a6942
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaFanPage.cs
@@ -0,0 +1,277 @@
+锘縰sing Shared;
+using HDL_ON.Stan;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HDL_ON.UI.CSS;
+using HDL_ON.Entity;
+using HDL_ON.DriverLayer;
+
+namespace HDL_ON.UI
+{
+    /// <summary>
+    /// 娑傞甫椋庢墖鐨勬帶鍒剁晫闈�
+    /// </summary>
+    public class TuyaFanPage : DeviceFunctionCardCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 褰撳墠妗d綅鎺т欢
+        /// </summary>
+        private NormalViewControl btnNowGear = null;
+        /// <summary>
+        /// 婊戝姩鏉℃帶浠�
+        /// </summary>
+        private SeekBarImageControl seekBarContr = null;
+        /// <summary>
+        /// 寮�鍏虫帶浠�
+        /// </summary>
+        private IconViewControl btnSwitch = null;
+        /// <summary>
+        /// 椋庢墖鏁版嵁
+        /// </summary>
+        private FanData fanData = new FanData();
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public override void InitFrameWhiteContent()
+        {
+            base.SetTitleText(Language.StringByID(StringId.Fan));
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(this.device);
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
+        {
+            //褰撳墠椋庨��
+            var btnNowSpeed = new NormalViewControl(FrameWhiteCentet1.Width, Application.GetRealHeight(21), false);
+            btnNowSpeed.Y = Application.GetRealHeight(164);
+            btnNowSpeed.TextAlignment = TextAlignment.Center;
+            btnNowSpeed.TextID = StringId.CurrentWindSpeed;
+            FrameWhiteCentet1.AddChidren(btnNowSpeed);
+
+            //褰撳墠妗d綅鍊�
+            this.btnNowGear = new NormalViewControl(200, 38, true);
+            btnNowGear.TextAlignment = TextAlignment.Center;
+            btnNowGear.TextSize = CSS_FontSize.EmphasisFontSize_ExLevel;
+            btnNowGear.Gravity = Gravity.CenterHorizontal;
+            btnNowGear.Y = btnNowSpeed.Bottom + Application.GetRealHeight(8);
+            FrameWhiteCentet1.AddChidren(btnNowGear);
+
+            //婊戝姩鏉�
+            this.seekBarContr = new SeekBarImageControl(215);
+            seekBarContr.Enable = false;
+            seekBarContr.Gravity = Gravity.CenterHorizontal;
+            seekBarContr.Y = btnNowGear.Bottom + Application.GetRealHeight(30);
+            seekBarContr.MinValue = 1;
+            seekBarContr.MaxValue = 15;
+            FrameWhiteCentet1.AddChidren(seekBarContr);
+
+            //寮�鍏冲浘鏍�
+            this.btnSwitch = new IconViewControl(40);
+            btnSwitch.Gravity = Gravity.CenterHorizontal;
+            btnSwitch.Y = Application.GetRealHeight(468);
+            btnSwitch.UnSelectedImagePath = "Public/PowerClose.png";
+            btnSwitch.SelectedImagePath = "Public/PowerOpen.png";
+            FrameWhiteCentet1.AddChidren(btnSwitch);
+            btnSwitch.ButtonClickEvent += (sender, e) =>
+            {
+                //鍙戦�佸紑鍏冲懡浠�
+                this.SendSwitchComand();
+            };
+
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu(false);
+
+            int oldProgressValue = fanData.SpeedLevel;
+            int nowProgressValue = fanData.SpeedLevel;
+            //妗�
+            var strView = Language.StringByID(StringId.Gear);
+            seekBarContr.ProgressChangedEvent += (div, value) =>
+            {
+                nowProgressValue = value;
+                this.btnNowGear.Text = value + strView;
+                //婊戝姩涓�
+                if (div == 0) { this.fanData.IsProgressing = true; }
+                //婊戝姩缁撴潫
+                else
+                {
+                    this.fanData.IsProgressing = false;
+                    this.fanData.ProgressEndTime = DateTime.Now;
+                }
+            };
+
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                while (this.Parent != null)
+                {
+                    if (nowProgressValue != oldProgressValue)
+                    {
+                        //鍙戦�侀閫熷懡浠�
+                        this.SendSpeedComand(nowProgressValue);
+                        oldProgressValue = nowProgressValue;
+                    }
+                    System.Threading.Thread.Sleep(1000);
+                }
+                //鐣岄潰鍏抽棴鏃�
+                if (nowProgressValue != oldProgressValue)
+                {
+                    //鍙戦�侀閫熷懡浠�
+                    this.SendSpeedComand(nowProgressValue);
+                }
+            });
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佸弽棣坃______________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佸弽棣�
+        /// </summary>
+        /// <param name="i_LocalDevice"></param>
+        public override void DeviceStatuPush(Function i_LocalDevice)
+        {
+            //涓嶆槸鍚屼竴涓笢瑗�
+            if (this.device.sid != i_LocalDevice.sid) { return; }
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(i_LocalDevice);
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu(true);
+        }
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu(bool checkTime)
+        {
+            //寮�鍏�
+            if (this.btnSwitch.IsSelected != this.fanData.Open)
+            {
+                //鐩稿悓涓嶅彉鏇�
+                this.btnSwitch.IsSelected = this.fanData.Open;
+                this.seekBarContr.Enable = this.fanData.Open;
+            }
+            //濡傛灉鏄仠姝㈡粦鍔ㄧ殑鎯呭喌
+            if (this.fanData.IsProgressing == false)
+            {
+                if (checkTime == true && (DateTime.Now - this.fanData.ProgressEndTime).TotalSeconds <= 2)
+                {
+                    //2绉掍箣鍐呬笉鍙樻洿婊戝姩鏉$殑鍊�(涓轰簡涓嶈瀹冩潵鍥炶烦鍔�)
+                    return;
+                }
+                if (this.seekBarContr.Progress != this.fanData.SpeedLevel)
+                {
+                    //鍙樻洿杩涘害鏉$殑鍊�
+                    this.seekBarContr.Progress = this.fanData.SpeedLevel;
+                    this.btnNowGear.Text = this.fanData.SpeedLevel + Language.StringByID(StringId.Gear);
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        /// <summary>
+        /// 鍙戦�佸紑鍏冲懡浠�
+        /// </summary>
+        private void SendSwitchComand()
+        {
+            this.btnSwitch.CanClick = false;
+
+            string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
+            HdlThreadLogic.Current.RunThread(() =>
+            {
+                var dic = new Dictionary<string, string>();
+                dic.Add(FunctionAttributeKey.OnOff, statu);
+                Control.Ins.SendWriteCommand(this.device, dic, true);
+                HdlThreadLogic.Current.RunMain(() =>
+                {
+                    this.btnSwitch.CanClick = true;
+                });
+            });
+        }
+
+        /// <summary>
+        /// 鍙戦�侀閫熷懡浠�
+        /// </summary>
+        private void SendSpeedComand(int value)
+        {
+            var dic = new Dictionary<string, string>();
+            dic.Add("fan_speed_percent", value.ToString());
+            Control.Ins.SendWriteCommand(this.device, dic, true);
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+        /// </summary>
+        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
+        {
+            foreach (var data in i_LocalDevice.attributes)
+            {
+                //寮�鍏�
+                if (data.key == "on_off") { this.fanData.Open = data.realValue == "on"; }
+                //椋庨�熸。浣�
+                else if (data.key == "fan_speed_percent")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.fanData.SpeedLevel = Convert.ToInt32(value);
+                    }
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 缁撴瀯浣揰____________________________
+
+        /// <summary>
+        /// 椋庢墖鐨勬暟鎹�
+        /// </summary>
+        private class FanData
+        {
+            /// <summary>
+            /// 鏄惁鎵撳紑
+            /// </summary>
+            public bool Open = true;
+            /// <summary>
+            /// 椋庨�熸。浣�(1-15)
+            /// </summary>
+            public int SpeedLevel = 1;
+            /// <summary>
+            /// 鏄惁姝e湪婊戝姩涓�
+            /// </summary>
+            public bool IsProgressing = false;
+            /// <summary>
+            /// 婊戝姩缁撴潫鐨勬椂闂�
+            /// </summary>
+            public DateTime ProgressEndTime = DateTime.Now;
+        }
+
+        #endregion
+    }
+}
diff --git a/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
new file mode 100755
index 0000000..4ebf58c
--- /dev/null
+++ b/HDL_ON/UI/UI2/FuntionControlView/Electrical/TuyaWeepRobotPage.cs
@@ -0,0 +1,484 @@
+锘縰sing Shared;
+using HDL_ON.Stan;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using HDL_ON.UI.CSS;
+using HDL_ON.Entity;
+using HDL_ON.DriverLayer;
+
+namespace HDL_ON.UI
+{
+    /// <summary>
+    /// 娑傞甫鎵湴鏈哄櫒浜虹殑鎺у埗鐣岄潰
+    /// </summary>
+    public class TuyaWeepRobotPage : DeviceFunctionCardCommonForm
+    {
+        #region 鈻� 鍙橀噺澹版槑___________________________
+
+        /// <summary>
+        /// 鐢垫睜鍥炬爣
+        /// </summary>
+        private IconViewControl btnBatteryIcon = null;
+        /// <summary>
+        /// 鐢垫睜鐧惧垎姣旀帶浠�
+        /// </summary>
+        private NormalViewControl btnBatteryView = null;
+        /// <summary>
+        /// 鍚稿姏璋冭妭鍥炬爣
+        /// </summary>
+        private IconViewControl btnSuctionIcon = null;
+        /// <summary>
+        /// 鍚稿姏璋冭妭鏂囨湰鎺т欢
+        /// </summary>
+        private NormalViewControl btnSuctionView = null;
+        /// <summary>
+        /// 鍏呯數鍥炬爣
+        /// </summary>
+        private IconViewControl btnChargeIcon = null;
+        /// <summary>
+        /// 澹伴煶鍥炬爣
+        /// </summary>
+        private IconViewControl btnVoiceIcon = null;
+        /// <summary>
+        /// 澹伴煶鏂囨湰鎺т欢
+        /// </summary>
+        private NormalViewControl btnVoiceView = null;
+        /// <summary>
+        /// 娓呮壂妯″紡鍥炬爣
+        /// </summary>
+        private IconViewControl btnModeIcon = null;
+        /// <summary>
+        /// 娓呮壂妯″紡鏂囨湰鎺т欢
+        /// </summary>
+        private NormalViewControl btnModeView = null;
+        /// <summary>
+        /// 鍥惧儚鎺у埗鎺т欢
+        /// </summary>
+        private DirectionImageControl ImageControl = null;
+        /// <summary>
+        /// 鎵湴鏈哄櫒浜烘暟鎹�
+        /// </summary>
+        private WeepRobotData weepRobotData = new WeepRobotData();
+
+        #endregion
+
+        #region 鈻� 鍒濆鍖朹____________________________
+
+        /// <summary>
+        /// 鍒濆鍖栫櫧鑹插尯鍩熺殑鍐呭
+        /// </summary>
+        public override void InitFrameWhiteContent()
+        {
+            base.SetTitleText(Language.StringByID(StringId.WeepRobot));
+
+            //娣诲姞绗簩绱㈠紩椤�
+            this.AddSecondPage();
+            //鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+            this.InitFrameWhiteContent1();
+            //鍒濆鍖栫浜屼釜绱㈠紩椤电殑鍐呭
+            this.InitFrameWhiteContent2();
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(this.device);
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫涓�涓储寮曢〉鐨勫唴瀹�
+        /// </summary>
+        private void InitFrameWhiteContent1()
+        {
+            //鐢垫睜鍥炬爣
+            this.btnBatteryIcon = new IconViewControl(24);
+            btnBatteryIcon.X = base.btnRoomName.Right + Application.GetRealWidth(24);
+            btnBatteryIcon.Y = base.btnRoomName.Y - (btnBatteryIcon.IconSize - base.btnRoomName.Height) / 2;
+            btnBatteryIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Battery.png";
+            FrameWhiteCentet1.AddChidren(btnBatteryIcon);
+            //鐢垫睜鐧惧垎姣�
+            this.btnBatteryView = new NormalViewControl(30, 16, true);
+            btnBatteryView.X = btnBatteryIcon.Right + Application.GetRealWidth(4);
+            btnBatteryView.Y = btnBatteryIcon.Y + (btnBatteryIcon.Height - Application.GetRealHeight(16)) / 2;
+            btnBatteryView.Text = this.weepRobotData.ElectricityLeft + "%";
+            btnBatteryView.TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel;
+            btnBatteryView.TextColor = CSS_Color.PromptingColor1;
+            FrameWhiteCentet1.AddChidren(btnBatteryView);
+            //閰嶇疆鍙樻洿浜嬩欢
+            base.SettionFinishEvent += () =>
+            {
+                btnBatteryIcon.X = base.btnRoomName.Right + Application.GetRealWidth(24);
+                btnBatteryView.X = btnBatteryIcon.Right + Application.GetRealWidth(4);
+            };
+
+            //鍒濆鍖栦腑闂寸殑閭d釜鍥惧儚鎺у埗鎺т欢
+            this.ImageControl = new DirectionImageControl();
+            ImageControl.Y = Application.GetRealHeight(108);
+            ImageControl.Width = Application.GetRealWidth(198);
+            ImageControl.Height = Application.GetRealWidth(198);
+            ImageControl.Gravity = Gravity.CenterHorizontal;
+            FrameWhiteCentet1.AddChidren(ImageControl);
+            //鍒濆鍖栨帶浠�
+            ImageControl.InitControl("FunctionIcon/Electrical/WeepRobot/ControlEnable.png", "FunctionIcon/Electrical/WeepRobot/ControlDisable.png",
+                "FunctionIcon/Electrical/WeepRobot/ControlUp.png", "FunctionIcon/Electrical/WeepRobot/ControlDown.png",
+                "FunctionIcon/Electrical/WeepRobot/ControlLeft.png", "FunctionIcon/Electrical/WeepRobot/ControlRight.png");
+            //鎺у埗浜嬩欢(涓嶆敮鎸丒nable鍜孌isable,閮藉綊涓篗id)
+            ImageControl.ControlEvent += (select) =>
+            {
+
+            };
+
+            //鍚稿姏璋冭妭
+            this.btnSuctionIcon = new IconViewControl(28);
+            btnSuctionIcon.Y = ImageControl.Bottom + Application.GetRealHeight(64);
+            btnSuctionIcon.X = Application.GetRealWidth(33);
+            btnSuctionIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Suction.png";
+            btnSuctionIcon.SelectedImagePath = "FunctionIcon/Electrical/WeepRobot/SuctionSelect.png";
+            FrameWhiteCentet1.AddChidren(btnSuctionIcon);
+            btnSuctionIcon.ButtonClickEvent += (sender, e) =>
+            {
+            };
+            this.btnSuctionView = new NormalViewControl(80, 54, true);
+            btnSuctionView.Y = btnSuctionIcon.Bottom + Application.GetRealHeight(10);
+            btnSuctionView.X = btnSuctionIcon.X - (Application.GetRealWidth(80) - btnSuctionIcon.Width) / 2;
+            btnSuctionView.TextAlignment = TextAlignment.TopCenter;
+            btnSuctionView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnSuctionView.Text = Language.StringByID(StringId.SuctionAdjustment);
+            btnSuctionView.IsMoreLines = true;
+            FrameWhiteCentet1.AddChidren(btnSuctionView);
+
+            //鍏呯數鍥炬爣
+            this.btnChargeIcon = new IconViewControl(28);
+            btnChargeIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Charge.png";
+            btnChargeIcon.SelectedImagePath = "FunctionIcon/Electrical/WeepRobot/ChargeSelect.png";
+            btnChargeIcon.Y = btnSuctionIcon.Y;
+            btnChargeIcon.X = btnSuctionIcon.Right + Application.GetRealWidth(50);
+            FrameWhiteCentet1.AddChidren(btnChargeIcon);
+            btnChargeIcon.ButtonClickEvent += (sender, e) =>
+            {
+            };
+            var btnChargeView = new NormalViewControl(80, 18, true);
+            btnChargeView.Y = btnSuctionView.Y;
+            btnChargeView.X = btnChargeIcon.X - (Application.GetRealWidth(80) - btnChargeIcon.Width) / 2;
+            btnChargeView.TextAlignment = TextAlignment.TopCenter;
+            btnChargeView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnChargeView.TextID = StringId.Charge;
+            FrameWhiteCentet1.AddChidren(btnChargeView);
+
+            //澹伴煶鍥炬爣
+            this.btnVoiceIcon = new IconViewControl(28);
+            btnVoiceIcon.Y = btnSuctionIcon.Y;
+            btnVoiceIcon.X = btnChargeIcon.Right + Application.GetRealWidth(50);
+            btnVoiceIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Voice.png";
+            btnVoiceIcon.SelectedImagePath = "FunctionIcon/Electrical/WeepRobot/VoiceSelect.png";
+            FrameWhiteCentet1.AddChidren(btnVoiceIcon);
+            btnVoiceIcon.ButtonClickEvent += (sender, e) =>
+            {
+            };
+            this.btnVoiceView = new NormalViewControl(80, 18, true);
+            btnVoiceView.Y = btnSuctionView.Y;
+            btnVoiceView.X = btnVoiceIcon.X - (Application.GetRealWidth(80) - btnVoiceIcon.Width) / 2;
+            btnVoiceView.TextAlignment = TextAlignment.TopCenter;
+            btnVoiceView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnVoiceView.TextID = StringId.Mute;
+            FrameWhiteCentet1.AddChidren(btnVoiceView);
+
+            //娓呮壂妯″紡鍥炬爣
+            this.btnModeIcon = new IconViewControl(28);
+            btnModeIcon.Y = btnSuctionIcon.Y;
+            btnModeIcon.X = btnVoiceIcon.Right + Application.GetRealWidth(50);
+            btnModeIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Clean.png";
+            FrameWhiteCentet1.AddChidren(btnModeIcon);
+            btnModeIcon.ButtonClickEvent += (sender, e) =>
+            {
+            };
+            this.btnModeView = new NormalViewControl(80, 54, true);
+            btnModeView.Y = btnSuctionView.Y;
+            btnModeView.X = btnModeIcon.X - (Application.GetRealWidth(80) - btnModeIcon.Width) / 2;
+            btnModeView.TextAlignment = TextAlignment.TopCenter;
+            btnModeView.TextSize = CSS_FontSize.PromptFontSize_FirstLevel;
+            btnModeView.TextID = StringId.CleanMode;
+            btnModeView.IsMoreLines = true;
+            FrameWhiteCentet1.AddChidren(btnModeView);
+        }
+
+        /// <summary>
+        /// 鍒濆鍖栫浜屼釜绱㈠紩椤电殑鍐呭
+        /// </summary>
+        private void InitFrameWhiteContent2()
+        {
+            //鎵湴鏈哄櫒浜�
+            var btnTitleName = new NormalViewControl(270, 37, true);
+            btnTitleName.X = Application.GetRealWidth(16);
+            btnTitleName.Y = Application.GetRealHeight(18);
+            btnTitleName.TextColor = CSS_Color.FirstLevelTitleColor;
+            btnTitleName.TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel;
+            btnTitleName.TextID = StringId.WeepRobot;
+            FrameWhiteCentet2.AddChidren(btnTitleName);
+
+            //鑰楁潗绠$悊
+            var rowManment = new FrameRowControl();
+            rowManment.Height = Application.GetRealHeight(50);
+            rowManment.Width = FrameWhiteCentet2.Width;
+            rowManment.Y = Application.GetRealHeight(75);
+            FrameWhiteCentet2.AddChidren(rowManment);
+            rowManment.AddLeftCaption(Language.StringByID(StringId.ConsumablesManagement), 200);
+            rowManment.AddBottomLine();
+            rowManment.AddRightArrow();
+            rowManment.ButtonClickEvent += (sender, e) =>
+            {
+            };
+
+            //鍘嗗彶璁板綍
+            var rowHistory = new FrameRowControl();
+            rowHistory.Height = Application.GetRealHeight(50);
+            rowHistory.Width = FrameWhiteCentet2.Width;
+            rowHistory.Y = rowManment.Bottom;
+            FrameWhiteCentet2.AddChidren(rowHistory);
+            rowHistory.AddLeftCaption(Language.StringByID(StringId.HistoryLog), 200);
+            rowHistory.AddBottomLine();
+            rowHistory.AddRightArrow();
+            rowHistory.ButtonClickEvent += (sender, e) =>
+            {
+            };
+        }
+
+        #endregion
+
+        #region 鈻� 璁惧鐘舵�佸弽棣坃______________________
+
+        /// <summary>
+        /// 璁惧鐘舵�佸弽棣�
+        /// </summary>
+        /// <param name="i_LocalDevice"></param>
+        public override void DeviceStatuPush(Function i_LocalDevice)
+        {
+            //涓嶆槸鍚屼竴涓笢瑗�
+            if (this.device.sid != i_LocalDevice.sid) { return; }
+
+            //鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+            this.RefreshNowDeviceStatuMemory(i_LocalDevice);
+            //鍒锋柊鐣岄潰鐘舵��
+            this.RefreshFormStatu();
+        }
+
+        #endregion
+
+        #region 鈻� 鍙戦�佸悇绉嶅懡浠______________________
+
+        /// <summary>
+        /// 鍙戦�佸紑鍏冲懡浠�
+        /// </summary>
+        private void SendSwitchComand()
+        {
+            //this.btnSwitch.CanClick = false;
+
+            //string statu = this.btnSwitch.IsSelected == true ? "off" : "on";
+            //HdlThreadLogic.Current.RunThread(() =>
+            //{
+            //    var dic = new Dictionary<string, string>();
+            //    dic.Add(FunctionAttributeKey.OnOff, statu);
+            //    Control.Ins.SendWriteCommand(this.device, dic, true);
+            //    HdlThreadLogic.Current.RunMain(() =>
+            //    {
+            //        this.btnSwitch.CanClick = true;
+            //    });
+            //});
+        }
+
+        #endregion
+
+        #region 鈻� 鍒锋柊鐣岄潰鐘舵�乢______________________
+
+        /// <summary>
+        /// 鍒锋柊鐣岄潰鐘舵��
+        /// </summary>
+        private void RefreshFormStatu()
+        {
+            //闈欓煶(瀹冩湁鍥涗釜鍥炬爣)
+            if (this.weepRobotData.VoiceSwitch == true)
+            {
+                //闇�瑕佸垏鎹㈠浘鏍�
+                if (this.btnVoiceIcon.UnSelectedImagePath != "FunctionIcon/Electrical/WeepRobot/Mute.png")
+                {
+                    this.btnVoiceIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Mute.png";
+                    this.btnVoiceIcon.SelectedImagePath = "FunctionIcon/Electrical/WeepRobot/MuteSelect.png";
+                }
+            }
+            else
+            {
+                //闇�瑕佸垏鎹㈠浘鏍�
+                if (this.btnVoiceIcon.UnSelectedImagePath != "FunctionIcon/Electrical/WeepRobot/Voice.png")
+                {
+                    this.btnVoiceIcon.UnSelectedImagePath = "FunctionIcon/Electrical/WeepRobot/Voice.png";
+                    this.btnVoiceIcon.SelectedImagePath = "FunctionIcon/Electrical/WeepRobot/VoiceSelect.png";
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 涓�鑸柟娉昣__________________________
+
+        /// <summary>
+        /// 鍒锋柊褰撳墠璁惧鐨勭姸鎬佺紦瀛�
+        /// </summary>
+        private void RefreshNowDeviceStatuMemory(Function i_LocalDevice)
+        {
+            foreach (var data in i_LocalDevice.attributes)
+            {
+                //寮�鍏�
+                if (data.key == "on_off") { this.weepRobotData.Open = data.realValue.ToLower() == "on"; }
+                //瀵绘壘鏈哄櫒
+                else if (data.key == "seek") { this.weepRobotData.SearchRobot = data.realValue.ToLower() == "true"; }
+                //杈瑰埛閲嶇疆
+                else if (data.key == "reset_edge_brush") { this.weepRobotData.ResetEdgeBrush = data.realValue.ToLower() == "true"; }
+                //婊氬埛閲嶇疆
+                else if (data.key == "reset_roll_brush") { this.weepRobotData.ResetRollBrush = data.realValue.ToLower() == "true"; }
+                //婊ょ綉閲嶇疆
+                else if (data.key == "reset_filter") { this.weepRobotData.ResetFilter = data.realValue.ToLower() == "true"; }
+                //鍚稿姏閫夋嫨
+                else if (data.key == "suction") { this.weepRobotData.Suction = data.realValue; }
+                //宸ヤ綔妯″紡
+                else if (data.key == "mode") { this.weepRobotData.Mode = data.realValue; }
+                //娓呮壂鏂瑰悜	
+                else if (data.key == "direction_control") { this.weepRobotData.DirectionControl = data.realValue; }
+                //澹伴煶寮�鍏�
+                else if (data.key == "voice_switch") { this.weepRobotData.VoiceSwitch = data.realValue.ToLower() == "true"; }
+                //娓呮壂闈㈢Н
+                else if (data.key == "clean_area")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.weepRobotData.CleanArea = Convert.ToInt32(value);
+                    }
+                }
+                //娓呮壂璁板綍	
+                else if (data.key == "clean_record") { this.weepRobotData.CleanRecord = data.realValue; }
+                //杈瑰埛瀵垮懡
+                else if (data.key == "edge_brush")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.weepRobotData.EdgeBrush = Convert.ToInt32(value);
+                    }
+                }
+                //婊氬埛瀵垮懡
+                else if (data.key == "roll_brush")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.weepRobotData.RollBrush = Convert.ToInt32(value);
+                    }
+                }
+                //婊ょ綉瀵垮懡
+                else if (data.key == "filter")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.weepRobotData.Filter = Convert.ToInt32(value);
+                    }
+                }
+                //娓呮壂鏃堕棿
+                else if (data.key == "clean_time")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.weepRobotData.CleanTime = Convert.ToInt32(value);
+                    }
+                }
+                //鍓╀綑鐢甸噺	
+                else if (data.key == "electricity_left")
+                {
+                    var value = data.realValue;
+                    if (value != string.Empty)
+                    {
+                        this.weepRobotData.ElectricityLeft = Convert.ToInt32(value);
+                    }
+                }
+            }
+        }
+
+        #endregion
+
+        #region 鈻� 缁撴瀯浣揰____________________________
+
+        /// <summary>
+        /// 鎵湴鏈哄櫒浜虹殑鏁版嵁
+        /// </summary>
+        private class WeepRobotData
+        {
+            /// <summary>
+            /// 鏄惁鎵撳紑
+            /// </summary>
+            public bool Open = true;
+            /// <summary>
+            /// 瀵绘壘鏈哄櫒
+            /// </summary>
+            public bool SearchRobot = false;
+            /// <summary>
+            /// 杈瑰埛閲嶇疆
+            /// </summary>
+            public bool ResetEdgeBrush = false;
+            /// <summary>
+            /// 婊氬埛閲嶇疆
+            /// </summary>
+            public bool ResetRollBrush = false;
+            /// <summary>
+            /// 婊ょ綉閲嶇疆
+            /// </summary>
+            public bool ResetFilter = false;
+            /// <summary>
+            /// 鍚稿姏閫夋嫨(strong:涓�妗� normal:浜屾尅 quiet:涓夋尅)
+            /// </summary>
+            public string Suction = string.Empty;
+            /// <summary>
+            /// 宸ヤ綔妯″紡(random:鑷姩娓呮壂 smart:瀹氱偣娓呮壂 wall_follow:娌垮娓呮壂 spiral:鍖哄煙娓呮壂 chargego:鍏呯數)
+            /// </summary>
+            public string Mode = string.Empty;
+            /// <summary>
+            /// 娓呮壂鏂瑰悜(forward:鍚戝墠 backward:鍚戝悗 turn_left:鍚戝乏 turn_right:鍚戝彸 stop:鍋滄)
+            /// </summary>
+            public string DirectionControl = string.Empty;
+            /// <summary>
+            /// 闈欓煶
+            /// </summary>
+            public bool VoiceSwitch = false;
+            /// <summary>
+            /// 娓呮壂闈㈢Н
+            /// </summary>
+            public int CleanArea = 0;
+            /// <summary>
+            /// 娓呮壂璁板綍(鐩墠閮芥槸绌虹殑)
+            /// </summary>
+            public string CleanRecord = string.Empty;
+            /// <summary>
+            /// 杈瑰埛瀵垮懡(鐧惧垎姣�)
+            /// </summary>
+            public int EdgeBrush = 0;
+            /// <summary>
+            /// 婊氬埛瀵垮懡(鐧惧垎姣�)
+            /// </summary>
+            public int RollBrush = 0;
+            /// <summary>
+            /// 婊ょ綉瀵垮懡(鐧惧垎姣�)
+            /// </summary>
+            public int Filter = 0;
+            /// <summary>
+            /// 娓呮壂鏃堕棿(0-432000)
+            /// </summary>
+            public int CleanTime = 0;
+            /// <summary>
+            /// 鍓╀綑鐢甸噺(鐧惧垎姣�)
+            /// </summary>
+            public int ElectricityLeft = 0;
+        }
+
+        #endregion
+    }
+}

--
Gitblit v1.8.0