OOLoginViewController.swift 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299
  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. //修改成 其他登录方式按钮
  23. @IBOutlet weak var bioAuthLoginBtn: UIButton!
  24. //生物识别登录是否开启
  25. private var bioIsOpen: Bool = false
  26. private var bioTypeName: String = ""
  27. //初始化进入的时候是否直接跳转到生物识别认证登录界面
  28. private var notJumpBioAuth = false
  29. //登录方式
  30. private var loginType = 0 // 0默认的用户名验证码登录 1用户名密码登录
  31. var viewModel:OOLoginViewModel = {
  32. return OOLoginViewModel()
  33. }()
  34. override func viewDidLoad() {
  35. super.viewDidLoad()
  36. //delegate
  37. passwordTextField.buttonDelegate = self
  38. setupUI()
  39. }
  40. override func viewWillAppear(_ animated: Bool) {
  41. super.viewWillAppear(animated)
  42. let bioAuthUser = AppConfigSettings.shared.bioAuthUser
  43. //判断是否当前绑定的服务器的
  44. if !bioAuthUser.isBlank {
  45. let array = bioAuthUser.split("^^")
  46. if array.count == 2 {
  47. if array[0] == O2AuthSDK.shared.bindUnit()?.id {
  48. self.bioIsOpen = true
  49. }
  50. }
  51. }
  52. if !self.notJumpBioAuth && self.bioIsOpen {
  53. DDLogDebug("已开启生物识别认证")
  54. self.gotoBioAuthLogin()
  55. }
  56. }
  57. @IBAction func unwindFromBioAuthLogin(_ unwindSegue: UIStoryboardSegue) {
  58. if unwindSegue.identifier == "goBack2Login" {
  59. DDLogDebug("从生物识别认证页面返回的,所以不需要再跳转了。。。。。。")
  60. notJumpBioAuth = 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. // 皮肤
  73. let baseColor = O2ThemeManager.color(for: "Base.base_color")!
  74. self.passwordTextField.themeUpdate(buttonTitleColor: baseColor)
  75. 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)
  76. 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)
  77. 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)
  78. self.passwordField.isSecureTextEntry = true
  79. self.passwordTextField.keyboardType = .numberPad
  80. self.userNameTextField.returnKeyType = .next
  81. self.userNameTextField.returnNextDelegate = self
  82. if O2IsConnect2Collect {
  83. self.rebindBtn.isHidden = false
  84. self.passwordTextField.isHidden = false //验证码
  85. self.passwordField.isHidden = true //密码
  86. self.bioAuthLoginBtn.isHidden = false
  87. }else {
  88. self.rebindBtn.isHidden = true
  89. self.passwordTextField.isHidden = true
  90. self.passwordField.isHidden = false
  91. self.bioAuthLoginBtn.isHidden = true
  92. }
  93. // self.passwordTextField.reactive.isEnabled <~ viewModel.passwordIsValid
  94. // self.passwordField.reactive.isEnabled <~ viewModel.pwdIsValid
  95. self.passwordTextField.downButton!.reactive.isEnabled <~ viewModel.passwordIsValid
  96. // self.submitButton.reactive.isEnabled <~ viewModel.submitButtionIsValid
  97. // self.submitButton.reactive.backgroundColor <~ viewModel.submitButtonCurrentColor
  98. // if O2IsConnect2Collect {
  99. // viewModel.loginControlIsValid(self.userNameTextField, self.passwordTextField, false)
  100. // }else {
  101. // viewModel.loginControlIsValid(self.userNameTextField, self.passwordField, true)
  102. // }
  103. let bioType = O2BioLocalAuth.shared.checkBiometryType()
  104. switch bioType {
  105. case O2BiometryType.FaceID:
  106. self.bioTypeName = "人脸识别登录"
  107. break
  108. case O2BiometryType.TouchID:
  109. self.bioTypeName = "指纹识别登录"
  110. break
  111. default:
  112. break
  113. }
  114. //版权信息
  115. self.view.insertSubview(backImageView, belowSubview: self.logoImageView)
  116. let year = Calendar.current.component(Calendar.Component.year, from: Date())
  117. copyrightLabel.text = "Copyright © 2015 - \(year) All Rights Reserved"
  118. }
  119. override func didReceiveMemoryWarning() {
  120. super.didReceiveMemoryWarning()
  121. // Dispose of any resources that can be recreated.
  122. }
  123. @IBAction func btnReBindNodeAction(_ sender: UIButton) {
  124. self.showDefaultConfirm(title: "重新绑定", message: "重新绑定到新的服务节点,原节点信息将被清空,确认吗?") { (action) in
  125. O2AuthSDK.shared.clearAllInformationBeforeReBind(callback: { (result, msg) in
  126. DDLogInfo("清空登录和绑定信息,result:\(result), msg:\(msg ?? "")")
  127. DBManager.shared.removeAll()
  128. DispatchQueue.main.async {
  129. self.forwardDestVC("login", nil)
  130. }
  131. })
  132. }
  133. }
  134. @IBAction func bioAuthLoginBtnAction(_ sender: UIButton) {
  135. //弹出选择登录方式
  136. var loginActions: [UIAlertAction] = []
  137. if self.loginType == 0 { //当前是验证码登录
  138. let passwordLogin = UIAlertAction(title: "密码登录", style: .default) { (action) in
  139. self.change2PasswordLogin()
  140. }
  141. loginActions.append(passwordLogin)
  142. }else {
  143. let phoneCodeLogin = UIAlertAction(title: "验证码登录", style: .default) { (action) in
  144. self.change2PhoneCodeLogin()
  145. }
  146. loginActions.append(phoneCodeLogin)
  147. }
  148. if self.bioIsOpen {
  149. let bioLogin = UIAlertAction(title: self.bioTypeName, style: .default) { (action) in
  150. self.gotoBioAuthLogin()
  151. }
  152. loginActions.append(bioLogin)
  153. }
  154. self.showSheetAction(title: "提示", message: "请选择下列登录方式", actions: loginActions)
  155. // self.gotoBioAuthLogin()
  156. }
  157. private func change2PasswordLogin() {
  158. self.passwordTextField.isHidden = true //验证码
  159. self.passwordField.isHidden = false //密码
  160. self.loginType = 1
  161. }
  162. private func change2PhoneCodeLogin() {
  163. self.passwordTextField.isHidden = false //验证码
  164. self.passwordField.isHidden = true //密码
  165. self.loginType = 0
  166. }
  167. @IBAction func btnLogin(_ sender: OOBaseUIButton) {
  168. self.view.endEditing(true)
  169. let credential = userNameTextField.text ?? ""
  170. var codeAnswer = ""
  171. if O2IsConnect2Collect {
  172. if self.loginType == 0 {
  173. codeAnswer = passwordTextField.text ?? ""
  174. }else {
  175. codeAnswer = passwordField.text ?? ""
  176. }
  177. }else {
  178. codeAnswer = passwordField.text ?? ""
  179. }
  180. if credential == "" || codeAnswer == "" {
  181. self.showError(title: "手机号码或密码不能为空!")
  182. return
  183. }
  184. self.showLoading(title: "登录中...")
  185. if O2IsConnect2Collect {
  186. if self.loginType == 0 {
  187. passwordTextField.stopTimerButton()
  188. O2AuthSDK.shared.login(mobile: credential, code: codeAnswer) { (result, msg) in
  189. if result {
  190. self.hideLoading()
  191. self.gotoMain()
  192. }else {
  193. self.showError(title: "登录失败,\(msg ?? "")")
  194. }
  195. }
  196. }else {
  197. O2AuthSDK.shared.loginWithPassword(username: credential, password: codeAnswer) { (result, msg) in
  198. if result {
  199. self.hideLoading()
  200. self.gotoMain()
  201. }else {
  202. self.showError(title: "登录失败,\(msg ?? "")")
  203. }
  204. }
  205. }
  206. }else {
  207. //todo内网版本登录
  208. O2AuthSDK.shared.loginWithPassword(username: credential, password: codeAnswer) { (result, msg) in
  209. if result {
  210. self.hideLoading()
  211. self.gotoMain()
  212. }else {
  213. self.showError(title: "登录失败,\(msg ?? "")")
  214. }
  215. }
  216. }
  217. }
  218. private func gotoMain() {
  219. //跳转到主页
  220. let destVC = O2MainController.genernateVC()
  221. destVC.selectedIndex = 2 // 首页选中 TODO 图标不亮。。。。。
  222. UIApplication.shared.keyWindow?.rootViewController = destVC
  223. UIApplication.shared.keyWindow?.makeKeyAndVisible()
  224. }
  225. private func gotoBioAuthLogin() {
  226. DispatchQueue.main.async {
  227. self.performSegue(withIdentifier: "showBioAuthLogin", sender: nil)
  228. }
  229. }
  230. }
  231. extension OOLoginViewController:OOUIDownButtonTextFieldDelegate {
  232. func viewButtonClicked(_ textField: OOUIDownButtonTextField, _ sender: OOTimerButton) {
  233. guard let credential = userNameTextField.text else {
  234. self.showError(title: "请输入手机号码!")
  235. sender.stopTiming()
  236. return
  237. }
  238. O2AuthSDK.shared.sendLoginSMS(mobile: credential) { (result, msg) in
  239. if !result {
  240. DDLogError((msg ?? ""))
  241. self.showError(title: "验证码发送失败!")
  242. }
  243. }
  244. }
  245. }
  246. extension OOLoginViewController: OOUITextFieldReturnNextDelegate {
  247. func next() {
  248. if self.userNameTextField.isFirstResponder {
  249. if self.passwordField.isHidden == false {
  250. self.passwordField.becomeFirstResponder()
  251. }
  252. if self.passwordTextField.isHidden == false {
  253. self.passwordTextField.becomeFirstResponder()
  254. }
  255. }
  256. }
  257. }