陈嘉乐
2020-06-16 7167334c0e89dd84827d59e726123d14776e3a09
HDL_ON/UI/UI1-Login/LoginPageBLL.cs
@@ -1,8 +1,10 @@
using System;
using System.Text.RegularExpressions;
using System.Threading;
using HDL_ON.DAL.Server;
using System.Collections.Generic;
using HDL_ON.UI.CSS;
using Shared;
using HDL_ON.Entity;
namespace HDL_ON.UI.UI1Login
{
@@ -17,11 +19,11 @@
            LoadPage_SwitchLoginType();
            LoadMethod_VisiblePassword();
            LoadPage_SwitchLoginMode();
            LoadMethod_LoginMethod();
            LoadEvent_Login();
            LoadPage_SelectionEditText();
            LoadPage_RegisterPage();
            GetVerificationCode();
            LoadMethod_ForgetPassword();
        }
        /// <summary>
@@ -31,33 +33,113 @@
        {
            btnGetVerificationCode.MouseUpEventHandler += (sender, e) =>
            {
#if DEBUG
                etAccount.Text = "17576024298";
#endif
                string phoneNumber = etAccount.Text.Trim();
                btnGetVerificationCode.Enable = false;
                btnGetVerificationCode.TextColor = CSS_Color.PromptingColor1;
                int time = 60;
                new Thread(() =>
                if (btnGetVerificationCode.IsSelected)
                {
                    while (time != 0)
                    string phoneNumber = etAccount.Text.Trim();
                    if (string.IsNullOrEmpty(phoneNumber))
                    {
                        time--;
                        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.Text = time.ToString() + "s";
                            btnGetVerificationCode.IsSelected = true;
                            btnGetVerificationCode.TextID = StringId.GetVerificationCode;
                        });
                        Thread.Sleep(1000);
                    }
                })
                { IsBackground = true }.Start();
                //检查手机是否已经被注册
                var checkPhoneResult = pm.IsExistingAccount(etAccount.Text.Trim());
                //手机已经被注册
                if (checkPhoneResult.StateCode == HttpRequesResult.SUCCESS.ToString())
                {
                    //获取验证码
                    pm.GetPhoneVerificationCode(phoneNumber,MainPage.Company);
                    })
                    { 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();
                }
            };
        }
@@ -75,11 +157,11 @@
                btnEmailLogin.TextSize = CSS_FontSize.TextFontSize;
                btnPhoneLogin.TextColor = CSS_Color.MainColor;
                btnPhoneLogin.TextSize = CSS_FontSize.EmphasisFontSize_Secondary;
                etAccount.PlaceholderText = Language.StringByID(R.InternationalizationString.PlsEntryCorrectMobilNeumber);
                etAccount.PlaceholderText = Language.StringByID(StringId.PlsEntryPhoneNumber);
                #endregion
                #region 切换登录方式及图标
                logintType = 0;
                loginType = 0;
                if (btnAccountIcon.Parent != null)
                {
                    btnAccountIcon.RemoveFromParent();
@@ -98,11 +180,11 @@
                btnPhoneLogin.TextSize = CSS_FontSize.TextFontSize;
                btnEmailLogin.TextColor = CSS_Color.MainColor;
                btnEmailLogin.TextSize = CSS_FontSize.EmphasisFontSize_Secondary;
                etAccount.PlaceholderText = Language.StringByID(R.InternationalizationString.PlsEntryEmailAddress);
                etAccount.PlaceholderText = Language.StringByID(StringId.PlsEntryEmailAddress);
                #endregion
                #region 切换登录类型及图标
                logintType = 1;
                loginType = 1;
                if (btnGlobalRoaming.Parent != null)
                {
                    btnGlobalRoaming.RemoveFromParent();
@@ -113,7 +195,7 @@
                //邮箱只有密码登录模式
                logintMode = 0;
                //密码登录
                btnSwitchLoginMode.TextID = R.InternationalizationString.VerificationCodeLogin;
                btnSwitchLoginMode.TextID = StringId.VerificationCodeLogin;
                passwordView.AddChidren(btnVisiblePassword);
                passwordView.AddChidren(btnDividingLineVertical_PasswordView2);
                passwordView.AddChidren(btnForgetPassword);
@@ -144,9 +226,10 @@
                //密码登录
                if (logintMode == 0)
                {
                    btnSwitchLoginMode.TextID = R.InternationalizationString.VerificationCodeLogin;
                    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)
@@ -159,8 +242,13 @@
                //验证码登录
                else if (logintMode == 1)
                {
                    btnSwitchLoginMode.TextID = R.InternationalizationString.PasswordLogin;
                    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)
                    {
@@ -181,7 +269,7 @@
        }
        /// <summary>
        /// 文本框选中事件
        /// 文本框焦点变化事件
        /// </summary>
        void LoadPage_SelectionEditText()
        {
@@ -197,6 +285,47 @@
                {
                    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);
                        }
                    }
                }
            };
            //当焦点在密码文本框时,文本框底线点亮
