黄学彪
2020-04-14 463cf39019aa54e6c1226be4620766a035a0c490
上传个东西
1个文件已添加
22个文件已修改
1193 ■■■■ 已修改文件
ZigbeeApp/GateWay.Droid/Assets/Language.ini 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Home.Ios/Resources/Language.ini 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Common/Device.cs 9 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Login/AccountLogin.cs 292 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/Login/Controls/PhoneEmailSelectControl.cs 129 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs 13 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/ListViewLayoutControls/VerticalFrameControl.cs 15 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs 58 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs 9 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddDevicePage.cs 18 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddScenePage.cs 24 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindCommonLayout.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/ChooseKeyModePage.cs 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs 319 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirBackLightSettionForm.cs 82 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirButtonSettionForm.cs 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirTargetForm.cs 64 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/ShowDoorLockMsgControl.cs 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs 45 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs 30 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/R.cs 33 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/Shared/Shared.projitems 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
ZigbeeApp/GateWay.Droid/Assets/Language.ini
@@ -302,10 +302,14 @@
295= 生效时间不能大于失效时间
296= 失效时间不能小于生效时间
297= 失效时间不能省略
298= 失效时间不能大于36小时
298= 失效时间不能大于72小时
299= 失效时间不能小于1小时
300=新风
301=非管理员不能在常开模式下操作
302=绑定新风
303=温度来源
304=湿度来源
305=PM2.5来源
@@ -1793,6 +1797,9 @@
16088=常开模式开启(网关触发)
16089=常开模式结束(网关触发)
16090=常开模式
16091=常开模式手动开启
16092=常开模式手动取消
16093=常开模式启用{0}小时
;★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
18004=指定网关已经被绑定
ZigbeeApp/Home.Ios/Resources/Language.ini
@@ -302,10 +302,14 @@
295= 生效时间不能大于失效时间
296= 失效时间不能小于生效时间
297= 失效时间不能省略
298= 失效时间不能大于36小时
298= 失效时间不能大于72小时
299= 失效时间不能小于1小时
300=新风
301=非管理员不能在常开模式下操作
302=绑定新风
303=温度来源
304=湿度来源
305=PM2.5来源
@@ -1793,6 +1797,9 @@
16088=常开模式开启(网关触发)
16089=常开模式结束(网关触发)
16090=常开模式
16091=常开模式手动开启
16092=常开模式手动取消
16093=常开模式启用{0}小时
;★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
18004=指定网关已经被绑定
ZigbeeApp/Shared/Common/Device.cs
@@ -2044,6 +2044,15 @@
                    return false;
                }
            }
            //如果是新风面板的新风设备,则不显示
            else if (i_device.Type == DeviceType.FreshAir)
            {
                var myInfoType = LocalDevice.Current.GetMyDeviceEnumInfo(new List<CommonDevice>() { i_device });
                if (myInfoType.ConcreteType == DeviceConcreteType.ButtonPanel_FangyueFreshAir)
                {
                    return false;
                }
            }
            //2020.03.30追加式样:如果是面板的温度探头,不显示
            else if (i_device.Type == DeviceType.TemperatureSensor && ((TemperatureSensor)i_device).SensorDiv == 1)
            {
ZigbeeApp/Shared/Phone/Login/AccountLogin.cs
@@ -2,7 +2,8 @@
using Shared.Common;
using Shared.Phone.UserView;
using Shared.Phone.Device.CommonForm;
using Shared.Phone.UserCenter;
namespace Shared.Phone.Login
{
    /// <summary>
@@ -858,10 +859,297 @@
            {
                loginBtn.Enable = loginBtn.IsSelected = false;
            }
        }
        }
        #endregion
        #region ■ 变量声明___________________________
        /// <summary>
        /// 手机账号登陆的控件容器
        /// </summary>
        private FrameLayout frameAccLoginPhoneback = null;
        /// <summary>
        /// 邮箱账号登陆的控件容器
        /// </summary>
        private FrameLayout frameEmailLoginPhoneback = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 界面显示
        /// </summary>
        /// <param name="account">登陆账号</param>
        public void ShowForm(string account = "")
        {
            if (Config.Instance.IsLogin == true)
            {
                return;
            }
            CommonPage.Instance.IsDrawerLockMode = true;
            this.Tag = "Login";
            //界面上部的黑色图片
            var btnTopBlackPic = new NormalViewControl(this.Width, Application.GetRealHeight(619), false);
            btnTopBlackPic.UnSelectedImagePath = "Account/Logo_loginBG.png";
            this.AddChidren(btnTopBlackPic);
            //中间浅白色的背景
            var frameMidBack = new FrameLayout();
            frameMidBack.Y = btnTopBlackPic.Bottom;
            frameMidBack.Height = this.Height - btnTopBlackPic.Bottom;
            frameMidBack.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor;
            this.AddChidren(frameMidBack);
            //HdlHome的图标
            var btnLogoIcon = new PicViewControl(184, 184);
            btnLogoIcon.Y = Application.GetRealHeight(230);
            btnLogoIcon.UnSelectedImagePath = "Account/Logo_White.png";
            btnLogoIcon.Gravity = Gravity.CenterHorizontal;
            this.AddChidren(btnLogoIcon);
            //Hdl Home
            var btnLogoName = new NormalViewControl(300, 69, true);
            btnLogoName.Y = btnLogoIcon.Bottom;
            btnLogoName.Gravity = Gravity.CenterHorizontal;
            btnLogoName.TextID = R.MyInternationalizationString.AppName;
            btnLogoName.TextColor = ZigbeeColor.Current.GXCTextWhiteColor;
            btnLogoName.TextSize = 16;
            this.AddChidren(btnLogoName);
            //手机号,邮箱的菜单控件
            int defultIndex = account.Contains("@") == false ? 1 : 2;
            var sitchControl = new Controls.PhoneEmailSelectControl();
            sitchControl.Y = Application.GetRealHeight(559);
            this.AddChidren(sitchControl);
            sitchControl.SelectMenuEvent += (selectIndex) =>
            {
                //手机号
                if (selectIndex == 1)
                {
                }
                //邮箱
                else if (selectIndex == 2)
                {
                }
            };
            //执行初始化
            sitchControl.InitControl(ZigbeeColor.Current.GXCButtonSelectedColor, defultIndex);
            phoneEmailForm = new PhoneEmailForm();
            phoneEmailForm.Init(midFrameLayout);
            //错误提示Btn
            loginErrorBtn = new Button()
            {
                X = Application.GetRealWidth(242),
                Y = Application.GetRealHeight(740),
                Width = Application.GetRealWidth(700),
                Height = Application.GetRealHeight(58),
                TextColor = ZigbeeColor.Current.GXCTextRed,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CommonFormResouce.TextSize,
                IsBold = true
            };
            midFrameLayout.AddChidren(loginErrorBtn);
            accountPwdFL = new FrameLayout()
            {
                Y = Application.GetRealHeight(801),
                Height = Application.GetRealHeight(553),
                Width = Application.GetRealWidth(942),
                Gravity = Gravity.CenterHorizontal,
                BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
                Radius = (uint)Application.GetRealHeight(17)
            };
            midFrameLayout.AddChidren(accountPwdFL);
            AddPhoneOrEmailFL(accountPwdFL, "Phone");
            forgotPasswordBtn = new Button()
            {
                X = Application.GetRealWidth(CommonPage.AppRealWidth - 115 - 250),
                Y = Application.GetRealHeight(1198),
                Width = Application.GetRealWidth(250),
                Height = Application.GetRealHeight(58),
                TextID = R.MyInternationalizationString.ForgotPWD_1,
                TextSize = CommonFormResouce.loginTextSize,
                TextColor = Shared.Common.ZigbeeColor.Current.GXCTextGrayColor,
                TextAlignment = TextAlignment.CenterRight
            };
            midFrameLayout.AddChidren(forgotPasswordBtn);
            loginBtn = new Button()
            {
                Y = Application.GetRealHeight(1293),
                Width = Application.GetRealWidth(688),
                Height = Application.GetRealHeight(127),
                Gravity = Gravity.CenterHorizontal,
                TextID = R.MyInternationalizationString.Login,
                TextSize = 16,
                TextColor = ZigbeeColor.Current.GXCTextGrayColor,
                SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                SelectedBackgroundColor = ZigbeeColor.Current.GXCButtonBlackSelectedColor,
                BackgroundColor = ZigbeeColor.Current.GXCButtonUnSelectedColor,
                Radius = (uint)Application.GetRealHeight(127 / 2),
                Enable = false,
                IsBold = true
            };
            midFrameLayout.AddChidren(loginBtn);
            loginByCodeBtn = new Button()
            {
                X = Application.GetRealWidth(98),
                Y = Application.GetRealHeight(1466),
                Width = Application.GetRealWidth(300),
                Height = Application.GetRealHeight(49),
                TextID = R.MyInternationalizationString.LoginByCode,
                TextColor = ZigbeeColor.Current.GXCTextGrayColor,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CommonFormResouce.loginTextSize
            };
            midFrameLayout.AddChidren(loginByCodeBtn);
            registerBtn = new Button()
            {
                X = Application.GetRealWidth(738),
                Y = Application.GetRealHeight(1466),
                Width = Application.GetRealWidth(244),
                Height = Application.GetRealHeight(49),
                TextID = R.MyInternationalizationString.Register,
                TextColor = ZigbeeColor.Current.GXCTextGrayColor,
                TextAlignment = TextAlignment.CenterRight,
                TextSize = CommonFormResouce.loginTextSize
            };
            midFrameLayout.AddChidren(registerBtn);
            wechatBtn = new Button
            {
                X = Application.GetRealWidth(395),
                Y = Application.GetRealHeight(1737),
                Width = Application.GetMinRealAverage(115),
                Height = Application.GetMinRealAverage(115),
                UnSelectedImagePath = "Account/Wechat.png",
                Gravity = Gravity.CenterHorizontal
            };
            midFrameLayout.AddChidren(wechatBtn);
            qqBtn = new Button
            {
                X = Application.GetRealWidth(567),
                Y = Application.GetRealHeight(1737),
                Width = Application.GetMinRealAverage(115),
                Height = Application.GetMinRealAverage(115),
                UnSelectedImagePath = "Account/QQ.png"
            };
            //midFrameLayout.AddChidren(qqBtn);
            BindEvent();
            if (account.Contains("@") == true)
            {
                SelectPhoneOrEmail_MouseUpEvent(phoneEmailForm.SelectedEmail, null);
            }
        }
        #endregion
        #region ■ 初始化账号登陆窗口_________________
        /// <summary>
        /// 初始化账号登陆窗口
        /// </summary>
        /// <param name="frameMidBack">中间浅色的背景容器</param>
        /// <param name="i_account">登陆账号</param>
        /// <param name="i_div">1:手机号 2:邮箱</param>
        private void InitAccoutLoginWindow(FrameLayout frameMidBack, string i_account, int i_div)
        {
            //容器
            var frameBack = new FrameLayout();
            frameBack.Height = Application.GetRealHeight(620);
            frameBack.Y = Application.GetRealHeight(181);
            frameMidBack.AddChidren(frameBack);
            //白色背景
            var frameWhiteBack = new FrameLayout();
            frameWhiteBack.Width = Application.GetRealWidth(942);
            frameWhiteBack.Height = Application.GetRealHeight(553);
            frameWhiteBack.BackgroundColor = UserCenterColor.Current.White;
            frameWhiteBack.Radius = (uint)Application.GetRealHeight(17);
            frameWhiteBack.Gravity = Gravity.CenterHorizontal;
            frameBack.AddChidren(frameWhiteBack);
            //账号行
            var rowAccount = new FrameLayout();
            rowAccount.Y = Application.GetRealHeight(29);
            rowAccount.Width = Application.GetRealWidth(884);
            rowAccount.Height = Application.GetRealHeight(138);
            rowAccount.Gravity = Gravity.CenterHorizontal;
            frameWhiteBack.AddChidren(rowAccount);
            //账号图标
            var btnAccountIcon = new IconViewControl(92);
            btnAccountIcon.X = Application.GetRealWidth(69);
            btnAccountIcon.Gravity = Gravity.CenterVertical;
            btnAccountIcon.UnSelectedImagePath = "Account/Account.png";
            rowAccount.AddChidren(btnAccountIcon);
            //账号输入框
            var txtAccount = new TextInputControl(600, 92, true);
            txtAccount.X = btnAccountIcon.Right + Application.GetRealWidth(35);
            txtAccount.Gravity = Gravity.CenterVertical;
            if (i_div == 1)
            {
                //手机号
                txtAccount.IsNumberKeyboardType = true;
                txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPhoneNum);
            }
            else
            {
                //邮箱
                txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputEmail);
            }
            txtAccount.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor;
            txtAccount.Text = i_account;
            rowAccount.AddChidren(txtAccount);
            //底线
            var btnAccountLine = new NormalViewControl(rowAccount.Width, 1, false);
            btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
            btnAccountLine.Y = rowAccount.Height - 1;
            rowAccount.AddChidren(btnAccountLine);
            //密码行
            var rowPassword = new FrameLayout();
            rowPassword.Y = rowAccount.Bottom + Application.GetRealHeight(58);
            rowPassword.Width = rowAccount.Width;
            rowPassword.Height = rowAccount.Height;
            rowPassword.Gravity = Gravity.CenterHorizontal;
            frameWhiteBack.AddChidren(rowPassword);
            //账号图标
            var btnPswIcon = new IconViewControl(92);
            btnPswIcon.X = btnAccountIcon.X;
            btnPswIcon.Gravity = Gravity.CenterVertical;
            btnPswIcon.UnSelectedImagePath = "Account/Password.png";
            rowPassword.AddChidren(btnPswIcon);
            //账号输入框
            var txtPsw = new TextInputControl(600, 92, true);
            txtPsw.X = txtAccount.X;
            txtPsw.Gravity = Gravity.CenterVertical;
            txtPsw.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPWD);
            txtPsw.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor;
            txtPsw.SecureTextEntry = true;
            rowPassword.AddChidren(txtPsw);
            //底线
            var btnPswLine = new NormalViewControl(rowPassword.Width, 1, false);
            btnPswLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor;
            btnPswLine.Y = rowPassword.Height - 1;
            rowPassword.AddChidren(btnPswLine);
        }
        #endregion
    }
}
ZigbeeApp/Shared/Phone/Login/Controls/PhoneEmailSelectControl.cs
New file
@@ -0,0 +1,129 @@
using Shared.Phone.UserCenter;
using System;
using System.Collections.Generic;
using System.Text;
namespace Shared.Phone.Login.Controls
{
    /// <summary>
    /// 登陆界面的手机号和邮箱来回切换的控件
    /// </summary>
    public class PhoneEmailSelectControl : FrameLayout
    {
        #region ■ 变量声明___________________________
        /// <summary>
        /// 菜单选择事件 1:手机号 2:邮箱
        /// </summary>
        public Action<int> SelectMenuEvent = null;
        /// <summary>
        /// 手机号控件
        /// </summary>
        private NormalViewControl btnPhone = null;
        /// <summary>
        /// 邮箱控件
        /// </summary>
        private NormalViewControl btnEmail = null;
        #endregion
        #region ■ 初始化_____________________________
        /// <summary>
        /// 登陆界面的手机号和邮箱来回切换的控件
        /// </summary>
        public PhoneEmailSelectControl()
        {
            this.Width = HdlControlLogic.Current.GetPictrueRealSize(905);
            this.Height = HdlControlLogic.Current.GetPictrueRealSize(170);
            this.Gravity = Gravity.CenterHorizontal;
            this.BackgroundImagePath = "Account/PhoneEmail_White.png";
        }
        /// <summary>
        /// 初始化控件(索引会触发回调事件,SelectMenuEvent需要在它之前实现)
        /// </summary>
        /// <param name="selectBackColor">选择时的背景颜色</param>
        /// <param name="selectIndex">默认选择的索引 1:手机号  2:邮箱</param>
        public void InitControl(uint selectBackColor,int selectIndex)
        {
            //手机号
            this.btnPhone = new NormalViewControl(this.Width / 2 + HdlControlLogic.Current.GetPictrueRealSize(20), HdlControlLogic.Current.GetPictrueRealSize(127), false);
            btnPhone.X = HdlControlLogic.Current.GetPictrueRealSize(10);
            btnPhone.SelectedBackgroundColor = selectBackColor;
            btnPhone.TextID = R.MyInternationalizationString.PhoneNum;
            btnPhone.TextColor = UserCenterColor.Current.TextGrayColor3;
            btnPhone.SelectedTextColor = UserCenterColor.Current.White;
            btnPhone.Radius = (uint)HdlControlLogic.Current.GetPictrueRealSize(127) / 2;
            this.AddChidren(btnPhone);
            btnPhone.ButtonClickEvent += (sender, e) =>
            {
                if (btnPhone.IsSelected == false)
                {
                    btnPhone.IsBold = true;
                    btnPhone.IsSelected = true;
                    btnEmail.IsBold = false;
                    btnEmail.IsSelected = false;
                    //调用回调函数
                    this.SelectMenuEvent?.Invoke(1);
                }
            };
            //邮箱
            this.btnEmail = new NormalViewControl(this.btnPhone.Width, this.btnPhone.Height, false);
            btnEmail.X = this.btnPhone.Right - HdlControlLogic.Current.GetPictrueRealSize(40);
            btnEmail.SelectedBackgroundColor = selectBackColor;
            btnEmail.TextID = R.MyInternationalizationString.Email;
            btnEmail.TextColor = UserCenterColor.Current.TextGrayColor3;
            btnEmail.SelectedTextColor = UserCenterColor.Current.White;
            btnEmail.Radius = (uint)HdlControlLogic.Current.GetPictrueRealSize(127) / 2;
            this.AddChidren(btnEmail);
            btnEmail.ButtonClickEvent += (sender, e) =>
            {
                if (btnEmail.IsSelected == false)
                {
                    btnPhone.IsBold = false;
                    btnPhone.IsSelected = false;
                    btnEmail.IsBold = true;
                    btnEmail.IsSelected = true;
                    //调用回调函数
                    this.SelectMenuEvent?.Invoke(2);
                }
            };
            //设置初始值
            if (selectIndex == 1)
            {
                btnPhone.IsBold = true;
                btnPhone.IsSelected = true;
                //调用回调函数
                this.SelectMenuEvent?.Invoke(1);
            }
            else if (selectIndex == 2)
            {
                btnEmail.IsBold = true;
                btnEmail.IsSelected = true;
                //调用回调函数
                this.SelectMenuEvent?.Invoke(2);
            }
        }
        #endregion
        #region ■ 控件摧毁___________________________
        /// <summary>
        /// 控件摧毁
        /// </summary>
        public override void RemoveFromParent()
        {
            this.SelectMenuEvent = null;
            base.RemoveFromParent();
        }
        #endregion
    }
}
ZigbeeApp/Shared/Phone/MainPage/HomeMainPageForm.cs
@@ -683,8 +683,11 @@
                        }, ShowErrorMode.NO);
                    }
                });
                System.Threading.Thread.Sleep(50);
                if (contrCount > 6)
                {
                    //让它呈现一种直接一次性刷出来的效果
                    System.Threading.Thread.Sleep(50);
                }
            }
        }
