//
|
// LoginViewModel.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/5/20.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import RxSwift
|
import RxCocoa
|
import HandyJSON
|
/// 登录类型
|
enum LoginType {
|
// 验证码
|
case code
|
// 密码
|
case password
|
}
|
|
class LoginViewModel: YYViewModel {
|
|
/// 手机号
|
let phoneNumber = BehaviorRelay<String>(value: "")
|
|
/// 密码&验证码
|
let password = BehaviorRelay<String>(value: "")
|
|
/// 是否同意协议
|
let agreement = BehaviorRelay<Bool?>(value: false)
|
|
/// 登录类型
|
let type = BehaviorRelay<LoginType>(value: .code)
|
|
/// 发送验证码
|
lazy var sendSMSCodeSubject = PublishSubject<RequestStatus>()
|
|
/// 登录
|
lazy var loginSubject = PublishSubject<RequestStatus>()
|
|
/// 微信登录
|
lazy var wxLoginSubject = PublishSubject<RequestStatus>()
|
|
/// 登录
|
func login() {
|
do {
|
try agreement.value?.checkAgreement(agreementName: "宽窄优行用户服务协议")
|
try phoneNumber.value.checkPhoneNumber()
|
if type.value == .code{
|
try password.value.checkSMSCode()
|
}else{
|
try password.value.checkPassword()
|
}
|
if type.value == .code{
|
loginSubject.onNext(.loading)
|
APIManager.shared.provider.rx
|
.request(.captchaLogin(phone: phoneNumber.value, code: password.value, registAreaCode: YYLocationManager.shared.currentCityCode, registIp: nil))
|
.map(YYModel<LoginModel>.self)
|
.validate()
|
.subscribe(onSuccess: { [unowned self] (model) in
|
// 存贮用户信息
|
guard let data = model.data else{return}
|
app.loginInfo.save(model: data)
|
self.loginSubject.onNext(.success(nil))
|
}) {[unowned self] (error) in
|
self.loginSubject.onNext(.error(error))
|
}
|
.disposed(by: disposeBag)
|
}else{
|
loginSubject.onNext(.loading)
|
APIManager.shared.provider.rx
|
.request(.userLogin(phone: phoneNumber.value, password: password.value))
|
.map(YYModel<LoginModel>.self)
|
.validate()
|
.subscribe(onSuccess: { [unowned self] (model) in
|
// 存贮用户信息
|
guard let data = model.data else{return}
|
app.loginInfo.save(model: data)
|
self.loginSubject.onNext(.success(nil))
|
}) {[unowned self] (error) in
|
self.loginSubject.onNext(.error(error))
|
}
|
.disposed(by: disposeBag)
|
}
|
|
} catch {
|
loginSubject.onNext(.error(error))
|
}
|
}
|
|
|
/// 微信登录
|
/// - Parameters:
|
/// - avatar: 头像
|
/// - nickName: 昵称
|
/// - sex: 性别
|
/// - openid: openid
|
/// - unionid: unionid
|
/// - registAreaCode: registAreaCode
|
func wxLogin(avatar: String,nickName: String,sex: Int,openid: String,unionid: String,registAreaCode: String?) {
|
wxLoginSubject.onNext(.loading)
|
APIManager.shared.provider.rx
|
.request(.wxLogin(avatar: avatar,nickName: nickName,sex: sex,openid: openid, unionid: unionid, type: 1, registAreaCode: registAreaCode))
|
.map(YYModel<LoginModel>.self)
|
.validate()
|
.subscribe(onSuccess: { [weak self] (model) in
|
self?.wxLoginSubject.onNext(.success(model.data))
|
}) { (error) in
|
self.wxLoginSubject.onNext(.error(error))
|
}
|
.disposed(by: disposeBag)
|
}
|
|
/// 发送验证码
|
func sendSMSCode(type: Int) {
|
do {
|
try phoneNumber.value.checkPhoneNumber()
|
sendSMSCodeSubject.onNext(.loading)
|
APIManager.shared.provider.rx
|
.request(.queryCaptcha(phone: phoneNumber.value,type: type))
|
.map(YYModel<Nothing>.self)
|
.validate()
|
.subscribe(onSuccess: { [weak self] (model) in
|
self?.sendSMSCodeSubject.onNext(.success(model))
|
}) { (error) in
|
self.sendSMSCodeSubject.onNext(.error(error))
|
}
|
.disposed(by: disposeBag)
|
} catch {
|
sendSMSCodeSubject.onNext(.error(error))
|
}
|
}
|
}
|