@@ -248,7 +377,7 @@
        /// <summary>
        /// 登录按钮点击事件
        /// </summary>
        void LoadMethod_LoginMethod()
        void LoadEvent_Login()
        {
            btnLogin.MouseUpEventHandler += (sender, e) =>
            {
@@ -256,9 +385,41 @@
                {
                    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 = LoadMethod_LoginThread();
                    LoadPage_WaitPage(loginThread);
                    var loginThread = LoadThread_Login();
                    waitPage = new Loading();
                    new PublicAssmebly().LoadPage_WaitPage(loginThread, bodyView, waitPage);
                }
            };
            #region 当账号密码都输入时,才能点击登录按钮
@@ -288,97 +449,186 @@
        }
        /// <summary>
        /// 加载等待界面
        /// </summary>
        void LoadPage_WaitPage(Thread thread)
        {
            waitPage = new Loading();
            bodyView.AddChidren(waitPage);
            waitPage.Start(Language.StringByID(R.InternationalizationString.PleaseWait));
            var showedTime = DateTime.Now;
            //如果等待事件过长,可以允许用户取消当前操作
            waitPage.MouseUpEventHandler += (sender, e) =>
            {
                if (showedTime.AddSeconds(30) > DateTime.Now)
                {
                    waitPage.RemoveFromParent();
                    waitPage = null;
                    thread.Abort();
                }
            };
            thread.Start();
        }
        /// <summary>
        /// 加载登录线程
        /// </summary>
        Thread LoadMethod_LoginThread()
        Thread LoadThread_Login()
        {
            var loginThread = new Thread(() =>
            {
                try
                {
                    var loginResult = pm.LoginByPassword(account,password,MainPage.Company);
                    Application.RunOnMainThread(() =>
                    //登录
                    var loginResult = LoadMethod_Login();
                    if (loginResult)
                    {
                        waitPage.RemoveFromParent();
                        waitPage = null;
                    });
                    //登录成功
                    if (loginResult.StateCode == HttpRequesResult.SUCCESS.ToString())
                    {
                        var loginResponseData = Newtonsoft.Json.JsonConvert.DeserializeObject<UserLoginRes>(loginResult.ResponseData.ToString());
                        //记录用户数据
                        MainPage.LoginUser = new UserInfo
                        //获取住宅信息
                        var getResidencesResult = LoadMethod_GetResidences();
                        if (getResidencesResult)
                        {
                            ID = loginResponseData.UserId,
                            MasterID = loginResponseData.MainUserId,
                            AccountType = loginResponseData.UserType,
                            AccountString = account,
                            Password = password,
                            LastTime = DateTime.Now,
                            SIP_Account = loginResponseData.AllVisionRegisterDevUserNameGuid,
                        };
                        MainPage.LoginUser.SaveUserInfo();
                        MainPage.Log("登录成功。");
                            /*
                             * Wait : 推送注册
                             */
                        /*
                         * Wait : 推送注册
                         */
                    }
                    //登录失败
                    else
                    {
                        Application.RunOnMainThread(() =>
                        {
                            //提示原因
                            var tip = new Tip()
                            Application.RunOnMainThread(() =>
                            {
                                Text = loginResult.ErrorInfo,
                                CloseTime = 3,
                                Direction = AMPopTipDirection.None
                            };
                            tip.Show(bodyView);
                            //if (loginResult.StateCode == HttpRequesResult.LoginFailed_AccountErorr.ToString())
                            {
                                btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                                btnAccountViewBottomLine.Height = Application.GetRealHeight(2);
                                //}
                                //else if (loginResult.StateCode == HttpRequesResult.LoginFailed_PasswordErorr.ToString())
                                //{
                                btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2;
                                btnPasswordViewBottomLine.Height = Application.GetRealHeight(2);
                            }
                        });
                                //跳转页面----
                                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>
@@ -386,23 +636,55 @@
        /// </summary>
        void LoadPage_RegisterPage()
        {
            btnRegister.MouseUpEventHandler += (sender, e) => {
            btnRegister.MouseUpEventHandler += (sender, e) =>
            {
                //回调事件
                Action<string> callBackAction = (callBackPar_Action) =>
                {
                    try
                    {
                        etAccount.Text = callBackPar_Action;
                    }
                    catch (Exception ex) {
                        MainPage.Log($"login callBackAction : {ex.Message}");
                    }
                };
                //Action callBackAction = () =>
                //{
                //    Application.RunOnMainThread(() =>
                //    {
                //        try
                //        {
                //        }
                //        catch (Exception ex)
                //        {
                //            MainPage.Log($"login callBackAction : {ex.Message}");
                //        }
                //    });
                //};
                var registerPage = new RegisterPage(callBackAction);
                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();
            };
        }
    }
}
}