jsdw_ios/QuickLocation/Section/PopupWindow/PromotionalActivitiesVC.swift

211 lines
8.6 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.

//
// PromotionalActivitiesVC.swift
// QuickLocation
//
// Created by on 2026/7/3.
//
import UIKit
import RxSwift
import RxCocoa
import RxDataSources
extension PromotionalActivitiesItem: Equatable {
static func == (lhs: Self, rhs: Self) -> Bool {
switch (lhs, rhs) {
case (.recommend(let a), .recommend(let b)): return a == b
case (.normal(let a), .normal(let b)): return a == b
default: return false
}
}
}
extension PromotionalActivitiesItem: IdentifiableType {
typealias Identity = String
var identity: String {
switch self {
case .recommend(let model): return model.goods_id
case .normal(let model): return model.goods_id
}
}
}
class PromotionalActivitiesVC: BaseViewController {
fileprivate var rootView: PromotionalActivitiesView!
var onDismiss: (() -> Void)?
private var selectedGoodsId: String = ""
private let itemsRelay = BehaviorRelay<[PromotionalActivitiesItem]>(value: [])
var items: [PromotionalActivitiesItem] {
get { itemsRelay.value }
set { itemsRelay.accept(newValue) }
}
override func loadView() {
rootView = PromotionalActivitiesView(frame: UIScreen.main.bounds)
view = rootView
}
override func viewDidLoad() {
super.viewDidLoad()
setupTableView()
requestRechargeInfo()
rootView.confirmBtn.rx.tap.subscribe(onNext: { _ in
self.requestOrderPayParams()
}).disposed(by: disposeBag)
}
private func setupTableView() {
typealias Section = SectionModel<String, PromotionalActivitiesItem>
let dataSource = RxTableViewSectionedReloadDataSource<Section> { _, tableView, indexPath, item in
let isSelected = item.identity == self.selectedGoodsId
switch item {
case .recommend(let model):
let cell: PromotionalRecommendCell = tableView.dequeueReusableCell(for: indexPath)
cell.configure(model: model, isSelected: isSelected)
return cell
case .normal(let model):
let cell: PromotionalNormalCell = tableView.dequeueReusableCell(for: indexPath)
cell.configure(model: model, isSelected: isSelected)
return cell
}
}
itemsRelay
.map { [SectionModel(model: "", items: $0)] }
.bind(to: rootView.tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
itemsRelay
.subscribe(onNext: { [weak self] items in
self?.rootView.tableView.layoutChain.height(CGFloat(items.count) * 106 + 5)
self?.rootView.scrollContentView.layoutIfNeeded()
})
.disposed(by: disposeBag)
rootView.tableView.rx.itemSelected
.subscribe(onNext: { [weak self] indexPath in
guard let self = self else { return }
let item = self.itemsRelay.value[indexPath.row]
self.selectedGoodsId = item.identity
self.rootView.tableView.reloadData()
})
.disposed(by: disposeBag)
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
if isMovingFromParent {
onDismiss?()
}
}
// MARK: - API
private func requestRechargeInfo() {
DLToast.showLoading()
OrderService.rechargeInfo(type: "member").subscribe(onNext: { [weak self] response in
guard let self = self else { return }
if let checkedId = response.list.first(where: { $0.checked })?.goods_id {
self.selectedGoodsId = checkedId
}
let items = response.list.map { model in
model.goods_id == "20042"
? PromotionalActivitiesItem.recommend(model: model)
: PromotionalActivitiesItem.normal(model: model)
}
self.items = items
self.rootView.startCountdown()
}).disposed(by: disposeBag)
}
private func requestOrderPayParams() {
guard let systemConfig = AppContextManager.shared.systemConfig, let timeConfig = systemConfig.timeConfig else {
return
}
if timeConfig.pay_pop_type == 3 {
IAPManager.shared.purchase(goodsId: selectedGoodsId) { [weak self] success, msg in
guard let self = self else { return }
if success {
self.showPayResultPop(showCloseBtn: false,
status: true,
title: "支付成功",
message: "恭喜您!成功开通!",
confirmText: "确定", confirmBlock: {
AppRouter.shared.popOrDismiss()
}, cancelBlock: { })
} else {
self.showPayResultPop(status: false,
title: "支付失败",
message: msg ?? "很抱歉,请您重新支付!",
confirmText: "重新支付", confirmBlock: { },
cancelText: "取消", cancelBlock: {
AppRouter.shared.popOrDismiss()
})
}
}
return
}
let payType = timeConfig.pay_pop_type == 1 ? "alipay" : "weixin"
dl.showLoading()
OrderService.orderPayParams(goodsId: selectedGoodsId,
payType: payType).subscribe(onNext: { response in
self.dl.dismiss()
guard let data = response.data else { return }
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: "恭喜您!成功开通\("")",
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)
}
}