OOLoginViewController.swift 9.4 KB

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