宽窄优行-由【嘉易行】项目成品而来
younger_times
2023-07-05 0d8f5fc8a516bfd07e425909e4a4432600572ee7
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
//
//  CouponPaymentView.swift
//  OKProject
//
//  Created by 无故事王国 on 2022/2/11.
//  Copyright © 2022 yangwang. All rights reserved.
//
 
import UIKit
import RxSwift
import RxCocoa
 
class CouponPaymentView: UIView,NIBLoadable{
 
    @IBOutlet weak var label_payMoney: UILabel!
    @IBOutlet weak var label_originPayMoney: UILabel!
    @IBOutlet weak var view_container: UIView!
    @IBOutlet weak var originMoneyView: UIView!
    @IBOutlet weak var paymentBtn: UIButton!
    @IBOutlet weak var wechatImg: UIImageView!
    @IBOutlet weak var aliImg: UIImageView!
    @IBOutlet weak var balanceImg: UIImageView!
    @IBOutlet weak var balanceL: UILabel!
 
    private var money:Double = 0
    private var cardId:Int = 0
    private var originMoney:Double?
    private var orderType:Int = 0
    private let payType = BehaviorRelay<PayTypeNormal>(value: .balance)
    private var dismissClouse:(()->Void)?
    //    private let travelServicePayViewModel = TravelServicePayViewModel()
 
    override func awakeFromNib() {
        super.awakeFromNib()
    }
 
    /// 获取Self
    /// - Returns: Self
    class func instance(cardId: Int,money:Double,originMoney:Double? = nil) -> CouponPaymentView {
        let v = CouponPaymentView.loadViewFromNib()
        v.setupViews()
        v.money = money
        v.originMoney = originMoney
        v.cardId = cardId
        return v
    }
 
    func setupViews()  {
        self.frame = UIScreen.main.bounds
        self.view_container.transform = CGAffineTransform.init(translationX: 0, y: screenH)
        bindRx()
    }
 
    func bindRx() {
        payType.subscribe(onNext: {[weak self] type in
            guard let weakSelf = self else { return }
            switch type{
                case .ali:
                    weakSelf.aliImg.image = UIImage(named: "icon_raidobutton_selected")
                    weakSelf.wechatImg.image = UIImage(named: "icon_raidobutton")
                    weakSelf.balanceImg.image = UIImage(named: "icon_raidobutton")
                case .balance:
                    weakSelf.aliImg.image = UIImage(named: "icon_raidobutton")
                    weakSelf.wechatImg.image = UIImage(named: "icon_raidobutton")
                    weakSelf.balanceImg.image = UIImage(named: "icon_raidobutton_selected")
                case .weChat:
                    weakSelf.aliImg.image = UIImage(named: "icon_raidobutton")
                    weakSelf.wechatImg.image = UIImage(named: "icon_raidobutton_selected")
                    weakSelf.balanceImg.image = UIImage(named: "icon_raidobutton")
                case .offline:
                    break
                case .company:
                    break
 
            }
 
        }).disposed(by: rx.disposeBag)
 
 
        //        travelServicePayViewModel.queryBalanceSubject.subscribe(onNext: {status in
        //            switch status {
        //                case .loading:break
        //                case .success(let model):
        //                    guard let data = model as? QueryBalanceModel else{return}
        //                    self.balanceL.text = "余额(余额\(data.balance)元)"
        //                    break
        //                default:break
        //            }
        //
        //        }).disposed(by: rx.disposeBag)
 
        //        travelServicePayViewModel.orderId.accept(cardId)
        //        travelServicePayViewModel.orderType.accept(.taxi)
        //        travelServicePayViewModel.queryBalance()
    }
 
    /// 显示
    func show(defaultPayBy:PayTypeNormal = .weChat,orderType:Int,dismissClouse: @escaping ()->Void)  {
        self.label_payMoney.text = String(format: "¥%@", money.ld_formatFloat)
        self.label_originPayMoney.text = String(format: "¥%@元", (originMoney ?? 0).ld_formatFloat)
        originMoneyView.isHidden = originMoney == nil
        self.paymentBtn.setTitle(String(format: "立即支付¥%@元", money.ld_formatFloat), for: .normal)
        self.balanceL.text = "余额(余额:\(app.userInfo.balance.ld_formatFloat)元)"
        app.window?.addSubview(self)
        UIView.animate(withDuration: 0.2) {
            self.view_container.transform = CGAffineTransform.identity
        }
        self.orderType = orderType
        self.dismissClouse = dismissClouse
        payType.accept(defaultPayBy)
    }
 
    @IBAction func paymentAction(_ sender: UIButton) {
        APIManager.shared.provider.rx.request(.payTaxiCard(id: cardId, payType: payType.value)).map(YYModel<PayModel>.self).validate().subscribe(onSuccess: {[weak self] model in
            guard let weakSelf = self else { return }
            guard let data = model.data else { return }
            switch weakSelf.payType.value {
                case .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: "支付成功")
                                NotificationCenter.default.post(name: UpdateShopList_RefreshNoti, object: weakSelf.orderType)
                                weakSelf.dismiss()
                            case .cancel:
                                alert(text: "支付取消")
                            case .failure(let error):
                                alert(text: error.localizedDescription)
                        }
                    }
                case .ali:
                    let request = PayModel(orderString: data.orderString)
                    YYPaymentManager.shared.sendPaymentRequest(request) { result in
                        switch result {
                            case .success:
                                alert(text: "支付成功")
                                NotificationCenter.default.post(name: UpdateShopList_RefreshNoti, object: weakSelf.orderType)
                                weakSelf.dismiss()
                            case .cancel:
                                alert(text: "支付取消")
                            case .failure(let error):
                                alert(text: error.localizedDescription)
                        }
                    }
                case .balance:
                    if model.code == 200{
                        alert(text: "支付成功")
                        NotificationCenter.default.post(name: UpdateShopList_RefreshNoti, object: weakSelf.orderType)
                        app.userInfo.balance -= weakSelf.money
                        app.userInfo.save()
                        weakSelf.dismiss()
                    }else{
                        alert(text: "余额不足")
                    }
                default:break
            }
        }) { error in
            alert(text: error.localizedDescription)
        }.disposed(by: rx.disposeBag)
    }
    
    /// 隐藏
    func dismiss()  {
        UIView.animate(withDuration: 0.2, animations: {
            self.view_container.transform = CGAffineTransform.init(translationX: 0, y: screenH)
        }) { (_) in
            self.dismissClouse?()
            self.removeFromSuperview()
        }
 
    }
 
    @IBAction func paytypeAction(_ sender: UIButton) {
        switch sender.tag {
            case 10:
                payType.accept(.weChat)
            case 11:
                payType.accept(.ali)
            case 12:
                payType.accept(.balance)
            default:break
        }
    }
 
    @IBAction func closeAction(_ sender: Any) {
        dismiss()
    }
 
}