HDL Home App 第二版本 旧平台金堂用 正在使用
hxb
2022-08-30 25429f085093d89d543a0b90e30d0d62d1b7dac9
ZigbeeApp/Shared/Phone/Login/AccountRegister.cs
New file
@@ -0,0 +1,532 @@
using System;
using Shared.Common;
using Shared.Phone.Device.CommonForm;
namespace Shared.Phone.Login
{
    public class AccountRegister : FrameLayout
    {
        #region ◆ 变量____________________________
        /// <summary>
        /// 手机邮箱
        /// </summary>
        private PhoneEmailForm phoneEmailForm;
        /// <summary>
        /// phoneRowForm
        /// </summary>
        private PhoneRowForm phoneRow;
        /// <summary>
        /// emailRow
        /// </summary>
        private EmailRowForm emailRow;
        /// <summary>
        /// pwdRow
        /// </summary>
        private PwdRowForm pwdRow;
        /// <summary>
        /// pwdComfireRow
        /// </summary>
        private PwdRowForm pwdComfireRow;
        /// <summary>
        /// CodeForRegisterRowForm
        /// </summary>
        private CodeForRegisterRowForm codeRow;
        /// <summary>
        /// bodyFrameLayout
        /// </summary>
        private FrameLayout bodyFrameLayout;
        /// <summary>
        /// 账号验证码fl
        /// </summary>
        private FrameLayout accountCodeFL;
        /// <summary>
        /// 注册
        /// </summary>
        private Button registerBtn;
        /// <summary>
        /// 账号登录
        /// </summary>
        private Button loginByAccountPWDBtn;
        /// <summary>
        /// 登录错误提示按钮
        /// </summary>
        private Button errorBtn;
        /// <summary>
        /// 账号
        /// </summary>
        private string account = string.Empty;
        /// <summary>
        /// OpenID
        /// </summary>
        public string OpenID;
        #endregion
        #region ◆ 构造方法_________________________
        public AccountRegister()
        {
            CommonPage.Instance.IsDrawerLockMode = true;
            BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor;
            Tag = "Register";
        }
        #endregion
        #region ◆ 显示界面_________________________
        /// <summary>
        /// show
        /// </summary>
        public void Show()
        {
            //AddTop
            AddTopFL();
            //AddBody
            AddBodyView();
            //bind
            BindEvent();
        }
        #endregion
        #region ◆ 添加____________________________
        /// <summary>
        /// AddTop
        /// </summary>
        private void AddTopFL()
        {
            var top = new Device.CommonForm.TopFrameLayout();
            AddChidren(top);
            top.InitTopview();
            top.SetTopTitle(Language.StringByID(R.MyInternationalizationString.Register));
            top.backButton.MouseUpEventHandler += (sender, e) =>
            {
                RemoveFromParent();
            };
        }
        /// <summary>
        /// AddBodyView
        /// </summary>
        private void AddBodyView()
        {
            bodyFrameLayout = new FrameLayout()
            {
                Y = Application.GetRealHeight(184),
                Height = Application.GetRealHeight(1737),
                BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor,
            };
            AddChidren(bodyFrameLayout);
            phoneEmailForm = new PhoneEmailForm();
            phoneEmailForm.Init(bodyFrameLayout, 127);
            phoneEmailForm.SetSelectedColor(ZigbeeColor.Current.GXCButtonBlackSelectedColor);
            accountCodeFL = new FrameLayout()
            {
                Y = Application.GetRealHeight(334),
                Height = Application.GetRealHeight(852),
                Width = Application.GetRealWidth(942),
                Gravity = Gravity.CenterHorizontal,
                BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor,
                Radius = (uint)Application.GetRealHeight(17)
            };
            bodyFrameLayout.AddChidren(accountCodeFL);
            AddPhoneOrEmailFL(accountCodeFL, "Phone");
            //错误提示Btn
            errorBtn = new Button()
            {
                X = Application.GetRealWidth(127),
                Y = Application.GetRealHeight(1060),
                Width = Application.GetRealWidth(700),
                Height = Application.GetRealHeight(58),
                TextColor = ZigbeeColor.Current.GXCTextRed,
                TextAlignment = TextAlignment.CenterLeft,
                TextSize = CommonFormResouce.TextSize,
                IsBold = true
            };
            bodyFrameLayout.AddChidren(errorBtn);
            registerBtn = new Button()
            {
                Y = Application.GetRealHeight(1281),
                Width = Application.GetRealWidth(688),
                Height = Application.GetRealHeight(127),
                Gravity = Gravity.CenterHorizontal,
                TextID = R.MyInternationalizationString.Register,
                TextColor = ZigbeeColor.Current.GXCTextGrayColor,
                SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor,
                SelectedBackgroundColor = ZigbeeColor.Current.GXCButtonBlackSelectedColor,
                BackgroundColor = ZigbeeColor.Current.GXCButtonUnSelectedColor,
                Radius = (uint)Application.GetRealHeight(127 / 2),
                Enable = !string.IsNullOrEmpty(codeRow.VerificationCodeET?.Text),
                IsSelected = !string.IsNullOrEmpty(codeRow.VerificationCodeET?.Text),
                TextSize = 16,
                IsBold = true,
            };
            bodyFrameLayout.AddChidren(registerBtn);
            loginByAccountPWDBtn = new Button()
            {
                Y = registerBtn.Bottom + Application.GetRealHeight(50),
                Width = Application.GetRealWidth(400),
                Height = Application.GetRealHeight(58),
                TextID = R.MyInternationalizationString.LoginByAccountPWD_1,
                TextColor = ZigbeeColor.Current.GXCTextGrayColor,
                TextSize = CommonFormResouce.loginTextSize,
                Gravity=Gravity.CenterHorizontal
            };
            bodyFrameLayout.AddChidren(loginByAccountPWDBtn);
        }
        #endregion
        #region ◆ 选择事件_________________________
        /// <summary>
        /// phone/email 选择
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="mouseEventArgs"></param>
        private void SelectPhoneOrEmail_MouseUpEvent(object sender, MouseEventArgs mouseEventArgs)
        {
            phoneEmailForm.SelectedPhone.IsSelected = phoneEmailForm.SelectedEmail.IsSelected = false;
            phoneEmailForm.SelectedPhone.IsBold = phoneEmailForm.SelectedEmail.IsBold = false;
            registerBtn.Enable = registerBtn.IsSelected = false;
            (sender as Button).IsSelected = (sender as Button).IsBold = true;
            account = string.Empty;
            errorBtn.Text = string.Empty;
            if ((sender as Button).Tag.ToString() == "Phone")
            {
                AddPhoneOrEmailFL(accountCodeFL, "Phone");
            }
            else
            {
                AddPhoneOrEmailFL(accountCodeFL, "Email");
            }
        }
        /// <summary>
        /// AddPhoneOrEmailFL
        /// </summary>
        /// <param name="accountCodeFrameLayout"></param>
        /// <param name="phoneOrEmail"></param>
        private void AddPhoneOrEmailFL(FrameLayout accountCodeFrameLayout, string phoneOrEmail)
        {
            accountCodeFrameLayout.RemoveAll();
            if (phoneOrEmail == "Phone")
            {
                phoneRow = new PhoneRowForm();
                phoneRow.Init(accountCodeFrameLayout, this, this.account, 29, 29);
                phoneRow.AccountET.TextChangeEventHandler += Account_TextChange;
            }
            else
            {
                emailRow = new EmailRowForm();
                emailRow.Init(accountCodeFrameLayout, this.account, 29, 29);
                emailRow.AccountET.TextChangeEventHandler += Account_TextChange;
            }
            pwdRow = new PwdRowForm();
            pwdRow.Init(accountCodeFrameLayout, 29, 196);
            pwdRow.PasswrodET.TextChangeEventHandler += Code_TextChange;
            pwdComfireRow = new PwdRowForm();
            pwdComfireRow.Init(accountCodeFrameLayout, 29, 363);
            pwdComfireRow.PasswrodET.TextChangeEventHandler += Code_TextChange;
            pwdComfireRow.SetPlaceholdText(Language.StringByID(R.MyInternationalizationString.PleaseComfirePWD));
            codeRow = new CodeForRegisterRowForm();
            codeRow.Init(accountCodeFrameLayout, 29, 530);
            codeRow.VerificationCodeET.TextChangeEventHandler += Code_TextChange;
            codeRow.SendCodeBtn.ButtonClickEvent += SendCode_MouseUpEventAsync;
        }
        #endregion
        #region ◆ 绑定事件_________________________
        /// <summary>
        /// 绑定按钮事件
        /// </summary>
        private void BindEvent()
        {
            //选择手机邮箱
            phoneEmailForm.SelectedPhone.MouseUpEventHandler += SelectPhoneOrEmail_MouseUpEvent;
            phoneEmailForm.SelectedEmail.MouseUpEventHandler += SelectPhoneOrEmail_MouseUpEvent;
            registerBtn.MouseUpEventHandler += Register;
            loginByAccountPWDBtn.MouseUpEventHandler += LoginByPWD;
            codeRow.VerificationCodeET.TextChangeEventHandler += Code_TextChange;
        }
        #endregion
        #region ◆ 注册事件_________________________
        //// <summary>
        ///  注册
        ///  </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
        private void Register(object sender, MouseEventArgs mouseEventArgs)
        {
            if (CheckAccount(account) == false)
            {
                return;
            }
            if (pwdRow.PasswrodET.Text.Trim() != pwdComfireRow.PasswrodET.Text.Trim())
            {
                errorBtn.TextID = R.MyInternationalizationString.TwoPasswordInconsistency;
                return;
            }
            if (AccountLogic.Instance.CheckPwdLength(pwdRow.PasswrodET.Text.Trim()) == false)
            {
                errorBtn.TextID = R.MyInternationalizationString.ThePWDLengthError;
                return;
            }
            CommonPage.Loading.Start();
            try
            {
                var reqDto = new SendDataToServer.RegisterAccountObj()
                {
                    Account = account,
                    Password = pwdRow.PasswrodET.Text.Trim(),
                    EnterPassword = pwdComfireRow.PasswrodET.Text.Trim(),
                    Language = CommonPage.ZigBeeLanguage,
                    Code = codeRow.VerificationCodeET.Text.Trim(),
                    RegisterSoruce = CommonPage.RegisterSoruceFromZIGBEE,
                    AreaCode = int.Parse(CommonPage.PhoneZoneStr)
                };
                //验证验证码
                var requestRevertObj = CommonFormResouce.Register(reqDto);
                if (requestRevertObj == null)
                {
                    CommonPage.Instance.FailureToServer();
                    return;
                }
                var stateCodeStr = requestRevertObj.StateCode.ToUpper();
                if (stateCodeStr == "SUCCESS")
                {
                    var registerSuccess = new AccountRegisterSuccess();
                    CommonPage.Instance.AddChidren(registerSuccess);
                    registerSuccess.ShowForm(account, pwdRow.PasswrodET.Text.Trim(), OpenID);
                }
                else if (stateCodeStr == "EXIST")
                {
                    //已注册
                    errorBtn.TextID = R.MyInternationalizationString.AccountHasBeenRegistered;
                }
                else if (stateCodeStr == "PARAMETEROREMPTY")
                {
                    //提供的参数错误
                    errorBtn.TextID = R.MyInternationalizationString.PARAMETEROREMPTY;
                }
                else if (stateCodeStr == "PWDNOCONFIRM")
                {
                    //两次密码不一样
                    errorBtn.TextID = R.MyInternationalizationString.TwoPasswordInconsistency;
                }
                else if (stateCodeStr == "VALIDCODEANDPHONENOEQUAL")
                {
                    //验证码错误
                    errorBtn.TextID = R.MyInternationalizationString.VALIDCODEANDPHONENOEQUAL;
                }
                else if (stateCodeStr == "NORECORD")
                {
                    errorBtn.TextID = R.MyInternationalizationString.NORECORD;
                }
                else
                {
                    errorBtn.TextID = R.MyInternationalizationString.RequestServerFailed;
                }
            }
            catch
            {
                errorBtn.TextID = R.MyInternationalizationString.RequestServerFailed;
            }
            finally
            {
                CommonPage.Loading.Hide();
            }
        }
        #endregion
        #region ◆ 密码登录_________________________
        /// <summary>
        /// 通过密码登录
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
        private void LoginByPWD(object sender, MouseEventArgs mouseEventArgs)
        {
            this.RemoveFromParent();
        }
        #endregion
        #region ◆ 账号、验证码监听__________________
        /// <summary>
        /// 账号监听
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
        private void Account_TextChange(object sender, string mouseEventArgs)
        {
            errorBtn.Text = string.Empty;
            if ((sender as EditText).Text.Trim().Length > 0)
            {
                if (codeRow.SendCodeBtn.CanClick == false)
                {
                    codeRow.SendCodeBtn.CanClick = true;
                    codeRow.SendCodeBtn.BackgroundColor = 0xFFFC744B;
                }
            }
            else
            {
                codeRow.SendCodeBtn.CanClick = false;
                codeRow.SendCodeBtn.BackgroundColor = 0xFFFEBCA9;
            }
            account = (sender as EditText).Text.Trim();
        }
        /// <summary>
        /// code监听事件
        /// </summary>
        /// <param name="sender">Sender.</param>
        /// <param name="mouseEventArgs">The ${ParameterType} instance containing the event data.</param>
        private void Code_TextChange(object sender, string mouseEventArgs)
        {
            errorBtn.Text = string.Empty;
            if (codeRow.VerificationCodeET.Text.Trim().Length > 0 && account.Trim().Length > 0 && pwdRow.PasswrodET.Text.Trim().Length > 0 && pwdComfireRow.PasswrodET.Text.Trim().Length > 0)
            {
                registerBtn.Enable = registerBtn.IsSelected = true;
            }
            else
            {
                registerBtn.Enable = registerBtn.IsSelected = false;
            }
        }
        #endregion
        #region ◆ 发送验证码________________________
        /// <summary>
        /// 发送验证码
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="mouseEventArgs"></param>
        private void SendCode_MouseUpEventAsync(object sender, MouseEventArgs mouseEventArgs)
        {
            if (CheckAccount(account) == false)
            {
                return;
            }
            //先判断2次密码输入是否一致
            if (pwdRow.PasswrodET.Text.Trim() != pwdComfireRow.PasswrodET.Text.Trim())
            {
                errorBtn.TextID = R.MyInternationalizationString.TwoPasswordInconsistency;
                return;
            }
            if (AccountLogic.Instance.CheckPwdLength(pwdRow.PasswrodET.Text.Trim()) == false)
            {
                errorBtn.TextID = R.MyInternationalizationString.ThePWDLengthError;
                return;
            }
            CommonPage.Loading.Start();
            (sender as UserCenter.NormalViewControl).CanClick = false;
            try
            {
                int companyInt = 0;
                if (CommonPage.PhoneZoneStr == "86")
                {
                    companyInt = CommonPage.Company;
                }
                else
                {
                    companyInt = CommonPage.CompanyForINTERNETION;
                }
                var reqDto = new SendDataToServer.RegisterSendVerCodeObj()
                {
                    Account = account,
                    Company = companyInt,
                    AreaCode = int.Parse(CommonPage.PhoneZoneStr),
                    Language = CommonPage.ZigBeeLanguage
                };
                var requestRevertObj = CommonFormResouce.RegisterSendVerCode(reqDto);
                if (requestRevertObj == null)
                {
                    CommonPage.Instance.FailureToServer();
                    (sender as UserCenter.NormalViewControl).CanClick = true;
                    return;
                }
                var stateCodeStr = requestRevertObj.StateCode.ToUpper();
                if (stateCodeStr == "SUCCESS")
                {
                    codeRow.TimeBegin();
                    var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), Language.StringByID(R.MyInternationalizationString.SendVerificationCodeSuccess), Language.StringByID(R.MyInternationalizationString.Confrim));
                    alert.Show();
                    return;
                }
                if (stateCodeStr == "PARAMETEROREMPTY")
                {
                    //提供的参数错误
                    errorBtn.TextID = R.MyInternationalizationString.PARAMETEROREMPTY;
                }
                else if (stateCodeStr == "SENDFAIL")
                {
                    //验证码发送失败
                    errorBtn.TextID = R.MyInternationalizationString.SENDFAIL;
                }
                else if (stateCodeStr == "EXIST")
                {
                    //账号存在
                    errorBtn.TextID = R.MyInternationalizationString.AccountHasBeenRegistered;
                }
                else
                {
                    errorBtn.TextID = R.MyInternationalizationString.RequestServerFailed;
                }
            }
            catch
            {
                errorBtn.TextID = R.MyInternationalizationString.RequestServerFailed;
            }
            finally
            {
                CommonPage.Loading.Hide();
            }
        }
        /// <summary>
        /// CheckAccount
        /// </summary>
        /// <param name="accountStr"></param>
        /// <returns></returns>
        private bool CheckAccount(string accountStr)
        {
            errorBtn.Text = string.Empty;
            if (phoneEmailForm.SelectedEmail.IsSelected)
            {
                if (AccountLogic.Instance.CheckEmail(accountStr) == false)
                {
                    errorBtn.TextID = R.MyInternationalizationString.TheEmailError;
                    return false;
                }
            }
            else
            {
                if (AccountLogic.Instance.CheckPhoneWithZone(accountStr, CommonPage.PhoneZoneStr) == false)
                {
                    errorBtn.TextID = R.MyInternationalizationString.ThePhoneError;
                    return false;
                }
            }
            return true;
        }
        #endregion
    }
}