using System; using System.Text.RegularExpressions; using System.Threading; using System.Collections.Generic; using HDL_ON.UI.CSS; using Shared; using HDL_ON.Entity; using HDL_ON.DAL.Server; namespace HDL_ON.UI.UI1Login { public partial class LoginPage { /// /// 加载事件 /// void LoadEventList() { LoadPage_SwitchLoginType(); LoadMethod_VisiblePassword(); LoadPage_SwitchLoginMode(); LoadEvent_Login(); LoadPage_SelectionEditText(); LoadPage_RegisterPage(); GetVerificationCode(); LoadMethod_ForgetPassword(); } /// /// 检测当前配置域名是否一致,不一致则替换 /// /// void CheckAndSetUserRequestHost(ResponsePackNew result) { try { var mGlobalRegionListObj = Newtonsoft.Json.JsonConvert.DeserializeObject(result.Data.ToString()); if (OnAppConfig.Instance.RequestHttpsHost != mGlobalRegionListObj.regionUrl) { OnAppConfig.Instance.RequestHttpsHost = mGlobalRegionListObj.regionUrl; OnAppConfig.Instance.GlobalRegion = mGlobalRegionListObj; OnAppConfig.Instance.SaveConfig(); } } catch { } } /// /// 点击按钮获取验证码 /// void GetVerificationCode() { btnGetVerificationCode.MouseUpEventHandler = (sender, e) => { if (btnGetVerificationCode.IsSelected) { string phoneNumber = etAccount.Text.Trim(); if (string.IsNullOrEmpty(phoneNumber)) { var tip = new Tip() { Text = Language.StringByID(StringId.PlsEntryPhoneNumber), CloseTime = 1, Direction = AMPopTipDirection.None }; tip.Show(bodyView); btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2; btnAccountViewBottomLine.Height = Application.GetRealHeight(2); return; } if (!Utlis.CheckPhoneNumber(phoneNumber, phoneZoneCode)) { var tip = new Tip() { Text = Language.StringByID(StringId.PlsEntryCorrectMobilNeumber), CloseTime = 1, Direction = AMPopTipDirection.None }; tip.Show(bodyView); btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2; btnAccountViewBottomLine.Height = Application.GetRealHeight(2); return; } //加载Loading效果 var waitPage = new Loading(); bodyView.AddChidren(waitPage); waitPage.Start(Language.StringByID(StringId.PleaseWait)); int time = 60; new Thread(() => { try { //1.先检查账号是否注册过 var result = pm.GetRegionByAccount(account); if (result.Code != StateCode.SUCCESS) { IMessageCommon.Current.ShowErrorInfoAlter(result.Code); ShowBtnAccountViewBottomLineError(); return; } else { //检测当前配置域名是否一致,不一致则替换 CheckAndSetUserRequestHost(result); //2.1请求获取验证码 var resultObj = pm.VerificationCodeSend(VerifyType.VERIFY_LOGIN, account, true, phoneZoneCode); if (resultObj.Code != StateCode.SUCCESS) { //2.2请求获取验证码失败 Application.RunOnMainThread(() => { btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2; btnPasswordViewBottomLine.Height = Application.GetRealHeight(2); }); // 提示错误 IMessageCommon.Current.ShowErrorInfoAlter(resultObj.Code); } else { Application.RunOnMainThread(() => { btnGetVerificationCode.IsSelected = false; btnGetVerificationCode.TextColor = CSS_Color.PromptingColor1; }); new Thread(() => { while (time > 0) { time--; Application.RunOnMainThread(() => { btnGetVerificationCode.Text = time.ToString() + "s"; }); Thread.Sleep(1000); } Application.RunOnMainThread(() => { btnGetVerificationCode.IsSelected = true; btnGetVerificationCode.TextID = StringId.GetVerificationCode; }); }) { IsBackground = true }.Start(); } } } catch { } finally { Application.RunOnMainThread(() => { if (waitPage != null) { waitPage.RemoveFromParent(); waitPage = null; } }); } }) { IsBackground = true }.Start(); } }; } /// /// /// /// 是否选择手机登录 void LoginTypeChange(bool isPhone) { if (isPhone) { if (loginType == 0) return; etAccount.Text = registerPhone; etPassword.Text = ""; #region 切换选中按钮 btnEmailLogin.TextColor = CSS_Color.PromptingColor1; btnEmailLogin.TextSize = CSS_FontSize.TextFontSize; btnPhoneLogin.TextColor = CSS_Color.MainColor; btnPhoneLogin.TextSize = CSS_FontSize.EmphasisFontSize_Secondary; etAccount.PlaceholderText = Language.StringByID(StringId.PlsEntryPhoneNumber); #endregion #region 切换登录方式及图标 loginType = 0; if (btnAccountIcon.Parent != null) { btnAccountIcon.RemoveFromParent(); } accountView.AddChidren(btnGlobalRoaming); //显示验证码登录方式,手机登录有验证码登录 btnSwitchLoginMode.Visible = true; #endregion #region if (logintMode == 1) { if (Regex.IsMatch(account, @"^[1]+\d{10}") && (account.Length == 11) && btnGetVerificationCode.Text == Language.StringByID(StringId.GetVerificationCode)) { btnGetVerificationCode.IsSelected = true; } btnSwitchLoginMode.TextID = StringId.PasswordLogin; //passwordView.AddChidren(btnGetVerificationCode); btnGetVerificationCode.Visible = true; etPassword.PlaceholderText = Language.StringByID(StringId.PlsEntryVerificationCode); btnPasswordIcon.IsSelected = true; if (btnVisiblePassword.Parent != null) { btnVisiblePassword.RemoveFromParent(); } if (btnDividingLineVertical_PasswordView2.Parent != null) { btnDividingLineVertical_PasswordView2.RemoveFromParent(); } if (btnForgetPassword.Parent != null) { btnForgetPassword.RemoveFromParent(); } //验证码不需要隐藏 etPassword.SecureTextEntry = false; } #endregion } else { if (loginType == 1) return; etAccount.Text = registerEmail; etPassword.Text = ""; #region 切换选中按钮 btnPhoneLogin.TextColor = CSS_Color.PromptingColor1; btnPhoneLogin.TextSize = CSS_FontSize.TextFontSize; btnEmailLogin.TextColor = CSS_Color.MainColor; btnEmailLogin.TextSize = CSS_FontSize.EmphasisFontSize_Secondary; etAccount.PlaceholderText = Language.StringByID(StringId.PlsEntryEmailAddress); #endregion #region 切换登录类型及图标 loginType = 1; if (btnGlobalRoaming.Parent != null) { btnGlobalRoaming.RemoveFromParent(); } accountView.AddChidren(btnAccountIcon); #endregion //邮箱只有密码登录模式 //logintMode = 0; //密码登录 btnSwitchLoginMode.TextID = StringId.VerificationCodeLogin; passwordView.AddChidren(btnVisiblePassword); passwordView.AddChidren(btnDividingLineVertical_PasswordView2); passwordView.AddChidren(btnForgetPassword); btnPasswordIcon.IsSelected = false; //if (btnGetVerificationCode.Parent != null) //{ //btnGetVerificationCode.RemoveFromParent(); btnGetVerificationCode.Visible = false; //} //隐藏密码 etPassword.SecureTextEntry = true; //隐藏验证码登录方式,邮箱登录没有验证码登录 btnSwitchLoginMode.Visible = false; } } /// /// 切换登录类型 /// void LoadPage_SwitchLoginType() { //选择手机登录 btnPhoneLogin.MouseUpEventHandler = (sender, e) => { LoginTypeChange(true); }; //选择邮箱登录 btnEmailLogin.MouseUpEventHandler += (sender, e) => { LoginTypeChange(false); }; } /// /// 切换登录方式 验证码/密码 /// void LoginModeChange() { //清除密码框文本数据 etPassword.Text = ""; //密码登录 if (logintMode == 0) { btnSwitchLoginMode.TextID = StringId.VerificationCodeLogin; passwordView.AddChidren(btnVisiblePassword); passwordView.AddChidren(btnDividingLineVertical_PasswordView2); etPassword.PlaceholderText = Language.StringByID(StringId.PlsEntryPassword); passwordView.AddChidren(btnForgetPassword); btnPasswordIcon.IsSelected = false; //if (btnGetVerificationCode.Parent != null) //{ //btnGetVerificationCode.RemoveFromParent(); btnGetVerificationCode.Visible = false; //} //隐藏密码 etPassword.SecureTextEntry = true; } //验证码登录 else if (logintMode == 1) { if (Regex.IsMatch(account, @"^[1]+\d{10}") && (account.Length == 11) && btnGetVerificationCode.Text == Language.StringByID(StringId.GetVerificationCode)) { btnGetVerificationCode.IsSelected = true; } btnSwitchLoginMode.TextID = StringId.PasswordLogin; //passwordView.AddChidren(btnGetVerificationCode); btnGetVerificationCode.Visible = true; etPassword.PlaceholderText = Language.StringByID(StringId.PlsEntryVerificationCode); btnPasswordIcon.IsSelected = true; if (btnVisiblePassword.Parent != null) { btnVisiblePassword.RemoveFromParent(); } if (btnDividingLineVertical_PasswordView2.Parent != null) { btnDividingLineVertical_PasswordView2.RemoveFromParent(); } if (btnForgetPassword.Parent != null) { btnForgetPassword.RemoveFromParent(); } //验证码不需要隐藏 etPassword.SecureTextEntry = false; } } /// /// 切换登录方式 /// 验证码/密码 /// void LoadPage_SwitchLoginMode() { btnSwitchLoginMode.MouseUpEventHandler = (sender, e) => { logintMode = logintMode == 0 ? 1 : 0; LoginModeChange(); }; } /// /// 文本框焦点变化事件 /// void LoadPage_SelectionEditText() { //当焦点在账号文本框时,文本框底线点亮 etAccount.FoucsChanged = (sender, e) => { if (etAccount.Foucs) { btnAccountViewBottomLine.BackgroundColor = CSS_Color.MainColor; btnAccountViewBottomLine.Height = Application.GetRealHeight(2); } else { btnAccountViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor; btnAccountViewBottomLine.Height = Application.GetRealHeight(1); account = etAccount.Text.Trim(); if (loginType == 0) { registerPhone = account; } else { registerEmail = account; } if (account.Length == 0) return; if (loginType == 0) { if (!Utlis.CheckPhoneNumber(registerPhone, phoneZoneCode)) { var tip = new Tip() { Text = Language.StringByID(StringId.PlsEntryCorrectMobilNeumber), CloseTime = 1, 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 (!Utlis.CheckEmail(registerEmail)) { var tip = new Tip() { Text = Language.StringByID(StringId.PlsEntryCorrectEmailAddress), CloseTime = 1, Direction = AMPopTipDirection.None }; tip.Show(bodyView); btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2; btnAccountViewBottomLine.Height = Application.GetRealHeight(2); } } } }; //当焦点在密码文本框时,文本框底线点亮 etPassword.FoucsChanged = (sender, e) => { if (etPassword.Foucs) { btnPasswordViewBottomLine.BackgroundColor = CSS_Color.MainColor; btnPasswordViewBottomLine.Height = Application.GetRealHeight(2); } else { btnPasswordViewBottomLine.BackgroundColor = CSS_Color.DividingLineColor; btnPasswordViewBottomLine.Height = Application.GetRealHeight(1); } }; //当焦点在账号文本框时,点击键盘回撤按键,触发的事件 etAccount.EditorEnterAction += (obj) => { etPassword.Foucs = true; }; //当焦点在密码文本框时,点击键盘回撤按键,触发的事件 etPassword.EditorEnterAction += (obj) => { Application.HideSoftInput(); }; etPassword.MouseUpEventHandler = (sender, e) => { etPassword.Foucs = true; }; } /// /// 隐藏/显示密码 /// void LoadMethod_VisiblePassword() { btnVisiblePassword.MouseUpEventHandler += (sender, e) => { btnVisiblePassword.IsSelected = !btnVisiblePassword.IsSelected; if (btnVisiblePassword.IsSelected) { etPassword.SecureTextEntry = false; } else { etPassword.SecureTextEntry = true; } }; } /// /// 登录按钮点击事件 /// void LoadEvent_Login() { btnLogin.MouseUpEventHandler += (sender, e) => { if (btnLogin.IsSelected) { //判断是否同意了隐私政策 if (CheckPrivacyPolicy() == false) return; account = etAccount.Text.Trim(); password = etPassword.Text.Trim(); if (loginType == 0) { if (!Utlis.CheckPhoneNumber(account, phoneZoneCode)) { var tip = new Tip() { Text = Language.StringByID(StringId.PlsEntryCorrectMobilNeumber), CloseTime = 1, Direction = AMPopTipDirection.None }; tip.Show(bodyView); return; } } else { if (!Utlis.CheckEmail(account)) { var tip = new Tip() { Text = Language.StringByID(StringId.PlsEntryCorrectEmailAddress), CloseTime = 1, Direction = AMPopTipDirection.None }; tip.Show(bodyView); return; } } //创建登录线程 var loginThread = LoadThread_Login(); waitPage = new Loading(); new PublicAssmebly().LoadPage_WaitPage(loginThread, bodyView, waitPage); } }; #region 当账号密码都输入时,才能点击登录按钮 etAccount.TextChangeEventHandler = (sender, e) => { account = etAccount.Text.Trim(); if (account.Length > 0 && etPassword.Text.Trim().Length > 0) { btnLogin.IsSelected = true; } else { btnLogin.IsSelected = false; } if (Regex.IsMatch(account, @"^[1]+\d{10}"))//&& account.Length == 11) { btnGetVerificationCode.IsSelected = true; btnGetVerificationCode.TextColor = CSS_Color.MainBackgroundColor; } else { btnGetVerificationCode.IsSelected = false; btnGetVerificationCode.TextColor = CSS_Color.PromptingColor1; } }; etPassword.TextChangeEventHandler += (sender, e) => { if (etAccount.Text.Trim().Length > 0 && etPassword.Text.Trim().Length > 0) { btnLogin.IsSelected = true; } else { btnLogin.IsSelected = false; } }; #endregion } /// /// 加载登录线程 /// Thread LoadThread_Login() { var loginThread = new Thread(() => { try { //如果是账号密码登录,先检查一次账号是否注册过 if (logintMode == 0) { //1.先检查账号是否注册过 var result = pm.GetRegionByAccount(account); if (result.Code != StateCode.SUCCESS) { IMessageCommon.Current.ShowErrorInfoAlter(result.Code); ShowBtnAccountViewBottomLineError(); return; } else { //设置用户所注册地区的域名,用户相关操作都用这个域名 CheckAndSetUserRequestHost(result); } } //登录 var loginResult = LoadMethod_Login(); if (!string.IsNullOrEmpty(verAccount))//验证登录账号 { Application.RunOnMainThread(() => { if (verAccount == etPassword.Text.Trim()) { //跳转页面---- MainPage.GoUserPage(true); return; } }); } if (loginResult) { //获取住宅信息 var getResidencesResult = LoadMethod_GetResidences(); if (getResidencesResult) { /* * Wait : 推送注册 */ /* * 查看本地是否存在数据 * 存在则导出 */ //var isExis = FileUtils.IsExisFolder(DB_ResidenceData.residenceData.CurReginID); //if (isExis) //{ // FileUtils.DeleteAllFile(); // string regionRootPath = FileUtils.CreateRegionBackup(DB_ResidenceData.residenceData.CurReginID); // FileUtils.RestoreRegionFiles(regionRootPath); // DB_ResidenceData.residenceData.EixtAccount(); // OnAppConfig.Instance.RefreshUserConfig(); // SpatialInfo.CurrentSpatial.InitRoomFunction(); //} Application.RunOnMainThread(() => { //20201223-登录成功之后,将下载数据完成标记标记为false,防止主页提前加载 Common.ApiUtlis.Ins.DownloadDataComplete = false; //跳转页面---- MainPage.GoUserPage(true); }); } else { //Application.RunOnMainThread(() => //{ // BindingResidencePage page = new BindingResidencePage(); // MainPage.BaseView.AddChidren(page); // page.LoadView(); //}); //2020-11-13 待确认 //获取住宅失败,重新标记为未登录状态 UserInfo.Current.LastTime = DateTime.MinValue; UserInfo.Current.SaveUserInfo(); //登录失败,请先添加住宅! //Utlis.ShowAlertOnMainThread(Language.StringByID(StringId.FailedGetHomeList)); } } } catch (Exception ex) { MainPage.Log($"LoginPage : {ex.Message}"); } finally { Application.RunOnMainThread(() => { if (waitPage != null) { waitPage.RemoveFromParent(); waitPage = null; } }); } }) { IsBackground = true }; return loginThread; } /// /// 调用登录接口登录 /// bool LoadMethod_Login() { var result = false; ResponsePackNew loginResult; if (logintMode == 0 || loginType == 1) { //调用登录接口 loginResult = pm.LoginByPassword(account, password); } else { //调用验证码登录接口 loginResult = pm.LoginValidCode(account, password); } if (loginResult.Code == StateCode.SUCCESS) { var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject(loginResult.Data.ToString()); // UserInfo.Current = new UserInfo //{ // userType = revertData.userType, // accountString = account, // password = password, // lastTime = DateTime.Now, // ID = revertData.userId, // loginTokenString = revertData.headerPrefix + revertData.accessToken, // refreshToken = revertData.refreshToken, // userName = revertData.name //}; if (OnAppConfig.Instance.LastLoginUserId != revertData.userId) { OnAppConfig.Instance.LastLoginUserId = revertData.userId; OnAppConfig.Instance.SaveConfig(); } UserInfo.Current.ClearUserInfo(); UserInfo.Current.userType = revertData.userType; UserInfo.Current.AccountString = account; //UserInfo.Current.password = password; UserInfo.Current.LastTime = DateTime.Now; UserInfo.Current.ID = revertData.userId; UserInfo.Current.LoginTokenString = revertData.headerPrefix + revertData.accessToken; UserInfo.Current.RefreshToken = revertData.refreshToken; UserInfo.Current.userName = revertData.name; //UserInfo.Current.userMobileInfo = "";//重置用户手机 //UserInfo.Current.userEmailInfo = "";//重置用户邮箱 //UserInfo.Current.headImagePagePath = "LoginIcon/2.png";// //UserInfo.Current.CurrentRegion.RegionID = ""; UserInfo.Current.SaveUserInfo(); MainPage.Log("登录成功。"); result = true; //获取用户信息 new Thread(() => { pm.GetUserInfo(); }) { IsBackground = true }.Start(); } //登录失败 else { //账号或者密码错误 Application.RunOnMainThread(() => { waitPage.Hide(); if (loginResult.Code == "10008") { //用户名或密码错误 btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2; btnPasswordViewBottomLine.Height = Application.GetRealHeight(2); } else if (loginResult.Code == "10010") { //用户不存在 btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2; btnAccountViewBottomLine.Height = Application.GetRealHeight(2); } else if (loginResult.Code == StateCode.VERIFICATION_CODE_WRONG) { btnPasswordViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2; btnPasswordViewBottomLine.Height = Application.GetRealHeight(2); } else if (loginResult.Code == StateCode.AccountLoginLock) { ShowAccountLoginLockTip(loginResult); //var tipStr = Language.StringByID(StringId.AccountLoginLock) + "\r\n" + Language.StringByID(StringId.PleaseTryToForgetPassword); //Utlis.ShowTip(tipStr); return; } IMessageCommon.Current.ShowErrorInfoAlter(loginResult.Code); }); } return result; } /// /// 解析提示用户解锁时间 /// 密码错误次数过多,账号被锁定!请通过忘记密码找回密码或{0}分钟后重试. /// /// void ShowAccountLoginLockTip(ResponsePackNew loginResult) { //密码错误次数过多,账号被锁定! var tipStr = Language.StringByID(StringId.AccountLoginLock); try { if (loginResult.extra != null) { //请通过忘记密码找回密码或{0}分钟后重试. var revertData = Newtonsoft.Json.JsonConvert.DeserializeObject(loginResult.extra.ToString()); string msg = Language.StringByID(StringId.PleaseTryToForgetPassword); //var unlockTime = Utlis.UnixToDateTimeWithFormatMS(revertData.unlockTime, "HH:mm"); //msg = msg.Replace("{0}", unlockTime); var unlockDatetime = Utlis.UnixToDateTimeMS(revertData.unlockTime); var unlockTimeInt = unlockDatetime.Minute - DateTime.Now.Minute; if (unlockTimeInt <= 0) { unlockTimeInt = 1; } msg = msg.Replace("{0}", unlockTimeInt.ToString()); tipStr = tipStr + "\r\n" + msg; } } catch { } Utlis.ShowTip(tipStr); } /// /// 获取住宅列表 /// bool LoadMethod_GetResidences() { var result = false; var code = pm.GetHomePager(); if (code == StateCode.SUCCESS) { ////2020-11-13 待确认,没有住宅,不算登录成功 //if (UserInfo.Current.regionList != null && UserInfo.Current.regionList.Count > 0) //{ // result = true; //} //2020-12-10 没有住宅登录成功,但是不能进入主界面 result = true; } else if( code == "null") { Application.RunOnMainThread(() => { MainPage.GoUserPage(false); }); } else { // 提示错误 IMessageCommon.Current.ShowErrorInfoAlter(code); } return result; } /// /// 加载注册界面 /// void LoadPage_RegisterPage() { btnRegister.MouseUpEventHandler += (sender, e) => { //2020-12-22 增加点击隐藏键盘事件 Application.HideSoftInput(); //判断是否同意了隐私政策 if (CheckPrivacyPolicy() == false) return; Action autoLoginAction = (account, password, isPhone) => { try { AutoLoginAction(account, password, isPhone); } catch (Exception ex) { MainPage.Log($"login callBackAction : {ex.Message}"); } }; var registerPage = new RegisterPage(autoLoginAction); registerPage.Show(); registerPage.ShowDialog(); }; } /// /// 忘记密码 /// void LoadMethod_ForgetPassword() { btnForgetPassword.MouseUpEventHandler += (sender, e) => { //2020-12-22 增加点击隐藏键盘事件 Application.HideSoftInput(); //判断是否同意了隐私政策 if (CheckPrivacyPolicy() == false) return; Action autoLoginAction = (account, password, isPhone) => { try { AutoLoginAction(account, password, isPhone); } catch (Exception ex) { MainPage.Log($"login callBackAction : {ex.Message}"); } }; var forgetPasswordDialog = new ForgetPasswordPage(autoLoginAction); forgetPasswordDialog.Show(); forgetPasswordDialog.ShowDialog(); }; } /// /// 用户不存在 /// void ShowBtnAccountViewBottomLineError() { Application.RunOnMainThread(() => { //用户不存在 btnAccountViewBottomLine.BackgroundColor = CSS_Color.AuxiliaryColor2; btnAccountViewBottomLine.Height = Application.GetRealHeight(2); }); } /// /// 自动登录回调事件 /// /// /// /// void AutoLoginAction(string mAccount, string mPassword, bool isPhone) { //切换回手机或者邮箱登录 LoginTypeChange(isPhone); //切换回密码登录1 logintMode = 0; //切换回密码登录2 LoginModeChange(); //设置账户名和密码 etAccount.Text = account; etPassword.Text = password; this.account = mAccount; this.password = mPassword; //创建登录线程 var loginThread = LoadThread_Login(); waitPage = new Loading(); new PublicAssmebly().LoadPage_WaitPage(loginThread, bodyView, waitPage); } } }