//
|
// MineTopUpVC.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/6/16.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import RxSwift
|
|
class MineTopUpModel: NSObject {
|
override required init() {}
|
var name = ""
|
var select = false
|
}
|
|
|
/// 充值
|
class MineTopUpVC: YYViewController {
|
|
@IBOutlet weak var collectHeightConstraint: NSLayoutConstraint!
|
|
/// 立即充值
|
@IBOutlet weak var button_topUp: YYButton!
|
|
/// 金额
|
@IBOutlet weak var textField_money: UITextField!
|
|
/// UICollectionView
|
@IBOutlet weak var collectionView: UICollectionView!
|
|
/// 余额
|
@IBOutlet weak var label_balance: UILabel!
|
|
/// 数据源
|
private let data = ["10元","20元","50元","100元","200元"]
|
|
/// 数据源
|
private var dataSource: [MineTopUpModel] = []
|
|
let viewModel = MineTopUpViewModel()
|
|
|
let userViewModel = MineInfoViewModel()
|
|
override func viewDidLoad() {
|
super.viewDidLoad()
|
|
// Do any additional setup after loading the view.
|
setupBalance()
|
}
|
|
//MARK: - UI
|
override func setupViews() {
|
super.setupViews()
|
navigationItem.title = "充值"
|
view.backgroundColor = UIColor.white
|
collectionView.delegate = self
|
collectionView.dataSource = self
|
collectionView.contentInset = UIEdgeInsets(top: 20, left: 14, bottom: 0, right: 14)
|
collectionView.register(MineTopUpCell.self, forCellWithReuseIdentifier: "item")
|
textField_money.keyboardType = .decimalPad
|
for (value,item) in data.enumerated() {
|
let model = MineTopUpModel()
|
model.name = item
|
model.select = value == 0 ? true : false
|
self.dataSource.append(model)
|
}
|
collectionView.reloadData()
|
}
|
|
|
/// 账户余额
|
func setupBalance() {
|
label_balance.attributedText = AttributedStringbuilder.build()
|
.add(string: "¥", withFont: UIFont.init(name: Semibold, size: 24)!, withColor: .white)
|
.add(string: "\(app.userInfo.balance.remain2Digits())", withFont: UIFont.init(name: Semibold, size: 44)!, withColor: .white)
|
.mutableAttributedString
|
}
|
|
deinit {
|
NotificationCenter.default.removeObserver(self)
|
}
|
|
//MARK: - Rx
|
override func bindRx() {
|
super.bindRx()
|
|
NotificationCenter.default.rx.notification(Notification.Name(rawValue: YYRefreshInfo), object: nil).subscribe(onNext: {[unowned self] (_) in
|
self.userViewModel.queryUserInfo()
|
}).disposed(by: disposeBag)
|
|
collectionView.rx.observe(CGSize.self, #keyPath(UICollectionView.contentSize))
|
.distinctUntilChanged()
|
.subscribe(onNext: {[unowned self] (size) in
|
guard let size = size else{return}
|
self.collectHeightConstraint.constant = size.height
|
}).disposed(by: disposeBag)
|
|
|
userViewModel.requestSubject
|
.subscribe(onNext: {[unowned self] (status) in
|
switch status{
|
case .loading:
|
break
|
case .success(_):
|
self.setupBalance()
|
break
|
case .error(let error):
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: rx.disposeBag)
|
|
/// 取消订单
|
viewModel.requestSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
self.show()
|
break
|
case .success(let model):
|
self.hide()
|
if self.viewModel.payType.value == 2{
|
// 调起微信支付宝
|
guard let data = model as? PayModel else{return}
|
YYPaymentManager.shared.sendPaymentRequest(data) { (result) in
|
switch result {
|
case .success:
|
alert(text: "支付成功")
|
self.userViewModel.queryUserInfo()
|
case .cancel:
|
alert(text: "支付取消")
|
case .failure(let error):
|
alert(text: error.localizedDescription)
|
}
|
}
|
}
|
|
if self.viewModel.payType.value == 1{
|
guard let data = model as? PayModel else{return}
|
let wechatPayRequest = YYWeChatPayRequest(partnerId: data.partnerid, prepayId: data.prepayid, package: data.package, nonceStr: data.noncestr, timeStamp: TimeInterval(data.timestamp) ?? 0, sign: data.sign)
|
YYPaymentManager.shared.sendPaymentRequest(wechatPayRequest) { result in
|
switch result {
|
case .success:
|
alert(text: "支付成功")
|
self.userViewModel.queryUserInfo()
|
case .cancel:
|
alert(text: "支付取消")
|
case .failure(let error):
|
alert(text: error.localizedDescription)
|
}
|
}
|
}
|
break
|
case .error(let error):
|
self.hide()
|
alert(text: error.localizedDescription)
|
break
|
}
|
}).disposed(by: rx.disposeBag)
|
|
|
button_topUp.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
let data = self.dataSource.filter { (model) -> Bool in
|
return model.select
|
}
|
if data.count == 0 && (self.textField_money.text == nil || self.textField_money.text == ""){
|
alert(text: "请选择充值金额")
|
return
|
}
|
let normal = self.dataSource.filter { (model) -> Bool in
|
return model.select
|
}
|
let money = (self.textField_money.text == nil || self.textField_money.text == "") ? normal.first?.name : self.textField_money.text
|
self.viewModel.money.accept((money! as NSString).doubleValue)
|
MineInfoView.instance(data: ["支付宝支付","微信支付"]).show { (row) in
|
self.viewModel.payType.accept(row == 0 ? 2 : 1)
|
self.viewModel.depositBalance()
|
}
|
}).disposed(by: disposeBag)
|
|
}
|
}
|
|
// MARK: - UICollectionViewDelegate,UICollectionViewDataSource
|
extension MineTopUpVC: UICollectionViewDelegate,UICollectionViewDataSource,UICollectionViewDelegateFlowLayout{
|
|
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
|
let data = dataSource[indexPath.row]
|
data.select = !data.select
|
self.dataSource = self.dataSource.compactMap { (model) -> MineTopUpModel in
|
let model = model
|
if model != data{
|
model.select = false
|
}
|
return model
|
}
|
self.collectionView.reloadData()
|
}
|
|
func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
|
return dataSource.count
|
}
|
|
func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
|
let cell = collectionView.dequeueReusableCell(withReuseIdentifier: "item", for: indexPath) as! MineTopUpCell
|
cell.configure(model: dataSource[indexPath.row])
|
return cell
|
}
|
|
func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
|
let w = (screenW - 28 - 64) / 3
|
return CGSize(width: w, height: 30)
|
}
|
|
}
|