@@ -898,7 +901,11 @@
                        });
                    }
                });
                System.Threading.Thread.Sleep(50);
                if (contrCount > 6)
                {
                    //让它呈现一种一次性显示出来的效果
                    System.Threading.Thread.Sleep(50);
                }
            }
        }
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Controls/ListViewLayoutControls/VerticalFrameControl.cs
@@ -97,7 +97,7 @@
        public void AdjustChidrenFrameHeight(FrameLayout frame, int buttomSpace)
        {
            //获取坐标底部最下面的那个控件的底部坐标
            int value = this.GetLocationMostLastViewBottom();
            int value = this.GetLocationMostLastViewBottom(frame);
            if (value != -1)
            {
                //调整桌布高度
@@ -114,7 +114,7 @@
        public void AdjustTableHeight()
        {
            //获取坐标底部最下面的那个控件的底部坐标
            int value = this.GetLocationMostLastViewBottom();
            int value = this.GetLocationMostLastViewBottom(this.m_frameTable);
            if (value != -1)
            {
                //调整桌布高度
@@ -135,9 +135,12 @@
                return;
            }
            //添加临时控件,直至可以滑动超过底部按钮
            int oldRowSpace = this.rowSpace;
            this.rowSpace = 0;
            var frameBackTemp = new FrameLayout();
            frameBackTemp.Height = ControlCommonResourse.BodyFrameHeight - btnTemp.Yaxis + Application.GetRealHeight(23);
            this.AddChidrenFrame(frameBackTemp);
            this.rowSpace = oldRowSpace;
        }
        /// <summary>
@@ -155,15 +158,15 @@
        /// 获取坐标底部最下面的那个控件的底部坐标
        /// </summary>
        /// <returns></returns>
        private int GetLocationMostLastViewBottom()
        private int GetLocationMostLastViewBottom(FrameLayout frame)
        {
            int bottomHeight = -1;
            if (this.m_frameTable == null) { return bottomHeight; }
            if (frame == null) { return bottomHeight; }
           
            for (int i = 0; i < this.m_frameTable.ChildrenCount; i++)
            for (int i = 0; i < frame.ChildrenCount; i++)
            {
                var child = this.m_frameTable.GetChildren(i);
                var child = frame.GetChildren(i);
                if (child.Bottom > bottomHeight)
                {
                    bottomHeight = child.Bottom;
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlRoomLogic.cs
@@ -123,7 +123,14 @@
                }
            }
            //检测楼层数据的合法性
            this.CheckFloorData(listRoomFile);
            if (UserCenterResourse.UserInfo.AuthorityNo == 3)
            {
                this.CheckMemberFloorData(listRoomFile);
            }
            else
            {
                this.CheckAdminFloorData(listRoomFile);
            }
            homeTemp.Save(false);
            InitAllRoom();
@@ -144,8 +151,12 @@
        /// 检测楼层数据的合法性
        /// </summary>
        /// <param name="listRoomFile"></param>
        private void CheckFloorData(List<string> listRoomFile)
        private void CheckAdminFloorData(List<string> listRoomFile)
        {
            //没有楼层,则无需处理
            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
            //主人或者管理员的话,就检测是否存在未分配楼层的房间
            for (int i = 0; i < listRoomFile.Count; i++)
            {
                try
@@ -165,6 +176,49 @@
            }
        }
        /// <summary>
        /// 检测楼层数据的合法性
        /// </summary>
        /// <param name="listRoomFile"></param>
        private void CheckMemberFloorData(List<string> listRoomFile)
        {
            //没有楼层,则无需处理
            if (Config.Instance.Home.FloorDics.Count == 0) { return; }
            //成员的话,就检测是否存在没有房间的楼层
            var listEsixtFloor = new List<string>();
            for (int i = 0; i < listRoomFile.Count; i++)
            {
                try
                {
                    var byteData = Global.ReadFileByHomeId(listRoomFile[i]);
                    string valueData = System.Text.Encoding.UTF8.GetString(byteData);
                    var roomTemp = Newtonsoft.Json.JsonConvert.DeserializeObject<Common.Room>(valueData);
                    if (roomTemp.FloorId != string.Empty && listEsixtFloor.Contains(roomTemp.FloorId) == false)
                    {
                        //收集楼层
                        listEsixtFloor.Add(roomTemp.FloorId);
                    }
                }
                catch (Exception ex) { HdlLogLogic.Current.WriteLog(ex); }
            }
            var listDeleteId = new List<string>();
            foreach (var flootId in Config.Instance.Home.FloorDics.Keys)
            {
                if (listEsixtFloor.Contains(flootId) == false)
                {
                    //如果这个id不存在于任何房间的话,收集它
                    listDeleteId.Add(flootId);
                }
            }
            foreach (var deleteId in listDeleteId)
            {
                //删除这个id
                Config.Instance.Home.FloorDics.Remove(deleteId);
            }
            Config.Instance.Home.Save(false);
        }
        #endregion
        #region ■ 添加房间___________________________
ZigbeeApp/Shared/Phone/UserCenter/CommonBase/Logic/HdlShardLogic.cs
@@ -365,6 +365,8 @@
                }
            }
            //清空楼层数据
            Common.Config.Instance.Home.FloorDics.Clear();
            //然后检测本地的文件
            var listLocalFile = Global.FileListByHomeId();
            foreach (string fileName in listLocalFile)
@@ -375,8 +377,7 @@
                    var varData = Global.ReadFileByHomeId(fileName);
                    var dicFloor = Newtonsoft.Json.JsonConvert.DeserializeObject<Dictionary<string, string>>(Encoding.UTF8.GetString(varData));
                    Common.Config.Instance.Home.FloorDics = dicFloor;
                    Common.Config.Instance.Home.Save(false);
                    //暂时不保存,留在最后面才保存
                    Global.DeleteFilebyHomeId(fileName);
                }
