//
|
// TravelCancelServicePayVC.swift
|
// OKProject
|
//
|
// Created by alvin_y on 2020/6/9.
|
// Copyright © 2020 yangwang. All rights reserved.
|
//
|
|
import UIKit
|
import RxSwift
|
import RxCocoa
|
import SwiftDate
|
import MBProgressHUD
|
class TravelCancelServicePayView: UIView {
|
|
/// MBProgressHUD
|
var hud : MBProgressHUD?
|
|
/// 支付金额
|
@IBOutlet weak var label_payMoney: UILabel!
|
|
/// 提交按钮
|
@IBOutlet weak var button_submit: YYButton!
|
|
/// 支付宝是否选中
|
@IBOutlet weak var button_aliState: UIButton!
|
|
/// 微信是否选中
|
@IBOutlet weak var button_weChatState: UIButton!
|
|
/// 余额是否选中
|
@IBOutlet weak var button_balanceState: UIButton!
|
|
/// 支付宝支付
|
@IBOutlet weak var button_ali: UIButton!
|
|
/// 微信支付
|
@IBOutlet weak var button_weChat: UIButton!
|
|
/// 余额支付
|
@IBOutlet weak var button_balance: UIButton!
|
|
/// 容器
|
@IBOutlet weak var view_container: UIView!
|
|
/// 关闭
|
@IBOutlet weak var button_close: UIButton!
|
|
/// viewModel
|
let viewModel = TravelServiceViewModel()
|
|
/// 支付方式
|
let payType = BehaviorRelay<PayTypeNormal>(value: .balance)
|
|
private var money: Double = 0
|
|
private var orderId = 0
|
|
let refresh = Delegate<Void,Void>()
|
|
let didPressClose = Delegate<Void,Void>()
|
|
/// 获取Self
|
/// - Returns: Self
|
class func instance(money: Double,orderId: Int,cancelId: Int,orderType: Int) -> TravelCancelServicePayView {
|
let v = UINib(nibName: "TravelCancelServicePayView", bundle: nil).instantiate(withOwner: self, options: nil).first as! TravelCancelServicePayView
|
v.setupViews()
|
v.money = money
|
v.orderId = orderId
|
v.bindRx()
|
v.viewModel.orderId.accept(orderId)
|
v.viewModel.orderType.accept(OrderType(rawValue: orderType) ?? .taxi)
|
v.viewModel.cancelId.accept(cancelId)
|
return v
|
}
|
|
func setupViews() {
|
self.frame = UIScreen.main.bounds
|
self.view_container.transform = CGAffineTransform.init(translationX: 0, y: screenH)
|
}
|
|
|
|
|
/// 显示
|
func show() {
|
self.label_payMoney.text = "¥\(money)"
|
app.window?.addSubview(self)
|
UIView.animate(withDuration: 0.2) {
|
self.view_container.transform = CGAffineTransform.identity
|
}
|
}
|
|
/// 隐藏
|
func dismiss() {
|
UIView.animate(withDuration: 0.2, animations: {
|
self.view_container.transform = CGAffineTransform.init(translationX: 0, y: screenH)
|
}) { (_) in
|
self.removeFromSuperview()
|
}
|
|
}
|
|
//MARK: - Rx
|
func bindRx() {
|
|
|
button_close.rx.tap.subscribe(onNext: {[unowned self] (_) in
|
self.dismiss()
|
self.didPressClose.call()
|
}).disposed(by: rx.disposeBag)
|
|
|
/// 取消订单
|
viewModel.cancleOrderTaxiSubject
|
.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { [unowned self](status) in
|
switch status{
|
case .loading:
|
self.showHud()
|
break
|
case .success(let model):
|
self.hide()
|
if self.payType.value == .balance{
|
alert(text: "取消成功")
|
self.dismiss()
|
self.refresh.call()
|
}else{
|
// 调起微信支付宝
|
guard let data = model as? PayModel else{return}
|
|
if self.payType.value == .ali{
|
let request = PayModel(orderString: data.orderString)
|
YYPaymentManager.shared.sendPaymentRequest(request) { (result) in
|
switch result {
|
case .success:
|
alert(text: "支付成功")
|
self.dismiss()
|
self.refresh.call()
|
case .cancel:
|
alert(text: "支付取消")
|
case .failure(let error):
|
alert(text: error.localizedDescription)
|
}
|
}
|
}else if self.payType.value == .weChat{
|
let request = YYWeChatPayRequest(partnerId: data.partnerid, prepayId: data.prepayid, package: data.package, nonceStr: data.noncestr, timeStamp: TimeInterval(data.timestamp) ?? 0, sign: data.sign)
|
YYPaymentManager.shared.sendPaymentRequest(request) { result in
|
switch result {
|
case .success:
|
alert(text: "支付成功")
|
self.dismiss()
|
self.refresh.call()
|
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)
|
|
|
payType.subscribeOn(MainScheduler.instance)
|
.subscribe(onNext: { (s) in
|
switch s{
|
case .balance:
|
self.updateButtonState(sender: self.button_balanceState)
|
break
|
case .weChat:
|
self.updateButtonState(sender: self.button_weChatState)
|
break
|
case .ali:
|
self.updateButtonState(sender: self.button_aliState)
|
break
|
case .offline:
|
break
|
case .company:
|
break
|
}
|
}).disposed(by: rx.disposeBag)
|
|
button_ali.rx.tap
|
.subscribe(onNext: {[unowned self] (_) in
|
self.payType.accept(.ali)
|
}).disposed(by: rx.disposeBag)
|
|
button_weChat.rx.tap
|
.subscribe(onNext: {[unowned self] (_) in
|
self.payType.accept(.weChat)
|
}).disposed(by: rx.disposeBag)
|
|
button_balance.rx.tap
|
.subscribe(onNext: {[unowned self] (_) in
|
self.payType.accept(.balance)
|
}).disposed(by: rx.disposeBag)
|
|
|
button_submit.rx.tap.subscribe(onNext: { [unowned self](_) in
|
self.viewModel.payType.accept(self.payType.value.parame())
|
if self.payType.value == .weChat{
|
let content = (self.viewModel.cancelId.value) == 0 ? nil : "{cancelId:\(self.viewModel.cancelId.value)}"
|
let request = YYWeChatMiniProgramPayRequest.init(orderId: self.viewModel.orderId.value, orderType: self.viewModel.orderType.value.rawValue, type: 2, uid: app.loginInfo.id, userType: 1, content: content)
|
self.dismiss()
|
YYPaymentManager.shared.sendWXPaymentRequest(request) { (result) in
|
switch result {
|
case .success:
|
alert(text: "支付成功")
|
self.dismiss()
|
self.refresh.call()
|
case .cancel:
|
alert(text: "支付取消")
|
case .failure(let error):
|
alert(text: error.localizedDescription)
|
}
|
}
|
}else{
|
self.viewModel.cancleOrderTaxi()
|
}
|
}).disposed(by: rx.disposeBag)
|
}
|
|
/// 更新按钮状态
|
/// - Parameter sender: 按钮
|
func updateButtonState(sender: UIButton) {
|
let array = [button_balanceState,button_weChatState,button_aliState]
|
for item in array{
|
item?.isSelected = item == sender
|
}
|
}
|
|
|
//MARK: - MBProgressHUD
|
/// 不带文字
|
func showHud() {
|
hud = build()
|
}
|
|
func hide() {
|
hud?.hide(animated: true)
|
}
|
|
private func build() -> MBProgressHUD {
|
let hud = MBProgressHUD.showAdded(to: UIApplication.shared.keyWindow!, animated: true)
|
hud.mode = .indeterminate
|
hud.bezelView.style = .solidColor
|
hud.bezelView.color = #colorLiteral(red: 0, green: 0, blue: 0, alpha: 0.7)
|
hud.customView?.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
|
return hud
|
}
|
}
|