JLChen
2020-12-09 e87985ec1dcb69beedaf9f95e8e7aba14b7c08d6
HDL_ON/UI/UI1-Login/ForgetPasswordPageBLL.cs
New file
@@ -0,0 +1,596 @@
using System;
using System.Text.RegularExpressions;
using System.Threading;
using HDL_ON.DAL.Server;
using HDL_ON.UI.CSS;
using Shared;
namespace HDL_ON.UI.UI1Login
{
    public partial class ForgetPasswordPage
    {
        /// <summary>
        /// 加载事件列表
        /// </summary>
        void LoadEventList()
        {
            LoadPage_SwitchResetMode();
            LoadEvent_EditTextFcousChange();
            LoadEvent_ChangeTextVisble();
            LoadEvent_GetVerificationCode();
            LoadEvent_Reset();
            LoadEvent_TextChange();
        }
        /// <summary>
        /// 切换修改方式
        /// </summary>
        void LoadPage_SwitchResetMode()
        {
            //选择手机方式
            btnPhoneLogin.MouseUpEventHandler += (sender, e) =>
            {
                if (registerType == 0)
                    return;
                etAccount.IsNumberKeyboardType = true;
                etAccount.Text = registerPhone;
                etPassword.Text = "";
                etRepeatPassword.Text = "";
                #region 切换选中按钮
                btnGetVerificationCode_Phone.Visible = true;
                btnGetVerificationCode_Mail.Visible = false;
                btnEmailLogin.TextColor = CSS_Color.PromptingColor1;
                btnEmailLogin.TextSize = CSS_FontSize.TextFontSize;
                btnPhoneLogin.TextColor = CSS_Color.MainColor;
                btnPhoneLogin.TextSize = CSS_FontSize.EmphasisFontSize_Secondary;
                etAccount.PlaceholderText = Language.StringByID(StringId.PlsEntryPhoneNumber);
                #endregion
                #region 切换方式方式及图标
                registerType = 0;
                if (btnAccountIcon.Parent != null)
                {
                    btnAccountIcon.RemoveFromParent();
                }
                accountView.AddChidren(btnGlobalRoaming);
                #endregion
            };
            //选择邮箱方式
            btnEmailLogin.MouseUpEventHandler += (sender, e) =>
            {
                if (registerType == 1)
                    return;
                etAccount.IsNumberKeyboardType = false;
                etAccount.Text = registerEmail;
                etPassword.Text = "";
                etRepeatPassword.Text = "";
                #region 切换选中按钮
                btnGetVerificationCode_Phone.Visible = false;
                btnGetVerificationCode_Mail.Visible = true;
                btnPhoneLogin.TextColor = CSS_Color.PromptingColor1;
                btnPhoneLogin.TextSize = CSS_FontSize.TextFontSize;
                btnEmailLogin.TextColor = CSS_Color.MainColor;
                btnEmailLogin.TextSize = CSS_FontSize.EmphasisFontSize_Secondary;
                etAccount.PlaceholderText = Language.StringByID(StringId.PlsEntryEmailAddress);
                #endregion
                #region 切换修改方式及图标
                registerType = 1;
                if (btnGlobalRoaming.Parent != null)
                {
                    btnGlobalRoaming.RemoveFromParent();
                }
                accountView.AddChidren(btnAccountIcon);
                #endregion
            };
        }
        /// <summary>
        /// 加载文本变化事件
        /// </summary>
        void LoadEvent_TextChange()
        {
            etAccount.TextChangeEventHandler += (sender, e) =>
            {
                //Regex reg = new Regex(@"^[1]+\d{10}");
                //var mFalg = reg.Match(etAccount.Text.Trim());
                if (registerType == 0)//手机获取验证码按钮生效条件
                {
                    if (!Utlis.CheckPhoneNumber(etAccount.Text.Trim(), phoneZoneCode))
                    {
                        btnGetVerificationCode_Phone.IsSelected = false;
                    }
                    else
                    {
                        if (btnGetVerificationCode_Phone.Text == Language.StringByID(StringId.GetVerificationCode))
                            btnGetVerificationCode_Phone.IsSelected = true;
                    }
                }
                else//邮箱获取验证码按钮生效条件
                {
                    if (!Utlis.CheckEmail(etAccount.Text.Trim()))
                    {
                        btnGetVerificationCode_Mail.IsSelected = false;
                    }
                    else
                    {
                        if (btnGetVerificationCode_Mail.Text == Language.StringByID(StringId.GetVerificationCode))
                            btnGetVerificationCode_Mail.IsSelected = true;
                    }
                }
            };
        }
        /// <summary>
        /// 加载文本框焦点变化事件
        /// </summary>
        void LoadEvent_EditTextFcousChange()
        {
            //账号文本框焦点变化事件
            etAccount.FoucsChanged += (sender, e) =>
            {
                if (etAccount.Foucs)
                {
                    btnAccountViewBottomLine.BackgroundColor = CSS_Color.MainColor;
                    btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                }
                else
                {
                    //标记手机号码无效
                    btnAccountViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
                    btnAccountViewBottomLine.Height = Application.GetRealHeight(1);
                    //手机方式-验证手机号码是否正确
                    if (registerType == 0)
                    {
                        btnGetVerificationCode_Phone.IsSelected = false;
                        if (!Utlis.CheckPhoneNumber(etAccount.Text.Trim(), phoneZoneCode))
                        {
                            btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                            new Tip()
                            {
                                CloseTime = 1,
                                Text = Language.StringByID(StringId.PlsEntryCorrectMobilNeumber),
                                Direction = AMPopTipDirection.None,
                            }.Show(bodyView);
                        }
                        else
                        {
                            if (btnGetVerificationCode_Phone.Text == Language.StringByID( StringId.GetVerificationCode))
                            {
                                btnGetVerificationCode_Phone.IsSelected = true;
                            }
                            LoadMothed_EnableResetButton();
                        }
                    }
                    else if (registerType == 1)
                    {
                        btnGetVerificationCode_Mail.IsSelected = false;
                        //邮箱方式-验证邮箱是否正确
                        if (!Utlis.CheckEmail(etAccount.Text.Trim()))
                        {
                            btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                            new Tip()
                            {
                                CloseTime = 1,
                                Text = Language.StringByID(StringId.PlsEntryCorrectEmailAddress),
                                Direction = AMPopTipDirection.None,
                            }.Show(bodyView);
                        }
                        else
                        {
                            if (btnGetVerificationCode_Mail.Text == Language.StringByID(StringId.GetVerificationCode))
                            {
                                btnGetVerificationCode_Mail.IsSelected = true;
                            }
                            LoadMothed_EnableResetButton();
                        }
                    }
                }
            };
            //密码文本框焦点变化事件
            etPassword.FoucsChanged += (sender, e) =>
            {
                if (etPassword.Foucs)
                {
                    btnPasswordViewBottomLine.BackgroundColor = CSS_Color.MainColor;
                    btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                }
                else
                {
                    btnPasswordViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
                    btnPasswordViewBottomLine.Height = Application.GetRealHeight(1);
                    //校验密码是否符合要求
                    if (etPassword.Text.Trim().Length < 6 || etPassword.Text.Trim().Length > 13)
                    {
                        new Tip()
                        {
                            CloseTime = 1,
                            Direction = AMPopTipDirection.None,
                            Text = Language.StringByID(StringId.PasswordIsUnqualified)
                        }.Show(bodyView);
                    }
                }
            };
            //确认密码文本框焦点变化事件
            etRepeatPassword.FoucsChanged += (sender, e) =>
            {
                if (etRepeatPassword.Foucs)
                {
                    btnRepeatPasswordViewBottomLine.BackgroundColor = CSS_Color.MainColor;
                    btnRepeatPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                }
                else
                {
                    btnRepeatPasswordViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
                    btnRepeatPasswordViewBottomLine.Height = Application.GetRealHeight(1);
                    //校验两次输入的密码是否一致
                    if (etPassword.Text.Trim() != etRepeatPassword.Text.Trim())
                    {
                        btnRepeatPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                        btnRepeatPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                        new Tip()
                        {
                            CloseTime = 1,
                            Direction = AMPopTipDirection.None,
                            Text = Language.StringByID(StringId.IncorrectRepeatPassword)
                        }.Show(bodyView);
                    }
                    else
                    {
                        LoadMothed_EnableResetButton();
                    }
                }
            };
            //验证码文本框焦点变化事件
            etVerificationCode.FoucsChanged += (sender, e) =>
            {
                if (etVerificationCode.Foucs)
                {
                    btnVerificationCodeViewBottomLine.BackgroundColor = CSS_Color.MainColor;
                    btnVerificationCodeViewBottomLine.Height = Application.GetRealHeight(2);
                }
                else
                {
                    btnVerificationCodeViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor;
                    btnVerificationCodeViewBottomLine.Height = Application.GetRealHeight(1);
                    if (etVerificationCode.Text.Length > 4)
                    {
                        LoadMothed_EnableResetButton();
                    }
                }
            };
        }
        /// <summary>
        /// 更改密码可见性
        /// </summary>
        void LoadEvent_ChangeTextVisble()
        {
            //密码文本可见性变化
            btnVisiblePassword.MouseUpEventHandler += (sender, e) =>
            {
                btnVisiblePassword.IsSelected = !btnVisiblePassword.IsSelected;
                etPassword.SecureTextEntry = !btnVisiblePassword.IsSelected;
            };
            //重复密码文本可见性变化
            btnRepeatVisiblePassword.MouseUpEventHandler += (sender, e) =>
            {
                btnRepeatVisiblePassword.IsSelected = !btnRepeatVisiblePassword.IsSelected;
                etRepeatPassword.SecureTextEntry = !btnRepeatVisiblePassword.IsSelected;
            };
        }
        /// <summary>
        /// 检测当前配置域名是否一致,不一致则替换
        /// </summary>
        /// <param name="result"></param>
        void CheckAndSetUserRequestHost(ResponsePackNew result) {
            try
            {
                var mGlobalRegionListObj = Newtonsoft.Json.JsonConvert.DeserializeObject<GlobalRegionListRes>(result.Data.ToString());
                if (UserInfo.Current.RequestHttpsHost != mGlobalRegionListObj.regionUrl)
                {
                    UserInfo.Current.RequestHttpsHost = mGlobalRegionListObj.regionUrl;
                    UserInfo.Current.GlobalRegion = mGlobalRegionListObj;
                    UserInfo.Current.SaveUserInfo();
                }
            }
            catch { }
        }
        /// <summary>
        /// 获取验证码
        /// </summary>
        void LoadEvent_GetVerificationCode()
        {
            EventHandler<MouseEventArgs> eventHandler = (sender, e) =>
            {
                var account = etAccount.Text.Trim();
                if ((sender as Button).IsSelected)
                {
                    //加载Loading效果
                    var waitPage = new Loading();
                    bodyView.AddChidren(waitPage);
                    waitPage.Start(Language.StringByID(StringId.PleaseWait));
                    int time = 60;
                    new Thread(() =>
                    {
                        try
                        {
                            //1.先检查账号是否注册过
                            var result = pm.GetRegionByAccount(account);
                            if (result.Code != StateCode.SUCCESS)
                            {
                                IMessageCommon.Current.ShowErrorInfoAlter(result.Code);
                                return;
                            }
                            else
                            {
                                //2.1检测当前配置域名是否一致,不一致则替换
                                CheckAndSetUserRequestHost(result);
                                //2.2已经注册过,发送验证码找回密码
                                ResponsePackNew resultObj;
                                //2.3请求获取验证码
                                if (registerType == 1)//邮箱
                                {
                                    resultObj = pm.VerificationCodeSend(VerifyType.FIND_PASSWORD, account);
                                }
                                else
                                {
                                    resultObj = pm.VerificationCodeSend(VerifyType.FIND_PASSWORD, account, true, phoneZoneCode);
                                }
                                if (resultObj.Code != StateCode.SUCCESS)
                                {
                                    // 提示错误
                                    IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
                                }
                                else
                                {
                                    //3.发送验证码成功,开始计时
                                    Application.RunOnMainThread(() =>
                                    {
                                    //短信发送间隔60s
                                    (sender as Button).IsSelected = false;
                                        etVerificationCode.Foucs = true;
                                    });
                                    //2.1获取验证码倒计时
                                    new Thread(() =>
                                    {
                                        while (time > 0)
                                        {
                                            time--;
                                            Application.RunOnMainThread(() =>
                                            {
                                                (sender as Button).Text = time.ToString() + "s";
                                            });
                                            Thread.Sleep(1000);
                                        }
                                        Application.RunOnMainThread(() =>
                                        {
                                        //回复获取短信按钮事件
                                        (sender as Button).IsSelected = true;
                                            (sender as Button).TextID = StringId.GetVerificationCode;
                                        });
                                    })
                                    { IsBackground = true }.Start();
                                }
                            }
                        }
                        catch { }
                        finally
                        {
                            Application.RunOnMainThread(() =>
                            {
                                if (waitPage != null)
                                {
                                    waitPage.RemoveFromParent();
                                    waitPage = null;
                                }
                            });
                        }
                    })
                    { IsBackground = true }.Start();
                }
            };
            btnGetVerificationCode_Mail.MouseUpEventHandler = eventHandler;
            btnGetVerificationCode_Phone.MouseUpEventHandler = eventHandler;
        }
        /// <summary>
        /// 加载方式按钮事件
        /// </summary>
        void LoadEvent_Reset()
        {
            btnReset.MouseUpEventHandler += (sender, e) =>
            {
                if (btnReset.IsSelected)
                {
                    //创建修改密码线程
                    var loginThread = LoadMothed_ResetThread();
                    waitPage = new Loading();
                    new PublicAssmebly().LoadPage_WaitPage(loginThread, bodyView, waitPage);
                }
            };
        }
        /// <summary>
        /// 加载重置密码方法
        /// </summary>
        Thread LoadMothed_ResetThread()
        {
            string account = etAccount.Text.Trim();
            string password = etPassword.Text.Trim();
            string repeatPassword = etRepeatPassword.Text.Trim();
            string verCode = etVerificationCode.Text.Trim();
            int countryIndex = 0;
            try
            {
                countryIndex = Convert.ToInt32(btnGlobalRoaming.Text.Trim().Remove('+'));
            }
            catch { }
            return new Thread(() =>
            {
                // 忘记密码
                var isPhone = registerType == 0;
                var resultObj = pm.ForgetPassword(account, password, verCode, isPhone);
                if (resultObj.Code == StateCode.SUCCESS)
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
                        {
                            waitPage.Hide();
                        }
                        ShowAutoLoginDialog(account, password, isPhone);
                    });
                }
                else
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
                        {
                            waitPage.Hide();
                        }
                        // 验证码错误 警告提示
                        if (resultObj.Code == StateCode.VERIFICATION_CODE_WRONG)
                        {
                            btnVerificationCodeViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnVerificationCodeViewBottomLine.Height = Application.GetRealHeight(2);
                        }
                    });
                    // 提示错误
                    IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code);
                }
            });
        }
        /// <summary>
        /// 使能修改确定按钮
        /// </summary>
        void LoadMothed_EnableResetButton()
        {
            if (!string.IsNullOrEmpty(etAccount.Text) && !string.IsNullOrEmpty(etPassword.Text) && !string.IsNullOrEmpty(etVerificationCode.Text) && (etPassword.Text.Trim() == etRepeatPassword.Text.Trim()))
            {
                btnReset.IsSelected = true;
            }
            else
            {
                btnReset.IsSelected = false;
            }
        }
        /// <summary>
        /// 显示自动自动登录事件
        /// </summary>
        void ShowAutoLoginDialog(string account, string password, bool isPhone)
        {
            Dialog dialog = new Dialog();
            FrameLayout dialogView = new FrameLayout();
            dialogView.MouseUpEventHandler = (sender, e) =>
            {
                dialog.Close();
            };
            dialog.AddChidren(dialogView);
            FrameLayout contentView = new FrameLayout()
            {
                Gravity = Gravity.CenterHorizontal,
                Y =  Application.GetRealWidth(200),
                Width = Application.GetRealWidth(288),
                Height = Application.GetRealWidth(270),
                Radius = (uint)Application.GetRealWidth(6),
                BackgroundColor = CSS_Color.MainBackgroundColor,
            };
            dialogView.AddChidren(contentView);
            contentView.Y = (dialogView.Height - contentView.Height) / 2;
            Button btnTitleIcon = new Button()
            {
                X = Application.GetRealWidth(108),
                Y = contentView.Y - Application.GetRealWidth(71),
                Width = Application.GetRealWidth(160),
                Height = Application.GetRealWidth(160),
                UnSelectedImagePath = "Public/Dialog/DialogTipTitleIcon_1.png"
            };
            dialogView.AddChidren(btnTitleIcon);
            btnTitleIcon.MouseUpEventHandler = (sender, e) =>
            {
                dialog.Close();
            };
            Button btnMsg = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealWidth(88),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealWidth(44),
                TextColor = CSS_Color.MainColor,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextID = StringId.ModifySuccess
            };
            contentView.AddChidren(btnMsg);
            Button btnMsg2 = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = btnMsg.Bottom + Application.GetRealWidth(8),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealWidth(60),
                TextColor = CSS_Color.PromptingColor1,
                TextSize = CSS_FontSize.PromptFontSize_FirstLevel,
                TextID = StringId.YourPasswordHasBeenChanged,
                TextAlignment = TextAlignment.TopCenter,
                IsMoreLines = true
            };
            contentView.AddChidren(btnMsg2);
            Button btnSkipBindPage = new Button()
            {
                Gravity = Gravity.CenterHorizontal,
                Y = Application.GetRealWidth(194),
                Width = Application.GetRealWidth(220),
                Height = Application.GetRealWidth(44),
                TextAlignment = TextAlignment.Center,
                Radius = (uint)Application.GetRealWidth(22),
                BackgroundColor = CSS_Color.MainColor,
                TextID = StringId.Login,
                TextSize = CSS_FontSize.SubheadingFontSize,
                TextColor = CSS_Color.MainBackgroundColor,
            };
            contentView.AddChidren(btnSkipBindPage);
            btnSkipBindPage.MouseUpEventHandler = (sender, e) =>
            {
                dialog.Close();
                this.Close();
                AutoLoginAction?.Invoke(account, password, isPhone);
            };
            dialog.Show();
        }
    }
}