// // LoginViewController.m // LekangGuard // // Created by ecell on 2022/10/8. // #import "LoginViewController.h" #import "AppDelegate.h" #import "EmailLoginViewController.h" #import "commWebViewController.h" #import "RegisterViewController.h" #import #import "SYTouchLabel.h" @interface LoginViewController () @property (nonatomic ,strong) UIScrollView *scrollView; @property (nonatomic ,strong) UIPageControl *pageControl; /// 用户协议按钮 @property (nonatomic ,weak) UIButton *agreementBtn; /// 密码View @property (nonatomic ,weak) UIView *passView; /// 手机号TextField @property (nonatomic ,weak) UITextField *phoneField; /// 密码TextField @property (nonatomic ,weak) UITextField *passField; /// 记住密码按钮 @property (nonatomic ,weak) UIButton *rememberPassBtn; /// 是否记得密码 @property (nonatomic ,assign) BOOL isRememberPWD; /// 登录 @property (nonatomic ,weak) UIButton *loginBtn; @end @implementation LoginViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. self.view.backgroundColor = KKWhiteColorColor; self.zx_navBarBackgroundColor = KKClearColor; UIImageView *logoBgImg = [UICommon ui_imageView:CGRectZero fileName:@"login_bg"]; [self.view addSubview:logoBgImg]; [logoBgImg mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.view); make.left.right.equalTo(self.view); make.height.mas_equalTo(logoBgImg.image.size.height); }]; UIImageView *logoImg = [UICommon ui_imageView:CGRectZero fileName:@"login_logo"]; [self.view addSubview:logoImg]; [logoImg mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.view); make.top.equalTo(self.view).offset(Adapted(97)); make.size.mas_equalTo(logoImg.image.size); }]; CGFloat yy = iPhoneX_TabbarSafeBottomMargin > 0 ? AdaptedHeight(130) : AdaptedHeight(120); for (int i = 0; i < 2; i++) { UIView *bgView = [UICommon ui_view:CGRectZero backgroundColor:KKClearColor cornerRadius:0 borderWidth:0 borderColor:KKClearColor]; if (i == 1) self.passView = bgView; [self.view addSubview:bgView]; [bgView mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.view).inset(35); make.top.equalTo(logoImg.mas_bottom).offset(yy+i*Adapted(62)); make.height.mas_equalTo(Adapted(62)); }]; UIImageView *leftImg = [UICommon ui_imageView:CGRectZero fileName:i == 0 ? @"login_phone_icon" : @"login_password_icon"]; [bgView addSubview:leftImg]; [leftImg mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(bgView).offset(0); make.centerY.equalTo(bgView); make.size.mas_equalTo(CGSizeMake(Adapted(leftImg.image.size.width), Adapted(leftImg.image.size.height))); }]; /// 密码可视或不可视按钮 UIButton *rightBtn; if (i == 1) { rightBtn = [UICommon ui_buttonSimple:CGRectZero font:Font_(0) normalColor:KKClearColor normalText:@"" click:^(UIButton *sender) { [sender setSelected:!sender.isSelected]; self.passField.secureTextEntry = !sender.isSelected; }]; [rightBtn setImage:[UIImage imageNamed:@"login_password_icon_hidden"] forState:UIControlStateNormal]; [rightBtn setImage:[UIImage imageNamed:@"login_password_icon_show"] forState:UIControlStateSelected]; [bgView addSubview:rightBtn]; [rightBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(bgView); make.right.equalTo(bgView.mas_right); make.size.mas_equalTo(CGSizeMake(Adapted(22), Adapted(22))); }]; } UITextField *textfield = [UICommon ui_textField:CGRectZero textColor:KKTextBlackColor backColor:KKClearColor font:FontADA_(15) maxTextNum:i == 0 ? 11 : 16 placeholderColor:KKGrey143 placeholder:i == 0 ? GJText(@"请输入手机号") : GJText(@"请输入密码") toMaxNum:^(UITextField *textField) { } change:^(UITextField *textField) { }]; if (i == 0) { textfield.keyboardType = UIKeyboardTypePhonePad; self.phoneField = textfield; } else { textfield.secureTextEntry = YES; self.passField = textfield; } [bgView addSubview:textfield]; [textfield mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(leftImg.mas_right).offset(15); if (i == 0) make.right.equalTo(bgView).inset(15); else make.right.equalTo(rightBtn.mas_left).inset(15); make.centerY.equalTo(bgView); make.height.mas_equalTo(Adapted(44)); }]; UIImageView *line = [UIImageView new]; line.backgroundColor = KKLineColor; [bgView addSubview:line]; [line mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(bgView); make.bottom.equalTo(bgView.mas_bottom); make.height.mas_equalTo(0.5); }]; } /// 登录 UIButton *loginBtn = [UICommon ui_buttonSimple:CGRectZero font:FontADA_(16) normalColor:KKWhiteColorColor normalText:GJText(@"登录") click:^(UIButton *btn) { // btn.selected = !btn.selected; [self UserLogin]; }]; [loginBtn setBackgroundImage:ImageName_(@"login_button_bg_no") forState:UIControlStateNormal]; [loginBtn setBackgroundImage:ImageName_(@"login_button_bg_select") forState:UIControlStateSelected]; [loginBtn setTitle:@"登录中" forState:UIControlStateSelected]; self.loginBtn = loginBtn; [self.view addSubview:loginBtn]; [loginBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.top.equalTo(self.passView.mas_bottom).offset(AdaptedHeight(28)); make.centerX.equalTo(self.view); make.size.mas_equalTo(CGSizeMake(Adapted(230), Adapted(45))); }]; UIImageView *line = [UIImageView new]; line.backgroundColor = KKMainColor; [self.view addSubview:line]; [line mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.view); make.top.equalTo(loginBtn.mas_bottom).offset(AdaptedHeight(18)); make.size.mas_equalTo(CGSizeMake(1, 16)); }]; /// 立即注册 UIButton *registerBtn = [UICommon ui_buttonSimple:CGRectZero font:FontADA_(16) normalColor:KKMainColor normalText:GJText(@"注册账号") click:^(UIButton *sender) { RegisterViewController *vc = [RegisterViewController new]; vc.navTitle = @"注册"; vc.isViewType = 0; vc.isRegisterSuccess = ^{ //[self aucnTexg]; }; [self.navigationController pushViewController:vc animated:YES]; }]; [self.view addSubview:registerBtn]; CGRect rect1 = [UICommon GetTextWidth:registerBtn.currentTitle ViewHeight:30 fontSize:FontADA_(16) type:@"w"]; [registerBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(line.mas_right).offset(3); make.centerY.equalTo(line); make.size.mas_equalTo(CGSizeMake(Adapted(rect1.size.width+5), 16.5)); }]; /// 忘记密码 UIButton *forgetBtn = [UICommon ui_buttonSimple:CGRectZero font:FontADA_(16) normalColor:KKMainColor normalText:GJText(@"忘记密码") click:^(UIButton *sender) { RegisterViewController *vc = [RegisterViewController new]; vc.navTitle = @"忘记密码"; vc.isViewType = 1; [self.navigationController pushViewController:vc animated:YES]; }]; [self.view addSubview:forgetBtn]; CGRect rect = [UICommon GetTextWidth:forgetBtn.currentTitle ViewHeight:30 fontSize:FontADA_(16) type:@"w"]; [forgetBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.right.equalTo(line.mas_left).inset(3); make.centerY.equalTo(line); make.size.mas_equalTo(CGSizeMake(Adapted(rect.size.width+5), 16.5)); }]; UIImageView *line1 = [UIImageView new]; line1.backgroundColor = KKLineColor; [self.view addSubview:line1]; [line1 mas_makeConstraints:^(MASConstraintMaker *make) { make.left.right.equalTo(self.view).inset(35); make.top.equalTo(line.mas_bottom).offset(iPhoneX_TabbarSafeBottomMargin > 0 ? AdaptedHeight(45) : AdaptedHeight(35)); make.height.mas_equalTo(1); }]; UILabel *otherLabel = [UICommon ui_label:CGRectZero lines:0 align:NSTextAlignmentCenter font:FontADA_(10) textColor:KKGrey133 text:@"其他方式登录" Radius:0]; otherLabel.backgroundColor = KKWhiteColorColor; [self.view addSubview:otherLabel]; [otherLabel mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.view); make.centerY.equalTo(line1); make.size.mas_equalTo(CGSizeMake(104.5, 14)); }]; // NSArray *btnTitleArr = [WXApi isWXAppInstalled] ? @[@"微信",@"验证码"] : @[@"验证码"]; // NSArray *btnImageArr = [WXApi isWXAppInstalled] ? @[@"login_wechatBtn",@"login_codeBtn"] : @[@"login_codeBtn"]; NSArray *btnTitleArr = @[@"验证码"]; NSArray *btnImageArr = @[@"login_codeBtn"]; for (int i = 0; i < btnTitleArr.count; i++) { UIButton *btn = [UICommon ui_buttonSimple:CGRectZero font:FontADA_(10) normalColor:KKGrey133 normalText:btnTitleArr[i] click:^(UIButton *b) { if ([b.currentTitle isEqualToString:@"微信"]) { [self WXAccredit]; } else { RegisterViewController *vc = [RegisterViewController new]; vc.navTitle = @"验证码登录"; vc.isViewType = 3; [self.navigationController pushViewController:vc animated:YES]; } }]; btn.size = CGSizeMake(50, 75); [btn setImage:ImageName_(btnImageArr[i]) forState:UIControlStateNormal]; [UICommon setTitleAndImage:btn :1.2]; [self.view addSubview:btn]; [btn mas_makeConstraints:^(MASConstraintMaker *make) { if (btnTitleArr.count == 1) make.centerX.equalTo(self.view); else { if (i == 0) make.right.equalTo(self.view.mas_centerX).inset(Adapted(21)); else make.left.equalTo(self.view.mas_centerX).offset(Adapted(21)); } make.top.equalTo(otherLabel.mas_bottom).offset(AdaptedHeight(12)); make.size.mas_equalTo(CGSizeMake(50, 75)); }]; } SYTouchLabel *label = [[SYTouchLabel alloc] init]; label.lineBreakMode = NSLineBreakByCharWrapping; label.sy_highColor = KKMainColor; label.sy_normalColor = KKTextBlackColor; label.font = Font_(12); label.numberOfLines = 0; label.text = GJText(@"登录即代表同意《用户服务协议》和《隐私政策》并使用本机号码登录"); label.sy_clickString = GJText(@"《隐私政策》"); label.sy_clickRange = NSMakeRange(7, 8); [self.view addSubview:label]; [label mas_makeConstraints:^(MASConstraintMaker *make) { make.left.equalTo(self.view).offset(40+Adapted(15)+5); make.right.equalTo(self.view.mas_right).inset(40); make.bottom.equalTo(self.view.mas_bottom).inset(iPhoneX_TabbarSafeBottomMargin > 0 ? iPhoneX_TabbarSafeBottomMargin : 15); }]; label.clickBlock = ^(NSString *clickString) { NSLog(@"点击的文本为 %@",clickString); commWebViewController *vc = [[commWebViewController alloc] init]; vc.navTitle = [clickString isEqualToString:GJText(@"《用户服务协议》")] ? GJText(@"用户协议") : GJText(@"隐私政策"); vc.url = [clickString isEqualToString:GJText(@"《用户服务协议》")] ? AccoutXieYiURLStr : PrivacyPolicyURLStr; [self.navigationController pushViewController:vc animated:YES]; }; UIButton *agreementBtn = [UICommon ui_buttonSimple:CGRectZero font:FontADA_(0) normalColor:KKWhiteColorColor normalText:@"" click:^(UIButton *btn) { btn.selected = !btn.selected; }]; [agreementBtn setImage:ImageName_(@"login_no_the_selected_icon") forState:UIControlStateNormal]; [agreementBtn setImage:ImageName_(@"login_the_selected_icon") forState:UIControlStateSelected]; // agreementBtn.selected = YES; self.agreementBtn = agreementBtn; [self.view addSubview:agreementBtn]; [agreementBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.centerY.equalTo(label.mas_centerY); make.left.equalTo(self.view).offset(40); make.size.mas_equalTo(CGSizeMake(Adapted(15), Adapted(15))); }]; [self aucnTexg]; NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; if (![userDefaults objectForKey:@"启动次数"]) { // [userDefaults setObject:@"不止一次" forKey:@"启动次数"]; // [userDefaults synchronize]; self.scrollView = [[UIScrollView alloc] initWithFrame:self.view.frame]; self.scrollView.pagingEnabled = YES; self.scrollView.contentSize = CGSizeMake(CGRectGetWidth(self.scrollView.frame) * 4, CGRectGetHeight(self.scrollView.frame)); self.scrollView.delegate = self; self.scrollView.showsVerticalScrollIndicator = NO; self.scrollView.showsHorizontalScrollIndicator = NO; self.scrollView.backgroundColor = [UIColor whiteColor]; [self.view addSubview:self.scrollView]; self.pageControl = [[UIPageControl alloc] init]; self.pageControl.numberOfPages = 4; self.pageControl.pageIndicatorTintColor = [KKMainColor colorWithAlphaComponent:0.3]; self.pageControl.currentPageIndicatorTintColor = KKMainColor; [self.view addSubview:self.pageControl]; [self.pageControl mas_makeConstraints:^(MASConstraintMaker *make) { make.centerX.equalTo(self.scrollView.mas_centerX); make.bottom.equalTo(self.scrollView.mas_bottom).offset(-10); }]; NSString *language = [[NSLocale preferredLanguages] objectAtIndex:0]; NSArray *array = [language componentsSeparatedByString:@"-"]; NSString *currentLanguage = array[0]; for (int i = 0; i < 4; i++) { UIImage *image = [currentLanguage isEqualToString:@"zh"] ? ImageName_(F(@"q-zh-%d", i+1)) : ImageName_(F(@"q-en-%d", i+1)); UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(CGRectGetWidth(self.scrollView.frame) * i, 0, CGRectGetWidth(self.scrollView.frame), CGRectGetHeight(self.scrollView.frame))]; imageView.image = image; [self.scrollView addSubview:imageView]; if (i == 3) { UIButton *btn = [UIButton buttonWithType:UIButtonTypeCustom]; // [btn setImage:[myHelper getImageWithName:@"立即体验按钮"] forState:UIControlStateNormal]; [btn setTitleColor:KKMainColor forState:UIControlStateNormal]; btn.frame = CGRectMake(SCREEN_WIDTH*3 + SCREEN_WIDTH/4, SCREEN_HEIGHT-45-30, SCREEN_WIDTH/2, 45); [btn setTitle:GJText(@"开始体验") forState:0]; btn.layer.masksToBounds = YES; btn.layer.cornerRadius = btn.height/2.0; [btn setBackgroundColor:KKMainColor]; [btn setTitleColor:[UIColor whiteColor] forState:0]; [btn addTarget:self action:@selector(removeScrollView)forControlEvents:UIControlEventTouchUpInside]; [self.scrollView addSubview:btn]; } } } } /// 微信登录跳转微信授权 - (void)WXAccredit { [[APHandleManager sharedManager] authorizationWachat:^(NSDictionary *authInfo) { NSLog(@"%@",authInfo); [self WXLogin:authInfo]; } failure:^(HandleStatus code) { }]; } #pragma mark 微信授权后调用本地微信登录解救 /// 微信授权后调用本地微信登录解救 - (void)WXLogin:(NSDictionary *)authInfo { [UICommon MessageUpload:@"加载中"]; NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; [parameters setValue:authInfo[@"city"] forKey:@"city"]; [parameters setValue:authInfo[@"country"] forKey:@"country"]; [parameters setValue:authInfo[@"headimgurl"] forKey:@"headimgurl"]; [parameters setValue:authInfo[@"nickname"] forKey:@"nickname"]; [parameters setValue:authInfo[@"openid"] forKey:@"openid"]; [parameters setValue:authInfo[@"privilege"] forKey:@"privilege"]; [parameters setValue:authInfo[@"province"] forKey:@"province"]; [parameters setValue:authInfo[@"sex"] forKey:@"sex"]; [parameters setValue:authInfo[@"unionid"] forKey:@"unionid"]; [[[APIManager sharedManager] APPOST:WechatLogin_URL parameters:parameters isJson:YES resultClass:LoginModel.class] subscribeNext:^(id _Nullable x) { [UICommon HidenLoading]; AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate; [app showRootViewController]; } error:^(NSError * _Nullable error) { NSDictionary *dic = error.userInfo; if ([dic[@"detail"] intValue] == 302) { RegisterViewController *vc = [[RegisterViewController alloc] init]; vc.navTitle = @"绑定手机号"; vc.isViewType = 2; vc.authInfo = parameters; [self.navigationController pushViewController:vc animated:YES]; return; } [UICommon MessageErrorText:dic[NSLocalizedDescriptionKey]]; }]; } #pragma mark 登录 /// 登录 - (void)UserLogin { self.loginBtn.selected = NO; if (!self.phoneField.text || self.phoneField.text.length != 11) { [UICommon MessageErrorText:GJText(@"请输入正确的手机号")]; return; } else if (self.passField.text.length < 6) { [UICommon MessageErrorText:GJText(@"密码为6~16位字符内")]; return; } if (!self.agreementBtn.selected) { [UICommon MessageErrorText:GJText(@"请同意用户服务协议和隐私政策")]; return; } self.loginBtn.selected = YES; self.loginBtn.enabled = NO; [UICommon MessageUpload:@"登录中"]; NSMutableDictionary *parameters = [NSMutableDictionary dictionary]; [parameters setValue:self.phoneField.text forKey:@"phone"]; [parameters setValue:self.passField.text forKey:@"password"]; [[[APIManager sharedManager] APPOST:UserLogin_URL parameters:parameters isJson:YES resultClass:LoginModel.class] subscribeNext:^(id _Nullable x) { NSMutableDictionary *userDic = [NSMutableDictionary dictionary]; [userDic setValue:self.phoneField.text forKey:@"phone"]; [userDic setValue:self.isRememberPWD ? self.passField.text : @"" forKey:@"password"]; [userDic setValue:self.isRememberPWD ? @"1" : @"0" forKey:@"isRememberPWD"]; // [userDic setValue:self.countryCodeLabel.text forKey:@"code"]; // [userDic setValue:self.countryTitleLabel.text forKey:@"gj"]; YYCache *userCache = [YYCache cacheWithName:UserCacheName]; [userCache setObject:userDic forKey:UserCacheKey]; AppDelegate *app = (AppDelegate *)[UIApplication sharedApplication].delegate; [app showRootViewController]; self.loginBtn.enabled = YES; self.loginBtn.selected = NO; } error:^(NSError * _Nullable error) { self.loginBtn.enabled = YES; self.loginBtn.selected = NO; NSDictionary *dic = error.userInfo; [UICommon MessageErrorText:dic[NSLocalizedDescriptionKey]]; }]; } #pragma mark UITextViewDelegate - (BOOL)textView:(UITextView *)textView shouldInteractWithURL:(NSURL *)URL inRange:(NSRange)characterRange { if ([URL.absoluteString containsString:AccoutXieYiURLStr]) { commWebViewController *vc = [commWebViewController new]; vc.url = AccoutXieYiURLStr; vc.navTitle = GJText(@"用户协议"); [self.navigationController pushViewController:vc animated:YES]; return NO; } else if ([URL.absoluteString containsString:PrivacyPolicyURLStr]) { commWebViewController *vc = [commWebViewController new]; vc.url = AccoutXieYiURLStr; vc.navTitle = GJText(@"隐私政策"); [self.navigationController pushViewController:vc animated:YES]; return NO; } return YES; } - (void)scrollViewDidScroll:(UIScrollView *)scrollView { int page = scrollView.contentOffset.x / scrollView.frame.size.width; //NSLog(@"%d", page); //NSLog(@"%f", scrollView.contentOffset.x); // 设置页码 self.pageControl.currentPage = page; if (/*scrollView.contentOffset.x > ScreenWidth*/ page==3 ){ // update by lsz 2021-7-23 [self.pageControl setHidden: YES]; }else{ [self.pageControl setHidden: NO]; } } - (void)removeScrollView { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; [userDefaults setObject:@"不止一次" forKey:@"启动次数"]; [userDefaults synchronize]; [self.scrollView removeFromSuperview]; [self.pageControl removeFromSuperview]; } /// 如果有账号缓存,填充账号密码 - (void)aucnTexg { kWeakSelf(self) YYCache *yyCache = [YYCache cacheWithName:UserCacheName]; BOOL isContains = [yyCache containsObjectForKey:UserCacheKey]; if (isContains) { NSDictionary *dic = (NSDictionary *)[yyCache objectForKey:UserCacheKey]; weakself.phoneField.text = dic[@"phone"]; weakself.passField.text = dic[@"password"]; // weakself.countryCodeLabel.text = dic[@"code"]; // weakself.countryTitleLabel.text = dic[@"gj"]; NSString *is = dic[@"isRememberPWD"]; [weakself.rememberPassBtn setSelected:[is isEqualToString:@"1"] ? YES : NO]; weakself.isRememberPWD = [is isEqualToString:@"1"] ? YES : NO; } } /* #pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender { // Get the new view controller using [segue destinationViewController]. // Pass the selected object to the new view controller. } */ @end