using System; using Shared.Common; using Shared.Phone.UserView; using Shared.Phone.Device.CommonForm; using Shared.Phone.UserCenter; namespace Shared.Phone.Login { /// /// 登录界面 /// public class AccountLogin : FrameLayout { #region ◆ 变量____________________________ /// /// 背景视图 /// private FrameLayout midFrameLayout; /// /// 手机邮箱 /// private PhoneEmailForm phoneEmailForm; /// /// phoneRowForm /// private PhoneLoginRowForm phoneRow; /// /// emailRow /// private EmailLoginRowForm emailRow; /// /// phonePwdRow /// private PwdLoginRowForm phonePwdRow; /// /// emailPwdRow /// private PwdLoginRowForm emailPwdRow; /// /// 账号密码fl /// private FrameLayout accountPwdFL; /// /// 登录错误提示按钮 /// private Button loginErrorBtn; /// /// 忘记密码按钮 /// private Button forgotPasswordBtn; /// /// 登录按钮 /// private Button loginBtn; /// /// 验证码登录按钮 /// private Button loginByCodeBtn; /// /// 注册按钮 /// private Button registerBtn; /// /// wechat /// private Button wechatBtn; /// /// qq /// private Button qqBtn; /// /// 输入的登陆账号(重新登陆时使用) /// private string oldInputPhone = string.Empty; /// /// 输入的登陆账号(重新登陆时使用) /// private string oldInputEmail = string.Empty; #endregion #region ◆ 构造方法_________________________ /// /// 构造方法 /// public AccountLogin() { CommonPage.Instance.IsDrawerLockMode = true; BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor; Tag = "Login"; } public override void RemoveFromParent() { base.RemoveFromParent(); } #endregion #region ◆ 显示界面_________________________ /// /// 显示界面 /// /// Account. /// Password. public void Show(string account = "", string password = "") { if (Config.Instance.IsLogin) { } else { LoginViewShow(account); } } /// /// Logins the view show. /// /// Account. public void LoginViewShow(string account = "") { //设置一下初始值 if (account.Contains("@") == true) { this.oldInputEmail = account; } else { this.oldInputPhone = account; } #region midFrameLayout midFrameLayout = new FrameLayout() { Width = LayoutParams.MatchParent, Height = Application.GetRealHeight(CommonPage.AppRealHeight), BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor }; AddChidren(midFrameLayout); #endregion #region 布局账户,密码,忘记密码,注册 手机验证码登录 var logoBG = new Button() { Height = Application.GetRealHeight(619), UnSelectedImagePath = "Account/Logo_loginBG.png" }; midFrameLayout.AddChidren(logoBG); var phoneEmailBGFL = new FrameLayout() { Y = logoBG.Bottom, Height = Application.GetRealHeight(1921), BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor }; midFrameLayout.AddChidren(phoneEmailBGFL); var logo = new Button() { Width = Application.GetMinRealAverage(184), Height = Application.GetMinRealAverage(184), Y = Application.GetRealHeight(230), UnSelectedImagePath = "Account/Logo_White.png", Gravity = Gravity.CenterHorizontal }; midFrameLayout.AddChidren(logo); var logoName = new Button() { Y = logo.Bottom, Height = Application.GetRealHeight(69), Width = Application.GetRealWidth(300), Gravity = Gravity.CenterHorizontal, TextID = R.MyInternationalizationString.AppName, TextColor = ZigbeeColor.Current.GXCTextWhiteColor, TextSize = 16 }; midFrameLayout.AddChidren(logoName); phoneEmailForm = new PhoneEmailForm(); phoneEmailForm.Init(midFrameLayout); //错误提示Btn loginErrorBtn = new Button() { X = Application.GetRealWidth(242), Y = Application.GetRealHeight(740), Width = Application.GetRealWidth(700), Height = Application.GetRealHeight(58), TextColor = ZigbeeColor.Current.GXCTextRed, TextAlignment = TextAlignment.CenterLeft, TextSize = CommonFormResouce.TextSize, IsBold = true }; midFrameLayout.AddChidren(loginErrorBtn); accountPwdFL = new FrameLayout() { Y = Application.GetRealHeight(801), Height = Application.GetRealHeight(553), Width = Application.GetRealWidth(942), Gravity = Gravity.CenterHorizontal, BackgroundColor = ZigbeeColor.Current.GXCBackgroundColor, Radius = (uint)Application.GetRealHeight(17) }; midFrameLayout.AddChidren(accountPwdFL); AddPhoneOrEmailFL(accountPwdFL, "Phone"); forgotPasswordBtn = new Button() { X = Application.GetRealWidth(CommonPage.AppRealWidth - 115 - 250), Y = Application.GetRealHeight(1198), Width = Application.GetRealWidth(250), Height = Application.GetRealHeight(58), TextID = R.MyInternationalizationString.ForgotPWD_1, TextSize = CommonFormResouce.loginTextSize, TextColor = Shared.Common.ZigbeeColor.Current.GXCTextGrayColor, TextAlignment = TextAlignment.CenterRight }; midFrameLayout.AddChidren(forgotPasswordBtn); loginBtn = new Button() { Y = Application.GetRealHeight(1293), Width = Application.GetRealWidth(688), Height = Application.GetRealHeight(127), Gravity = Gravity.CenterHorizontal, TextID = R.MyInternationalizationString.Login, TextSize = 16, TextColor = ZigbeeColor.Current.GXCTextGrayColor, SelectedTextColor = ZigbeeColor.Current.GXCTextWhiteColor, SelectedBackgroundColor = ZigbeeColor.Current.GXCButtonBlackSelectedColor, BackgroundColor = ZigbeeColor.Current.GXCButtonUnSelectedColor, Radius = (uint)Application.GetRealHeight(127 / 2), Enable = false, IsBold = true }; midFrameLayout.AddChidren(loginBtn); loginByCodeBtn = new Button() { X = Application.GetRealWidth(98), Y = Application.GetRealHeight(1466), Width = Application.GetRealWidth(300), Height = Application.GetRealHeight(49), TextID = R.MyInternationalizationString.LoginByCode, TextColor = ZigbeeColor.Current.GXCTextGrayColor, TextAlignment = TextAlignment.CenterLeft, TextSize = CommonFormResouce.loginTextSize }; midFrameLayout.AddChidren(loginByCodeBtn); registerBtn = new Button() { X = Application.GetRealWidth(738), Y = Application.GetRealHeight(1466), Width = Application.GetRealWidth(244), Height = Application.GetRealHeight(49), TextID = R.MyInternationalizationString.Register, TextColor = ZigbeeColor.Current.GXCTextGrayColor, TextAlignment = TextAlignment.CenterRight, TextSize = CommonFormResouce.loginTextSize }; midFrameLayout.AddChidren(registerBtn); wechatBtn = new Button { X = Application.GetRealWidth(395), Y = Application.GetRealHeight(1737), Width = Application.GetMinRealAverage(115), Height = Application.GetMinRealAverage(115), UnSelectedImagePath = "Account/Wechat.png", Gravity = Gravity.CenterHorizontal }; midFrameLayout.AddChidren(wechatBtn); qqBtn = new Button { X = Application.GetRealWidth(567), Y = Application.GetRealHeight(1737), Width = Application.GetMinRealAverage(115), Height = Application.GetMinRealAverage(115), UnSelectedImagePath = "Account/QQ.png" }; //midFrameLayout.AddChidren(qqBtn); //添加服务协议控件 //this.AddServiceAgreementControl(phoneEmailBGFL); #endregion BindEvent(); if (account.Contains("@") == true) { SelectPhoneOrEmail_MouseUpEvent(phoneEmailForm.SelectedEmail, null); } } #endregion #region ◆ 绑定事件_________________________ /// /// 绑定按钮事件 /// private void BindEvent() { //选择手机邮箱 phoneEmailForm.SelectedPhone.MouseUpEventHandler += SelectPhoneOrEmail_MouseUpEvent; phoneEmailForm.SelectedEmail.MouseUpEventHandler += SelectPhoneOrEmail_MouseUpEvent; //登录事件 loginBtn.MouseUpEventHandler += LoginBtnEvent; //短信登录 loginByCodeBtn.MouseUpEventHandler += LoginByCode; //注册事件 registerBtn.MouseUpEventHandler += Register; //忘记密码 forgotPasswordBtn.MouseUpEventHandler += ForgetPWD_MouseUpEvent; //wechat wechatBtn.MouseUpEventHandler += LoginByWechat; //qq qqBtn.MouseUpEventHandler += LoginByQQ; } #endregion #region ◆ 登录____________________________ /// /// 登录事件 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void LoginBtnEvent(object sender, MouseEventArgs mouseEventArgs) { //检测隐私协议 if (this.CheckPrivacyPolicy() == false) { return; } if (phoneEmailForm.SelectedPhone.IsSelected) { Login(phoneRow.AccountET.Text.Trim(), phonePwdRow.PasswrodET.Text.Trim()); } else { Login(emailRow.AccountET.Text.Trim(), emailPwdRow.PasswrodET.Text.Trim()); } } /// /// 登录 /// /// Account. /// Password. private void Login(string accountStr, string passwordStr) { //Application.RunOnMainThread( () => //{ Action action = async () => { try { if (CheckAccount(accountStr) == false) { return; } CommonPage.Loading.Start(Language.StringByID(R.MyInternationalizationString.Logining)); var requestObj = new SendDataToServer.LoginObj { Account = accountStr, Password = passwordStr, Source = CommonPage.Source, Company = CommonPage.Company }; var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(requestObj); var revertObj = await CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/Login", System.Text.Encoding.UTF8.GetBytes(requestJson)); if (revertObj == null) { CommonPage.Instance.FailureToServer(); CommonPage.Loading.Hide(); return; } var stateCodeStr = revertObj.StateCode.ToUpper(); //Error 不能直接从服务器取,只能根据状态码逐一判断 if (stateCodeStr == "SUCCESS") { if (revertObj.ResponseData == null) { return; } HomePage.Instance.ShowLoginLoadView(); new System.Threading.Thread(async () => { //存储数据 var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString()); var revertData = responseDataObj; Config.ReFresh(); //标记上一次是不是同一个账号登陆 UserCenter.UserCenterResourse.ResidenceOption.TheSameLoginAccount = Config.Instance.Guid == revertData.Guid; Config.Instance.Account = revertData.Account; Config.Instance.Password = passwordStr; Config.Instance.MD5PWD = revertData.MD5PWD; Config.Instance.Guid = revertData.Guid; Config.Instance.LoginDateTime = DateTime.Now; Config.Instance.LoginToken = revertData.Token; Config.Instance.Save(); var resultRegID = await Shared.Common.CommonPage.Instance.PushRegID(); var homes = await House.GetHomeLists(); //刷新个人中心的内存及线程 await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread(); //启动ZigBee ZigBee.Common.Application.Init(); UserCenter.HdlRoomLogic.Current.InitAllRoom(); Application.RunOnMainThread(() => { CommonPage.Loading.Hide(); this.RemoveFromParent(); CommonPage.Instance.RemoveViewByTag("Login"); UserPage.Instance.Fresh(); }); }) { IsBackground = true }.Start(); } else if (stateCodeStr == "NOTVERIFY") { CommonPage.Loading.Hide(); //未激活 loginErrorBtn.TextID = R.MyInternationalizationString.NOTVERIFY; } else if (stateCodeStr == "NOTENABLE") { CommonPage.Loading.Hide(); //该用户属于调试账号,并未启用 loginErrorBtn.TextID = R.MyInternationalizationString.NOTENABLE; } else if (stateCodeStr == "USERNAMEORPWDERROR") { CommonPage.Loading.Hide(); //账号或密码错误 loginErrorBtn.TextID = R.MyInternationalizationString.USERNAMEORPWDERROR; } else if (stateCodeStr == "ACCOUNTNOEXISTS") { CommonPage.Loading.Hide(); //账号不存在 loginErrorBtn.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS; } else if (stateCodeStr == "YOUDATANOISLOCALREGION") { CommonPage.Loading.Hide(); //不在本区域,需要重定向区域后再次请求登录 if (revertObj.ResponseData == null) { return; } var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString()); CommonPage.RequestHttpsHost = responseDataObj.RegionServer; //再次登录 Login(accountStr, passwordStr); } else { loginErrorBtn.TextID = R.MyInternationalizationString.RequestServerFailed; } } catch (Exception ex) { System.Console.WriteLine($"登录失败--{ex.Message}"); CommonPage.Loading.Hide(); CommonPage.Instance.FailureToServer(); } finally { //CommonPage.Loading.Hide(); } //}); }; action(); } /// /// CheckAccount /// /// /// private bool CheckAccount(string accountStr) { if (phoneEmailForm.SelectedEmail.IsSelected) { if (AccountLogic.Instance.CheckEmail(accountStr) == false) { loginErrorBtn.TextID = R.MyInternationalizationString.TheEmailError; return false; } } else { if (AccountLogic.Instance.CheckPhone(accountStr) == false) { loginErrorBtn.TextID = R.MyInternationalizationString.ThePhoneError; return false; } } return true; } /// /// 通过验证码登录 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void LoginByCode(object sender, MouseEventArgs mouseEventArgs) { //检测隐私协议 if (this.CheckPrivacyPolicy() == false) { return; } //this.RemoveFromParent(); var loginByCodePage = new AccountLoginByCode(); CommonPage.Instance.AddChidren(loginByCodePage); loginByCodePage.Show(); } /// /// wechat登录 /// /// /// private void LoginByWechat(object sender, MouseEventArgs mouseEventArgs) { //检测隐私协议 if (this.CheckPrivacyPolicy() == false) { return; } #if Android //var alert = new Alert(Language.StringByID(R.MyInternationalizationString.TIP), // Language.StringByID(R.MyInternationalizationString.LoginByWechat), // Language.StringByID(R.MyInternationalizationString.Cancel), // Language.StringByID(R.MyInternationalizationString.Confrim)); //alert.Show(); //alert.ResultEventHandler += (send, e) => //{ //if (e) //{ com.hdl.home.Application.WXLogin(); com.hdl.home.WXEntryActivity.RespAction = (authStr) => { if (authStr == null) { } else { new System.Threading.Thread(async () => { var re = await isBindAuthAsync(authStr); if (re) { Application.RunOnMainThread(() => { //直接登录 HomePage.Instance.ShowLoginLoadView(); }); var resultRegID = await Shared.Common.CommonPage.Instance.PushRegID(); var homes = await House.GetHomeLists(); //刷新个人中心的内存及线程 await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread(); //启动ZigBee ZigBee.Common.Application.Init(); UserCenter.HdlRoomLogic.Current.InitAllRoom(); Application.RunOnMainThread(() => { this.RemoveFromParent(); CommonPage.Instance.RemoveViewByTag("Login"); UserPage.Instance.Fresh(); }); } else { var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr); Application.RunOnMainThread(() => { var registerPage = new AccountRegister(); Shared.Common.CommonPage.Instance.AddChidren(registerPage); registerPage.OpenID = authRes.openid; registerPage.Show(); }); } }) { IsBackground = true }.Start(); } }; //} //}; #endif #if iOS Home.IOS.AppDelegate.WXLogin(); Home.IOS.AppDelegate.RespAction = (authStr) => { if (authStr == null) { } else { new System.Threading.Thread(async () => { var re = await isBindAuthAsync(authStr); if (re) { //直接登录 //this.RemoveFromParent(); //UserPage.Instance.Fresh(); var resultRegID = await Shared.Common.CommonPage.Instance.PushRegID(); var homes = await House.GetHomeLists(); //启动ZigBee ZigBee.Common.Application.Init(); //刷新个人中心的内存及线程 await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread(); UserCenter.HdlRoomLogic.Current.InitAllRoom(); Application.RunOnMainThread(() => { this.RemoveFromParent(); UserPage.Instance.Fresh(); }); } else { var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr); Application.RunOnMainThread(() => { var registerPage = new AccountRegister(); Shared.Common.CommonPage.Instance.AddChidren(registerPage); registerPage.OpenID = authRes.openid; registerPage.Show(); }); } }) { IsBackground = true }.Start(); } }; #endif } /// /// qq登录 /// /// /// private void LoginByQQ(object sender, MouseEventArgs mouseEventArgs) { } /// /// phone/email 选择 /// /// /// private void SelectPhoneOrEmail_MouseUpEvent(object sender, MouseEventArgs mouseEventArgs) { phoneEmailForm.SelectedPhone.IsSelected = phoneEmailForm.SelectedEmail.IsSelected = false; phoneEmailForm.SelectedPhone.IsBold = phoneEmailForm.SelectedEmail.IsBold = false; loginBtn.Enable = loginBtn.IsSelected = false; loginErrorBtn.Text = string.Empty; (sender as Button).IsSelected = (sender as Button).IsBold = true; if ((sender as Button).Tag.ToString() == "Phone") { AddPhoneOrEmailFL(accountPwdFL, "Phone"); } else { AddPhoneOrEmailFL(accountPwdFL, "Email"); } } /// /// AddPhoneOrEmailFL /// /// /// private void AddPhoneOrEmailFL(FrameLayout accountPwdFrameLayout, string phoneOrEmail) { if (phoneOrEmail == "Phone") { if (phoneRow != null) { phoneRow.Visible = true; phonePwdRow.Visible = true; if (emailRow != null) { emailRow.Visible = false; emailPwdRow.Visible = false; } this.Pwd_TextChange(phonePwdRow); return; } phoneRow = new PhoneLoginRowForm(); phoneRow.Init(accountPwdFrameLayout, this, this.oldInputPhone, 29, 29); phoneRow.AccountET.TextChangeEventHandler += Account_TextChange; phonePwdRow = new PwdLoginRowForm(); phonePwdRow.Init(accountPwdFrameLayout, 29, 225); phonePwdRow.PasswrodET.TextChangeEventHandler += (sender, e) => { this.Pwd_TextChange(phonePwdRow); }; } else { if (emailRow != null) { emailRow.Visible = true; emailPwdRow.Visible = true; if (phoneRow != null) { phoneRow.Visible = false; phonePwdRow.Visible = false; } this.Pwd_TextChange(emailPwdRow); return; } emailRow = new EmailLoginRowForm(); emailRow.Init(accountPwdFrameLayout, this.oldInputEmail, 29, 29); emailRow.AccountET.TextChangeEventHandler += Account_TextChange; emailPwdRow = new PwdLoginRowForm(); emailPwdRow.Init(accountPwdFrameLayout, 29, 225); emailPwdRow.PasswrodET.TextChangeEventHandler += (sender, e) => { this.Pwd_TextChange(emailPwdRow); }; } } #endregion #region ◆ 忘记密码________________________ /// /// 忘记密码 /// private void ForgetPWD_MouseUpEvent(object sender, MouseEventArgs mouseEventArgs) { //检测隐私协议 if (this.CheckPrivacyPolicy() == false) { return; } var forgot = new AccountForgetPWD(); CommonPage.Instance.AddChidren(forgot); forgot.Show(); } #endregion #region ◆ 注册_____________________________ /// /// 注册 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void Register(object sender, MouseEventArgs mouseEventArgs) { //检测隐私协议 if (this.CheckPrivacyPolicy() == false) { return; } var registerPage = new AccountRegister(); CommonPage.Instance.AddChidren(registerPage); registerPage.Show(); } #endregion #region ◆ 账号密码监听______________________ /// /// 账号监听 /// /// Sender. /// The ${ParameterType} instance containing the event data. private void Account_TextChange(object sender, string mouseEventArgs) { loginErrorBtn.Text = string.Empty; } /// /// 密码监听事件 /// /// Sender. private void Pwd_TextChange(PwdLoginRowForm pwdRow) { loginErrorBtn.Text = string.Empty; string pswText = pwdRow.PasswrodET.Text.Trim(); if (1 <= pswText.Length && pswText.Length <= 16 && (phoneRow.AccountET.Text.Trim().Length > 0 || emailRow?.AccountET.Text.Trim().Length > 0)) { loginBtn.Enable = loginBtn.IsSelected = true; } else if (pswText.Length > 16) { pwdRow.PasswrodET.Text = pswText.Substring(0, 16); if (phoneRow.AccountET.Text.Trim().Length > 0 || emailRow?.AccountET.Text.Trim().Length > 0) { loginBtn.Enable = loginBtn.IsSelected = true; } } else { loginBtn.Enable = loginBtn.IsSelected = false; } } #endregion #region ■ 变量声明___________________________ /// /// 错误提示控件 /// private NormalViewControl btnErrorMsg = null; /// /// 是否同意隐私协议 /// private bool isAgreePrivacyPolicy = true; #endregion #region ■ 初始化_____________________________ /// /// 界面显示 /// /// 登陆账号 public void ShowForm(string account = "") { if (Config.Instance.IsLogin == true) { return; } CommonPage.Instance.IsDrawerLockMode = true; this.Tag = "Login"; //界面上部的黑色图片 var btnTopBlackPic = new NormalViewControl(this.Width, Application.GetRealHeight(619), false); btnTopBlackPic.UnSelectedImagePath = "Account/Logo_loginBG.png"; this.AddChidren(btnTopBlackPic); //中间浅白色的背景 var frameMidBack = new FrameLayout(); frameMidBack.Y = btnTopBlackPic.Bottom; frameMidBack.Height = this.Height - btnTopBlackPic.Bottom; frameMidBack.BackgroundColor = ZigbeeColor.Current.GXCGrayBackgroundColor; this.AddChidren(frameMidBack); //HdlHome的图标 var btnLogoIcon = new PicViewControl(184, 184); btnLogoIcon.Y = Application.GetRealHeight(230); btnLogoIcon.UnSelectedImagePath = "Account/Logo_White.png"; btnLogoIcon.Gravity = Gravity.CenterHorizontal; this.AddChidren(btnLogoIcon); //Hdl Home var btnLogoName = new NormalViewControl(300, 69, true); btnLogoName.Y = btnLogoIcon.Bottom; btnLogoName.Gravity = Gravity.CenterHorizontal; btnLogoName.TextID = R.MyInternationalizationString.AppName; btnLogoName.TextColor = ZigbeeColor.Current.GXCTextWhiteColor; btnLogoName.TextAlignment = TextAlignment.Center; btnLogoName.TextSize = 16; this.AddChidren(btnLogoName); //1:手机号 2:邮箱 int selectIndex = account.Contains("@") == false ? 1 : 2; //初始化 手机账号登陆窗口 var frameAccLoginPhoneback = this.InitAccoutLoginWindow(frameMidBack, selectIndex == 1 ? account : string.Empty, 1); //初始化 邮箱账号登陆窗口 var frameEmailLoginPhoneback = this.InitAccoutLoginWindow(frameMidBack, selectIndex == 1 ? string.Empty : account, 2); //初始化 手机账号验证码登陆窗口 var frameAccCodeLoginPhoneback = this.InitCodeLoginWindow(frameMidBack, selectIndex == 1 ? account : string.Empty, 1); //初始化 邮箱账号验证码登陆窗口 var frameEmailCodeLoginPhoneback = this.InitCodeLoginWindow(frameMidBack, selectIndex == 1 ? string.Empty : account, 2); //定义这两个东西,是为了减少判断的代码 var framePhone = frameAccLoginPhoneback; var frameEmail = frameEmailLoginPhoneback; //邮箱,手机号的切换控件 var sitchControl = new Controls.PhoneEmailSelectControl(); sitchControl.Y = Application.GetRealHeight(559); this.AddChidren(sitchControl); sitchControl.SelectMenuEvent += (selectMenu) => { selectIndex = selectMenu; //手机号 if (selectIndex == 1) { framePhone.Visible = true; frameEmail.Visible = false; } //邮箱 else if (selectIndex == 2) { framePhone.Visible = false; frameEmail.Visible = true; } }; //执行初始化 sitchControl.InitControl(ZigbeeColor.Current.GXCButtonSelectedColor, selectIndex); //错误提示控件 this.btnErrorMsg = new NormalViewControl(700, 60, true); btnErrorMsg.Y = frameAccLoginPhoneback.Y - Application.GetRealHeight(60 + 3); btnErrorMsg.X = Application.GetRealWidth(288); btnErrorMsg.TextColor = ZigbeeColor.Current.GXCTextRed; btnErrorMsg.IsBold = true; frameMidBack.AddChidren(btnErrorMsg); //验证码登陆 //1:账号登陆 2:验证码登陆 int codeDiv = 1; var btnLoginByCode = new NormalViewControl(300, 100, true); btnLoginByCode.X = Application.GetRealWidth(98); btnLoginByCode.Y = frameAccLoginPhoneback.Bottom + Application.GetRealHeight(21); btnLoginByCode.TextID = R.MyInternationalizationString.LoginByCode; btnLoginByCode.TextColor = UserCenterColor.Current.TextGrayColor3; btnLoginByCode.TextSize = 12; frameMidBack.AddChidren(btnLoginByCode); btnLoginByCode.ButtonClickEvent += (sender, e) => { if (codeDiv == 1) { //验证码登陆 codeDiv = 2; btnLoginByCode.TextID = R.MyInternationalizationString.LoginByAccountPWD; //账号登陆 //账号登陆的两个东西隐藏 frameAccLoginPhoneback.Visible = false; frameEmailLoginPhoneback.Visible = false; //替换这两个东西 framePhone = frameAccCodeLoginPhoneback; frameEmail = frameEmailCodeLoginPhoneback; } else { //账号登陆 codeDiv = 1; btnLoginByCode.TextID = R.MyInternationalizationString.LoginByCode;//验证码登陆 //验证码登陆的两个东西隐藏 frameAccCodeLoginPhoneback.Visible = false; frameEmailCodeLoginPhoneback.Visible = false; //替换这两个东西 framePhone = frameAccLoginPhoneback; frameEmail = frameEmailLoginPhoneback; } //刷新菜单 sitchControl.SetSelectIndex(1); }; //注册用户 var btnRegister = new NormalViewControl(244, 100, true); btnRegister.Y = btnLoginByCode.Y; btnRegister.X = frameMidBack.Width - Application.GetRealWidth(98 + 244); btnRegister.TextID = R.MyInternationalizationString.Register; btnRegister.TextColor = UserCenterColor.Current.TextGrayColor3; btnRegister.TextSize = 12; btnRegister.TextAlignment = TextAlignment.CenterRight; frameMidBack.AddChidren(btnRegister); btnRegister.ButtonClickEvent += (sender, e) => { var registerPage = new AccountRegister(); CommonPage.Instance.AddChidren(registerPage); registerPage.Show(); }; //微信图标 var btnWebChat = new IconViewControl(115); btnWebChat.Y = frameMidBack.Height - Application.GetRealHeight(69) - btnWebChat.IconSize; btnWebChat.UnSelectedImagePath = "Account/Wechat.png"; btnWebChat.Gravity = Gravity.CenterHorizontal; frameMidBack.AddChidren(btnWebChat); btnWebChat.ButtonClickEvent += (sender, e) => { //微信登陆 this.LoginByWechat(); }; //添加服务协议控件 // this.AddServiceAgreementControl(frameMidBack); } #endregion #region ■ 初始化账号登陆窗口_________________ /// /// 初始化账号登陆窗口 /// /// 中间浅色的背景容器 /// 登陆账号 /// 1:手机号 2:邮箱 private FrameLayout InitAccoutLoginWindow(FrameLayout frameMidBack, string i_account, int i_div) { //登陆按钮 BottomClickButton btnLogin = null; //账号输入框 TextInputControl txtAccount = null; //密码输入框 TextInputControl txtPsw = null; //容器 var frameBack = new FrameLayout(); frameBack.Height = Application.GetRealHeight(620); frameBack.Y = Application.GetRealHeight(181); frameMidBack.AddChidren(frameBack); frameBack.Visible = false; //白色背景 var frameWhiteBack = new FrameLayout(); frameWhiteBack.Width = Application.GetRealWidth(942); frameWhiteBack.Height = Application.GetRealHeight(553); frameWhiteBack.BackgroundColor = UserCenterColor.Current.White; frameWhiteBack.Radius = (uint)Application.GetRealHeight(17); frameWhiteBack.Gravity = Gravity.CenterHorizontal; frameBack.AddChidren(frameWhiteBack); //账号行 var rowAccount = new FrameLayout(); rowAccount.Y = Application.GetRealHeight(29); rowAccount.Width = Application.GetRealWidth(884); rowAccount.Height = Application.GetRealHeight(138); rowAccount.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(rowAccount); //账号图标 var btnAccountIcon = new IconViewControl(92); btnAccountIcon.X = Application.GetRealWidth(69); btnAccountIcon.Gravity = Gravity.CenterVertical; btnAccountIcon.UnSelectedImagePath = "Account/Account.png"; rowAccount.AddChidren(btnAccountIcon); //账号输入框 txtAccount = new TextInputControl(600, 92, true); txtAccount.X = btnAccountIcon.Right + Application.GetRealWidth(35); txtAccount.Gravity = Gravity.CenterVertical; if (i_div == 1) { //手机号 txtAccount.IsNumberKeyboardType = true; txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPhoneNum); } else { //邮箱 txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputEmail); } txtAccount.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor; txtAccount.Text = i_account; rowAccount.AddChidren(txtAccount); txtAccount.TextChangeEventHandler += (sender, e) => { //隐藏错误提示 if (this.btnErrorMsg.Visible == true) { this.btnErrorMsg.Visible = false; } if (txtAccount.Text.Trim().Length > 0 && txtPsw.Text.Length > 0) { //能够登陆 if (btnLogin.CanClick == false) { btnLogin.CanClick = true; } return; } //不能点击 if (btnLogin.CanClick == true) { btnLogin.CanClick = false; } }; //底线 var btnAccountLine = new NormalViewControl(rowAccount.Width, 1, false); btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor; btnAccountLine.Y = rowAccount.Height - 2; rowAccount.AddChidren(btnAccountLine); txtAccount.FoucsChanged += (sender, focusEvent) => { //焦点进入时,底线颜色变更 if (focusEvent.Focus) { btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCSelectedLineColor; btnAccountLine.Height = 2; } else { btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor; btnAccountLine.Height = 1; } }; //密码行 var rowPassword = new FrameLayout(); rowPassword.Y = rowAccount.Bottom + Application.GetRealHeight(58); rowPassword.Width = rowAccount.Width; rowPassword.Height = rowAccount.Height; rowPassword.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(rowPassword); //账号图标 var btnPswIcon = new IconViewControl(92); btnPswIcon.X = btnAccountIcon.X; btnPswIcon.Gravity = Gravity.CenterVertical; btnPswIcon.UnSelectedImagePath = "Account/Password.png"; rowPassword.AddChidren(btnPswIcon); //密码输入框 txtPsw = new TextInputControl(600, 92, true); txtPsw.X = txtAccount.X; txtPsw.Gravity = Gravity.CenterVertical; txtPsw.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPWD); txtPsw.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor; txtPsw.SecureTextEntry = true; rowPassword.AddChidren(txtPsw); txtPsw.TextChangeEventHandler += (sender, e) => { txtAccount.TextChangeEventHandler(sender, e); }; //隐藏或者显示密码的图标 var btnHiden = new IconViewControl(92); btnHiden.X = rowPassword.Width - Application.GetRealWidth(46) - btnHiden.IconSize; btnHiden.SelectedImagePath = "Account/UnhidePwd.png"; btnHiden.UnSelectedImagePath = "Account/HidePwd.png"; btnHiden.Gravity = Gravity.CenterVertical; rowPassword.AddChidren(btnHiden); btnHiden.ButtonClickEvent += (sender, e) => { txtPsw.SecureTextEntry = !txtPsw.SecureTextEntry; btnHiden.IsSelected = !btnHiden.IsSelected; }; //底线 var btnPswLine = new NormalViewControl(rowPassword.Width, 1, false); btnPswLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor; btnPswLine.Y = rowPassword.Height - 2; rowPassword.AddChidren(btnPswLine); txtPsw.FoucsChanged += (sender, focusEvent) => { //焦点进入时,底线颜色变更 if (focusEvent.Focus) { btnPswLine.BackgroundColor = ZigbeeColor.Current.GXCSelectedLineColor; btnPswLine.Height = 2; } else { btnPswLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor; btnPswLine.Height = 1; } }; //忘记密码? var btnForgot = new NormalViewControl(250, 90, true); btnForgot.Y = rowPassword.Bottom + Application.GetRealHeight(15); btnForgot.X = frameWhiteBack.Width - Application.GetRealWidth(250 + 35); btnForgot.TextSize = 12; btnForgot.TextColor = UserCenterColor.Current.TextGrayColor3; btnForgot.TextAlignment = TextAlignment.CenterRight; btnForgot.TextID = R.MyInternationalizationString.ForgotPWD_1; frameWhiteBack.AddChidren(btnForgot); btnForgot.ButtonClickEvent += (sender, e) => { var forgot = new AccountForgetPWD(); CommonPage.Instance.AddChidren(forgot); forgot.Show(); }; //登陆按钮 btnLogin = new BottomClickButton(688); btnLogin.Gravity = Gravity.BottomCenter; btnLogin.TextID = R.MyInternationalizationString.Login; btnLogin.oldBackgroundColor = btnLogin.BackgroundColor; frameBack.AddChidren(btnLogin); btnLogin.CanClick = false; btnLogin.ButtonClickEvent += (sender, e) => { //账号密码登陆 this.LoginByAccountAndPsw(txtAccount.Text.Trim(), txtPsw.Text, i_div); }; return frameBack; } #endregion #region ■ 初始化验证码登陆窗口_______________ /// /// 初始化验证码登陆窗口 /// /// 中间浅色的背景容器 /// 登陆账号 /// 1:手机号 2:邮箱 private FrameLayout InitCodeLoginWindow(FrameLayout frameMidBack, string i_account, int i_div) { //登陆按钮 BottomClickButton btnLogin = null; //账号输入框 TextInputControl txtAccount = null; //密码输入框 TextInputControl txtVerCode = null; //当前输入的账号(防止发送验证码之后,修改账号) string nowInputAccount = string.Empty; //是否已经发送了验证码 bool hadSendCode = false; //容器 var frameBack = new FrameLayout(); frameBack.Height = Application.GetRealHeight(620); frameBack.Y = Application.GetRealHeight(181); frameMidBack.AddChidren(frameBack); frameBack.Visible = false; //白色背景 var frameWhiteBack = new FrameLayout(); frameWhiteBack.Width = Application.GetRealWidth(942); frameWhiteBack.Height = Application.GetRealHeight(553); frameWhiteBack.BackgroundColor = UserCenterColor.Current.White; frameWhiteBack.Radius = (uint)Application.GetRealHeight(17); frameWhiteBack.Gravity = Gravity.CenterHorizontal; frameBack.AddChidren(frameWhiteBack); //账号行 var rowAccount = new FrameLayout(); rowAccount.Y = Application.GetRealHeight(29); rowAccount.Width = Application.GetRealWidth(884); rowAccount.Height = Application.GetRealHeight(138); rowAccount.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(rowAccount); if (i_div == 2) { //账号图标 var btnAccountIcon = new IconViewControl(92); btnAccountIcon.X = Application.GetRealWidth(69); btnAccountIcon.Gravity = Gravity.CenterVertical; btnAccountIcon.UnSelectedImagePath = "Account/Account.png"; rowAccount.AddChidren(btnAccountIcon); } else { //地区码 var btnArea = new NormalViewControl(139, 60, true); btnArea.TextColor = UserCenterColor.Current.TextGrayColor1; btnArea.TextAlignment = TextAlignment.CenterRight; btnArea.Text = "+86"; btnArea.Gravity = Gravity.CenterVertical; rowAccount.AddChidren(btnArea); } //账号输入框 txtAccount = new TextInputControl(600, 92, true); txtAccount.X = Application.GetRealWidth(193); txtAccount.Gravity = Gravity.CenterVertical; if (i_div == 1) { //手机号 txtAccount.IsNumberKeyboardType = true; txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputPhoneNum); } else { //邮箱 txtAccount.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputEmail); } txtAccount.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor; txtAccount.Text = i_account; rowAccount.AddChidren(txtAccount); txtAccount.TextChangeEventHandler += (sender, e) => { //隐藏错误提示 if (this.btnErrorMsg.Visible == true) { this.btnErrorMsg.Visible = false; } //必须要发送成功才行 if (hadSendCode = true && txtAccount.Text.Trim().Length > 0 && txtVerCode.Text.Length > 0) { //能够登陆 if (btnLogin.CanClick == false) { btnLogin.CanClick = true; } return; } //不能点击 if (btnLogin.CanClick == true) { btnLogin.CanClick = false; } }; //底线 var btnAccountLine = new NormalViewControl(rowAccount.Width, 1, false); btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor; btnAccountLine.Y = rowAccount.Height - 2; rowAccount.AddChidren(btnAccountLine); txtAccount.FoucsChanged += (sender, focusEvent) => { //焦点进入时,底线颜色变更 if (focusEvent.Focus) { btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCSelectedLineColor; btnAccountLine.Height = 2; } else { btnAccountLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor; btnAccountLine.Height = 1; } }; //验证码行 var rowVerCode = new FrameLayout(); rowVerCode.Y = rowAccount.Bottom + Application.GetRealHeight(58); rowVerCode.Width = rowAccount.Width; rowVerCode.Height = rowAccount.Height; rowVerCode.Gravity = Gravity.CenterHorizontal; frameWhiteBack.AddChidren(rowVerCode); //账号图标 var btnCodeIcon = new IconViewControl(92); btnCodeIcon.X = Application.GetRealWidth(69); btnCodeIcon.Gravity = Gravity.CenterVertical; btnCodeIcon.UnSelectedImagePath = "Account/Code.png"; rowVerCode.AddChidren(btnCodeIcon); //验证码输入框 txtVerCode = new TextInputControl(350, 92, true); txtVerCode.X = btnCodeIcon.Right + Application.GetRealWidth(35); txtVerCode.Gravity = Gravity.CenterVertical; txtVerCode.PlaceholderText = Language.StringByID(R.MyInternationalizationString.PleaseInputVerificationCode); txtVerCode.PlaceholderTextColor = ZigbeeColor.Current.GXCPlaceHolderTextColor; txtVerCode.SecureTextEntry = true; rowVerCode.AddChidren(txtVerCode); txtVerCode.TextChangeEventHandler += (sender, e) => { txtAccount.TextChangeEventHandler(sender, e); }; //竖线 var btnLine2 = new NormalViewControl(1, Application.GetRealHeight(66), false); btnLine2.X = Application.GetRealWidth(611); btnLine2.Gravity = Gravity.CenterVertical; btnLine2.BackgroundColor = ZigbeeColor.Current.GXCLineColor; rowVerCode.AddChidren(btnLine2); //获取验证码 var btnSendCode = new NormalViewControl(250, 70, true); btnSendCode.X = btnLine2.Right + Application.GetRealWidth(36); btnSendCode.Gravity = Gravity.CenterVertical; btnSendCode.TextID = R.MyInternationalizationString.SendVerificationCode; btnSendCode.TextColor = UserCenterColor.Current.TextGrayColor3; btnSendCode.TextAlignment = TextAlignment.Center; btnSendCode.IsBold = true; rowVerCode.AddChidren(btnSendCode); btnSendCode.ButtonClickEvent += async (sender, e) => { //检测输入的账号 nowInputAccount = txtAccount.Text.Trim(); if (this.CheckInputAccount("86", nowInputAccount, i_div) == false) { return; } //发送验证码 hadSendCode = await this.SendVerCode(btnSendCode, nowInputAccount, i_div); }; //底线 var btnCodeLine = new NormalViewControl(rowVerCode.Width, 1, false); btnCodeLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor; btnCodeLine.Y = rowVerCode.Height - 2; rowVerCode.AddChidren(btnCodeLine); txtVerCode.FoucsChanged += (sender, focusEvent) => { //焦点进入时,底线颜色变更 if (focusEvent.Focus) { btnCodeLine.BackgroundColor = ZigbeeColor.Current.GXCSelectedLineColor; btnCodeLine.Height = 2; } else { btnCodeLine.BackgroundColor = ZigbeeColor.Current.GXCGrayLineColor; btnCodeLine.Height = 1; } }; //忘记密码? var btnForgot = new NormalViewControl(250, 90, true); btnForgot.Y = rowVerCode.Bottom + Application.GetRealHeight(15); btnForgot.X = frameWhiteBack.Width - Application.GetRealWidth(250 + 35); btnForgot.TextSize = 12; btnForgot.TextColor = UserCenterColor.Current.TextGrayColor3; btnForgot.TextAlignment = TextAlignment.CenterRight; btnForgot.TextID = R.MyInternationalizationString.ForgotPWD_1; frameWhiteBack.AddChidren(btnForgot); btnForgot.ButtonClickEvent += (sender, e) => { var forgot = new AccountForgetPWD(); CommonPage.Instance.AddChidren(forgot); forgot.Show(); }; //登陆按钮 btnLogin = new BottomClickButton(688); btnLogin.Gravity = Gravity.BottomCenter; btnLogin.TextID = R.MyInternationalizationString.Login; btnLogin.oldBackgroundColor = btnLogin.BackgroundColor; frameBack.AddChidren(btnLogin); btnLogin.CanClick = false; btnLogin.ButtonClickEvent += (sender, e) => { //验证码登陆 this.LoginByVerCode(nowInputAccount, txtVerCode.Text.Trim(), i_div); }; return frameBack; } #endregion #region ■ 服务协议___________________________ /// /// 添加服务协议控件 /// /// private void AddServiceAgreementControl(FrameLayout frameBack) { var frameRow = new FrameLayout(); frameRow.Height = Application.GetMinRealAverage(110); frameRow.Y = Application.GetRealHeight(959); frameRow.Gravity = Gravity.CenterHorizontal; //字体总宽度 int fontWidth = 0; int btnWidth = 0; #if Android //特殊的误差值 int speceilValue = Application.GetRealWidth(20); #endif #if iOS //特殊的误差值 int speceilValue = Application.GetRealWidth(10); #endif //我已阅读并同意 var btnMsg1 = new NormalViewControl(100, 90, true); btnMsg1.Gravity = Gravity.CenterVertical; btnMsg1.Y = Application.GetRealHeight(968); btnMsg1.TextSize = 12; btnMsg1.TextColor = UserCenterColor.Current.TextGrayColor1; btnMsg1.TextID = R.MyInternationalizationString.uMyHadReadAndAgree; //计算真实宽度 btnWidth = btnMsg1.GetRealWidthByText(); btnMsg1.Width = btnWidth; fontWidth += btnWidth; //《隐私权政策》 var btnMsg2 = new NormalViewControl(100, 90, true); btnMsg2.Gravity = Gravity.CenterVertical; btnMsg2.TextSize = 12; btnMsg2.TextColor = 0xFF4A90E2; btnMsg2.Text = "《" + Language.StringByID(R.MyInternationalizationString.uPrivacyPolicy) + "》"; //计算真实宽度 btnWidth = btnMsg2.GetRealWidthByText(); btnMsg2.Width = btnWidth; fontWidth += btnWidth; btnMsg2.ButtonClickEvent += (sender, e) => { var form = new UserCenter.Abount.SLAForm(); this.AddChidren(form); form.InitTopFrameLayout(); form.InitBodyFrameLayout(); form.ShowForm(); }; //和 var btnMsg3 = new NormalViewControl(100, 90, true); btnMsg3.Gravity = Gravity.CenterVertical; btnMsg3.TextSize = 12; btnMsg3.TextColor = UserCenterColor.Current.TextGrayColor1; btnMsg3.TextID = R.MyInternationalizationString.uAnd; //计算真实宽度 btnWidth = btnMsg3.GetRealWidthByText(); btnMsg3.Width = btnWidth; fontWidth += btnWidth; //《服务条款》 var btnMsg4 = new NormalViewControl(100, 90, true); btnMsg4.Gravity = Gravity.CenterVertical; btnMsg4.TextSize = 12; btnMsg4.TextColor = 0xFF4A90E2; btnMsg4.Text = "《" + Language.StringByID(R.MyInternationalizationString.uTermsOfService) + "》"; //计算真实宽度 btnWidth = btnMsg4.GetRealWidthByText(); btnMsg4.Width = btnWidth; fontWidth += btnWidth; btnMsg4.ButtonClickEvent += (sender, e) => { btnMsg2.ButtonClickEvent(null, null); }; //图标 var btnIcon = new IconBigViewControl(42, 42); btnIcon.UnSelectedImagePath = "Item/Check1.png"; btnIcon.SelectedImagePath = "Item/Check1Selected.png"; //计算行控件的宽度 frameRow.Width = fontWidth + Application.GetMinRealAverage(42) + Application.GetRealWidth(23) - speceilValue * 3; frameBack.AddChidren(frameRow); //图标控件初始化 frameRow.AddChidren(btnIcon); btnIcon.InitControl(); btnIcon.X = -btnIcon.XOffset; btnIcon.UseClickStatu = false; btnIcon.ButtonClickEvent += (sender, e) => { btnIcon.IsSelected = !btnIcon.IsSelected; isAgreePrivacyPolicy = btnIcon.IsSelected; }; btnMsg1.X = btnIcon.btnIcon.Width + Application.GetRealWidth(23); frameRow.AddChidren(btnMsg1); btnMsg2.Y = btnMsg1.Y; btnMsg2.X = btnMsg1.Right - speceilValue; frameRow.AddChidren(btnMsg2); btnMsg3.X = btnMsg2.Right - speceilValue; btnMsg3.Y = btnMsg1.Y; frameRow.AddChidren(btnMsg3); btnMsg4.X = btnMsg3.Right - speceilValue; btnMsg4.Y = btnMsg1.Y; frameRow.AddChidren(btnMsg4); } #endregion #region ■ 账号密码登陆_______________________ /// /// 账号密码登陆 /// /// 账号 /// 密码 /// 1:手机号 2:邮箱 private void LoginByAccountAndPsw(string i_account, string i_psw, int i_div) { //检测账号 if (this.CheckInputAccount(string.Empty, i_account, i_div) == false) { return; } //登陆中.... CommonPage.Loading.Start(Language.StringByID(R.MyInternationalizationString.Logining)); HdlThreadLogic.Current.RunThread(async () => { //登陆参数 var pra = new SendDataToServer.LoginObj(); pra.Account = i_account; pra.Password = i_psw; pra.Source = CommonPage.Source; pra.Company = CommonPage.Company; //访问接口 var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(pra); var result = await CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/Login", System.Text.Encoding.UTF8.GetBytes(requestJson)); //处理登陆成功的数据 this.AdjustLoginSuccessData(result, pra, i_account, i_psw, i_div); }); } /// /// 检测输入的账号 /// /// 地区码 /// 账号 /// 1:手机号 2:邮箱 /// private bool CheckInputAccount(string i_areaCode, string i_account, int i_div) { if (i_div == 1) { //检测手机 if (i_areaCode != string.Empty && AccountLogic.Instance.CheckPhoneWithZone(i_account, i_areaCode) == false) { btnErrorMsg.TextID = R.MyInternationalizationString.ThePhoneError; return false; } //检测手机 if (i_areaCode == string.Empty && AccountLogic.Instance.CheckPhone(i_account) == false) { btnErrorMsg.TextID = R.MyInternationalizationString.ThePhoneError; return false; } } else { //检测邮箱 if (AccountLogic.Instance.CheckEmail(i_account) == false) { btnErrorMsg.TextID = R.MyInternationalizationString.TheEmailError; return false; } } return true; } #endregion #region ■ 微信登陆___________________________ /// /// 微信登录 /// private void LoginByWechat() { #if Android com.hdl.home.Application.WXLogin(); com.hdl.home.WXEntryActivity.RespAction = (authStr) => { #endif #if iOS Home.IOS.AppDelegate.WXLogin(); Home.IOS.AppDelegate.RespAction = (authStr) => { #endif if (authStr == null) { return; } HdlThreadLogic.Current.RunThread(async () => { //是否已经绑定 var re = await isBindAuthAsync(authStr); if (re) { Application.RunOnMainThread(() => { //直接登录 HomePage.Instance.ShowLoginLoadView(); }); var resultRegID = await Shared.Common.CommonPage.Instance.PushRegID(); var homes = await House.GetHomeLists(); //刷新个人中心的内存及线程 await UserCenter.UserCenterLogic.InitUserCenterMenmoryAndThread(); //启动ZigBee ZigBee.Common.Application.Init(); Application.RunOnMainThread(() => { this.RemoveFromParent(); CommonPage.Instance.RemoveViewByTag("Login"); UserPage.Instance.Fresh(); }); } else { var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr); Application.RunOnMainThread(() => { var registerPage = new AccountRegister(); CommonPage.Instance.AddChidren(registerPage); registerPage.OpenID = authRes.openid; registerPage.Show(); }); } }); }; } /// /// 是否已绑定 /// /// /// private async System.Threading.Tasks.Task isBindAuthAsync(string authStr) { var authRes = Newtonsoft.Json.JsonConvert.DeserializeObject(authStr); var auth = new SendDataToServer.AuthUser() { AccessToken = authRes.access_token, RefreshToken = authRes.refresh_token, OpenID = authRes.openid }; //获取微信昵称 var strUrl = "https://api.weixin.qq.com/sns/userinfo?access_token=" + authRes.access_token; strUrl += "&openid=" + authRes.openid; var byteData = await Common.CommonPage.Instance.DoRequestZigbeeHttpsInterface(strUrl, null, null, "GET"); if (byteData == null) { return false; } var receipData = System.Text.Encoding.UTF8.GetString(byteData); var nickData = Newtonsoft.Json.JsonConvert.DeserializeObject(receipData); auth.UserName = nickData.nickname; var requestJson = Newtonsoft.Json.JsonConvert.SerializeObject(auth); var revertObj = await CommonPage.Instance.RequestHttpsZigbeeAsync("ZigbeeUsers/InsertOrUpdateAuthUser", System.Text.Encoding.UTF8.GetBytes(requestJson)); if (revertObj == null) { return false; } var stateCodeStr = revertObj.StateCode.ToUpper(); if (stateCodeStr == "SUCCESS") { var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString()); var revertData = responseDataObj; //标记上一次是不是同一个账号登陆 UserCenter.UserCenterResourse.ResidenceOption.TheSameLoginAccount = Config.Instance.Guid == revertData.Guid; Config.Instance.Account = revertData.Account; Config.Instance.MD5PWD = revertData.MD5PWD; Config.Instance.Guid = revertData.Guid; Config.Instance.LoginDateTime = DateTime.Now; Config.Instance.Save(); return true; } else { return false; } } #endregion #region ■ 验证码登陆_________________________ /// /// 验证码登陆 /// /// 账号 /// 验证码 /// 1:手机号 2:邮箱 private async void LoginByVerCode(string i_account, string i_verCode, int i_div) { var pra = new SendDataToServer.LoginValidCodeOBJ() { Account = i_account, Code = i_verCode, Language = CommonPage.ZigBeeLanguage, AreaCode = int.Parse(CommonPage.PhoneZoneStr) }; var result = await CommonFormResouce.LoginByCode(pra); //处理登陆成功的数据 this.AdjustLoginSuccessData(result, pra, i_account, string.Empty, i_div); } /// /// 发送验证码 /// /// 发送按钮 /// 账号 /// 1:手机号 2:邮箱 /// private async System.Threading.Tasks.Task SendVerCode(NormalViewControl btnSendCode, string account, int i_div) { //不能再点击 btnSendCode.CanClick = false; int companyInt = 0; if (CommonPage.PhoneZoneStr == "86" || i_div == 2) { companyInt = CommonPage.Company; } else { companyInt = CommonPage.CompanyForINTERNETION; } var reqDtoSignPhone = new SendDataToServer.LoginSendVerCodeObj() { Account = account, Company = companyInt, AreaCode = int.Parse(CommonPage.PhoneZoneStr), Language = CommonPage.ZigBeeLanguage }; var requestRevertObj = await CommonFormResouce.LoginSendVerCode(reqDtoSignPhone); if (requestRevertObj == null) { //请求服务器失败 CommonPage.Instance.FailureToServer(); return false; } var stateCodeStr = requestRevertObj.StateCode.ToUpper(); if (stateCodeStr == "SUCCESS") { //开启发送验证码的倒计时 this.StartSendVerCodeTimeOutThread(btnSendCode); return true; } if (stateCodeStr == "PARAMETEROREMPTY") { //提供的参数错误 btnErrorMsg.TextID = R.MyInternationalizationString.PARAMETEROREMPTY; } else if (stateCodeStr == "ACCOUNTNOEXISTS") { //账号不存在 btnErrorMsg.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS; } else if (stateCodeStr == "SENDFAIL") { //验证码发送失败 btnErrorMsg.TextID = R.MyInternationalizationString.SENDFAIL; } else { //请求服务器失败 btnErrorMsg.TextID = R.MyInternationalizationString.RequestServerFailed; //写Log IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/LoginSendVerCode", requestRevertObj, reqDtoSignPhone); } HdlThreadLogic.Current.RunThread(() => { //发送失败后,5秒之后才能再次发送 int i = 0; while (i <= 5) { i++; System.Threading.Thread.Sleep(1000); } btnSendCode.CanClick = true; }); return false; } /// /// 开启发送验证码的倒计时 /// /// private void StartSendVerCodeTimeOutThread(NormalViewControl btnSendCode) { HdlThreadLogic.Current.RunThread(() => { //后重发 string strText = Language.StringByID(R.MyInternationalizationString.SendVerificationCodeAgain); int time = 60; while (time > 0 && btnSendCode.Parent != null) { HdlThreadLogic.Current.RunMain(() => { btnSendCode.Text = time + "s" + strText; }); time--; } //倒计时完成之后,可以再次点击 btnSendCode.CanClick = true; btnSendCode.TextID = R.MyInternationalizationString.SendVerificationCode;//获取验证码 }); } #endregion #region ■ 处理登陆成功的数据_________________ /// /// 处理登陆成功的数据 /// /// 云端返回的数据 /// 接口请求参数 /// 账号 /// 密码,验证码登陆时,设置为 string.Empty /// 1:手机号 2:邮箱 private async void AdjustLoginSuccessData(Common.ResponseEntity.ResponsePack revertObj, object pra, string i_account, string i_psw, int i_div) { if (revertObj == null) { HdlThreadLogic.Current.RunMain(() => { //请求服务器失败 CommonPage.Instance.FailureToServer(); CommonPage.Loading.Hide(); }); return; } var stateCodeStr = revertObj.StateCode.ToUpper(); //Error 不能直接从服务器取,只能根据状态码逐一判断 if (stateCodeStr == "SUCCESS") { HdlThreadLogic.Current.RunMain(() => { //显示启动页 HomePage.Instance.ShowLoginLoadView(); }); //存储数据 var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString()); var revertData = responseDataObj; Config.ReFresh(); //标记上一次是不是同一个账号登陆 UserCenterResourse.ResidenceOption.TheSameLoginAccount = Config.Instance.Guid == revertData.Guid; Config.Instance.Account = revertData.Account; Config.Instance.Password = i_psw; Config.Instance.MD5PWD = revertData.MD5PWD; Config.Instance.Guid = revertData.Guid; Config.Instance.LoginDateTime = DateTime.Now; Config.Instance.LoginToken = revertData.Token; Config.Instance.Save(); var resultRegID = await CommonPage.Instance.PushRegID(); var homes = await House.GetHomeLists(); //刷新个人中心的内存及线程 await UserCenterLogic.InitUserCenterMenmoryAndThread(); //启动ZigBee ZigBee.Common.Application.Init(); HdlThreadLogic.Current.RunMain(() => { CommonPage.Loading.Hide(); this.RemoveFromParent(); CommonPage.Instance.RemoveViewByTag("Login"); UserPage.Instance.Fresh(); }); return; } //关闭转圈的 HdlThreadLogic.Current.RunMain(() => { CommonPage.Loading.Hide(); if (stateCodeStr == "NOTVERIFY") { //未激活 btnErrorMsg.TextID = R.MyInternationalizationString.NOTVERIFY; } else if (stateCodeStr == "NOTENABLE") { //该用户属于调试账号,并未启用 btnErrorMsg.TextID = R.MyInternationalizationString.NOTENABLE; } else if (stateCodeStr == "PARAMETEROREMPTY") { //提供的参数错误 btnErrorMsg.TextID = R.MyInternationalizationString.PARAMETEROREMPTY; } else if (stateCodeStr == "VALIDCODEANDPHONENOEQUAL") { //验证码错误,请重新输入 btnErrorMsg.TextID = R.MyInternationalizationString.VALIDCODEANDPHONENOEQUAL; } else if (stateCodeStr == "USERNAMEORPWDERROR") { //账号或密码错误 btnErrorMsg.TextID = R.MyInternationalizationString.USERNAMEORPWDERROR; } else if (stateCodeStr == "ACCOUNTNOEXISTS") { //账号不存在 btnErrorMsg.TextID = R.MyInternationalizationString.ACCOUNTNOEXISTS; } else if (stateCodeStr == "NORECORD" && i_psw == string.Empty) { //请先获取验证码 btnErrorMsg.TextID = R.MyInternationalizationString.NORECORD; } else if (stateCodeStr == "YOUDATANOISLOCALREGION") { //不在本区域,需要重定向区域后再次请求登录 var responseDataObj = Newtonsoft.Json.JsonConvert.DeserializeObject(revertObj.ResponseData.ToString()); CommonPage.RequestHttpsHost = responseDataObj.RegionServer; if (i_psw != string.Empty) { //再次登录 this.LoginByAccountAndPsw(i_account, i_psw, i_div); } } else { btnErrorMsg.TextID = R.MyInternationalizationString.RequestServerFailed; //写Log if (pra is SendDataToServer.LoginObj) { ((SendDataToServer.LoginObj)pra).Password = "*********"; IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/Login", revertObj, pra); } else { IMessageCommon.Current.GetMsgByRequestName("ZigbeeUsers/LoginValidCode", revertObj, pra); } } }); } #endregion #region ■ 一般方法___________________________ /// /// 检测隐私协议 /// /// private bool CheckPrivacyPolicy() { if (isAgreePrivacyPolicy == false) { //请先阅读并同意《隐私权政策》和《服务条款》 var btnMsg = new ShowMsgControl(ShowMsgType.Remind, Language.StringByID(R.MyInternationalizationString.uPleaseReadAndAgreePrivacyPolicyMsg)); btnMsg.Show(); return false; } return true; } #endregion } }