BindingViewController.swift 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182
  1. //
  2. // BindingViewController.swift
  3. // JiaPeiManage
  4. //
  5. // Created by Ning.ge on 2023/8/3.
  6. //
  7. import UIKit
  8. import RxSwift
  9. import RxCocoa
  10. import SwiftyUserDefaults
  11. final class BindingViewController: BaseViewController {
  12. // MARK: 服务属性
  13. private let loginService: LoginServiceType = LoginService(networking: LoginNetworking())
  14. // MARK: UI属性
  15. @IBOutlet weak var bingding_logo: UIImageView!
  16. // 账号
  17. @IBOutlet weak var username_textField: QMUITextField!
  18. //密码
  19. @IBOutlet weak var userpassword_textField: QMUITextField!
  20. //显示密码
  21. @IBOutlet weak var pwdshow_button: QMUIButton!
  22. //定位arrow
  23. @IBOutlet weak var location_button: QMUIButton!
  24. @IBOutlet weak var location_button_btn: UIButton!
  25. //区域
  26. @IBOutlet weak var userlocation_textField: QMUITextField!
  27. //绑定按钮
  28. @IBOutlet weak var login_button: UIButton!
  29. var openid:String = ""
  30. var city:String = ""
  31. var cityPower:String = "" //地区权限
  32. var cityItems:[CityItem] = []
  33. var citys: [String:String] = [:]
  34. var selectedItemIndex = 0
  35. var bindType = 0 //0微信 1apple
  36. override func viewDidLoad() {
  37. super.viewDidLoad()
  38. setupUI()
  39. //biand绑定
  40. biandView()
  41. //获取字典数据
  42. loginService.dictRequest(dictType: "coach_city").subscribe(onSuccess: { [unowned self] cityItems in
  43. self.cityItems = cityItems
  44. for cityItem in cityItems {
  45. self.citys[cityItem.dictLabel] = cityItem.dictValue
  46. }
  47. },onError: { Error in
  48. }).disposed(by: disposeBag)
  49. }
  50. // MARK: 私有方法
  51. func setupUI(){
  52. self.view.backgroundColor = .db_theme
  53. self.username_textField.placeholderColor = .db_place
  54. self.userpassword_textField.placeholderColor = .db_place
  55. self.userlocation_textField.placeholderColor = .db_place
  56. if self.bindType == 1 {
  57. bingding_logo.isHidden = true
  58. }
  59. }
  60. func biandView(){
  61. //判断账号的输入是否可用
  62. let accountValid = username_textField.rx.text.orEmpty.map{ value in
  63. return value.count >= 18
  64. }
  65. //判断密码的输入是否可用
  66. let passwordValid = userpassword_textField.rx.text.orEmpty.map{ value in
  67. return value.count >= 6
  68. }
  69. //登录按钮的可用与否
  70. let loginObserver = Observable.combineLatest(accountValid,passwordValid){(account,password) in
  71. account && password
  72. }
  73. //绑定按钮
  74. loginObserver.bind(to: login_button.rx.isEnabled).disposed(by: disposeBag)
  75. loginObserver.subscribe(onNext: { [unowned self] valid in
  76. NSLog("loginObserver")
  77. self.login_button.alpha = valid ? 1 : 0.5
  78. }).disposed(by: disposeBag)
  79. //显示密码
  80. pwdshow_button.rx.tap.subscribe ({ [unowned self] (_) in
  81. self.pwdshow_button.isSelected = !self.pwdshow_button.isSelected;
  82. self.userpassword_textField.isSecureTextEntry = !self.pwdshow_button.isSelected
  83. }).disposed(by: disposeBag)
  84. //选择区域
  85. location_button.rx.tap.subscribe ({ [unowned self] (_) in
  86. NSLog("点击了:选择区域- \(Thread.isMainThread)")
  87. self.showDialog()
  88. }).disposed(by: disposeBag)
  89. location_button_btn.rx.tap.subscribe ({ [unowned self] (_) in
  90. self.showDialog()
  91. }).disposed(by: disposeBag)
  92. //登录
  93. login_button.rx.tap
  94. .asObservable()
  95. .withLatestFrom(loginObserver)
  96. .do(onNext: {
  97. [unowned self]_ in
  98. self.login_button.isEnabled = false
  99. self.view.endEditing(true)
  100. })
  101. .subscribe(onNext: {[unowned self]isLogin in
  102. self.login_button.isEnabled = true
  103. //保存用户信息
  104. var account:String = self.username_textField.text!
  105. var password:String = self.userpassword_textField.text!
  106. if city=="" {
  107. NYTips.showMsg(txt: "请选择地区!")
  108. return
  109. }
  110. LocalManager.userInfo.userAccount = account
  111. LocalManager.userInfo.password = password
  112. LocalManager.userInfo.city = city
  113. LocalManager.userInfo.cityPower = cityPower
  114. //登录api RX 订阅 观察 销毁 三部曲
  115. NYTips.show()
  116. self.loginService.biandUserRequest(idcard: account, user_password: password,openid: self.openid,city: city)
  117. .subscribe(onSuccess: {[unowned self] userinfo in
  118. NYTips.hide()
  119. LocalManager.userInfo = userinfo
  120. LocalManager.userInfo.isLogin = true //设置已经登录
  121. NYAccountManager.shared.addUserinfo(user: userinfo)//添加用户信息
  122. print("登录成功:%@", userinfo)
  123. self.dismiss(animated: true)
  124. }, onError: { error in
  125. NYTips.hide()
  126. NYTips.showErr(txt: (error as! RequestError).errorDescription)
  127. print("%@",error)
  128. })
  129. .disposed(by: self.disposeBag)
  130. })
  131. .disposed(by: disposeBag)
  132. //添加手势
  133. let tapBackground = UITapGestureRecognizer()
  134. tapBackground.rx.event
  135. .subscribe(onNext: { [weak self] _ in
  136. self?.view.endEditing(true)
  137. })
  138. .disposed(by: disposeBag)
  139. view.addGestureRecognizer(tapBackground)
  140. }
  141. func showDialog(){
  142. let dialogViewController = QMUIDialogSelectionViewController()
  143. dialogViewController.title = "请选择地区"
  144. dialogViewController.items = Array(citys.keys)
  145. dialogViewController.selectedItemIndex = selectedItemIndex
  146. dialogViewController.addCancelButton(withText: "取消", block: nil)
  147. dialogViewController.addSubmitButton(withText: "确定") { [unowned self] dialogViewController in
  148. guard let dialogViewController:QMUIDialogSelectionViewController = dialogViewController as? QMUIDialogSelectionViewController else { return }
  149. if dialogViewController.selectedItemIndex == QMUIDialogSelectionViewControllerSelectedItemIndexNone {
  150. NYTips.showErr(txt: "请至少选一个")
  151. return
  152. }
  153. self.selectedItemIndex = dialogViewController.selectedItemIndex
  154. let keyname = dialogViewController.items![self.selectedItemIndex]
  155. // self.citys[cityItem.dictLabel] = cityItem.dictValue
  156. var item:CityItem?
  157. for cityItem in self.cityItems {
  158. if cityItem.dictLabel == keyname {
  159. item = cityItem
  160. break
  161. }
  162. }
  163. self.city = item!.dictValue //编码
  164. self.cityPower = item!.remark //地区权重
  165. self.userlocation_textField.text = item?.dictLabel
  166. dialogViewController.hide()
  167. }
  168. dialogViewController.show()
  169. }
  170. }