#if __Android__ using System; using HDL_ON.UI.CSS; using Shared; using HDL_ON.DAL.Server; using System.Collections.Generic; using Com.Hdl.Hdllinphonesdk.Utils; using Com.Hdl.Hdllinphonesdk.Dialog; namespace HDL_ON.UI.UI2.PersonalCenter.Visitor { public class VisitorQRCodePage : FrameLayout { FrameLayout bodyView; VerticalScrolViewLayout bodyScrolView; private EditText phoneNumberEditText;// 电话号码EditText private EditText pwdEditText;// 密码EditText private Button randomBtn;//随机密码Btn private FrameLayout codeLayout; private ImageView codeIV;// 二维码 private Button codeSaveTipBtn; private Button codeTip;//二维码有效期提示 private Button visitorVoucherBtn; private VisitorTempPassword tempPassword; Action backAction;// 后退按键,刷新UI public VisitorQRCodePage() { bodyView = this; } public VisitorQRCodePage(Action action,VisitorTempPassword pwd) { bodyView = this; this.tempPassword = pwd; backAction = action; } public override void RemoveFromParent() { this.tempPassword = null; backAction?.Invoke(); base.RemoveFromParent(); } public void LoadPage() { #region 顶部导航栏 if (tempPassword == null || tempPassword.id == null) { tempPassword = new VisitorTempPassword(); Action click = () => { Action action = () => { LoadPage(); }; VisitorHistoryPage page = new VisitorHistoryPage(action); MainPage.BasePageView.AddChidren(page); page.LoadPage(); MainPage.BasePageView.PageIndex = MainPage.BasePageView.ChildrenCount - 1; }; bodyView.BackgroundColor = CSS_Color.BackgroundColor; new TopViewDiv(bodyView, Language.StringByID(StringId.VisitorInvitation)) .LoadTopView_SettingText(click, Language.StringByID(StringId.VisitorRecord)); } else { bodyView.BackgroundColor = CSS_Color.BackgroundColor; new TopViewDiv(bodyView, Language.StringByID(StringId.VisitorInvitation)).LoadTopView(); } #endregion bodyScrolView = new VerticalScrolViewLayout() { Y = Application.GetRealHeight(64), VerticalScrollBarEnabled = false, BackgroundColor = CSS_Color.MainBackgroundColor, }; bodyView.AddChidren(bodyScrolView); // 提示文字 bodyScrolView.AddChidren(new Button() { Text = Language.StringByID(StringId.VisitorTip), IsMoreLines = true, TextSize = CSS_FontSize.PromptFontSize_FirstLevel, TextColor = CSS_Color.PromptingColor1, TextAlignment = TextAlignment.Center, Padding = new Padding(0, Application.GetRealWidth(20), 0, Application.GetRealWidth(20)), Height = Application.GetRealHeight(60), }); #region 手机号 bodyScrolView.AddChidren(new Button() { Text = Language.StringByID(StringId.PhoneNumber), Y = Application.GetRealWidth(10), TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.FirstLevelTitleColor, Height = Application.GetRealHeight(20), Padding = new Padding(0, Application.GetRealWidth(20), 0, Application.GetRealWidth(20)), TextAlignment = TextAlignment.CenterLeft, }); phoneNumberEditText = new EditText() { Height = Application.GetRealHeight(45), X = Application.GetRealWidth(20), Width = Application.GetRealWidth(335), TextSize = CSS_FontSize.TextFontSize, TextColor = CSS_Color.FirstLevelTitleColor, PlaceholderText = Language.StringByID(StringId.InputPhoneNumberOfTheVisitor), Text = tempPassword.phone, IsNumberKeyboardType = true, PlaceholderTextColor = CSS_Color.PromptingColor1, }; bodyScrolView.AddChidren(phoneNumberEditText); //phoneNumberEditText.Foucs = true; // 分割线 bodyScrolView.AddChidren(new Button() { X = Application.GetRealWidth(20), Width = Application.GetRealWidth(335), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor, }); #endregion #region 动态密码 bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(10), }); bodyScrolView.AddChidren(new Button() { Text = Language.StringByID(StringId.linshimima), TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.FirstLevelTitleColor, Height = Application.GetRealHeight(20), Padding = new Padding(0, Application.GetRealWidth(20), 0, Application.GetRealWidth(20)), TextAlignment = TextAlignment.CenterLeft, }); FrameLayout pwdLayout = new FrameLayout() { Height = Application.GetRealHeight(40), }; // 密码输入框 pwdEditText = new EditText() { X = Application.GetRealWidth(20), TextSize = CSS_FontSize.TextFontSize, TextColor = CSS_Color.FirstLevelTitleColor, Width = Application.GetRealWidth(335), PlaceholderText = Language.StringByID(StringId.Input6_DigitsTemporaryPassword), IsNumberKeyboardType = true, PlaceholderTextColor = CSS_Color.PromptingColor1, }; pwdLayout.AddChidren(pwdEditText); //随机密码Btn randomBtn = new Button() { X = Application.GetRealWidth(275), Width = Application.GetRealWidth(80), Text = Language.StringByID(StringId.RandomGeneration), TextAlignment = TextAlignment.CenterRight, TextColor = CSS_Color.MainColor, TextSize = CSS_FontSize.TextFontSize, }; pwdLayout.AddChidren(randomBtn); bodyScrolView.AddChidren(pwdLayout); // 分割线 bodyScrolView.AddChidren(new Button() { X = Application.GetRealWidth(20), Width = Application.GetRealWidth(335), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor, }); #endregion #region 二维码生效时间 FrameLayout startLayout = new FrameLayout() { Height = Application.GetRealHeight(40), Y = Application.GetRealWidth(10), }; startLayout.AddChidren(new Button() { Text = Language.StringByID(StringId.EffectiveTime), X = Application.GetRealWidth(20), Width = Application.GetRealWidth(130), TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.FirstLevelTitleColor, TextAlignment = TextAlignment.CenterLeft, Enable = false, }); Button startTimeText = new Button() { X = Application.GetRealWidth(159), Width = Application.GetRealWidth(150), TextAlignment = TextAlignment.CenterRight, TextSize = CSS_FontSize.TextFontSize, TextColor = CSS_Color.FirstLevelTitleColor, }; if (tempPassword.tempPwd == null || tempPassword.tempPwd == "") { startTimeText.Text = "";// System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } else { startTimeText.Text = tempPassword.validBeginTime; } startLayout.AddChidren(startTimeText); startLayout.AddChidren(new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", Enable = false, }); Button startTimeBtn = new Button(); startLayout.AddChidren(startTimeBtn); // dialog回调 Action startTimeAction = (str) => { startTimeText.Text = str + ":00"; }; startTimeBtn.MouseUpEventHandler += (sender, e) => { try { new LpTimeDialog(Application.Activity, new LpTimeDialogCallBak(startTimeAction)).Show(); } catch (Exception ex) { string error = ex.Message; } }; bodyScrolView.AddChidren(startLayout); // 分割线 bodyScrolView.AddChidren(new Button() { X = Application.GetRealWidth(20), Width = Application.GetRealWidth(335), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor, }); #endregion #region 二维码失效时间 FrameLayout endLayout = new FrameLayout() { Height = Application.GetRealHeight(40), Y = Application.GetRealWidth(10), }; endLayout.AddChidren(new Button() { Text = Language.StringByID(StringId.FailureTime), X = Application.GetRealWidth(20), Width = Application.GetRealWidth(130), TextSize = CSS_FontSize.SubheadingFontSize, TextColor = CSS_Color.FirstLevelTitleColor, TextAlignment = TextAlignment.CenterLeft, Enable = false, }); Button endTimeText = new Button() { X = Application.GetRealWidth(159), Width = Application.GetRealWidth(150), TextAlignment = TextAlignment.CenterRight, TextSize = CSS_FontSize.TextFontSize, TextColor = CSS_Color.FirstLevelTitleColor, Enable = false, }; if (tempPassword.tempPwd == null || tempPassword.tempPwd == "") { endTimeText.Text = "";// System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss"); } else { endTimeText.Text = tempPassword.validEndTime; } endLayout.AddChidren(endTimeText); endLayout.AddChidren(new Button() { X = Application.GetRealWidth(339), Gravity = Gravity.CenterVertical, Width = Application.GetMinRealAverage(16), Height = Application.GetMinRealAverage(16), UnSelectedImagePath = "Public/Right.png", Enable = false, }); Button endTimeBtn = new Button(); endLayout.AddChidren(endTimeBtn); bodyScrolView.AddChidren(endLayout); // 分割线 bodyScrolView.AddChidren(new Button() { X = Application.GetRealWidth(20), Width = Application.GetRealWidth(335), Height = Application.GetRealHeight(1), BackgroundColor = CSS_Color.DividingLineColor, }); // dialog回调 Action endTimeAction = (str) => { endTimeText.Text = str + ":00"; }; endTimeBtn.MouseUpEventHandler += (sender, e) => { try { new LpTimeDialog(Application.Activity, new LpTimeDialogCallBak(endTimeAction)).Show(); } catch (Exception ex) { string error = ex.Message; } }; #endregion #region 二维码 bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(33), }); codeLayout = new FrameLayout() { X = Application.GetRealWidth(117), Width = Application.GetRealWidth(142), Height = Application.GetRealWidth(142), }; bodyScrolView.AddChidren(codeLayout); // 二维码ImagView codeIV = new ImageView() { BackgroundColor = CSS_Color.BackgroundColor, }; codeLayout.AddChidren(codeIV); bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(20), }); codeSaveTipBtn = new Button() { X = Application.GetRealWidth(16), Width = Application.GetRealWidth(343), Height = Application.GetRealWidth(20), Text = Language.StringByID(StringId.LongPressQRCodeSave), TextAlignment = TextAlignment.Center, TextColor = CSS_Color.FirstLevelTitleColor, Visible = false, }; bodyScrolView.AddChidren(codeSaveTipBtn); #endregion bodyScrolView.AddChidren(new Button() { Height = Application.GetRealWidth(28), }); visitorVoucherBtn = new Button() { X = Application.GetRealWidth(78), Width = Application.GetRealWidth(220), Height = Application.GetRealWidth(44), BackgroundColor = CSS_Color.MainColor, Radius = (uint)Application.GetRealWidth(44), TextSize = CSS_FontSize.SubheadingFontSize, TextAlignment = TextAlignment.Center, TextColor = CSS_Color.textWhiteColor, }; bodyScrolView.AddChidren(visitorVoucherBtn); Action voucher_action = () => { if (codeIV.ImageBytes == null) { // 请求服务端,生成临时密码 tempPassword.homeId = Entity.DB_ResidenceData.Instance.CurrentRegion.id; tempPassword.phone = phoneNumberEditText.Text; tempPassword.tempPwd = pwdEditText.Text; tempPassword.validBeginTime = startTimeText.Text; tempPassword.validEndTime = endTimeText.Text; tempPassword.useCount = 1000; CreateVisitorPassword(tempPassword); } else { // 删除访客临时密码 DelVisitorPassword(tempPassword); } }; visitorVoucherBtn.MouseUpEventHandler += (sender, e) => { if (startTimeText.Text.Trim() == "") { var tip_dialog = new Tip() { Text = Language.StringByID(StringId.VisitorStartTime), CloseTime = 2, Direction = AMPopTipDirection.None }; tip_dialog.Show(MainPage.BaseView); return; } if (endTimeText.Text.Trim() == "") { var tip_dialog = new Tip() { Text = Language.StringByID(StringId.VisitorEndTime), CloseTime = 2, Direction = AMPopTipDirection.None }; tip_dialog.Show(MainPage.BaseView); return; } if (phoneNumberEditText.Text.Trim() == "" || phoneNumberEditText.Text.Trim().Length != 11) { var tip_dialog = new Tip() { Text = Language.StringByID(StringId.PhoneNumberErrorTip), CloseTime = 2, Direction = AMPopTipDirection.None }; tip_dialog.Show(MainPage.BaseView); phoneNumberEditText.Foucs = true; return; } if (pwdEditText.Text.Trim() == "" || pwdEditText.Text.Trim().Length != 6) { var tip_dialog = new Tip() { Text = Language.StringByID(StringId.Input6_DigitsTemporaryPassword), CloseTime = 2, Direction = AMPopTipDirection.None }; tip_dialog.Show(MainPage.BaseView); pwdEditText.Foucs = true; return; } string tip = ""; string message = ""; if (codeIV.ImageBytes == null) { tip = Language.StringByID(StringId.tip); message = Language.StringByID(StringId.VisitorTipContent); } else { tip = Language.StringByID(StringId.tip); message = Language.StringByID(StringId.VisitorDelTipContent); } new LpTipDialog(Application.Activity, tip, message, new LpTipDialogCallBack(voucher_action)).Show(); }; //将二维码保存到本地相册 codeIV.MouseLongEventHandler += (sender, e) => { #if __Android__ bool bol = HDLImageUtils.SaveImageToGallery(Application.Activity, Scan.BytesFromText(tempPassword.tempPwd, codeIV.Width, codeIV.Height)); string msg = ""; if (bol) { msg = Language.StringByID(StringId.SavedSuccessfully); } else { msg = Language.StringByID(StringId.saveFail); } var tip_dialog = new Tip() { Text = msg, CloseTime = 2, Direction = AMPopTipDirection.None }; tip_dialog.Show(MainPage.BaseView); #endif }; if (tempPassword != null && tempPassword.id != null && tempPassword.id != "") { pwdEditText.Text = tempPassword.tempPwd; pwdEditText.PlaceholderText = Language.StringByID(StringId.TemporaryPasswordInvalid); pwdEditText.Enable = false; phoneNumberEditText.Enable = false; randomBtn.Visible = false; startTimeBtn.Enable = false; endTimeBtn.Enable = false; } else { pwdEditText.FoucsChanged = (sender, e) => { if (!pwdEditText.Foucs) { // 6位密码验证 var tip_dialog = new Tip() { Text = Language.StringByID(StringId.Input6_DigitsTemporaryPassword), CloseTime = 2, Direction = AMPopTipDirection.None }; tip_dialog.Show(MainPage.BaseView); } }; randomBtn.MouseUpEventHandler += (sender, e) => { string tPwd = getRandomPwd(); pwdEditText.Text = tPwd; }; phoneNumberEditText.FoucsChanged = (sender, e) => { if (!phoneNumberEditText.Foucs) { //手机号码错误提示 if (!Utlis.CheckPhoneNumber(phoneNumberEditText.Text.Trim(), "86")) { var tip_dialog = new Tip() { Text = Language.StringByID(StringId.PhoneNumberErrorTip), CloseTime = 2, Direction = AMPopTipDirection.None }; tip_dialog.Show(MainPage.BaseView); } } }; } RefreshVisitorVoucherBtn(); } /// /// 刷新VisitorVoucherBtn状态 /// private void RefreshVisitorVoucherBtn() { if (tempPassword == null) return; if (tempPassword.tempPwd != null && tempPassword.tempPwd != "") { codeIV.ImageBytes = Scan.BytesFromText(tempPassword.tempPwd, codeIV.Width, codeIV.Height); //判断二维码是否失效 DateTime endTime = DateTime.Parse(tempPassword.validEndTime); DateTime currentTime = DateTime.Now; if (currentTime > endTime || !tempPassword.status) { // 二维码有效期提示 codeTip = new Button() { TextAlignment = TextAlignment.Center, TextColor = CSS_Color.textWhiteColor, BackgroundColor = CSS_Color.DialogTransparentColor1, Text = Language.StringByID(StringId.QRcodeIsInvalid), }; codeLayout.AddChidren(codeTip); visitorVoucherBtn.Visible = false; } visitorVoucherBtn.Text = Language.StringByID(StringId.CancleVisitorCredentials); } else { visitorVoucherBtn.Visible = true; visitorVoucherBtn.Text = Language.StringByID(StringId.GenerateVisitorCredentials); } } /// /// 添加临时密码(访客凭证) /// /// 住宅id /// 访客手机号 /// 临时密码 /// 开始时间 /// 结束时间 /// 使用次数,默认一个数值大一些的 /// private bool CreateVisitorPassword(VisitorTempPassword pwd) { var result = false; Dictionary dictionary = new Dictionary(); dictionary.Add("homeId", pwd.homeId); dictionary.Add("phone", pwd.phone); dictionary.Add("tempPwd", pwd.tempPwd); dictionary.Add("validBeginTime", pwd.validBeginTime); dictionary.Add("validEndTime", pwd.validEndTime); dictionary.Add("useCount", pwd.useCount); var requestJson = HttpUtil.GetSignRequestJson(dictionary); var pack = HttpUtil.RequestHttpsPost(NewAPI.API_POST_ADD_TEMP_PASSWORD, requestJson); if (pack != null) { if (pack.Code == StateCode.SUCCESS) { pwd.id = pack.Data.ToString(); codeIV.ImageBytes = Scan.BytesFromText(pwdEditText.Text, codeIV.Width, codeIV.Height); codeSaveTipBtn.Visible = true; RefreshVisitorVoucherBtn(); } else { var tip_dialog = new Tip() { Text = pack.message, CloseTime = 2, Direction = AMPopTipDirection.None }; tip_dialog.Show(MainPage.BaseView); } } return result; } /// /// 删除临时密码(访客凭证) /// /// 住宅id /// 临时密码id private bool DelVisitorPassword(VisitorTempPassword pwd) { Dictionary dictionary = new Dictionary(); dictionary.Add("homeId", pwd.homeId); dictionary.Add("id", pwd.id); var result = false; var requestJson = HttpUtil.GetSignRequestJson(dictionary); var pack = HttpUtil.RequestHttpsPost(NewAPI.API_POST_DEL_TEMP_PASSWORD, requestJson); if (pack != null) { if (pack.Code == StateCode.SUCCESS) { // 关闭当前界面 RemoveFromParent(); } } RefreshVisitorVoucherBtn(); return result; } /// /// 生成6位随机密码 /// /// private string getRandomPwd() { string pwd = ""; for (int i = 0; i < 6; i++) { int math = new Random().Next(0, 9); pwd += math; } return pwd; } } } #else using Shared; namespace HDL_ON.UI.UI2.PersonalCenter.Visitor { public class VisitorQRCodePage : FrameLayout { } } #endif