SKBaseAccountViewController.m 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375
  1. //
  2. // SKBaseAccountViewController.m
  3. // SikeyComm
  4. //
  5. // Created by 刘振兴 on 2024/2/4.
  6. // Copyright © 2024 BaH Cy. All rights reserved.
  7. //
  8. #import "SKBaseAccountViewController.h"
  9. #import "SKBaseAccountViewController+user.h"
  10. @interface SKBaseAccountViewController()<UITextFieldDelegate>
  11. @end
  12. @implementation SKBaseAccountViewController
  13. - (void)viewDidLoad {
  14. [super viewDidLoad];
  15. // Do any additional setup after loading the view.
  16. [self initTextField];
  17. [self initTextFieldPlaceholder];
  18. [self initCountry];
  19. [self setStackViewCornerRadius];
  20. [self onInitAccount];
  21. }
  22. - (void)initTextField {
  23. self.mPhoneNumTextField.delegate = self;
  24. self.mPhoneNumVerifyTextField.delegate = self;
  25. self.mEmailNumTextField.delegate = self;
  26. self.mEmailNumVerifyTextField.delegate = self;
  27. self.mPwdTextField.delegate = self;
  28. self.mPwdOldTextField.delegate = self;
  29. self.mPwdNewTextField.delegate = self;
  30. self.mPwdNewVerifyTextField.delegate = self;
  31. self.mPhoneCaptchaTextField.delegate = self;
  32. self.mEmailCaptchaTextField.delegate = self;
  33. self.mEmailCaptchaLocalTextField.delegate = self;
  34. }
  35. - (void)initTextFieldPlaceholder {
  36. [self setTextFieldPlaceholder:self.mPhoneNumTextField placeholder:NSLocalizedString(@"Input.Mobile.Number", nil)];
  37. [self setTextFieldPlaceholder:self.mPhoneNumVerifyTextField placeholder:NSLocalizedString(@"Input.Mobile.Number.Verify", nil)];
  38. [self setTextFieldPlaceholder:self.mEmailNumTextField placeholder:NSLocalizedString(@"Input.Email.Number", nil)];
  39. [self setTextFieldPlaceholder:self.mEmailNumVerifyTextField placeholder:NSLocalizedString(@"Input.Email.Number.Verify", nil)];
  40. [self setTextFieldPlaceholder:self.mPwdTextField placeholder:NSLocalizedString(@"Input.Passcode", nil)];
  41. [self setTextFieldPlaceholder:self.mPwdOldTextField placeholder:NSLocalizedString(@"Input.Passcode.Old", nil)];
  42. [self setTextFieldPlaceholder:self.mPwdNewTextField placeholder:NSLocalizedString(@"Input.Passcode.New", nil)];
  43. [self setTextFieldPlaceholder:self.mPwdNewVerifyTextField placeholder:NSLocalizedString(@"Input.Passcode.New.Verify", nil)];
  44. [self setTextFieldPlaceholder:self.mPhoneCaptchaTextField placeholder:NSLocalizedString(@"Input.Verify.Code", nil)];
  45. [self setTextFieldPlaceholder:self.mEmailCaptchaTextField placeholder:NSLocalizedString(@"Input.Verify.Code", nil)];
  46. [self setTextFieldPlaceholder:self.mEmailCaptchaLocalTextField placeholder:NSLocalizedString(@"Input.Verify.Code", nil)];
  47. }
  48. - (void)initCountry {
  49. NSString* code = [EUtil getCountryCode];
  50. if (self.mPhoneCountryLabel) {
  51. self.mPhoneCountryLabel.text = [NSString stringWithFormat:@"+%@", code];
  52. }
  53. if (self.mPhoneCountryVerifyLabel) {
  54. self.mPhoneCountryVerifyLabel.text = [NSString stringWithFormat:@"+%@", code];
  55. }
  56. }
  57. - (void)setStackViewCornerRadius {
  58. for (UIView* view in self.mAccountStatckView.subviews) {
  59. [view.layer setMasksToBounds:YES];
  60. [view.layer setCornerRadius:27.0];
  61. if (view.tag > 0) {
  62. [view.layer setBorderColor:[[UIColor colorWithRed:204/255.0f green:204/255.0f blue:219/255.0f alpha:1] CGColor]];
  63. [view.layer setBorderWidth:1];
  64. }
  65. //获取验证码 button
  66. UIButton* button = [view viewWithTag:100];
  67. if (button && [button isKindOfClass:[UIButton class]]) {
  68. [button.layer setMasksToBounds:YES];
  69. [button.layer setCornerRadius:16.0]; //设置矩形四个圆角半径
  70. }
  71. button = [view viewWithTag:110];
  72. if (button && [button isKindOfClass:[UIButton class]]) {
  73. [button.layer setMasksToBounds:YES];
  74. [button.layer setCornerRadius:22.0]; //设置矩形四个圆角半径
  75. }
  76. }
  77. }
  78. //100:手机号码 200:邮箱
  79. - (void)initAccountType {
  80. int area = [UserDataHelper getLoginType];
  81. int type = area == 0 ? 100 : 200;
  82. NSInteger start = type;
  83. NSInteger end = start + 99;
  84. for (UIView* view in self.mAccountStatckView.subviews) {
  85. NSInteger tag = view.tag;
  86. if (tag < 100)
  87. continue;
  88. BOOL isHidden = tag < start || tag > end;
  89. [view setHidden:isHidden];
  90. UITextField* textField = [view viewWithTag:10];
  91. if (isHidden) {
  92. textField = nil;
  93. }
  94. }
  95. }
  96. - (void)refreshCaptchaButton:(NSInteger)timeLeft {
  97. for (UIView* view in self.mAccountStatckView.subviews) {
  98. //获取验证码 button
  99. UIButton* button = [view viewWithTag:100];
  100. if (button && [button isKindOfClass:[UIButton class]]) {
  101. [self refreshCaptchaButtonEx:timeLeft button:button];
  102. }
  103. }
  104. }
  105. - (void)refreshCaptchaButtonEx:(NSInteger)timeLeft button:(UIButton*)button {
  106. if (timeLeft > 0) {
  107. [button setEnabled:NO];
  108. NSString *text = [NSString stringWithFormat:NSLocalizedString(@"Retry.Later.Verify", nil),/*@"%ld秒后再试!",*/ (long)timeLeft];
  109. [button setTitle:text forState:UIControlStateNormal];
  110. [button setBackgroundColor:[UIColor colorWithRed:44/255.0 green:156/255.0 blue:255/255.0 alpha:0.3]];
  111. } else {
  112. [button setEnabled:YES];
  113. [button setTitle:NSLocalizedString(@"Get.Verify.Code", nil) forState:UIControlStateNormal];
  114. [button setBackgroundColor:[UIColor colorWithRed:44/255.0 green:156/255.0 blue:255/255.0 alpha:1]];
  115. }
  116. }
  117. - (void)onCountryCodeCallback:(NSString*)code {
  118. if (self.mPhoneCountryLabel) {
  119. self.mPhoneCountryLabel.text = [NSString stringWithFormat:@"+%@", code];
  120. }
  121. if (self.mPhoneCountryVerifyLabel) {
  122. self.mPhoneCountryVerifyLabel.text = [NSString stringWithFormat:@"+%@", code];
  123. }
  124. }
  125. - (void)setTextFieldPlaceholder:(UITextField*)textField placeholder:(NSString*)placeholder {
  126. textField.attributedPlaceholder = [[NSAttributedString alloc] initWithString:placeholder attributes:@{NSForegroundColorAttributeName:[UIColor colorWithRed:0/255.0f green:1/255.0f blue:75/255.0f alpha:0.2], NSFontAttributeName:[UIFont systemFontOfSize:14]}];
  127. }
  128. - (IBAction)phoneCaptchaCodeAction:(id)sender {
  129. if (![self checkPhoneNumTextField]) {
  130. return;
  131. }
  132. [self requstPhoneCaptchaCode];
  133. [self startTimer];
  134. }
  135. - (IBAction)emailCaptchaCodeAction:(id)sender {
  136. if (![self checkEmailNumTextField]) {
  137. return;
  138. }
  139. [self requstEmailCaptchaCode];
  140. [self startTimer];
  141. }
  142. - (void)phoneLoginRequest {
  143. [self ShowHUBWithText:NSLocalizedString(@"SK.Login...", nil)];//@"登录中..."];
  144. NSString* areaCode = [self.mPhoneCountryLabel.text stringByReplacingOccurrencesOfString:@"+" withString:@""];
  145. [self requestLogin:NO areaCode:areaCode phone:self.mPhoneNumTextField.text email:@"" password:self.mPwdTextField.text captcha:@"" callback:^(BOOL isOK, BOOL isChildExist) {
  146. [self HiddenHUB];
  147. if (isOK) {
  148. if (isChildExist) {
  149. [[DataManager shared] showTabBarController];
  150. } else {
  151. [[DataManager shared] showBindViewController];
  152. }
  153. }
  154. }];
  155. }
  156. - (void)emailLoginRequest {
  157. [self ShowHUBWithText:NSLocalizedString(@"SK.Login...", nil)];//@"登录中..."];
  158. [self requestLogin:YES areaCode:@"" phone:@"" email:self.mEmailNumTextField.text password:self.mPwdTextField.text captcha:@"" callback:^(BOOL isOK, BOOL isChildExist) {
  159. [self HiddenHUB];
  160. if (isOK) {
  161. if (isChildExist) {
  162. [[DataManager shared] showTabBarController];
  163. } else {
  164. [[DataManager shared] showBindViewController];
  165. }
  166. }
  167. }];
  168. }
  169. #pragma mark - 注册请求
  170. - (void)phoneRegisterRequest {
  171. [self ShowHUBWithText:NSLocalizedString(@"Loading...", nil)];//@"加载中..."];
  172. NSString* areaCode = [self.mPhoneCountryLabel.text stringByReplacingOccurrencesOfString:@"+" withString:@""];
  173. [self requestRegister:NO areaCode:areaCode phone:self.mPhoneNumTextField.text email:@"" password:self.mPwdTextField.text captcha:self.mPhoneCaptchaTextField.text callback:^(BOOL isOK) {
  174. [self HiddenHUB];
  175. if (isOK) {
  176. dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(1.5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
  177. [self popViewController:nil];
  178. });
  179. }
  180. }];
  181. }
  182. - (void)emailRegisterRequest:(NSString*)areaCode phone:(NSString*)phone email:(NSString*)email password:(NSString*)password captcha:(NSString*)captcha {
  183. [self ShowHUBWithText:NSLocalizedString(@"Loading...", nil)];//@"加载中..."];
  184. areaCode = [areaCode stringByReplacingOccurrencesOfString:@"+" withString:@""];
  185. [self requestRegister:YES areaCode:areaCode phone:phone email:email password:password captcha:captcha callback:^(BOOL isOK) {
  186. [self HiddenHUB];
  187. if (isOK) {
  188. [[DataManager shared] showSKLoginViewController];
  189. }
  190. }];
  191. }
  192. - (BOOL)checkAccount {
  193. int area = [UserDataHelper getLoginType];
  194. if (area == 0) {
  195. return [self checkPhoneAccount];
  196. } else {
  197. return [self checkEmailAccount];
  198. }
  199. }
  200. - (BOOL)checkEmailAccount {
  201. if (![self checkAccountEmailTextField])
  202. return NO;
  203. if (![self checkAccountPasswordTextField])
  204. return NO;
  205. if (![self checkAccountEmailCaptchaTextField])
  206. return NO;
  207. return YES;
  208. }
  209. - (BOOL)checkPhoneAccount {
  210. if (![self checkAccountPhoneTextField])
  211. return NO;
  212. if (![self checkAccountPasswordTextField])
  213. return NO;
  214. if (![self checkAccountPhoneCaptchaTextField])
  215. return NO;
  216. return YES;
  217. }
  218. - (BOOL)checkAccountEmailTextField {
  219. //email
  220. if (self.mEmailNumTextField && self.mEmailNumTextField.text.length <= 0) {
  221. [EasyTextView showErrorText:NSLocalizedString(@"Input.Email.Number", nil)];
  222. return NO;
  223. }
  224. if (self.mEmailNumTextField && ![self.mEmailNumTextField.text isValidateEmail]) {
  225. [EasyTextView showErrorText:NSLocalizedString(@"Input.Correct.Email.Number", nil)];
  226. return NO;
  227. }
  228. if (self.mEmailNumVerifyTextField && self.mEmailNumVerifyTextField.text.length <= 0) {
  229. [EasyTextView showErrorText:NSLocalizedString(@"Input.Email.Number.Verify", nil)];
  230. return NO;
  231. }
  232. if (self.mEmailNumTextField && self.mEmailNumVerifyTextField && ![self.mEmailNumTextField.text isEqualToString:self.mEmailNumVerifyTextField.text]) {
  233. [EasyTextView showErrorText:NSLocalizedString(@"Input.Email.Not.Match", nil)];
  234. return NO;
  235. }
  236. return YES;
  237. }
  238. - (BOOL)checkAccountEmailCaptchaTextField {
  239. //Captcha
  240. if (self.mEmailCaptchaTextField && self.mEmailCaptchaTextField.text.length <= 0) {
  241. [EasyTextView showErrorText:NSLocalizedString(@"Input.Verify.Code", nil)];//@"请输入验证码"];
  242. return NO;
  243. }
  244. if (self.mEmailCaptchaLocalTextField && ![[[self.mEmailCaptchaLocalTextField.text trimString] lowercaseString] isEqualToString:[[self.mPooCodeView getCode] lowercaseString]]) {
  245. [EasyTextView showErrorText:NSLocalizedString(@"Input.Verify.Code.Error", nil)];//@"请输入验证码"];
  246. return NO;
  247. }
  248. return YES;
  249. }
  250. - (BOOL)checkAccountPhoneTextField {
  251. //Phone number
  252. if (self.mPhoneNumTextField && self.mPhoneNumTextField.text.length <= 0) {
  253. [EasyTextView showErrorText:NSLocalizedString(@"Input.Mobile.Number", nil)];
  254. }
  255. if (self.mPhoneNumTextField && ![self.mPhoneNumTextField.text isValidateMobile]) {
  256. [EasyTextView showErrorText:NSLocalizedString(@"Input.Correct.Mobile.Number", nil)];
  257. return NO;
  258. }
  259. if (self.mPhoneNumVerifyTextField && self.mPhoneNumVerifyTextField.text.length <= 0) {
  260. [EasyTextView showErrorText:NSLocalizedString(@"Input.Mobile.Number.Verify", nil)];
  261. return NO;
  262. }
  263. if (self.mPhoneNumTextField && self.mPhoneNumVerifyTextField && ![self.mPhoneNumTextField.text isEqualToString:self.mPhoneNumVerifyTextField.text]) {
  264. [EasyTextView showErrorText:NSLocalizedString(@"Input.Phone.Not.Match", nil)];
  265. return NO;
  266. }
  267. return YES;
  268. }
  269. - (BOOL)checkAccountPhoneCaptchaTextField {
  270. if (self.mPhoneCaptchaTextField && self.mPhoneCaptchaTextField.text.length <= 0) {
  271. [EasyTextView showErrorText:NSLocalizedString(@"Input.Verify.Code.Recive", nil)];//@"请输入手机收到的验证码"];
  272. return NO;
  273. }
  274. return YES;
  275. }
  276. - (BOOL)checkAccountPasswordTextField {
  277. //Password
  278. if (self.mPwdTextField && self.mPwdTextField.text.length <= 0) {
  279. [EasyTextView showErrorText:NSLocalizedString(@"Input.Passcode", nil)];
  280. return NO;
  281. }
  282. if (self.mPwdTextField && [self.mPwdTextField.text passWord] == NO) {
  283. [EasyTextView showErrorText:NSLocalizedString(@"Input.Correct.Passcode", nil)];//@"密码应该为6-16位英文和数字"];
  284. return NO;
  285. }
  286. if (self.mPwdOldTextField && self.mPwdOldTextField.text.length <= 0) {
  287. [EasyTextView showErrorText:NSLocalizedString(@"Input.Passcode.Old", nil)];
  288. return NO;
  289. }
  290. if (self.mPwdOldTextField && [self.mPwdOldTextField.text passWord] == NO) {
  291. [EasyTextView showErrorText:NSLocalizedString(@"Input.Correct.Passcode", nil)];//@"密码应该为6-16位英文和数字"];
  292. return NO;
  293. }
  294. if (self.mPwdNewTextField && self.mPwdNewTextField.text.length <= 0) {
  295. [EasyTextView showErrorText:NSLocalizedString(@"Input.Passcode.New", nil)];
  296. return NO;
  297. }
  298. if (self.mPwdNewTextField && [self.mPwdNewTextField.text passWord] == NO) {
  299. [EasyTextView showErrorText:NSLocalizedString(@"Input.Correct.Passcode", nil)];//@"密码应该为6-16位英文和数字"];
  300. return NO;
  301. }
  302. if (self.mPwdNewTextField && self.mPwdNewVerifyTextField && ![self.mPwdNewTextField.text isEqualToString:self.mPwdNewVerifyTextField.text]) {
  303. [EasyTextView showErrorText:NSLocalizedString(@"Input.Passcode.Not.Match", nil)];//@"请输入验证码"];
  304. return NO;
  305. }
  306. return YES;
  307. }
  308. - (BOOL)checkPhoneNumTextField {
  309. if (![self.mPhoneNumTextField.text isValidateMobile]) {
  310. [EasyTextView showInfoText:NSLocalizedString(@"Input.Correct.Mobile.Number", nil)];//@"请输入3~32位数字号码"];
  311. return NO;
  312. }
  313. return YES;
  314. }
  315. - (BOOL)checkEmailNumTextField {
  316. if (![self.mEmailNumTextField.text isValidateEmail]) {
  317. [EasyTextView showInfoText:NSLocalizedString(@"Input.Correct.Email.Number", nil)];
  318. return NO;
  319. }
  320. return YES;
  321. }
  322. - (void)textFieldDidEndEditing:(UITextField *)textField {
  323. if (textField == self.mPhoneNumTextField || textField == self.mPhoneCaptchaTextField) {
  324. textField.text = [EUtil getAllNumber:textField.text];
  325. } else {
  326. textField.text = [textField.text stringByTrimmingCharactersInSet:[NSCharacterSet whitespaceCharacterSet]];
  327. }
  328. }
  329. @end