OOLoginViewController.swift 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194
  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 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. var viewModel:OOLoginViewModel = {
  37. return OOLoginViewModel()
  38. }()
  39. override func viewDidLoad() {
  40. super.viewDidLoad()
  41. //delegate
  42. passwordTextField.buttonDelegate = self
  43. setupUI()
  44. }
  45. private func setupUI(){
  46. logoImageView.image = OOCustomImageManager.default.loadImage(.login_avatar)
  47. let backImageView = UIImageView(image: #imageLiteral(resourceName: "pic_beijing"))
  48. backImageView.frame = self.view.frame
  49. //毛玻璃效果
  50. let blur = UIBlurEffect(style: .light)
  51. let effectView = UIVisualEffectView(effect: blur)
  52. effectView.frame = backImageView.frame
  53. backImageView.addSubview(effectView)
  54. if O2IsConnect2Collect {
  55. self.rebindBtn.isHidden = false
  56. self.passwordTextField.isHidden = false //验证码
  57. self.passwordField.isHidden = true //密码
  58. if let host = O2AuthSDK.shared.bindUnit()?.centerHost, (host == "dev.o2oa.io" || host == "dev.o2server.io" || host == "dev.o2oa.net") {
  59. self.faceRecgnizeLoginBtn.isHidden = false
  60. }else {
  61. self.faceRecgnizeLoginBtn.isHidden = true
  62. }
  63. }else {
  64. self.rebindBtn.isHidden = true
  65. self.passwordTextField.isHidden = true
  66. self.passwordField.isHidden = false
  67. }
  68. self.passwordTextField.reactive.isEnabled <~ viewModel.passwordIsValid
  69. self.passwordField.reactive.isEnabled <~ viewModel.pwdIsValid
  70. self.passwordTextField.downButton!.reactive.isEnabled <~ viewModel.passwordIsValid
  71. self.submitButton.reactive.isEnabled <~ viewModel.submitButtionIsValid
  72. self.submitButton.reactive.backgroundColor <~ viewModel.submitButtonCurrentColor
  73. self.faceRecgnizeLoginBtn.reactive.isEnabled <~ viewModel.faceRecognizeLoginButtonisValid
  74. if O2IsConnect2Collect {
  75. viewModel.loginControlIsValid(self.userNameTextField, self.passwordTextField, false)
  76. }else {
  77. viewModel.loginControlIsValid(self.userNameTextField, self.passwordField, true)
  78. }
  79. viewModel.faceRecognizeValidate()
  80. //版权信息
  81. self.view.insertSubview(backImageView, belowSubview: self.logoImageView)
  82. let year = Calendar.current.component(Calendar.Component.year, from: Date())
  83. copyrightLabel.text = "Copyright © 2015 - \(year) All Rights Reserved"
  84. }
  85. override func didReceiveMemoryWarning() {
  86. super.didReceiveMemoryWarning()
  87. // Dispose of any resources that can be recreated.
  88. }
  89. @IBAction func btnReBindNodeAction(_ sender: UIButton) {
  90. showAlert(title: "重新绑定", message: "重新绑定到新的服务节点,原节点信息将被清空,确认吗?", okHandler: { (ok) in
  91. O2AuthSDK.shared.clearAllInformationBeforeReBind(callback: { (result, msg) in
  92. DDLogInfo("清空登录和绑定信息,result:\(result), msg:\(msg ?? "")")
  93. OOAppsInfoDB.shareInstance.removeAll()
  94. DispatchQueue.main.async {
  95. self.forwardDestVC("login", nil)
  96. }
  97. })
  98. }) { (cancel) in
  99. }
  100. }
  101. @IBAction func btnLogin(_ sender: OOBaseUIButton) {
  102. self.view.endEditing(true)
  103. let credential = userNameTextField.text ?? ""
  104. var codeAnswer = ""
  105. if O2IsConnect2Collect {
  106. codeAnswer = passwordTextField.text ?? ""
  107. }else {
  108. codeAnswer = passwordField.text ?? ""
  109. }
  110. if credential == "" || codeAnswer == "" {
  111. self.showError(title: "手机号码或密码不能为空!")
  112. return
  113. }
  114. self.showMessage(title: "登录中...")
  115. if O2IsConnect2Collect {
  116. passwordTextField.stopTimerButton()
  117. O2AuthSDK.shared.login(mobile: credential, code: codeAnswer) { (result, msg) in
  118. if result {
  119. self.dismissProgressHUD()
  120. self.gotoMain()
  121. }else {
  122. self.showError(title: "登录失败,\(msg ?? "")")
  123. }
  124. }
  125. }else {
  126. //todo内网版本登录
  127. O2AuthSDK.shared.loginWithPassword(username: credential, password: codeAnswer) { (result, msg) in
  128. if result {
  129. self.dismissProgressHUD()
  130. self.gotoMain()
  131. }else {
  132. self.showError(title: "登录失败,\(msg ?? "")")
  133. }
  134. }
  135. }
  136. }
  137. private func gotoMain() {
  138. //跳转到主页
  139. let destVC = OOTabBarController.genernateVC()
  140. destVC.selectedIndex = 2 // 首页选中 TODO 图标不亮。。。。。
  141. UIApplication.shared.keyWindow?.rootViewController = destVC
  142. UIApplication.shared.keyWindow?.makeKeyAndVisible()
  143. }
  144. }
  145. extension OOLoginViewController:OOUIDownButtonTextFieldDelegate {
  146. func viewButtonClicked(_ textField: OOUIDownButtonTextField, _ sender: OOTimerButton) {
  147. guard let credential = userNameTextField.text else {
  148. self.showError(title: "请输入手机号码!")
  149. sender.stopTiming()
  150. return
  151. }
  152. O2AuthSDK.shared.sendLoginSMS(mobile: credential) { (result, msg) in
  153. if !result {
  154. DDLogError((msg ?? ""))
  155. }
  156. }
  157. }
  158. }