// // 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 = { RxCollectionViewSectionedReloadDataSource { 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 = { RxCollectionViewSectionedReloadDataSource { 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) } }