陈嘉乐
2020-06-16 7167334c0e89dd84827d59e726123d14776e3a09
HDL_ON/UI/UI1-Login/LoginPageBLL.cs
New file
@@ -0,0 +1,690 @@
using System;
using System.Text.RegularExpressions;
using System.Threading;
using System.Collections.Generic;
using HDL_ON.UI.CSS;
using Shared;
using HDL_ON.Entity;
namespace HDL_ON.UI.UI1Login
{
    public partial class LoginPage
    {
        /// <summary>
        /// 加载事件
        /// </summary>
        void LoadEventList()
        {
            LoadPage_SwitchLoginType();
            LoadMethod_VisiblePassword();
            LoadPage_SwitchLoginMode();
            LoadEvent_Login();
            LoadPage_SelectionEditText();
            LoadPage_RegisterPage();
            GetVerificationCode();
            LoadMethod_ForgetPassword();
        }
        /// <summary>
        /// 点击按钮获取验证码
        /// </summary>
        void GetVerificationCode()
        {
            btnGetVerificationCode.MouseUpEventHandler += (sender, e) =>
            {
                if (btnGetVerificationCode.IsSelected)
                {
                    string phoneNumber = etAccount.Text.Trim();
                    if (string.IsNullOrEmpty(phoneNumber))
                    {
                        var tip = new Tip()
                        {
                            Text = Language.StringByID(StringId.PlsEntryPhoneNumber),
                            CloseTime = 3,
                            Direction = AMPopTipDirection.None
                        };
                        tip.Show(bodyView);
                        btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                        btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                        return;
                    }
                    if (!Regex.IsMatch(account, @"^[1]+\d{10}") || (account.Length != 11))
                    {
                        var tip = new Tip()
                        {
                            Text = Language.StringByID(StringId.PlsEntryCorrectMobilNeumber),
                            CloseTime = 3,
                            Direction = AMPopTipDirection.None
                        };
                        tip.Show(bodyView);
                        btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                        btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                        return;
                    }
                    btnGetVerificationCode.IsSelected = false ;
                    btnGetVerificationCode.TextColor = CSS_Color.PromptingColor1;
                    int time = 60;
                    new Thread(() =>
                    {
                        while (time > 0)
                        {
                            time--;
                            Application.RunOnMainThread(() =>
                            {
                                btnGetVerificationCode.Text = time.ToString() + "s";
                            });
                            Thread.Sleep(1000);
                        }
                        Application.RunOnMainThread(() =>
                        {
                            btnGetVerificationCode.IsSelected = true;
                            btnGetVerificationCode.TextID = StringId.GetVerificationCode;
                        });
                    })
                    { IsBackground = true }.Start();
                    new Thread(() =>
                    {
                        //获取验证码
                        var result = pm.GetPhoneLoginVerCode(phoneNumber);
                        if (result.StateCode.ToUpper() == "SUCCESS")
                        {
                        }
                        //登录失败
                        else
                        {
                            string tipStr = "Sever erorr";
                            switch (result.StateCode.ToUpper())
                            {
                                case "USERNAMEORPWDERROR":
                                    tipStr = Language.StringByID(StringId.LoginFailed_AccountOrPasswordError);
                                    Application.RunOnMainThread(() =>
                                    {
                                        btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                                        btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                                    });
                                    break;
                                case "ACCOUNTNOEXISTS":
                                    tipStr = Language.StringByID(StringId.ACCOUNTNOEXISTS);
                                    Application.RunOnMainThread(() =>
                                    {
                                        btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                                        btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                                    });
                                    break;
                                case "SENDFAIL":
                                    tipStr = Language.StringByID(StringId.FailedToSendVerificationCode);
                                    Application.RunOnMainThread(() =>
                                    {
                                        btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                                        btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                                    });
                                    break;
                                case "Self:Net_Error":
                                    tipStr = Language.StringByID(StringId.NetworkAnomaly);
                                    break;
                            }
                            Application.RunOnMainThread(() =>
                            {
                                //提示原因
                                var tip = new Tip()
                                {
                                    Text = tipStr,
                                    CloseTime = 3,
                                    Direction = AMPopTipDirection.None
                                };
                                tip.Show(bodyView);
                            });
                        }
                    })
                    { IsBackground = true }.Start();
                }
            };
        }
        /// <summary>
        /// 切换登录类型
        /// </summary>
        void LoadPage_SwitchLoginType()
        {
            //选择手机登录
            btnPhoneLogin.MouseUpEventHandler += (sender, e) =>
            {
                #region 切换选中按钮
                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 切换登录方式及图标
                loginType = 0;
                if (btnAccountIcon.Parent != null)
                {
                    btnAccountIcon.RemoveFromParent();
                }
                accountView.AddChidren(btnGlobalRoaming);
                //显示验证码登录方式,手机登录有验证码登录
                btnSwitchLoginMode.Visible = true;
                #endregion
            };
            //选择邮箱登录
            btnEmailLogin.MouseUpEventHandler += (sender, e) =>
            {
                #region 切换选中按钮
                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 切换登录类型及图标
                loginType = 1;
                if (btnGlobalRoaming.Parent != null)
                {
                    btnGlobalRoaming.RemoveFromParent();
                }
                accountView.AddChidren(btnAccountIcon);
                #endregion
                //邮箱只有密码登录模式
                logintMode = 0;
                //密码登录
                btnSwitchLoginMode.TextID = StringId.VerificationCodeLogin;
                passwordView.AddChidren(btnVisiblePassword);
                passwordView.AddChidren(btnDividingLineVertical_PasswordView2);
                passwordView.AddChidren(btnForgetPassword);
                btnPasswordIcon.IsSelected = false;
                if (btnGetVerificationCode.Parent != null)
                {
                    btnGetVerificationCode.RemoveFromParent();
                }
                //隐藏密码
                etPassword.SecureTextEntry = true;
                //隐藏验证码登录方式,邮箱登录没有验证码登录
                btnSwitchLoginMode.Visible = false;
            };
        }
        /// <summary>
        /// 切换登录方式
        /// 验证码/密码
        /// </summary>
        void LoadPage_SwitchLoginMode()
        {
            btnSwitchLoginMode.MouseUpEventHandler += (sender, e) =>
            {
                logintMode = logintMode == 0 ? 1 : 0;
                //清除密码框文本数据
                etPassword.Text = "";
                //密码登录
                if (logintMode == 0)
                {
                    btnSwitchLoginMode.TextID = StringId.VerificationCodeLogin;
                    passwordView.AddChidren(btnVisiblePassword);
                    passwordView.AddChidren(btnDividingLineVertical_PasswordView2);
                    etPassword.PlaceholderText = Language.StringByID(StringId.PlsEntryPassword);
                    passwordView.AddChidren(btnForgetPassword);
                    btnPasswordIcon.IsSelected = false;
                    if (btnGetVerificationCode.Parent != null)
                    {
                        btnGetVerificationCode.RemoveFromParent();
                    }
                    //隐藏密码
                    etPassword.SecureTextEntry = true;
                }
                //验证码登录
                else if (logintMode == 1)
                {
                    if (Regex.IsMatch(account, @"^[1]+\d{10}") && (account.Length == 11))
                    {
                        btnGetVerificationCode.IsSelected = true;
                    }
                    btnSwitchLoginMode.TextID = StringId.PasswordLogin;
                    passwordView.AddChidren(btnGetVerificationCode);
                    etPassword.PlaceholderText = Language.StringByID(StringId.PlsEntryVerificationCode);
                    btnPasswordIcon.IsSelected = true;
                    if (btnVisiblePassword.Parent != null)
                    {
                        btnVisiblePassword.RemoveFromParent();
                    }
                    if (btnDividingLineVertical_PasswordView2.Parent != null)
                    {
                        btnDividingLineVertical_PasswordView2.RemoveFromParent();
                    }
                    if (btnForgetPassword.Parent != null)
                    {
                        btnForgetPassword.RemoveFromParent();
                    }
                    //验证码不需要隐藏
                    etPassword.SecureTextEntry = false;
                }
            };
        }
        /// <summary>
        /// 文本框焦点变化事件
        /// </summary>
        void LoadPage_SelectionEditText()
        {
            //当焦点在账号文本框时,文本框底线点亮
            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);
                    account = etAccount.Text.Trim();
                    if (account.Length == 0)
                        return;
                    if (loginType == 0)
                    {
                        if (!Regex.IsMatch(account, @"^[1]+\d{10}") || (account.Length != 11))
                        {
                            var tip = new Tip()
                            {
                                Text = Language.StringByID(StringId.PlsEntryCorrectMobilNeumber),
                                CloseTime = 3,
                                Direction = AMPopTipDirection.None
                            };
                            tip.Show(bodyView);
                            btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                        }
                        else
                        {
                            if (btnGetVerificationCode.Text == Language.StringByID(StringId.GetVerificationCode))
                            {
                                btnGetVerificationCode.IsSelected = true;
                            }
                        }
                    }
                    else
                    {
                        if (!Regex.IsMatch(account, "([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,5})+"))
                        {
                            var tip = new Tip()
                            {
                                Text = Language.StringByID(StringId.PlsEntryCorrectEmailAddress),
                                CloseTime = 3,
                                Direction = AMPopTipDirection.None
                            };
                            tip.Show(bodyView);
                            btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                        }
                    }
                }
            };
            //当焦点在密码文本框时,文本框底线点亮
            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);
                }
            };
            //当焦点在账号文本框时,点击键盘回撤按键,触发的事件
            etAccount.EditorEnterAction += (obj) =>
            {
                etPassword.Foucs = true;
            };
            //当焦点在密码文本框时,点击键盘回撤按键,触发的事件
            etPassword.EditorEnterAction += (obj) =>
            {
                etPassword.Foucs = false;
            };
        }
        /// <summary>
        /// 隐藏/显示密码
        /// </summary>
        void LoadMethod_VisiblePassword()
        {
            btnVisiblePassword.MouseUpEventHandler += (sender, e) =>
            {
                btnVisiblePassword.IsSelected = !btnVisiblePassword.IsSelected;
                if (btnVisiblePassword.IsSelected)
                {
                    etPassword.SecureTextEntry = false;
                }
                else
                {
                    etPassword.SecureTextEntry = true;
                }
            };
        }
        /// <summary>
        /// 登录按钮点击事件
        /// </summary>
        void LoadEvent_Login()
        {
            btnLogin.MouseUpEventHandler += (sender, e) =>
            {
                if (btnLogin.IsSelected)
                {
                    account = etAccount.Text.Trim();
                    password = etPassword.Text.Trim();
                    if (loginType == 0)
                    {
                        if (!Regex.IsMatch(account, @"^[1]+\d{10}") && (account.Length == 11))
                        {
                            var tip = new Tip()
                            {
                                Text = Language.StringByID(StringId.PlsEntryCorrectMobilNeumber),
                                CloseTime = 3,
                                Direction = AMPopTipDirection.None
                            };
                            tip.Show(bodyView);
                            return;
                        }
                    }
                    else
                    {
                        if (!Regex.IsMatch(account, "([a-zA-Z0-9_\\.\\-])+\\@(([a-zA-Z0-9\\-])+\\.)+([a-zA-Z0-9]{2,5})+"))
                        {
                            var tip = new Tip()
                            {
                                Text = Language.StringByID(StringId.PlsEntryCorrectEmailAddress),
                                CloseTime = 3,
                                Direction = AMPopTipDirection.None
                            };
                            tip.Show(bodyView);
                            return;
                        }
                    }
                    //创建登录线程
                    var loginThread = LoadThread_Login();
                    waitPage = new Loading();
                    new PublicAssmebly().LoadPage_WaitPage(loginThread, bodyView, waitPage);
                }
            };
            #region 当账号密码都输入时,才能点击登录按钮
            etAccount.TextChangeEventHandler += (sender, e) =>
            {
                if (etAccount.Text.Trim().Length > 0 && etPassword.Text.Trim().Length > 0)
                {
                    btnLogin.IsSelected = true;
                }
                else
                {
                    btnLogin.IsSelected = false;
                }
            };
            etPassword.TextChangeEventHandler += (sender, e) =>
            {
                if (etAccount.Text.Trim().Length > 0 && etPassword.Text.Trim().Length > 0)
                {
                    btnLogin.IsSelected = true;
                }
                else
                {
                    btnLogin.IsSelected = false;
                }
            };
            #endregion
        }
        /// <summary>
        /// 加载登录线程
        /// </summary>
        Thread LoadThread_Login()
        {
            var loginThread = new Thread(() =>
            {
                try
                {
                    //登录
                    var loginResult = LoadMethod_Login();
                    if (loginResult)
                    {
                        //获取住宅信息
                        var getResidencesResult = LoadMethod_GetResidences();
                        if (getResidencesResult)
                        {
                            /*
                             * Wait : 推送注册
                             */
                            Application.RunOnMainThread(() =>
                            {
                                //跳转页面----
                                MainPage.GoUserPage();
                            });
                        }
                    }
                }
                catch (Exception ex)
                {
                    MainPage.Log($"LoginPage : {ex.Message}");
                }
                finally
                {
                    Application.RunOnMainThread(() =>
                    {
                        if (waitPage != null)
                        {
                            waitPage.RemoveFromParent();
                            waitPage = null;
                        }
                    });
                }
            })
            { IsBackground = true };
            return loginThread;
        }
        /// <summary>
        /// 调用登录接口登录
        /// </summary>
        bool LoadMethod_Login()
        {
            var result = false;
            ResponsePack loginResult;
            if (logintMode == 0)
            {
                //调用登录接口
                loginResult = pm.LoginByPassword(account, password);
            }
            else
            {
                //调用登录接口
                loginResult = pm.LoginValidCode(account, password);
            }
            if (loginResult.StateCode.ToUpper() == "SUCCESS")
            {
                var loginDataStr = Newtonsoft.Json.Linq.JObject.FromObject(loginResult.ResponseData);
                //记录用户数据
                MainPage.LoginUser = new UserInfo
                {
                    ID = (int)loginDataStr.GetValue("UserID"),
                    masterID = (int)loginDataStr.GetValue("MainUserID"),
                    accountType = (int)loginDataStr.GetValue("UserType"),
                    accountString = account,
                    password = password,
                    lastTime = DateTime.Now,
                    SIP_Account = loginDataStr.GetValue("AllVisionRegisterDevUserNameGuid").ToString(),
                    userName = loginDataStr.GetValue("Remark").ToString(),
                };
                MainPage.LoginUser.SaveUserInfo();
                MainPage.Log("登录成功。");
                result = true;
                //获取用户信息
                new Thread(() =>
                {
                    pm.GetUserInfo();
                })
                { IsBackground = true }.Start();
            }
            //登录失败
            else
            {
                string tipStr = "Sever erorr";
                switch (loginResult.StateCode)
                {
                    case "ValidCodeAndPhoneNoEqual":
                        tipStr = Language.StringByID(StringId.VerificationCodeError);
                        Application.RunOnMainThread(() =>
                        {
                            btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                        });
                        break;
                    case "USERNAMEORPWDERROR":
                        tipStr = Language.StringByID(StringId.LoginFailed_AccountOrPasswordError);
                        Application.RunOnMainThread(() =>
                        {
                            btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                        });
                        break;
                    case "ACCOUNTNOEXISTS":
                        tipStr = Language.StringByID(StringId.ACCOUNTNOEXISTS);
                        Application.RunOnMainThread(() =>
                        {
                            btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                            btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                        });
                        break;
                    case "NoRecord":
                        tipStr = Language.StringByID(StringId.PlsGetTheVerificationCode);
                        break;
                    case "Self:Net_Error":
                        tipStr = Language.StringByID(StringId.NetworkAnomaly);
                        break;
                }
                //账号或者密码错误
                Application.RunOnMainThread(() =>
                {
                    waitPage.Hide();
                    //提示原因
                    var tip = new Tip()
                    {
                        Text = tipStr,
                        CloseTime = 3,
                        Direction = AMPopTipDirection.None
                    };
                    tip.Show(bodyView);
                });
            }
            return result;
        }
        /// <summary>
        /// 获取住宅列表
        /// </summary>
        bool LoadMethod_GetResidences()
        {
            var result = false;
            var responsePack = pm.GetHomePager();
            if (responsePack == "Success")
            {
                result = true;
            }
            else
            {
                var tipStr = "Server erorr";
                switch (responsePack)
                {
                    case "NoLogin":
                        tipStr = Language.StringByID(StringId.InvalidLoginCertificate);
                        break;
                }
                Application.RunOnMainThread(() =>
                {
                    //提示原因
                    var tip = new Tip()
                    {
                        Text = tipStr,
                        CloseTime = 3,
                        Direction = AMPopTipDirection.None
                    };
                    tip.Show(bodyView);
                });
            }
            return result;
        }
        /// <summary>
        /// 加载注册界面
        /// </summary>
        void LoadPage_RegisterPage()
        {
            btnRegister.MouseUpEventHandler += (sender, e) =>
            {
                //回调事件
                //Action callBackAction = () =>
                //{
                //    Application.RunOnMainThread(() =>
                //    {
                //        try
                //        {
                //        }
                //        catch (Exception ex)
                //        {
                //            MainPage.Log($"login callBackAction : {ex.Message}");
                //        }
                //    });
                //};
                var registerPage = new RegisterPage();
                registerPage.Show();
                registerPage.ShowDialog();
            };
        }
        /// <summary>
        /// 忘记密码
        /// </summary>
        void LoadMethod_ForgetPassword()
        {
            btnForgetPassword.MouseUpEventHandler += (sender, e) =>
            {
                Action<string> callBackAction = (callBackPar_Action) =>
                {
                    Application.RunOnMainThread(() =>
                    {
                        try
                        {
                            etAccount.Text = callBackPar_Action;
                        }
                        catch (Exception ex)
                        {
                            MainPage.Log($"login callBackAction : {ex.Message}");
                        }
                    });
                };
                var forgetPasswordDialog = new ForgetPasswordPage(callBackAction);
                forgetPasswordDialog.Show();
                forgetPasswordDialog.ShowDialog();
            };
        }
    }
}