OOLoginViewController.swift 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248
  1. //
  2. // OOLoginViewController.swift
  3. // O2Platform
  4. //
  5. // Created by 刘振兴 on 2018/4/9.
  6. // Copyright © 2018年 zoneland. All rights reserved.
  7. //
  8. import UIKit
  9. import ReactiveCocoa
  10. import ReactiveSwift
  11. import Whisper
  12. import CocoaLumberjack
  13. import AVFoundation
  14. import O2OA_Auth_SDK
  15. class OOLoginViewController: OOBaseViewController {
  16. @IBOutlet weak var logoImageView: UIImageView!
  17. @IBOutlet weak var userNameTextField: OOUITextField!
  18. @IBOutlet weak var passwordTextField: OOUIDownButtonTextField!
  19. @IBOutlet weak var passwordField: OOUITextField!
  20. @IBOutlet weak var copyrightLabel: UILabel!
  21. @IBOutlet weak var submitButton: OOBaseUIButton!
  22. @IBOutlet weak var rebindBtn: UIButton!
  23. @IBOutlet weak var bioAuthLoginBtn: UIButton!
  24. // @IBOutlet weak var faceRecgnizeLoginBtn: UIButton!
  25. // @IBAction func faceRecgnizeAction(_ sender: UIButton) {
  26. // DDLogDebug("点了,使用人脸识别登录")
  27. // let status = AVCaptureDevice.authorizationStatus(for: .video)
  28. // if status == .denied || status == .restricted {
  29. // ProgressHUD.showError("没有摄像头权限,请先开启!")
  30. // }else {
  31. // let faceVC = OOFaceRecognizeLoginViewController()
  32. // let nav = ZLNavigationController(rootViewController: faceVC)
  33. // nav.modalTransitionStyle = .flipHorizontal
  34. // self.present(nav, animated: true, completion: nil)
  35. // }
  36. //
  37. // }
  38. var viewModel:OOLoginViewModel = {
  39. return OOLoginViewModel()
  40. }()
  41. var notUseBioAuth = false
  42. override func viewDidLoad() {
  43. super.viewDidLoad()
  44. //delegate
  45. passwordTextField.buttonDelegate = self
  46. setupUI()
  47. }
  48. override func viewWillAppear(_ animated: Bool) {
  49. super.viewWillAppear(animated)
  50. let bioAuthUser = AppConfigSettings.shared.bioAuthUser
  51. if !notUseBioAuth && !bioAuthUser.isEmpty {
  52. DDLogDebug("已开启生物识别认证")
  53. self.gotoBioAuthLogin()
  54. }
  55. self.bioAuthLoginBtn.isHidden = bioAuthUser.isEmpty
  56. }
  57. @IBAction func unwindFromBioAuthLogin(_ unwindSegue: UIStoryboardSegue) {
  58. if unwindSegue.identifier == "goBack2Login" {
  59. DDLogDebug("从生物识别认证页面返回的,所以不需要再跳转了。。。。。。")
  60. notUseBioAuth = true
  61. }
  62. }
  63. private func setupUI(){
  64. logoImageView.image = OOCustomImageManager.default.loadImage(.login_avatar)
  65. let backImageView = UIImageView(image: #imageLiteral(resourceName: "pic_beijing"))
  66. backImageView.frame = self.view.frame
  67. //毛玻璃效果
  68. let blur = UIBlurEffect(style: .light)
  69. let effectView = UIVisualEffectView(effect: blur)
  70. effectView.frame = backImageView.frame
  71. backImageView.addSubview(effectView)
  72. self.passwordTextField.keyboardType = .numberPad
  73. self.userNameTextField.returnKeyType = .next
  74. self.userNameTextField.returnNextDelegate = self
  75. if O2IsConnect2Collect {
  76. self.rebindBtn.isHidden = false
  77. self.passwordTextField.isHidden = false //验证码
  78. self.passwordField.isHidden = true //密码
  79. }else {
  80. self.rebindBtn.isHidden = true
  81. self.passwordTextField.isHidden = true
  82. self.passwordField.isHidden = false
  83. }
  84. self.passwordTextField.reactive.isEnabled <~ viewModel.passwordIsValid
  85. self.passwordField.reactive.isEnabled <~ viewModel.pwdIsValid
  86. self.passwordTextField.downButton!.reactive.isEnabled <~ viewModel.passwordIsValid
  87. self.submitButton.reactive.isEnabled <~ viewModel.submitButtionIsValid
  88. self.submitButton.reactive.backgroundColor <~ viewModel.submitButtonCurrentColor
  89. if O2IsConnect2Collect {
  90. viewModel.loginControlIsValid(self.userNameTextField, self.passwordTextField, false)
  91. }else {
  92. viewModel.loginControlIsValid(self.userNameTextField, self.passwordField, true)
  93. }
  94. // viewModel.faceRecognizeValidate()
  95. let bioType = O2BioLocalAuth.shared.checkBiometryType()
  96. switch bioType {
  97. case O2BiometryType.FaceID:
  98. self.bioAuthLoginBtn.setTitle("人脸识别登录", for: .normal)
  99. break
  100. case O2BiometryType.TouchID:
  101. self.bioAuthLoginBtn.setTitle("指纹识别登录", for: .normal)
  102. break
  103. default:
  104. break
  105. }
  106. //版权信息
  107. self.view.insertSubview(backImageView, belowSubview: self.logoImageView)
  108. let year = Calendar.current.component(Calendar.Component.year, from: Date())
  109. copyrightLabel.text = "Copyright © 2015 - \(year) All Rights Reserved"
  110. }
  111. override func didReceiveMemoryWarning() {
  112. super.didReceiveMemoryWarning()
  113. // Dispose of any resources that can be recreated.
  114. }
  115. @IBAction func btnReBindNodeAction(_ sender: UIButton) {
  116. showAlert(title: "重新绑定", message: "重新绑定到新的服务节点,原节点信息将被清空,确认吗?", okHandler: { (ok) in
  117. O2AuthSDK.shared.clearAllInformationBeforeReBind(callback: { (result, msg) in
  118. DDLogInfo("清空登录和绑定信息,result:\(result), msg:\(msg ?? "")")
  119. OOAppsInfoDB.shareInstance.removeAll()
  120. DispatchQueue.main.async {
  121. self.forwardDestVC("login", nil)
  122. }
  123. })
  124. }) { (cancel) in
  125. }
  126. }
  127. @IBAction func bioAuthLoginBtnAction(_ sender: UIButton) {
  128. self.gotoBioAuthLogin()
  129. }
  130. @IBAction func btnLogin(_ sender: OOBaseUIButton) {
  131. self.view.endEditing(true)
  132. let credential = userNameTextField.text ?? ""
  133. var codeAnswer = ""
  134. if O2IsConnect2Collect {
  135. codeAnswer = passwordTextField.text ?? ""
  136. }else {
  137. codeAnswer = passwordField.text ?? ""
  138. }
  139. if credential == "" || codeAnswer == "" {
  140. self.showError(title: "手机号码或密码不能为空!")
  141. return
  142. }
  143. self.showMessage(title: "登录中...")
  144. if O2IsConnect2Collect {
  145. passwordTextField.stopTimerButton()
  146. O2AuthSDK.shared.login(mobile: credential, code: codeAnswer) { (result, msg) in
  147. if result {
  148. self.dismissProgressHUD()
  149. self.gotoMain()
  150. }else {
  151. self.showError(title: "登录失败,\(msg ?? "")")
  152. }
  153. }
  154. }else {
  155. //todo内网版本登录
  156. O2AuthSDK.shared.loginWithPassword(username: credential, password: codeAnswer) { (result, msg) in
  157. if result {
  158. self.dismissProgressHUD()
  159. self.gotoMain()
  160. }else {
  161. self.showError(title: "登录失败,\(msg ?? "")")
  162. }
  163. }
  164. }
  165. }
  166. private func gotoMain() {
  167. //跳转到主页
  168. let destVC = O2MainController.genernateVC()
  169. destVC.selectedIndex = 2 // 首页选中 TODO 图标不亮。。。。。
  170. UIApplication.shared.keyWindow?.rootViewController = destVC
  171. UIApplication.shared.keyWindow?.makeKeyAndVisible()
  172. }
  173. private func gotoBioAuthLogin() {
  174. DispatchQueue.main.async {
  175. self.performSegue(withIdentifier: "showBioAuthLogin", sender: nil)
  176. }
  177. }
  178. }
  179. extension OOLoginViewController:OOUIDownButtonTextFieldDelegate {
  180. func viewButtonClicked(_ textField: OOUIDownButtonTextField, _ sender: OOTimerButton) {
  181. guard let credential = userNameTextField.text else {
  182. self.showError(title: "请输入手机号码!")
  183. sender.stopTiming()
  184. return
  185. }
  186. O2AuthSDK.shared.sendLoginSMS(mobile: credential) { (result, msg) in
  187. if !result {
  188. DDLogError((msg ?? ""))
  189. self.showError(title: "验证码发送失败!")
  190. }
  191. }
  192. }
  193. }
  194. extension OOLoginViewController: OOUITextFieldReturnNextDelegate {
  195. func next() {
  196. if self.userNameTextField.isFirstResponder {
  197. if self.passwordField.isHidden == false {
  198. self.passwordField.becomeFirstResponder()
  199. }
  200. if self.passwordTextField.isHidden == false {
  201. self.passwordTextField.becomeFirstResponder()
  202. }
  203. }
  204. }
  205. }