New file |
| | |
| | | using Shared; |
| | | using HDL_ON.Stan; |
| | | using System; |
| | | using System.Collections.Generic; |
| | | using System.Text; |
| | | using HDL_ON.UI.CSS; |
| | | using HDL_ON.Entity; |
| | | |
| | | namespace HDL_ON.UI |
| | | { |
| | | /// <summary> |
| | | /// 门锁的控制界面 |
| | | /// </summary> |
| | | public class DoorLockPage : DeviceFunctionCardCommonForm |
| | | { |
| | | #region ■ 变量声明___________________________ |
| | | |
| | | /// <summary> |
| | | /// 电池控件 |
| | | /// </summary> |
| | | private BatteryPersentControl batteryControl = null; |
| | | /// <summary> |
| | | /// 在线图标控件 |
| | | /// </summary> |
| | | private IconViewControl btnOnlineIcon = null; |
| | | /// <summary> |
| | | /// 在线文本控件 |
| | | /// </summary> |
| | | private NormalViewControl btnOnlineView = null; |
| | | /// <summary> |
| | | /// 声音图标 |
| | | /// </summary> |
| | | private IconViewControl btnVoice = null; |
| | | /// <summary> |
| | | /// 声音的滑动条控件 |
| | | /// </summary> |
| | | private SeekBarImageControl seekBarVoiceControl = null; |
| | | /// <summary> |
| | | /// 声音百分比 |
| | | /// </summary> |
| | | private NormalViewControl btnVoicePersent = null; |
| | | /// <summary> |
| | | /// 常开模式图标 |
| | | /// </summary> |
| | | private IconViewControl btnNormallyOpenIcon = null; |
| | | /// <summary> |
| | | /// 中间的开锁或者关锁图片控件 |
| | | /// </summary> |
| | | private PicViewControl picLockControl = null; |
| | | /// <summary> |
| | | /// 临时密码tab页中间的控件容器(它的Y轴是 一键开锁/临时密码开锁的底部(粗体字体)+4) |
| | | /// </summary> |
| | | private FrameLayout frameTempPsw = null; |
| | | /// <summary> |
| | | /// 1:选择的是一键开锁 2:选择的是临时密码开锁 |
| | | /// </summary> |
| | | private int nowSelectMenu = 1; |
| | | /// <summary> |
| | | /// 门锁数据 |
| | | /// </summary> |
| | | private DoorLockData doorLockData = new DoorLockData(); |
| | | /// <summary> |
| | | /// 门锁的历史记录 |
| | | /// </summary> |
| | | private List<DoorHistoryLog> listHistoryLog = null; |
| | | /// <summary> |
| | | /// 成员列表 |
| | | /// </summary> |
| | | private List<ResidenceMemberInfo> listMember = null; |
| | | /// <summary> |
| | | /// 文本缓存 |
| | | /// </summary> |
| | | private Dictionary<string, string> dicText = new Dictionary<string, string>(); |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 初始化_____________________________ |
| | | |
| | | /// <summary> |
| | | /// 门锁的控制界面 |
| | | /// </summary> |
| | | public DoorLockPage() |
| | | { |
| | | //门锁不允许收藏 |
| | | this.ShowColltionButton = false; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化白色区域的内容 |
| | | /// </summary> |
| | | public override void InitFrameWhiteContent() |
| | | { |
| | | //智能门锁 |
| | | base.SetTitleText(Language.StringByID(StringId.DoorLock)); |
| | | |
| | | this.dicText["已连接"] = Language.StringByID(StringId.Connected); |
| | | this.dicText["未连接"] = Language.StringByID(StringId.UnConnected); |
| | | |
| | | //左右翻页的事件 |
| | | base.PageChangeEvent += (index) => |
| | | { |
| | | if (index == 1) |
| | | { |
| | | //初始化门锁历史记录以及控件 |
| | | this.InitDoorHistoryLogAndControl(); |
| | | } |
| | | }; |
| | | |
| | | //刷新当前设备的状态缓存 |
| | | this.RefreshNowDeviceStatuMemory(this.device); |
| | | //初始化第一个索引页的内容 |
| | | this.InitFrameWhiteContent1(); |
| | | //初始化第二个索引页(历史记录) |
| | | this.InitFrameWhiteContent2(); |
| | | //刷新界面状态 |
| | | this.RefreshFormStatu(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化第一个索引页的内容 |
| | | /// </summary> |
| | | private void InitFrameWhiteContent1() |
| | | { |
| | | //电池控件 |
| | | this.batteryControl = new BatteryPersentControl(); |
| | | //它有个最小的X轴 |
| | | batteryControl.X = Application.GetRealWidth(104) > base.btnRoomName.Right ? |
| | | Application.GetRealWidth(104) : base.btnRoomName.Right + Application.GetRealWidth(4); |
| | | FrameWhiteCentet1.AddChidren(batteryControl); |
| | | if (batteryControl.Height > base.btnRoomName.Height) |
| | | { |
| | | //一个是25,一个是21,弄不准到底谁更高,因为计算方法不一样 |
| | | batteryControl.Y = base.btnRoomName.Y - (batteryControl.Height - base.btnRoomName.Height) / 2; |
| | | } |
| | | else |
| | | { |
| | | batteryControl.Y = base.btnRoomName.Y + (batteryControl.Height - base.btnRoomName.Height) / 2; |
| | | } |
| | | batteryControl.InitControl(); |
| | | batteryControl.SetValue(100); |
| | | |
| | | //在线状态 |
| | | this.btnOnlineIcon = new IconViewControl(24); |
| | | btnOnlineIcon.X = batteryControl.Right + Application.GetRealWidth(12); |
| | | btnOnlineIcon.Y = batteryControl.Y; |
| | | btnOnlineIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/Connect.png"; |
| | | FrameWhiteCentet1.AddChidren(btnOnlineIcon); |
| | | //在线文本 |
| | | this.btnOnlineView = new NormalViewControl(Application.GetRealWidth(100), btnOnlineIcon.Height, false); |
| | | btnOnlineView.X = btnOnlineIcon.Right + Application.GetRealWidth(4); |
| | | btnOnlineView.Y = btnOnlineIcon.Y; |
| | | btnOnlineView.TextSize = CSS_FontSize.PromptFontSize_SecondaryLevel; |
| | | btnOnlineView.TextColor = CSS_Color.PromptingColor1; |
| | | btnOnlineView.TextID = StringId.Connected; |
| | | FrameWhiteCentet1.AddChidren(btnOnlineView); |
| | | //右上角配置结束的事件 |
| | | base.SettionFinishEvent += () => |
| | | { |
| | | //从新设置坐标 |
| | | batteryControl.X = Application.GetRealWidth(104) > base.btnRoomName.Right ? |
| | | Application.GetRealWidth(104) : base.btnRoomName.Right + Application.GetRealWidth(4); |
| | | btnOnlineIcon.X = batteryControl.Right + Application.GetRealWidth(12); |
| | | btnOnlineView.X = btnOnlineIcon.Right + Application.GetRealWidth(4); |
| | | }; |
| | | |
| | | //中间的开锁或者关锁图片控件 |
| | | this.picLockControl = new PicViewControl(256, 260); |
| | | picLockControl.Y = Application.GetRealHeight(129); |
| | | picLockControl.Gravity = Gravity.CenterHorizontal; |
| | | picLockControl.UnSelectedImagePath = "FunctionIcon/DoorLock/LockPictrue1.png"; |
| | | FrameWhiteCentet1.AddChidren(picLockControl); |
| | | picLockControl.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //一键开锁 |
| | | this.DoOneKeyToUnlockDoor(); |
| | | }; |
| | | |
| | | //临时密码的控件容器 |
| | | this.frameTempPsw = new FrameLayout(); |
| | | frameTempPsw.Y = Application.GetRealHeight(129); |
| | | frameTempPsw.Height = Application.GetRealHeight(260); |
| | | frameTempPsw.Visible = false; |
| | | FrameWhiteCentet1.AddChidren(frameTempPsw); |
| | | |
| | | //声音 |
| | | this.btnVoice = new IconViewControl(24); |
| | | btnVoice.UnSelectedImagePath = "FunctionIcon/DoorLock/Voice.png"; |
| | | btnVoice.X = Application.GetRealWidth(23); |
| | | btnVoice.Y = Application.GetRealHeight(410); |
| | | FrameWhiteCentet1.AddChidren(btnVoice); |
| | | |
| | | //声音的滑动条 |
| | | this.seekBarVoiceControl = new SeekBarImageControl(215); |
| | | seekBarVoiceControl.Gravity = Gravity.CenterHorizontal; |
| | | FrameWhiteCentet1.AddChidren(seekBarVoiceControl); |
| | | seekBarVoiceControl.Y = btnVoice.Y - (seekBarVoiceControl.Height - btnVoice.Height) / 2; |
| | | //绑定PageLayout控件 |
| | | seekBarVoiceControl.BindPageLayout(); |
| | | |
| | | //声音百分比 |
| | | this.btnVoicePersent = new NormalViewControl(Application.GetRealWidth(50), btnVoice.Height, false); |
| | | btnVoicePersent.X = seekBarVoiceControl.Right + Application.GetRealWidth(8) - seekBarVoiceControl.SeekBarPadding; |
| | | btnVoicePersent.Y = btnVoice.Y; |
| | | btnVoicePersent.TextColor = CSS_Color.PromptingColor1; |
| | | btnVoicePersent.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; |
| | | btnVoicePersent.Text = "100%"; |
| | | FrameWhiteCentet1.AddChidren(btnVoicePersent); |
| | | |
| | | seekBarVoiceControl.ProgressChangedEvent += (div, value) => |
| | | { |
| | | btnVoicePersent.Text = value + "%"; |
| | | if (div == 1) |
| | | { |
| | | } |
| | | }; |
| | | |
| | | //初始化开锁菜单(一键开锁,临时密码开锁) |
| | | this.InitUnLockMenuControl(); |
| | | //初始化底部菜单图标 |
| | | this.InitBottomMenuIconControl(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化开锁菜单(一键开锁,临时密码开锁) |
| | | /// </summary> |
| | | private void InitUnLockMenuControl() |
| | | { |
| | | //如果是成员,则只有一键开锁 |
| | | if (DB_ResidenceData.Instance.CurrentRegion.isOtherShare == true) |
| | | { |
| | | //一键开锁 |
| | | var btnOneKey = new NormalViewControl(100, 25, true); |
| | | btnOneKey.Y = Application.GetRealHeight(100); |
| | | btnOneKey.TextSize = CSS_FontSize.HeadlineFontSize; |
| | | btnOneKey.TextColor = CSS_Color.MainColor; |
| | | btnOneKey.Text = Language.StringByID(StringId.OneKeyUnlocking); |
| | | btnOneKey.Width = this.GetTextRealWidth(btnOneKey.Text, CSS_FontSize.HeadlineFontSize, true); |
| | | btnOneKey.Gravity = Gravity.CenterHorizontal; |
| | | btnOneKey.IsBold = true; |
| | | FrameWhiteCentet1.AddChidren(btnOneKey); |
| | | } |
| | | else |
| | | { |
| | | //一键开锁 |
| | | var btnOneKey = new NormalViewControl(100, 25, true); |
| | | btnOneKey.Y = Application.GetRealHeight(100); |
| | | btnOneKey.TextSize = Language.CurrentLanguage == "Chinese" ? CSS_FontSize.HeadlineFontSize : CSS_FontSize.SubheadingFontSize; |
| | | btnOneKey.TextColor = CSS_Color.MainColor; |
| | | btnOneKey.Text = Language.StringByID(StringId.OneKeyUnlocking); |
| | | btnOneKey.TextAlignment = TextAlignment.CenterRight; |
| | | btnOneKey.IsBold = true; |
| | | btnOneKey.Width = this.GetTextRealWidth(btnOneKey.Text, CSS_FontSize.HeadlineFontSize, true); |
| | | FrameWhiteCentet1.AddChidren(btnOneKey); |
| | | btnOneKey.X = Application.GetRealWidth(140) - btnOneKey.Width; |
| | | |
| | | //临时密码开锁 |
| | | var btnTempPsw = new NormalViewControl(100, 25, true); |
| | | btnTempPsw.X = btnOneKey.Right + Application.GetRealWidth(36); |
| | | btnTempPsw.Y = btnOneKey.Y; |
| | | btnTempPsw.TextColor = CSS_Color.PromptingColor1; |
| | | btnTempPsw.Text = Language.StringByID(StringId.TemporaryPasswordUnlocking); |
| | | btnTempPsw.Width = this.GetTextRealWidth(btnTempPsw.Text, CSS_FontSize.HeadlineFontSize, true); |
| | | FrameWhiteCentet1.AddChidren(btnTempPsw); |
| | | |
| | | btnOneKey.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //选择的是同一个,则不处理 |
| | | if (this.nowSelectMenu == 1) { return; } |
| | | this.nowSelectMenu = 1; |
| | | |
| | | btnOneKey.IsBold = true; |
| | | btnOneKey.TextSize = Language.CurrentLanguage == "Chinese" ? CSS_FontSize.HeadlineFontSize : CSS_FontSize.SubheadingFontSize; |
| | | btnOneKey.TextColor = CSS_Color.MainColor; |
| | | |
| | | btnTempPsw.IsBold = false; |
| | | btnTempPsw.TextSize = CSS_FontSize.TextFontSize; |
| | | btnTempPsw.TextColor = CSS_Color.PromptingColor1; |
| | | |
| | | //设置中间容器控件可视化 |
| | | this.SetMiddleFrameControlVisible(); |
| | | }; |
| | | |
| | | btnTempPsw.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //选择的是同一个,则不处理 |
| | | if (this.nowSelectMenu == 2) { return; } |
| | | this.nowSelectMenu = 2; |
| | | |
| | | btnOneKey.IsBold = false; |
| | | btnOneKey.TextSize = CSS_FontSize.TextFontSize; |
| | | btnOneKey.TextColor = CSS_Color.PromptingColor1; |
| | | |
| | | btnTempPsw.IsBold = true; |
| | | btnTempPsw.TextSize = Language.CurrentLanguage == "Chinese" ? CSS_FontSize.HeadlineFontSize : CSS_FontSize.SubheadingFontSize; |
| | | btnTempPsw.TextColor = CSS_Color.MainColor; |
| | | |
| | | //设置中间容器控件可视化 |
| | | this.SetMiddleFrameControlVisible(); |
| | | }; |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 初始化第二个索引页(历史记录)_______ |
| | | |
| | | /// <summary> |
| | | /// 初始化第二个索引页(历史记录) |
| | | /// </summary> |
| | | private void InitFrameWhiteContent2() |
| | | { |
| | | //添加第二个page |
| | | this.AddSecondPage(); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化门锁历史记录以及控件 |
| | | /// </summary> |
| | | private void InitDoorHistoryLogAndControl() |
| | | { |
| | | //已经初始化 |
| | | if (this.listHistoryLog != null) { return; } |
| | | |
| | | this.ShowProgressBar(); |
| | | HdlThreadLogic.Current.RunThread(() => |
| | | { |
| | | //初始化成员列表信息 |
| | | if (this.InitMemberListInfo() == false) |
| | | { |
| | | this.CloseProgressBar(); |
| | | return; |
| | | } |
| | | //获取门锁历史记录 |
| | | this.listHistoryLog = new DAL.Server.HttpServerRequest().GetDoorHistoryLogs(this.device); |
| | | this.CloseProgressBar(); |
| | | if (this.listHistoryLog == null) |
| | | { |
| | | return; |
| | | } |
| | | HdlThreadLogic.Current.RunMain(() => |
| | | { |
| | | //初始化门锁历史记录列表控件 |
| | | this.InitDoorHistoryLogListControl(this.listHistoryLog); |
| | | }); |
| | | }); |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 初始化门锁历史记录列表控件 |
| | | /// </summary> |
| | | /// <param name="listLog">显示的门锁记录</param> |
| | | private void InitDoorHistoryLogListControl(List<DoorHistoryLog> listLog) |
| | | { |
| | | //按年分组 |
| | | var dicData = new Dictionary<int, List<DoorHistoryLog>>(); |
| | | foreach (var info in listLog) |
| | | { |
| | | var year = info.Time.Year; |
| | | if (dicData.ContainsKey(year) == false) |
| | | { |
| | | dicData[year] = new List<DoorHistoryLog>(); |
| | | } |
| | | dicData[year].Add(info); |
| | | } |
| | | |
| | | //先清空 |
| | | base.FrameWhiteCentet2.RemoveAll(); |
| | | |
| | | //日志 |
| | | var btnLog = new NormalViewControl(150, 35, true); |
| | | btnLog.Y = Application.GetRealHeight(15); |
| | | btnLog.X = HdlControlResourse.XXLeft; |
| | | btnLog.TextSize = CSS_FontSize.EmphasisFontSize_FirstLevel; |
| | | btnLog.TextColor = CSS_Color.FirstLevelTitleColor; |
| | | btnLog.TextID = StringId.Log; |
| | | FrameWhiteCentet2.AddChidren(btnLog); |
| | | |
| | | //列表容器 |
| | | var listView = new VerticalFrameControl(); |
| | | listView.Y = Application.GetRealHeight(72); |
| | | listView.Height = base.FrameWhiteCentet2.Height - Application.GetRealHeight(72); |
| | | base.FrameWhiteCentet2.AddChidren(listView); |
| | | |
| | | //初始Y轴为0 |
| | | int yy = 0; |
| | | foreach (var strYear in dicData.Keys) |
| | | { |
| | | //年 |
| | | var btnYear = new NormalViewControl(100, 24, true); |
| | | btnYear.X = HdlControlResourse.XXLeft; |
| | | btnYear.Y = yy; |
| | | btnYear.TextColor = CSS_Color.FirstLevelTitleColor; |
| | | btnYear.TextSize = CSS_FontSize.SubheadingFontSize; |
| | | btnYear.Text = strYear.ToString(); |
| | | //中文 |
| | | if (Language.CurrentLanguage == "Chinese") |
| | | { |
| | | btnYear.Text += Language.StringByID(StringId.Years); |
| | | } |
| | | listView.frameTable.AddChidren(btnYear); |
| | | |
| | | //年与消息记录的间距为14 |
| | | yy = btnYear.Bottom + Application.GetRealHeight(14); |
| | | foreach (var logInfo in dicData[strYear]) |
| | | { |
| | | //消息 |
| | | var btnMsg = new NormalViewControl(295, 20, true); |
| | | btnMsg.Y = yy; |
| | | btnMsg.Gravity = Gravity.CenterHorizontal; |
| | | btnMsg.TextColor = CSS_Color.FirstLevelTitleColor; |
| | | btnMsg.Text = logInfo.StrMsg; |
| | | listView.frameTable.AddChidren(btnMsg); |
| | | //时间 |
| | | var btnTime = new NormalViewControl(200, 18, true); |
| | | btnTime.Y = btnMsg.Bottom + Application.GetRealHeight(2); |
| | | btnTime.X = btnMsg.X; |
| | | btnTime.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; |
| | | btnTime.TextColor = CSS_Color.PromptingColor1; |
| | | btnTime.Text = HdlCommonLogic.Current.ConvertDayText(logInfo.Time.Month, logInfo.Time.Day) + " " + logInfo.Time.ToString("HH:mm"); |
| | | listView.frameTable.AddChidren(btnTime); |
| | | //线 |
| | | var btnLine = new NormalViewControl(btnMsg.Width, HdlControlResourse.BottomLineHeight, false); |
| | | btnLine.Y = btnTime.Bottom + Application.GetRealHeight(11); |
| | | btnLine.Gravity = Gravity.CenterHorizontal; |
| | | btnLine.BackgroundColor = CSS_Color.DividingLineColor; |
| | | listView.frameTable.AddChidren(btnLine); |
| | | //两条消息的间距为10 |
| | | yy = btnLine.Bottom + Application.GetRealHeight(10); |
| | | } |
| | | //年与年之间的间距为24 |
| | | yy += Application.GetRealHeight(24); |
| | | } |
| | | //调整桌布高度 |
| | | listView.AdjustTableHeight(); |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 初始化底部菜单图标_________________ |
| | | |
| | | /// <summary> |
| | | /// 初始化底部菜单图标 |
| | | /// </summary> |
| | | private void InitBottomMenuIconControl() |
| | | { |
| | | //如果是成员,则只有开锁方式管理 |
| | | if (DB_ResidenceData.Instance.CurrentRegion.isOtherShare == true) |
| | | { |
| | | //开锁方式管理图标 |
| | | var btnManagerIcon = new IconViewControl(40); |
| | | btnManagerIcon.Gravity = Gravity.CenterHorizontal; |
| | | btnManagerIcon.Y = Application.GetRealHeight(466); |
| | | btnManagerIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/UnLockManager.png"; |
| | | this.FrameWhiteCentet1.AddChidren(btnManagerIcon); |
| | | btnManagerIcon.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //初始化成员列表信息 |
| | | if (this.InitMemberListInfo() == false) |
| | | { |
| | | return; |
| | | } |
| | | var form = new DoorLockUnlockMethordManagerPage(); |
| | | form.AddForm(this.device, this.listMember); |
| | | }; |
| | | } |
| | | else |
| | | { |
| | | //开锁方式管理图标 |
| | | var btnManagerIcon = new IconViewControl(40); |
| | | btnManagerIcon.Y = Application.GetRealHeight(466); |
| | | btnManagerIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/UnLockManager.png"; |
| | | this.FrameWhiteCentet1.AddChidren(btnManagerIcon); |
| | | btnManagerIcon.X = (this.FrameWhiteCentet1.Width - btnManagerIcon.Width * 2 - Application.GetRealWidth(40)) / 2; |
| | | btnManagerIcon.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //初始化成员列表信息 |
| | | if (this.InitMemberListInfo() == false) |
| | | { |
| | | return; |
| | | } |
| | | var form = new DoorLockUnlockMethordManagerPage(); |
| | | form.AddForm(this.device, this.listMember); |
| | | }; |
| | | |
| | | //常开模式图标 |
| | | this.btnNormallyOpenIcon = new IconViewControl(40); |
| | | btnNormallyOpenIcon.X = btnManagerIcon.Right + Application.GetRealWidth(40); |
| | | btnNormallyOpenIcon.Y = btnManagerIcon.Y; |
| | | btnNormallyOpenIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/NormallyOpenIcon2.png"; |
| | | this.FrameWhiteCentet1.AddChidren(btnNormallyOpenIcon); |
| | | btnNormallyOpenIcon.ButtonClickEvent += (sender, e) => |
| | | { |
| | | var form = new DoorLockAlwaysOnListPage(); |
| | | form.AddForm(this.device); |
| | | }; |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 初始化临时密码控件_________________ |
| | | |
| | | /// <summary> |
| | | /// 初始化临时密码控件 |
| | | /// </summary> |
| | | private void InitTempPasswordControl() |
| | | { |
| | | this.frameTempPsw.RemoveAll(); |
| | | |
| | | //生成临时密码的背景图片 |
| | | var picBack = new PicViewControl(258, 165); |
| | | picBack.Gravity = Gravity.CenterHorizontal; |
| | | picBack.UnSelectedImagePath = "FunctionIcon/DoorLock/CrearPswBackgroud.png"; |
| | | this.frameTempPsw.AddChidren(picBack); |
| | | |
| | | //密码显示控件 |
| | | var btnPassword = new NormalViewControl(150, 50, true); |
| | | btnPassword.Gravity = Gravity.CenterHorizontal; |
| | | btnPassword.TextSize = CSS_FontSize.SubheadingFontSize; |
| | | btnPassword.TextColor = CSS_Color.MainBackgroundColor; |
| | | btnPassword.TextAlignment = TextAlignment.Center; |
| | | this.frameTempPsw.AddChidren(btnPassword); |
| | | |
| | | //如果没有临时密码 |
| | | if (this.doorLockData.TempPassword == string.Empty) |
| | | { |
| | | //当没有临时密码时,这个背景放在中间 |
| | | picBack.Y = Application.GetRealHeight(47); |
| | | //因为图片的压缩问题,这个Y轴和蓝湖的不一样,蓝湖是99 |
| | | btnPassword.Y = Application.GetRealHeight(88); |
| | | |
| | | //生成临时密码 |
| | | btnPassword.TextID = StringId.CreatTemporaryPassword; |
| | | btnPassword.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //显示生成临时密码的弹窗界面 |
| | | this.ShowCreatTemporaryPasswordDialog(DateTime.Now, DateTime.Now.AddDays(1).AddMinutes(-1)); |
| | | }; |
| | | } |
| | | //拥有临时密码 |
| | | else |
| | | { |
| | | //显示临时密码 |
| | | btnPassword.Text = this.doorLockData.TempPassword; |
| | | //因为图片的压缩问题,这个Y轴和蓝湖的不一样,蓝湖是51 |
| | | btnPassword.Y = Application.GetRealHeight(40); |
| | | |
| | | //删除临时密码图标 |
| | | var btnDelete = new IconViewControl(28); |
| | | btnDelete.UnSelectedImagePath = "FunctionIcon/DoorLock/Delete.png"; |
| | | btnDelete.X = Application.GetRealWidth(19); |
| | | btnDelete.Y = Application.GetRealHeight(115); |
| | | this.frameTempPsw.AddChidren(btnDelete); |
| | | btnDelete.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //清除当前临时密码? |
| | | HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(StringId.ClearTempPsswordMsg), () => |
| | | { |
| | | //清空临时密码 |
| | | this.doorLockData.TempPassword = string.Empty; |
| | | this.doorLockData.StatrtTime = string.Empty; |
| | | this.doorLockData.EndTime = string.Empty; |
| | | //重新初始化临时密码控件 |
| | | this.InitTempPasswordControl(); |
| | | }); |
| | | }; |
| | | |
| | | //复制临时密码图标 |
| | | var btnCopy = new IconViewControl(28); |
| | | btnCopy.UnSelectedImagePath = "FunctionIcon/DoorLock/Shard.png"; |
| | | btnCopy.X = this.frameTempPsw.Width - btnCopy.IconSize - btnDelete.X; |
| | | btnCopy.Y = btnDelete.Y; |
| | | this.frameTempPsw.AddChidren(btnCopy); |
| | | btnCopy.ButtonClickEvent += (sender, e) => |
| | | { |
| | | //临时密码已经复制 |
| | | HdlCommonLogic.Current.SetTextToShearPlate(this.doorLockData.TempPassword, Language.StringByID(StringId.TempPsswordHasBeenCopy)); |
| | | }; |
| | | |
| | | //生效时间 |
| | | var frameEffective = this.CreatEffectiveTimeControl(this.frameTempPsw, Language.StringByID(StringId.EffectiveTime), this.doorLockData.StatrtTime); |
| | | frameEffective.X = Application.GetRealWidth(24); |
| | | frameEffective.Y = Application.GetRealHeight(180); |
| | | |
| | | //失效时间 |
| | | var frameFailure = this.CreatEffectiveTimeControl(this.frameTempPsw, Language.StringByID(StringId.FailureTime), this.doorLockData.EndTime); |
| | | frameFailure.X = this.frameTempPsw.Width - frameFailure.Width - frameEffective.X; |
| | | frameFailure.Y = frameEffective.Y; |
| | | |
| | | //- |
| | | var btnLine = new NormalViewControl(frameFailure.X - frameEffective.Right, frameFailure.Height, false); |
| | | btnLine.X = frameEffective.Right; |
| | | btnLine.Y = frameEffective.Y; |
| | | btnLine.Text = "-"; |
| | | btnLine.TextAlignment = TextAlignment.Center; |
| | | btnLine.TextColor = CSS_Color.FirstLevelTitleColor; |
| | | btnLine.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; |
| | | this.frameTempPsw.AddChidren(btnLine); |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 生成生效/失效时间控件 |
| | | /// </summary> |
| | | /// <param name="frameTempPsw">父控件</param> |
| | | /// <param name="i_text">显示的文本</param> |
| | | /// <param name="i_time">显示的时间</param> |
| | | /// <returns></returns> |
| | | private FrameLayout CreatEffectiveTimeControl(FrameLayout frameTempPsw, string i_text, string i_time) |
| | | { |
| | | //线框背景控件 |
| | | var frameBack = new FrameLayout(); |
| | | frameBack.Width = Application.GetRealWidth(120); |
| | | frameBack.Height = Application.GetRealHeight(50); |
| | | frameBack.Radius = (uint)Application.GetRealWidth(7); |
| | | frameBack.BorderWidth = 1; |
| | | frameBack.BorderColor = CSS_Color.PromptingColor1; |
| | | frameTempPsw.AddChidren(frameBack); |
| | | |
| | | //显示文本 |
| | | var btnText = new NormalViewControl(frameBack.Width, Application.GetRealHeight(18), false); |
| | | btnText.Y = Application.GetRealHeight(8); |
| | | btnText.TextColor = CSS_Color.FirstLevelTitleColor; |
| | | btnText.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; |
| | | btnText.Text = i_text; |
| | | btnText.TextAlignment = TextAlignment.Center; |
| | | frameBack.AddChidren(btnText); |
| | | |
| | | //显示时间 |
| | | var btnTime = new NormalViewControl(frameBack.Width, Application.GetRealHeight(18), false); |
| | | btnTime.Y = btnText.Bottom; |
| | | btnTime.TextColor = CSS_Color.FirstLevelTitleColor; |
| | | btnTime.TextSize = CSS_FontSize.PromptFontSize_FirstLevel; |
| | | btnTime.Text = i_time; |
| | | btnTime.TextAlignment = TextAlignment.Center; |
| | | frameBack.AddChidren(btnTime); |
| | | |
| | | return frameBack; |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 生成临时密码_______________________ |
| | | |
| | | /// <summary> |
| | | /// 显示生成临时密码的弹窗界面 |
| | | /// </summary> |
| | | private void ShowCreatTemporaryPasswordDialog(DateTime startTime, DateTime endTime) |
| | | { |
| | | //默认时间Form-To为一天 |
| | | var contr = new BottomItemEditorControl(2, string.Empty); |
| | | //点击确认时,不关闭界面 |
| | | contr.CloseByConfirm = false; |
| | | |
| | | //生效时间 |
| | | var effectiveTime = Language.StringByID(StringId.EffectiveTime); |
| | | contr.AddRowMenu(effectiveTime, startTime.ToString("yyyy.MM.dd HH:mm"), (btnView, btnValue) => |
| | | { |
| | | //关掉界面,然后重新调起来 |
| | | contr.Close(); |
| | | |
| | | var form = new DoorLockSelectTimePage(); |
| | | form.AddForm(startTime); |
| | | form.SelectFinshEvent += (selectTime) => |
| | | { |
| | | //重新调起界面 |
| | | this.ShowCreatTemporaryPasswordDialog(selectTime, endTime); |
| | | }; |
| | | }); |
| | | |
| | | //失效时间 |
| | | var failTime = Language.StringByID(StringId.FailureTime); |
| | | contr.AddRowMenu(failTime, endTime.ToString("yyyy.MM.dd HH:mm"), (btnView, btnValue) => |
| | | { |
| | | //关掉界面,然后重新调起来 |
| | | contr.Close(); |
| | | |
| | | var form = new DoorLockSelectTimePage(); |
| | | form.AddForm(endTime); |
| | | form.SelectFinshEvent += (selectTime) => |
| | | { |
| | | //重新调起界面 |
| | | this.ShowCreatTemporaryPasswordDialog(startTime, selectTime); |
| | | }; |
| | | }); |
| | | contr.FinishEvent += (div) => |
| | | { |
| | | //点击了生成 |
| | | if (div == 1) |
| | | { |
| | | if (this.CheckEffectiveTime(startTime, endTime) == false) |
| | | { |
| | | return; |
| | | } |
| | | //关掉界面 |
| | | contr.Close(); |
| | | |
| | | //生成临时密码 |
| | | this.doorLockData.TempPassword = "987654"; |
| | | this.doorLockData.StatrtTime = startTime.ToString("yyyy.MM.dd HH:mm"); |
| | | this.doorLockData.EndTime = endTime.ToString("yyyy.MM.dd HH:mm"); |
| | | //重新初始化临时密码控件 |
| | | this.InitTempPasswordControl(); |
| | | } |
| | | }; |
| | | |
| | | //需要初始化之后,按钮才不会为null 变更【生成】按钮的宽度和X轴 |
| | | contr.btnConfirm.TextID = StringId.Generate; |
| | | contr.btnConfirm.Width = contr.btnConfirm.GetRealWidthByText(); |
| | | contr.btnConfirm.X = contr.btnConfirm.Parent.Width - contr.btnConfirm.Width - contr.btnCancel.X; |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 检测生效时间是否正确 |
| | | /// </summary> |
| | | /// <param name="startTime">生效时间</param> |
| | | /// <param name="endTime">失效时间</param> |
| | | /// <returns></returns> |
| | | private bool CheckEffectiveTime(DateTime startTime, DateTime endTime) |
| | | { |
| | | if (startTime >= endTime) |
| | | { |
| | | //生效时间必须大于失效时间 |
| | | HdlMessageLogic.Current.ShowMassage(ShowMsgType.Tip, Language.StringByID(StringId.EffectiveTimeMustBeOverFailureTime)); |
| | | return false; |
| | | } |
| | | return true; |
| | | } |
| | | |
| | | #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 RefreshFormStatu() |
| | | { |
| | | //如果不在线 |
| | | if (this.doorLockData.IsOnline == false) |
| | | { |
| | | //开锁图片 |
| | | this.picLockControl.UnSelectedImagePath = "FunctionIcon/DoorLock/LockPictrue2.png"; |
| | | //连接状态 |
| | | this.btnOnlineIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/UnConnect.png"; |
| | | this.btnOnlineView.Text = this.dicText["未连接"]; |
| | | this.btnOnlineView.TextColor = CSS_Color.AuxiliaryColor2; |
| | | //常开模式图标 |
| | | if (this.btnNormallyOpenIcon != null) |
| | | { |
| | | this.btnNormallyOpenIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/NormallyOpenIcon2.png"; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //开锁图片 |
| | | this.picLockControl.UnSelectedImagePath = this.doorLockData.Open == true ? "FunctionIcon/DoorLock/UnLockPictrue3.png" : "FunctionIcon/DoorLock/LockPictrue1.png"; |
| | | //连接状态 |
| | | this.btnOnlineIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/Connect.png"; |
| | | this.btnOnlineView.Text = this.dicText["已连接"]; |
| | | this.btnOnlineView.TextColor = CSS_Color.PromptingColor1; |
| | | //常开模式图标 |
| | | if (this.btnNormallyOpenIcon != null) |
| | | { |
| | | this.btnNormallyOpenIcon.UnSelectedImagePath = "FunctionIcon/DoorLock/NormallyOpenIcon1.png"; |
| | | } |
| | | } |
| | | } |
| | | |
| | | /// <summary> |
| | | /// 设置中间容器控件可视化 |
| | | /// </summary> |
| | | private void SetMiddleFrameControlVisible() |
| | | { |
| | | //如果选择的是 一键开锁 |
| | | if (this.nowSelectMenu == 1) |
| | | { |
| | | this.picLockControl.Visible = true; |
| | | this.frameTempPsw.Visible = false; |
| | | } |
| | | else |
| | | { |
| | | this.picLockControl.Visible = false; |
| | | this.frameTempPsw.Visible = true; |
| | | //临时密码已经变更,需要刷新界面 |
| | | if (this.doorLockData.IsTempPasswordChanged == true) |
| | | { |
| | | //初始化临时密码控件 |
| | | this.InitTempPasswordControl(); |
| | | this.doorLockData.IsTempPasswordChanged = false; |
| | | } |
| | | } |
| | | } |
| | | |
| | | #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> |
| | | /// <returns></returns> |
| | | private bool InitMemberListInfo() |
| | | { |
| | | //已经初始化 |
| | | if (this.listMember != null) { return true; } |
| | | |
| | | //主账号需要去获取成员列表,而子账号只能他自己 |
| | | if (DB_ResidenceData.Instance.CurrentRegion.isOtherShare == false) |
| | | { |
| | | //获取成员列表 |
| | | var responePack = new DAL.Server.HttpServerRequest().GetResidenceMemberAccount(); |
| | | if (responePack.Code == DAL.Server.StateCode.SUCCESS) |
| | | { |
| | | this.listMember = Newtonsoft.Json.JsonConvert.DeserializeObject<List<ResidenceMemberInfo>>(responePack.Data.ToString()); |
| | | } |
| | | //失败 |
| | | else |
| | | { |
| | | //提示 |
| | | DAL.Server.IMessageCommon.Current.ShowErrorInfoAlter(responePack.Code); |
| | | return false; |
| | | } |
| | | } |
| | | else |
| | | { |
| | | //先初始化 |
| | | this.listMember = new List<ResidenceMemberInfo>(); |
| | | } |
| | | |
| | | //自身加进去,自己位于首位 |
| | | var info = new ResidenceMemberInfo(); |
| | | info.childAccountId = OnAppConfig.Instance.LastLoginUserId; |
| | | info.childAccountType = DB_ResidenceData.Instance.CurrentRegion.isOtherShare == false ? "ADMIN" : "ORDINARY"; |
| | | info.nickName = UserInfo.Current.userName; |
| | | this.listMember.Insert(0, info); |
| | | if (string.IsNullOrEmpty(info.nickName)) |
| | | { |
| | | info.nickName = UserInfo.Current.AccountString; |
| | | } |
| | | |
| | | foreach (var info2 in this.listMember) |
| | | { |
| | | //设置用户昵称 |
| | | if (string.IsNullOrEmpty(info2.nickName)) |
| | | { |
| | | info2.nickName = info2.memberName; |
| | | } |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | #endregion |
| | | |
| | | #region ■ 一键开锁___________________________ |
| | | |
| | | /// <summary> |
| | | /// 一键开锁 |
| | | /// </summary> |
| | | private void DoOneKeyToUnlockDoor() |
| | | { |
| | | if (this.doorLockData.IsOnline == false) |
| | | { |
| | | //设备不在线 |
| | | HdlMessageLogic.Current.ShowMassage(ShowMsgType.TipRemind, Language.StringByID(StringId.DeviceNotOnline), null, null, null, 2); |
| | | return; |
| | | } |
| | | //第一次使用,请先绑定门锁密码 |
| | | //HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(StringId.PleaseBindTheDoorPswFirst), () => |
| | | //{ |
| | | // var form = new TextInputDialog(Language.StringByID(StringId.PleaseInputDoorAdminPassword), string.Empty, Language.StringByID(StringId.PleaseInputDoorAdminPassword), null, null, true); |
| | | // form.Show((password) => |
| | | // { |
| | | // //门锁绑定成功 |
| | | // HdlMessageLogic.Current.ShowMassage(ShowMsgType.ConfirmSuccess, Language.StringByID(StringId.BindDoorLockSuccess), () => |
| | | // { |
| | | // }); |
| | | // }); |
| | | //}); |
| | | |
| | | if (UserInfo.Current.appUnlockPage.Contains("3") == true) |
| | | { |
| | | //调起安全认证 |
| | | HdlCheckLogic.Current.CheckUnlockSecurity(true, (div) => |
| | | { |
| | | //锁已打开 |
| | | if (div == 1) |
| | | { |
| | | HdlMessageLogic.Current.ShowMassage(ShowMsgType.TipSuccess, Language.StringByID(StringId.LockIsOpened), null, null, null, 2); |
| | | } |
| | | else |
| | | { |
| | | //为了安全,请跳转至个人中心{0}设置个人密码,并应用于门锁开锁 |
| | | HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(StringId.JumpToPersonalCentetToSetPasswordMsg), () => |
| | | { |
| | | var page = new AppUnlockSettingsPage(); |
| | | MainPage.BasePageView.AddChidren(page); |
| | | page.LoadPage(); |
| | | MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; |
| | | |
| | | }, Language.StringByID(StringId.Jump)); |
| | | } |
| | | }); |
| | | } |
| | | else |
| | | { |
| | | //为了安全,请跳转至个人中心{0}设置个人密码,并应用于门锁开锁 |
| | | HdlMessageLogic.Current.ShowMassage(ShowMsgType.Confirm, Language.StringByID(StringId.JumpToPersonalCentetToSetPasswordMsg), () => |
| | | { |
| | | var page = new AppUnlockSettingsPage(); |
| | | MainPage.BasePageView.AddChidren(page); |
| | | page.LoadPage(); |
| | | MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; |
| | | |
| | | }, Language.StringByID(StringId.Jump)); |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 一般方法___________________________ |
| | | |
| | | /// <summary> |
| | | /// 刷新当前设备的状态缓存 |
| | | /// </summary> |
| | | private void RefreshNowDeviceStatuMemory(Function i_LocalDevice) |
| | | { |
| | | this.doorLockData.IsOnline = i_LocalDevice.online; |
| | | for (int i = 0; i < i_LocalDevice.attributes.Count; i++) |
| | | { |
| | | var data = i_LocalDevice.attributes[i]; |
| | | //门锁状态 |
| | | if (data.key == "status") |
| | | { |
| | | if (data.state == "open") { this.doorLockData.Open = true; } |
| | | else if (data.state == "normal_open") |
| | | { |
| | | //常开模式 |
| | | this.doorLockData.Open = true; |
| | | this.doorLockData.NormalOpen = true; |
| | | } |
| | | else |
| | | { |
| | | this.doorLockData.Open = false; |
| | | this.doorLockData.NormalOpen = false; |
| | | } |
| | | } |
| | | //音量 |
| | | else if (data.key == "volume") |
| | | { |
| | | var value = data.state; |
| | | if (value != string.Empty) |
| | | { |
| | | this.doorLockData.Voice = Convert.ToInt32(value); |
| | | } |
| | | } |
| | | //电池百分比 |
| | | else if (data.key == "battery_percentage") |
| | | { |
| | | var value = data.state; |
| | | if (value != string.Empty) |
| | | { |
| | | this.doorLockData.BatteryPersent = Convert.ToInt32(value); |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | #endregion |
| | | |
| | | #region ■ 结构体_____________________________ |
| | | |
| | | /// <summary> |
| | | /// 门锁的数据 |
| | | /// </summary> |
| | | private class DoorLockData |
| | | { |
| | | /// <summary> |
| | | /// 是否打开 |
| | | /// </summary> |
| | | public bool Open = true; |
| | | /// <summary> |
| | | /// 电池电量 |
| | | /// </summary> |
| | | public int BatteryPersent = 0; |
| | | /// <summary> |
| | | /// 是否在线 |
| | | /// </summary> |
| | | public bool IsOnline = false; |
| | | /// <summary> |
| | | /// 是否静音 |
| | | /// </summary> |
| | | public bool Mute = false; |
| | | /// <summary> |
| | | /// 音量 |
| | | /// </summary> |
| | | public int Voice = 0; |
| | | /// <summary> |
| | | /// 是否处于常开模式 |
| | | /// </summary> |
| | | public bool NormalOpen = false; |
| | | /// <summary> |
| | | /// 临时密码 |
| | | /// </summary> |
| | | public string TempPassword = string.Empty; |
| | | /// <summary> |
| | | /// 临时密码是否被变更 |
| | | /// </summary> |
| | | public bool IsTempPasswordChanged = true; |
| | | /// <summary> |
| | | /// 临时密码生效时间(2020.03.17 13:27) |
| | | /// </summary> |
| | | public string StatrtTime = string.Empty; |
| | | /// <summary> |
| | | /// 临时密码失效时间(2020.03.17 13:27) |
| | | /// </summary> |
| | | public string EndTime = string.Empty; |
| | | } |
| | | |
| | | #endregion |
| | | } |
| | | } |