153 lines
4.9 KiB
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) {}
|
|
}
|