jsdw_ios/QuickLocation/Section/VipRecharge/VipRechargeVC.swift

160 lines
7.0 KiB
Swift
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// VipRechargeVC.swift
// QuickLocation
//
// Created by on 2026/6/3.
//
import UIKit
import RxSwift
import RxCocoa
import RxDataSources
class VipRechargeVC: BaseViewController {
fileprivate var rootView: VipRechargeView!
override func loadView() {
rootView = VipRechargeView(frame: UIScreen.main.bounds)
view = rootView
}
private var viewModel = VipRechargeVM()
override func viewDidLoad() {
super.viewDidLoad()
fd_interactivePopDisabled = true
bindViewModel()
reactiveAction()
requestRechargeInfo()
}
private func bindViewModel() {
viewModel.output.sectionedItems
.bind(to: rootView.expenseCollectionView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
viewModel.output.vipRightItems
.bind(to: rootView.vipRightsCollectionView.rx.items(dataSource: vipRightsDataSource))
.disposed(by: disposeBag)
viewModel.createCount.asObservable()
.bind(to: rootView.createCountLab.rx.text)
.disposed(by: disposeBag)
viewModel.groupCount.asObservable()
.bind(to: rootView.groupCountLab.rx.text)
.disposed(by: disposeBag)
viewModel.joinCount.asObservable()
.bind(to: rootView.joinCountLab.rx.text)
.disposed(by: disposeBag)
}
private func reactiveAction() {
rootView.payBtnView.rx.tapGesture.subscribe(onNext: { _ in
self.requestOrderPayParams()
}).disposed(by: disposeBag)
Observable.zip(
rootView.expenseCollectionView.rx.itemSelected,
rootView.expenseCollectionView.rx.modelSelected(VipExpenseModel.self)
).subscribe(onNext: { indexPath, model in
self.viewModel.selectedIndex = indexPath.row
self.rootView.setupPayTypes(model.pay_type)
self.rootView.animatePrice(to: model.price)
self.rootView.discountLab.text = self.viewModel.discountPriceString
})
.disposed(by: disposeBag)
}
// MARK: - dataSource
private lazy var dataSource: RxCollectionViewSectionedReloadDataSource<ExpenseListSectionModel> = {
RxCollectionViewSectionedReloadDataSource<ExpenseListSectionModel> { datasource, collectionView, indexPath, model in
let cell: ExpenseCell = collectionView.dequeueReusableCell(for: indexPath)
cell.configure(model: model, isSelected: self.viewModel.selectedIndex == indexPath.row)
return cell
}
}()
private lazy var vipRightsDataSource: RxCollectionViewSectionedReloadDataSource<VipRightsListSectionModel> = {
RxCollectionViewSectionedReloadDataSource<VipRightsListSectionModel> { datasource, collectionView, indexPath, model in
let cell: VipRightsCell = collectionView.dequeueReusableCell(for: indexPath)
cell.configure(model)
return cell
}
}()
// MARK: - API
private func requestRechargeInfo() {
DLToast.showLoading()
OrderService.rechargeInfo(type: "member").subscribe(onNext: { [weak self] response in
guard let self = self else { return }
self.viewModel.loadData(list: response.list)
self.rootView.setupPayTypes(self.viewModel.payType)
self.rootView.animatePrice(to: self.viewModel.price)
self.rootView.discountLab.text = self.viewModel.discountPriceString
}).disposed(by: disposeBag)
}
// MARK: - API
private func requestOrderPayParams() {
DLToast.showLoading()
let types = viewModel.payType.components(separatedBy: ",").map { $0.trimmingCharacters(in: .whitespaces) }
OrderService.orderPayParams(goodsId: viewModel.goodsId,
payType: types[rootView.selectedPayTypeTag]).subscribe(onNext: { response in
guard let data = response.data else { return }
let payType = types[self.rootView.selectedPayTypeTag]
if payType == "weixin" { //
// WXApi.registerApp(model.appId, universalLink: AppSettings.kAppsUniversalLink)
//
// let request: PayReq = PayReq()
// request.partnerId = model.partnerId
// request.prepayId = model.prepayId
// request.package = model.packageValue
// request.nonceStr = model.nonceStr
// request.timeStamp = UInt32(model.timeStamp) ?? 0
// request.sign = model.sign
// WXApi.send(request)
}
else if payType == "alipay" { //
if let payParam = data["payParam"] as? String, let appId = data["payParam"] as? String {
AlipaySDK.defaultService().payOrder(payParam, fromScheme: "Alipay\(appId)") { resultDic in
print("支付宝callback -> \(resultDic)")
guard let result = resultDic,
let resultStatus = result["resultStatus"] as? String else { return }
/**
9000
8000
4000
5000
6001
6002
6004
*/
if resultStatus == "9000" {
self.showPayResultPop(showCloseBtn: false,
status: true,
title: "支付成功",
message: "恭喜您!成功开通\(self.viewModel.goodsName)",
confirmText: "确定", confirmBlock: {
AppRouter.shared.popOrDismiss()
}, cancelBlock: { })
}
else {
self.showPayResultPop(status: false,
title: "支付失败",
message: "很抱歉,请您重新支付!",
confirmText: "重新支付", confirmBlock: { }, cancelText: "取消", cancelBlock: {
AppRouter.shared.popOrDismiss()
})
}
}
}
}
}, onError: { _ in }).disposed(by: disposeBag)
}
}