@@ -425,6 +426,10 @@
                    dicUpdateTime.Remove(fileName);
                }
            }
            //保存楼层数据
            Common.Config.Instance.Home.Save(false);
            //网关文件非合法性是刷新设备列表的函数里面实现
            //保存全部分享文件的更新日期
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddDevicePage.cs
@@ -127,8 +127,8 @@
            var btnBindDown = new Button
            {
                Height = Application.GetRealHeight(69),
                Width = Application.GetRealWidth(69),
                Height = Application.GetMinReal(69),
                Width = Application.GetMinReal(69),
                X = Application.GetRealWidth(200 - 77),
                UnSelectedImagePath = "BindPic/BindDown.png",
                Gravity = Gravity.CenterVertical,
@@ -353,8 +353,8 @@
                var btnRoomFrameLayout = new FrameLayout
                {
                    Height = Application.GetRealHeight(159),
                    Width = Application.GetRealWidth(255),
                    Height = Application.GetMinReal(159),
                    Width = Application.GetMinReal(255),
                    Y = Application.GetRealHeight(23),
                    X = Application.GetRealWidth(5),
                    BackgroundImagePath = "Item/RoomIconBackground.png",
@@ -529,7 +529,7 @@
        }
        /// <summary>
        /// 按键绑定场景表显示
        /// 按键绑定目标表显示
        /// </summary>
        /// <param name="gateway">Gateway.</param>
        /// <param name="key">Key.</param>
@@ -733,8 +733,8 @@
            var sidelipFrameLayout = new FrameLayout()
            {
                Height = Application.GetRealHeight(783),
                Width = Application.GetRealWidth(449),
                Height = Application.GetMinReal(783),
                Width = Application.GetMinReal(449),
                Y = Application.GetRealHeight(161),
                X = Application.GetRealWidth(596),
                BackgroundImagePath = "DoorLock/SideslipPic.png",
@@ -776,8 +776,8 @@
                var btnAllMethod = new Button()
                {
                    Width = Application.GetRealWidth(81),
                    Height = Application.GetRealHeight(81),
                    Width = Application.GetMinReal(81),
                    Height = Application.GetMinReal(81),
                    Y = Application.GetRealHeight(55),
                    UnSelectedImagePath = "Floor/Floor.png",
                    SelectedImagePath = "Floor/FloorSelected.png",
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/AddScenePage.cs
@@ -100,8 +100,8 @@
            var btnBindDown = new Button
            {
                Height = Application.GetRealHeight(69),
                Width = Application.GetRealWidth(69),
                Height = Application.GetMinReal(69),
                Width = Application.GetMinReal(69),
                X = Application.GetRealWidth(200 - 77),
                UnSelectedImagePath = "BindPic/BindDown.png",
                Gravity = Gravity.CenterVertical,
@@ -483,8 +483,8 @@
                var btnRoomFrameLayout = new FrameLayout
                {
                    Height = Application.GetRealHeight(159),
                    Width = Application.GetRealWidth(255),
                    Height = Application.GetMinReal(159),
                    Width = Application.GetMinReal(255),
                    Y = Application.GetRealHeight(23),
                    X = Application.GetRealWidth(5),
                    BackgroundImagePath = "Item/RoomIconBackground.png",
@@ -603,8 +603,8 @@
                {
                    X = Application.GetMinRealAverage(58),
                    Y = Application.GetMinRealAverage(46),
                    Width = Application.GetMinRealAverage(81),
                    Height = Application.GetMinRealAverage(81),
                    Width = Application.GetMinReal(81),
                    Height = Application.GetMinReal(81),
                    UnSelectedImagePath = "Scene/SceneIcon.png",// scene.IconPath,
                };
                rowLayout.AddChidren(devicePic);
@@ -621,8 +621,8 @@
                var btnChoose = new Button()
                {
                    Width = Application.GetRealWidth(60),
                    Height = Application.GetRealHeight(60),
                    Width = Application.GetMinReal(60),
                    Height = Application.GetMinReal(60),
                    X = Application.GetRealWidth(861 + 81),
                    Y = Application.GetRealHeight(35),
                    SelectedImagePath = "DoorLock/SelectedIcon.png",
@@ -761,8 +761,8 @@
            var sidelipFrameLayout = new FrameLayout()
            {
                Height = Application.GetRealHeight(783),
                Width = Application.GetRealWidth(449),
                Height = Application.GetMinReal(783),
                Width = Application.GetMinReal(449),
                Y = Application.GetRealHeight(161),
                X = Application.GetRealWidth(596),
                BackgroundImagePath = "DoorLock/SideslipPic.png",
@@ -804,8 +804,8 @@
                var btnAllMethod = new Button()
                {
                    Width = Application.GetRealWidth(81),
                    Height = Application.GetRealHeight(81),
                    Width = Application.GetMinReal(81),
                    Height = Application.GetMinReal(81),
                    Y = Application.GetRealHeight(55),
                    UnSelectedImagePath = "Floor/Floor.png",
                    SelectedImagePath = "Floor/FloorSelected.png",
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindCommonLayout.cs
@@ -44,8 +44,8 @@
        public Button btnBack = new Button
        {
            Height = Application.GetRealHeight(51),
            Width = Application.GetRealWidth(30),
            Height = Application.GetMinReal(51),
            Width = Application.GetMinReal(30),
            UnSelectedImagePath = "DoorLock/Left.png",
        };
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/BindTargetsPage.cs
@@ -254,8 +254,8 @@
            var btnBindAdd = new Button
            {
                X = Application.GetRealWidth(62),
                Height = Application.GetRealHeight(72),
                Width = Application.GetRealWidth(72),
                Height = Application.GetMinReal(72),
                Width = Application.GetMinReal(72),
                UnSelectedImagePath = "BindPic/BindAdd.png",
            };
            btnAddFrameLayout.AddChidren(btnBindAdd);
@@ -698,8 +698,8 @@
            var sidelipFrameLayout = new FrameLayout()
            {
                Height = Application.GetRealHeight(628),
                Width = Application.GetRealWidth(415),
                Height = Application.GetMinReal(628),
                Width = Application.GetMinReal(415),
                Y = Application.GetRealHeight(115 + 45),
                X = Application.GetRealWidth(605),
                BackgroundImagePath = "DoorLock/SideslipPic.png",
ZigbeeApp/Shared/Phone/UserCenter/Device/Bind/ChooseKeyModePage.cs
@@ -634,8 +634,8 @@
                var btnChoose = new Button()
                {
                    Width = Application.GetRealWidth(60),
                    Height = Application.GetRealHeight(60),
                    Width = Application.GetMinReal(60),
                    Height = Application.GetMinReal(60),
                    X = Application.GetRealWidth(861 + 81),
                    Y = Application.GetRealHeight(35),
                    SelectedImagePath = "DoorLock/SelectedIcon.png",
@@ -793,8 +793,8 @@
                var btnChoose = new Button()
                {
                    Width = Application.GetRealWidth(60),
                    Height = Application.GetRealHeight(60),
                    Width = Application.GetMinReal(60),
                    Height = Application.GetMinReal(60),
                    X = Application.GetRealWidth(861 + 81),
                    Y = Application.GetRealHeight(35),
                    SelectedImagePath = "DoorLock/SelectedIcon.png",
@@ -967,8 +967,8 @@
                var btnChoose = new Button()
                {
                    Width = Application.GetRealWidth(60),
                    Height = Application.GetRealHeight(60),
                    Width = Application.GetMinReal(60),
                    Height = Application.GetMinReal(60),
                    X = Application.GetRealWidth(861 + 81),
                    Y = Application.GetRealHeight(35),
                    SelectedImagePath = "DoorLock/SelectedIcon.png",
ZigbeeApp/Shared/Phone/UserCenter/Device/DoorLock/DoorLockHistoryLogForm.cs
@@ -335,9 +335,33 @@
            this.listView.AddChidrenFrame2(frameTable);
            //图标
            var btnIcon = frameTable.AddLeftIcon();
            //信息
            var btnMsg = frameTable.AddTopView("", 600);
            //人物
            string perName = dicName.ContainsKey(historyInfo.CloudAccountId) == true ? dicName[historyInfo.CloudAccountId] : Language.StringByID(R.MyInternationalizationString.uOther);
            frameTable.AddBottomView(perName, 600);
            //时间
            if (this.dateFromControl.dateValue == this.dateToControl.dateValue)
            {
                //如果日期范围一样,则不显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("HH:mm:ss"), 400);
            }
            else
            {
                //如果日期范围不一样,则显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("yyyy/MM/dd HH:mm:ss"), 700);
            }
            //底线
            if (addLine == true)
            {
                frameTable.AddBottomLine();
            }
            //其他消息
            if (historyInfo.OpenLockMode == -1)
            {
                //其他消息
                //图片
                var device = Common.LocalDevice.Current.GetDevice(historyInfo.DeviceMac, historyInfo.DeviceEpoint);
                if (device == null)
                {
@@ -347,29 +371,42 @@
                {
                    Common.LocalDevice.Current.SetDeviceIconToControl(btnIcon, device);
                }
            }
            else if (historyInfo.OpenLockMode == 9000)
            {
                btnIcon.UnSelectedImagePath = "Item/NormallyOpen.png";
            }
            else if (historyInfo.UnlockIsSuccess == true)
            {
                btnIcon.UnSelectedImagePath = "Item/UnLockSuccess.png";
            }
            else
            {
                btnIcon.UnSelectedImagePath = "Item/UnLockFail.png";
            }
            //信息
            var btnMsg = frameTable.AddTopView("", 600);
            if (historyInfo.OpenLockMode == -1 || historyInfo.OpenLockMode == 9000)
            {
                //其他消息
                //消息
                btnMsg.Text = historyInfo.AlarmMsg;
            }
            //门锁常开模式
            else if (historyInfo.OpenLockMode == 9000)
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/NormallyOpen.png";
                //消息
                if (historyInfo.OtherOpenLockMode == 9001)
                {
                    //常开模式手动开启
                    btnMsg.TextID = R.MyInternationalizationString.uNormallyOpenModeManualOpen;
                }
                else if (historyInfo.OtherOpenLockMode == 9002)
                {
                    //常开模式手动取消
                    btnMsg.TextID = R.MyInternationalizationString.uNormallyOpenModeManualClose;
                }
                else if (historyInfo.OtherOpenLockMode == 9003)
                {
                    //常开模式启用{0}小时
                    btnMsg.Text = Language.StringByID(R.MyInternationalizationString.uNormallyOpenModeOpenSomeTime).Replace("{0}", historyInfo.NormallyOpenContinuedTime);
                }
                else
                {
                    //上面是App手动推送,这里是网关或者门锁自己推送
                    btnMsg.Text = historyInfo.AlarmMsg;
                }
            }
            //开锁成功
            else if (historyInfo.UnlockIsSuccess == true)
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/UnLockSuccess.png";
                //消息
                if (historyInfo.OpenLockMode == 0)
                {
                    //密码开锁成功
@@ -386,8 +423,12 @@
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintSuccess;
                }
            }
            //开锁失败
            else
            {
                //图片
                btnIcon.UnSelectedImagePath = "Item/UnLockFail.png";
                //消息
                if (historyInfo.OpenLockMode == 0)
                {
                    //密码开锁失败
@@ -403,28 +444,6 @@
                    //指纹开锁失败
                    btnMsg.TextID = R.MyInternationalizationString.uUnlockByFingerPrintFail;
                }
            }
            //人物
            string perName = dicName.ContainsKey(historyInfo.CloudAccountId) == true ? dicName[historyInfo.CloudAccountId] : Language.StringByID(R.MyInternationalizationString.uOther);
            frameTable.AddBottomView(perName, 600);
            //时间
            if (this.dateFromControl.dateValue == this.dateToControl.dateValue)
            {
                //如果日期范围一样,则不显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("HH:mm:ss"), 400);
            }
            else
            {
                //如果日期范围不一样,则显示年月日
                frameTable.AddMostRightView(UserCenterLogic.ConvertUtcTimeToLocalTime(historyInfo.UnlockTime).ToString("yyyy/MM/dd HH:mm:ss"), 700);
            }
            if (addLine == true)
            {
                //底线
                frameTable.AddBottomLine();
            }
        }
@@ -454,6 +473,110 @@
                //初始化记录列表
                this.InitLogListInfo(false);
            };
        }
        #endregion
        #region ■ 筛选记录___________________________
        /// <summary>
        /// 筛选历史记录
        /// </summary>
        /// <returns></returns>
        private List<HistoryInfo> ScreeningHistoryData(Dictionary<string, string> dicMemberName)
        {
            //历史记录太麻烦了,存在不同的数据库表里,并且数据还不一样,只能这样一个个判断了
            var listScreeningData = new List<HistoryInfo>();
            //清除掉之前的记录
            this.listOtherUserId = new List<string>();
            this.listOtherMsgId = new List<string>();
            //是否选择全选用户
            bool selectAllUser = this.listSearchUserId.Contains("-1");
            //是否单选了其他
            bool selectOtherUser = this.listSearchUserId.Contains("-9999");
            //是否选择全选开锁方式
            bool selectAllLockMode = this.listSearchLockId.Contains(-1);
            //一个个去遍历
            foreach (var data in this.listHistoryInfo)
            {
                //检测该历史记录能否显示
                bool result = this.CheckHistoryDataCanShow(data, dicMemberName, selectAllUser, selectOtherUser, selectAllLockMode);
                if (result == true)
                {
                    listScreeningData.Add(data);
                }
            }
            return listScreeningData;
        }
        /// <summary>
        /// 检测该历史记录能否显示
        /// </summary>
        /// <param name="info">检测对象</param>
        /// <param name="dicMemberName">成员信息</param>
        /// <param name="selectAllUser">是否选择全选用户</param>
        /// <param name="selectOtherUser">是否单选了其他</param>
        /// <param name="slectAllLockMode">是否选择全选开锁方式</param>
        private bool CheckHistoryDataCanShow(HistoryInfo info, Dictionary<string, string> dicMemberName,
            bool selectAllUser, bool selectOtherUser, bool slectAllLockMode)
        {
            //如果没有选择  全选用户
            if (selectAllUser == false)
            {
                //如果这个用户ID不包含在指定选择的成员列表里面
                if (this.listSearchUserId.Contains(info.CloudAccountId) == false)
                {
                    if (dicMemberName.ContainsKey(info.CloudAccountId) == true)
                    {
                        //如果能够识别这个id的话,则表示它不属于其他类,并且也不再选择目标内
                        return false;
                    }
                    //如果没有选择 其他的话,不显示
                    if (selectOtherUser == false)
                    {
                        return false;
                    }
                }
            }
            //如果是成员身份,并且用户ID不为空
            if (UserCenterResourse.UserInfo.AuthorityNo == 3 && info.CloudAccountId != string.Empty)
            {
                //成员不能看到 其他人的记录(成员的时候,这个变量里面只有他自己一个)
                if (dicMemberName.ContainsKey(info.CloudAccountId) == false)
                {
                    return false;
                }
            }
            //如果没有选择  全选开锁方式
            if (slectAllLockMode == false)
            {
                //如果这个开锁方式不在选择的列表里面的话
                if (this.listSearchLockId.Contains(info.OpenLockMode) == false)
                {
                    return false;
                }
            }
            //另一张表的数据主键
            if (info.OpenLockMode == -1 || info.OpenLockMode == 9000)
            {
                if (info.MsgKeyId != string.Empty)
                {
                    //其他消息的主键,它存在另外的一张数据库表中
                    this.listOtherMsgId.Add(info.MsgKeyId);
                }
            }
            if (info.CloudAccountId != string.Empty && dicMemberName.ContainsKey(info.CloudAccountId) == false
                && this.listOtherUserId.Contains(info.CloudAccountId) == false)
            {
                //无法识别的开锁记录的用户ID(因为那个密码有可能没有分配给成员)
                this.listOtherUserId.Add(info.CloudAccountId);
            }
            return true;
        }
        #endregion
@@ -591,110 +714,6 @@
            }
            return listLog;
        }
        #endregion
        #region ■ 筛选记录___________________________
        /// <summary>
        /// 筛选历史记录
        /// </summary>
        /// <returns></returns>
        private List<HistoryInfo> ScreeningHistoryData(Dictionary<string, string> dicMemberName)
        {
            //历史记录太麻烦了,存在不同的数据库表里,并且数据还不一样,只能这样一个个判断了
            var listScreeningData = new List<HistoryInfo>();
            //清除掉之前的记录
            this.listOtherUserId = new List<string>();
            this.listOtherMsgId = new List<string>();
            //是否选择全选用户
            bool selectAllUser = this.listSearchUserId.Contains("-1");
            //是否单选了其他
            bool selectOtherUser = this.listSearchUserId.Contains("-9999");
            //是否选择全选开锁方式
            bool selectAllLockMode = this.listSearchLockId.Contains(-1);
            //一个个去遍历
            foreach (var data in this.listHistoryInfo)
            {
                //检测该历史记录能否显示
                bool result = this.CheckHistoryDataCanShow(data, dicMemberName, selectAllUser, selectOtherUser, selectAllLockMode);
                if (result == true)
                {
                    listScreeningData.Add(data);
                }
            }
            return listScreeningData;
        }
        /// <summary>
        /// 检测该历史记录能否显示
        /// </summary>
        /// <param name="info">检测对象</param>
        /// <param name="dicMemberName">成员信息</param>
        /// <param name="selectAllUser">是否选择全选用户</param>
        /// <param name="selectOtherUser">是否单选了其他</param>
        /// <param name="slectAllLockMode">是否选择全选开锁方式</param>
        private bool CheckHistoryDataCanShow(HistoryInfo info, Dictionary<string, string> dicMemberName,
            bool selectAllUser, bool selectOtherUser, bool slectAllLockMode)
        {
            //如果没有选择  全选用户
            if (selectAllUser == false)
            {
                //如果这个用户ID不包含在指定选择的成员列表里面
                if (this.listSearchUserId.Contains(info.CloudAccountId) == false)
                {
                    if (dicMemberName.ContainsKey(info.CloudAccountId) == true)
                    {
                        //如果能够识别这个id的话,则表示它不属于其他类,并且也不再选择目标内
                        return false;
                    }
                    //如果没有选择 其他的话,不显示
                    if (selectOtherUser == false)
                    {
                        return false;
                    }
                }
            }
            //如果是成员身份,并且用户ID不为空
            if (UserCenterResourse.UserInfo.AuthorityNo == 3 && info.CloudAccountId != string.Empty)
            {
                //成员不能看到 其他人的记录(成员的时候,这个变量里面只有他自己一个)
                if (dicMemberName.ContainsKey(info.CloudAccountId) == false)
                {
                    return false;
                }
            }
            //如果没有选择  全选开锁方式
            if (slectAllLockMode == false)
            {
                //如果这个开锁方式不在选择的列表里面的话
                if (this.listSearchLockId.Contains(info.OpenLockMode) == false)
                {
                    return false;
                }
            }
            //另一张表的数据主键
            if (info.OpenLockMode == -1 || info.OpenLockMode == 9000)
            {
                if (info.MsgKeyId != string.Empty)
                {
                    //其他消息的主键,它存在另外的一张数据库表中
                    this.listOtherMsgId.Add(info.MsgKeyId);
                }
            }
            if (info.CloudAccountId != string.Empty && dicMemberName.ContainsKey(info.CloudAccountId) == false
                && this.listOtherUserId.Contains(info.CloudAccountId) == false)
            {
                //无法识别的开锁记录的用户ID(因为那个密码有可能没有分配给成员)
                this.listOtherUserId.Add(info.CloudAccountId);
            }
            return true;
        }
        #endregion
@@ -942,6 +961,14 @@
            /// </summary>
            public string CloudAccountId = string.Empty;
            /// <summary>
            /// 其他开锁方式(OpenLockMode=9000时有效) 9001:常开打开 9002:常开取消 9003:常开持续
            /// </summary>
            public int OtherOpenLockMode = -1;
            /// <summary>
            /// 常开持续时间(1~72小时 OtherOpenLockMode=9003的时候有效)
            /// </summary>
            public string NormallyOpenContinuedTime = string.Empty;
            /// <summary>
            /// 当开锁方式为-1时使用,它属于其他类
            /// </summary>
            public string AlarmMsg = string.Empty;
ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirBackLightSettionForm.cs
@@ -127,7 +127,6 @@
            btnLevel.Y = Application.GetRealHeight(54);
            btnLevel.TextAlignment = TextAlignment.CenterRight;
            btnLevel.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnLevel.Text = "3" + strRank;
            frameBack.AddChidren(btnLevel);
            //当前亮度
@@ -143,7 +142,6 @@
            btnProgress1.Y = Application.GetRealHeight(157);
            btnProgress1.TextSize = 12;
            btnProgress1.TextColor = UserCenterColor.Current.TextGrayColor1;
            btnProgress1.Text = "4";
            frameBack.AddChidren(btnProgress1);
            //进度条
@@ -155,8 +153,71 @@
            seekBar1.ProgressChangedEvent += (div, value) =>
            {
                btnProgress1.Text = value.ToString();
                switch (value)
                {
                    case 1:
                        linghtLevelInfo.panelDirectionsLevel = 20;
                        btnLevel.Text = "1" + strRank;
                        break;
                    case 2:
                        linghtLevelInfo.panelDirectionsLevel = 40;
                        btnLevel.Text = "2" + strRank;
                        break;
                    case 3:
                        linghtLevelInfo.panelDirectionsLevel = 60;
                        btnLevel.Text = "3" + strRank;
                        break;
                    case 4:
                        linghtLevelInfo.panelDirectionsLevel = 80;
                        btnLevel.Text = "4" + strRank;
                        break;
                    case 5:
                        linghtLevelInfo.panelDirectionsLevel = 100;
                        btnLevel.Text = "5" + strRank;
                        break;
                    default:
                        linghtLevelInfo.panelDirectionsLevel = 0;
                        btnLevel.Text = "0" + strRank;
                        break;
                }
            };
            //seekBar1.Progress = linghtLevelInfo.panelBacklightLevel;
            if (linghtLevelInfo.panelDirectionsLevel <= 20 && linghtLevelInfo.panelDirectionsLevel > 0)
            {
                btnLevel.Text = "1" + strRank;
                btnProgress1.Text = "1";
                seekBar1.Progress = 1;
            }
            else if (linghtLevelInfo.panelDirectionsLevel <= 40 && linghtLevelInfo.panelDirectionsLevel > 20)
            {
                btnLevel.Text = "2" + strRank;
                btnProgress1.Text = "2";
                seekBar1.Progress = 2;
            }
            else if (linghtLevelInfo.panelDirectionsLevel <= 60 && linghtLevelInfo.panelDirectionsLevel > 40)
            {
                btnLevel.Text = "3" + strRank;
                btnProgress1.Text = "3";
                seekBar1.Progress = 3;
            }
            else if (linghtLevelInfo.panelDirectionsLevel <= 80 && linghtLevelInfo.panelDirectionsLevel > 60)
            {
                btnLevel.Text = "4" + strRank;
                btnProgress1.Text = "4";
                seekBar1.Progress = 4;
            }
            else if (linghtLevelInfo.panelDirectionsLevel <= 100 && linghtLevelInfo.panelDirectionsLevel > 80)
            {
                btnLevel.Text = "5" + strRank;
                btnProgress1.Text = "5";
                seekBar1.Progress = 5;
            }
            else
            {
                btnLevel.Text = "0" + strRank;
                btnProgress1.Text = "0";
                seekBar1.Progress = 0;
            }
            var btnTemp1 = new NormalViewControl(200, 50, true);
            btnTemp1.X = ControlCommonResourse.XXLeft;
@@ -225,7 +286,6 @@
            seekBar1.ProgressChangedEvent += (div, value) =>
            {
                btnProgress1.Text = value + "%";
                //数据变更
            };
            //seekBar1.Progress = linghtLevelInfo.panelBacklightLevel;
@@ -505,7 +565,7 @@
            this.ShowProgressBar();
            //节能模式修改(他们说随便一个回路就行)
            //设备同事说默认去秒时间,这样接近感应功能才合理
            //设备同事说默认去1秒时间,这样接近感应功能才合理
            energyModeInfo.time = 1;
            var result = await HdlDevicePanelLogic.Current.SetDeviceEnergyConservationMode(panelDevice, energyModeInfo.enable, energyModeInfo.time, energyModeInfo.level);
            if (result == false)
@@ -537,18 +597,6 @@
            //    return;
            //}
            //关闭自身
            this.CloseForm();
        }
        #endregion
        #region ■ 保存配置___________________________
        /// <summary>
        /// 保存配置
        /// </summary>
        private void SaveSettionData()
        {
            this.CloseForm();
        }
ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirButtonSettionForm.cs
@@ -96,9 +96,9 @@
            rowNewWind.AddBottomLine();
            //右箭头
            rowNewWind.AddRightArrow();
            var msg = Language.StringByID(R.MyInternationalizationString.ReshAirRead);
            var msg = Language.StringByID(R.MyInternationalizationString.nothing);
            // 回调新风个数
            var btnNewWindStatu = rowNewWind.AddMostRightView(msg + 2, 700);
            var btnNewWindStatu = rowNewWind.AddMostRightView(msg, 700);
            rowNewWind.ButtonClickEvent += (sender, e) =>
            {
                var form = new PanelFangyueFreshAirTargetForm();
ZigbeeApp/Shared/Phone/UserCenter/Device/Panel/PanelFangyueFreshAirTargetForm.cs
@@ -83,7 +83,7 @@
                {
                    if (listDataRoom.Count > 0)
                    {
                        //初始化房间和设备列表
                        //初始化房间和设备列表
                        this.InitRoomAndDeviceRow(listDataRoom);
                    }
                    else
@@ -201,46 +201,63 @@
            DeviceSimpleSelectControl oldSelectContr = null;
            var listDevice = this.dicShowDevice[roomId];
            //获取设备类型的
            var deviceEnumInfo = Common.LocalDevice.Current.GetMyDeviceEnumInfo(listDevice);
            //检查符合的设备
            List<CommonDevice> listSupportDevice = new List<CommonDevice> { };
            foreach (var dev in listDevice)
            {
                //新风面板的新风设备,则不显示
                if (deviceEnumInfo.ConcreteType == Common.DeviceConcreteType.ButtonPanel_FangyueFreshAir)
                {
                    continue;
                }
                if (dev.Type == DeviceType.FreshAir)
                {
                    listSupportDevice.Add(dev);
                }
            }
            DeviceSimpleSelectControl oldDeviceSimpleSelectControl = null;
            int curIndex = 0;
            for (int i = 0; i < listSupportDevice.Count; i++)
            {
                string mainKey = Common.LocalDevice.Current.GetDeviceMainKeys(listSupportDevice[i]);
                var contr = new DeviceSimpleSelectControl(listDevice[i], false, this.listView.rowSpace / 2);
                var contr = new DeviceSimpleSelectControl(listSupportDevice[i], false, this.listView.rowSpace / 2);
                listView.AddChidren(contr);
                contr.InitControl();
                if (i != listDevice.Count - 1)
                if (i != listSupportDevice.Count - 1)
                {
                    //底线
                    contr.AddBottomLine();
                }
                contr.ButtonClickEvent += (sender, e) =>
                {
                    contr.IsSelected = !contr.IsSelected;
                    //选择了别的设备
                    if (contr.IsSelected == true)
                    if (contr.IsSelected)
                    {
                        if (oldSelectContr != null)
                        {
                            oldSelectContr.IsSelected = false;
                        }
                        oldSelectContr = contr;
                        this.bindTargetKey = mainKey;
                        return;
                    }
                    //取消选择
                    else
                    {
                        oldSelectContr = null;
                        this.bindTargetKey = string.Empty;
                    }
                    contr.IsSelected = true;
                    oldSelectContr = contr;
                    this.bindTargetKey = mainKey;
                    //contr.IsSelected = !contr.IsSelected;
                    ////选择了别的设备
                    //if (contr.IsSelected == true)
                    //{
                    //    if (oldSelectContr != null)
                    //    {
                    //        oldSelectContr.IsSelected = false;
                    //    }
                    //    oldSelectContr = contr;
                    //    this.bindTargetKey = mainKey;
                    //}
                    ////取消选择
                    //else
                    //{
                    //    oldSelectContr = null;
                    //    this.bindTargetKey = string.Empty;
                    //}
                };
                if (this.bindTargetKey == mainKey)
                {
@@ -285,10 +302,15 @@
                var device = Common.LocalDevice.Current.GetDevice(deviceKeys);
                if (device != null)
                {
                    canShow = true;
                    //收集可以显示的设备
                    this.dicShowDevice[room.Id].Add(device);
                    if (device.Type == DeviceType.FreshAir)
                    {
                        //canShow = true;//  这个界面不显示房间
                        //收集可以显示的设备
                        this.dicShowDevice[room.Id].Add(device);
                    }
                }
            }
            return canShow;
        }
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/ShowDoorLockMsgControl.cs
@@ -396,7 +396,7 @@
            }
            if (tetxValue.Length >= 3)
            {
                var msg = Language.StringByID(R.MyInternationalizationString.InvalidTimeMoreThan36);
                var msg = Language.StringByID(R.MyInternationalizationString.InvalidTimeMoreThan72);
                var msgContr = new ShowMsgControl(ShowMsgType.Error, msg);
                msgContr.Show();
                return false;
@@ -410,9 +410,9 @@
                msgContr.Show();
                return false;
            }
            if (value > 36)
            if (value > 72)
            {
                var msg = Language.StringByID(R.MyInternationalizationString.InvalidTimeMoreThan36);
                var msg = Language.StringByID(R.MyInternationalizationString.InvalidTimeMoreThan72);
                var msgContr = new ShowMsgControl(ShowMsgType.Error, msg);
                msgContr.Show();
                return false;
ZigbeeApp/Shared/Phone/UserCenter/DoorLock/UserDoorLockPage.cs
@@ -536,14 +536,14 @@
            };
            flMain.AddChidren(progressBackground);
            var progressValue = (currentVolume * (Convert.ToInt32(((float)100 / 15) * 100))) / 100;
            //var progressValue = (currentVolume * (Convert.ToInt32(((float)100 / 15) * 100))) / 100;
            progressText = new Button()
            {
                Height = Application.GetRealHeight(58),
                Y = Application.GetRealHeight(89),
                TextColor = ZigbeeColor.Current.XMGray2,
                TextAlignment = TextAlignment.Center,
                Text = progressValue.ToString() + "%",
                Text = currentVolume.ToString() + "%",
            };
            diyImageVerticalSeekBar = new DiyImageVerticalSeekBar()
@@ -559,27 +559,14 @@
                ProgressTextColor = ZigbeeColor.Current.LogicBtnCancelColor,
                ProgressTextSize = 12,//显示百分比字体大小 
                SeekBarViewHeight = Application.GetRealHeight(17),//进度条的宽度
                Progress = progressValue,
                Progress = currentVolume,
            };
            progressBackground.AddChidren(progressText);
            progressBackground.AddChidren(diyImageVerticalSeekBar);
            diyImageVerticalSeekBar.OnProgressChangedEvent += (sender, e) =>
            {
                int curVolume = -1;
                if (e == 0)
                {
                    curVolume = 0;
                }
                else if (e == 100)
                {
                    curVolume = 14;
                }
                else
                {
                    int comandValue = e;
                    int comandValueTemp = (comandValue * 100) / (Convert.ToInt32(((float)100 / 15) * 100));
                    curVolume = comandValueTemp;
                }
                curVolume = e;
                currentVolume = curVolume;
                progressText.Text = e.ToString() + "%";
            };
@@ -1103,12 +1090,19 @@
                            var doorLockInValidSetting = Language.StringByID(R.MyInternationalizationString.DoorLockInValidSetting);
                            var alertNomallyModeIsTurnOn = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.DoorLockLogic, msgNomallyModeIsTurnOn, doorLockInValidSetting);
                            alertNomallyModeIsTurnOn.Show();
                            alertNomallyModeIsTurnOn.MsgControlClickEvent += async () =>
                            {
                                //默认创建特殊逻辑
                                DoorLockCommonInfo.NormallyOpenModeInvalidTime = 12;
                                Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock);
                            };
                            //点击自动化
                            alertNomallyModeIsTurnOn.LogicClickEvent += () =>
                            {
                                //逻辑调用前记得移除
                                ZbGateway.StatusList.Remove(this);
                                //调用逻辑界面
                                Shared.Phone.Device.Logic.SkipView.SkipAddLogic(2, doorLock);
                            };
                            alertNomallyModeIsTurnOn.InvalidClickEvent += async () =>
@@ -1145,26 +1139,27 @@
                alert = new ShowDoorLockMsgControl(ShowDoorLockMsgControl.DoorLockMsgType.CancelNomallyOpenModeWithLogic, msg, confirm);
            }
            alert.Show();
            alert.MsgControlClickEvent += async () =>
            {
                if (IsFromReport)
                {
                    //取消常开
                    //上报“常开模式”已被取消,app默认了“常开模式”被取消
                    NormallyOpenModeValue(false);
                    UpdateNomallyOpenStatus();
                }
                else
                {
                    //保持常开
                    //app默认“常开模式”还是开启
                    NormallyOpenModeValue(true);
                    UpdateNomallyOpenStatus();
                }
            };
            alert.CancelClickEvent += async () =>
            {
                //保持常开
                if (IsFromReport)
                {
                    //上报“常开模式”已被取消,app重新开启“常开模式”
                    Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
                    var result = await doorLock.SetNormallyOpenModeFuncAsync(true);
                    if (result == null || result.defaultControlResponseData == null)
@@ -1185,6 +1180,7 @@
                    }
                    else
                    {
                        //保持“常开成功”
                        NormallyOpenModeValue(true);
                        UpdateNomallyOpenStatus();
                        CommonPage.Loading.Hide();
@@ -1192,20 +1188,22 @@
                }
                else
                {
                    //app操作不取消“常开模式”
                    NormallyOpenModeValue(true);
                    UpdateNomallyOpenStatus();
                }
            };
            alert.ConfirmClickEvent += async () =>
            {
                //确认取消常开
                if (IsFromReport)
                {
                    //上报门锁“常开模式”已经取消,现在app确认“常开模式”取消
                    NormallyOpenModeValue(false);
                    UpdateNomallyOpenStatus();
                }
                else
                {
                    //app操作取消“常开模式”
                    Application.RunOnMainThread(() => { CommonPage.Loading.Start(""); });
                    var result = await doorLock.SetNormallyOpenModeFuncAsync(false);
                    if (result == null || result.defaultControlResponseData == null)
@@ -1224,7 +1222,7 @@
                    {
                        //添加App开启常开模式的历史记录
                        HdlDeviceDoorLockLogic.Current.AddDoorHistoryLog(this.doorLock, 9002, string.Empty);
                        //app确认取消“常开模式”成功
                        NormallyOpenModeValue(false);
                        UpdateNomallyOpenStatus();
                        string msg2 = Language.StringByID(R.MyInternationalizationString.CloseNormallyOpenModeSuccess);
@@ -1235,7 +1233,7 @@
            };
        }
        ///// <summary>
        /// <summary>
        /// 常开模式失效时间处理
        /// </summary>
        private void NomallyOpenModeInvalidTimeDialog()
@@ -1261,6 +1259,7 @@
                    alertTimeInValidSetting2.Show();
                    return;
                }
                //常开模式失效时间设置成功
                var temp = int.Parse(obj);
                DoorLockCommonInfo.NormallyOpenModeInvalidTime = temp;
                Shared.Phone.Device.Logic.SkipView.LockAddModifyLogic(DoorLockCommonInfo.NormallyOpenModeInvalidTime, doorLock);
ZigbeeApp/Shared/Phone/ZigBee/Device/DoorLock.cs
@@ -2408,7 +2408,7 @@
                                    {
                                        var tempD = new VolumeResponseData();
                                        tempD.command = data[10].ToString() + data[11].ToString();
                                        tempD.value = Convert.ToInt32(data[13].ToString(), 16);
                                        tempD.value = Convert.ToInt32(data[12].ToString() + data[13].ToString(), 16);
                                        result = new VolumeResponseAllData { volumeResponseData = tempD };
                                        DebugPrintLog($"UI收到通知后的主题_command:0456_{ topic}");
                                    }
@@ -2455,10 +2455,7 @@
        ///<summary >
        ///音量
        ///<para>命令值: comandValue</para>
        ///<para>comandValue: 0 静音</para>
        ///<para>comandValue:1 最小音量</para>
        ///<para>comandValue:2~13 音量 </para>
        ///<para>comandValue:14 最大音量</para>
        ///<para>comandValue: 0-0x64 音量</para>
        /// </summary>
        public async System.Threading.Tasks.Task<DefaultControlResponseAllData> SetVolumeAsync(int comandValue)
        {
@@ -2560,10 +2557,7 @@
        /// <summary>
        /// 音量发送数据
        ///<para>comandValue: 0 静音</para>
        ///<para>comandValue:1 最小音量</para>
        ///<para>comandValue:2~13 音量 </para>
        ///<para>comandValue:14 最大音量</para>
        ///<para>comandValue: 0-100 音量</para>
        /// </summary>
        public string VolumeData(int comandValue)
        {
@@ -2578,16 +2572,16 @@
            {
                if (comandValue >= 1)
                {
                    //comandValue = comandValue * 100;
                    //float v = (float)100 / 15;
                    //int vv = Convert.ToInt32(v * 100);
                    //var comandValueTemp = comandValue / vv;
                    //if (comandValueTemp == 0)
                    //{
                    //    comandValueTemp = 1;
                    //}
                    cValue = Convert.ToString(comandValue, 16).ToUpper();
                    cValue = "F" + cValue;
                    if (cValue.Length == 1)
                    {
                        cValue = "0" + cValue;
                    }
                    else
                    {
                        cValue = cValue;
                    }
                }
                else
                {
ZigbeeApp/Shared/R.cs
@@ -511,9 +511,9 @@
        /// </summary>
        public const int InvalidTimeIsEmpty = 297;
        /// <summary>
        /// 失效时间不能大于36小时
        /// 失效时间不能大于72小时
        /// </summary>
        public const int InvalidTimeMoreThan36 = 298;
        public const int InvalidTimeMoreThan72 = 298;
        /// <summary>
        /// 失效时间不能小于1小时
        /// </summary>
@@ -526,6 +526,22 @@
        /// 非管理员不能在常开模式下操作
        /// </summary>
        public const int OnlyMasterOperate = 301;
        /// <summary>
        /// 绑定新风
        /// </summary>
        public const int BindFreshAirTarget = 302;
        /// <summary>
        /// 温度来源
        /// </summary>
        public const int TemperatureSource = 303;
        /// <summary>
        /// 湿度来源
        /// </summary>
        public const int HumiditySource = 304;
        /// <summary>
        /// PM2.5来源
        /// </summary>
        public const int PM25Source = 305;
        public readonly static int cancel = 5097;
@@ -5591,6 +5607,19 @@
        /// 常开模式
        /// </summary>
        public const int uNormallyOpenMode = 16090;
        /// <summary>
        /// 常开模式手动开启
        /// </summary>
        public const int uNormallyOpenModeManualOpen = 16091;
        /// <summary>
        /// 常开模式手动取消
        /// </summary>
        public const int uNormallyOpenModeManualClose = 16092;
        /// <summary>
        /// 常开模式启用{0}小时
        /// </summary>
        public const int uNormallyOpenModeOpenSomeTime = 16093;
        //★★★★下面这些是接口的返回信息翻译,从18000开始★★★★
        /// <summary>
ZigbeeApp/Shared/Shared.projitems
@@ -55,6 +55,7 @@
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Login\AccountRegister.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Login\AccountRegisterSuccess.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Login\AccountResetPWDSuccess.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Login\Controls\PhoneEmailSelectControl.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Login\PhoneEmailForm.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Login\PhoneZone.cs" />
    <Compile Include="$(MSBuildThisFileDirectory)Phone\Device\AC\ACControlBase.cs" />