jsdw_ios/QuickLocation/Section/Login/LoginViewController.swift

153 lines
4.9 KiB
Swift

//
// LoginViewController.swift
// QuickLocation
//
// Created based on Lanhu design: -
//
import UIKit
import SnapKit
import RxSwift
import RxCocoa
#if !targetEnvironment(simulator)
import GeYanSdk
#endif
class LoginViewController: BaseViewController {
override var isNavigationBarHidden: Bool { true }
override var preferredStatusBarStyle: UIStatusBarStyle { .default }
// MARK: - Properties
fileprivate var rootView: LoginView!
private let viewModel = LoginViewModel()
private var isAgreed = false
private var countDownService = CountDownService(countDownTime: 60)
// MARK: - Lifecycle
override func loadView() {
rootView = LoginView(frame: UIScreen.main.bounds)
view = rootView
}
override func viewDidLoad() {
super.viewDidLoad()
rootView.agreementTV.delegate = self
bindViewModel()
reactiveAction()
}
private func reactiveAction() {
rootView.smsCodeBtn.rx.controlEvent(.touchUpInside).subscribe { [weak self] _ in
guard let self = self else { return }
self.requestSmsCodeAPI()
}.disposed(by: rootView.disposeBag)
}
// MARK: - Bindings
private func bindViewModel() {
rootView.checkBox.rx.tap
.subscribe(onNext: { [weak self] in
self?.isAgreed.toggle()
self?.rootView.checkBox.isSelected = self?.isAgreed ?? false
})
.disposed(by: disposeBag)
rootView.loginButton.rx.tap
.subscribe(onNext: { [weak self] in
guard let self = self else { return }
if !self.isAgreed {
DLToast.showError(text: "请先同意用户协议")
return
}
guard let phone = self.rootView.phoneInputTF.text, !phone.isEmpty else {
DLToast.showError(text: "请输入手机号码")
return
}
guard let smsCode = self.rootView.smsCodeTF.text, !smsCode.isEmpty else {
DLToast.showError(text: "请输入验证码")
return
}
let requestData = ["timestamp": self.viewModel.timestamp,
"phone": phone,
"code": smsCode]
self.viewModel.loginAction(type: "phone", data: requestData)
})
.disposed(by: disposeBag)
rootView.guestLoginButton.rx.tap
.subscribe(onNext: { _ in
AppDelegate.shared.showMainViewController()
})
.disposed(by: disposeBag)
rootView.wechatLoginBtn.rx.tap
.subscribe(onNext: { [weak self] in
self?.viewModel.performWechatLogin()
})
.disposed(by: disposeBag)
rootView.appleLoginBtn.rx.tap
.subscribe(onNext: { [weak self] in
self?.viewModel.performAppleLogin()
})
.disposed(by: disposeBag)
rootView.phoneLoginBtn.rx.tap
.subscribe(onNext: { [weak self] in
})
.disposed(by: disposeBag)
viewModel.loginSuccess
.subscribe(onNext: { [weak self] in
})
.disposed(by: disposeBag)
}
// MARK: - API
func requestSmsCodeAPI() {
DLToast.showLoading()
SystemService.sendSmsCode(phone: rootView.phoneInputTF.text ?? "").subscribe(onNext: { [weak self] response in
DLToast.showSuccess(text: "发送成功")
guard let self = self, let responseData = response.result as? [String : Any] else { return }
self.startCountDown(self.rootView.smsCodeBtn, self.countDownService)
if let timestamp = responseData["timestamp"] as? String {
self.viewModel.timestamp = timestamp
}
}, onError: { _ in }).disposed(by: disposeBag)
}
}
extension LoginViewController: UITextViewDelegate {
func textView(_ textView: UITextView,
shouldInteractWith URL: URL,
in characterRange: NSRange,
interaction: UITextItemInteraction) -> Bool {
// if URL.absoluteString == "Carrier", let model = GyContentModel.current(), let link = model.link {
// AppRouter.push(Route.web, userInfo: ["url": link])
// }
if URL.absoluteString == "UserAgreement" {
AppRouter.push(Route.web, userInfo: ["url": URLManager.shared.userAgreementUrl])
}
if URL.absoluteString == "PrivacyPolicy" {
AppRouter.push(Route.web, userInfo: ["url": URLManager.shared.privacyPolicyUrl])
}
return true
}
func textViewShouldBeginEditing(_ textView: UITextView) -> Bool {
false
}
private func openURL(_ url: String) {}
}