购买流程优化,购买记录开发

This commit is contained in:
zeng 2025-05-07 09:32:58 +08:00
parent b710eb9ac1
commit c73ae42733
9 changed files with 69 additions and 12 deletions

View File

@ -24,7 +24,7 @@ class SPWalletAPI: NSObject {
}
///
static func requestCreateOrder(payId: String, shortPlayId: String = "0", videoId: String = "0", completer: ((_ orderModel: SPIAPOrderModel?) -> Void)?) {
static func requestCreateOrder(payId: String, shortPlayId: String, videoId: String, completer: ((_ orderModel: SPIAPOrderModel?) -> Void)?) {
var param = SPNetworkParameters(path: "/createOrder")
param.parameters = [
"payment_channel" : "apple",

View File

@ -78,11 +78,17 @@ class SPPlayerDetailViewController: SPPlayerListViewController {
override func play() {
guard let videoInfo = self.viewModel.currentPlayer?.videoInfo else { return }
//
if videoInfo.is_lock == true {
self.pause()
//
let myCoin = SPLoginManager.manager.userInfo?.coin_left_total ?? 0
//
let videoCoin = videoInfo.coins ?? 0
self.onPlayBuy()
if myCoin < videoCoin {
self.onPlayBuy()
}
return
}
@ -149,7 +155,11 @@ extension SPPlayerDetailViewController {
///
private func onPlayBuy() {
guard let videoInfo = self.viewModel.currentPlayer?.videoInfo else { return }
let view = SPPlayBuyView()
view.shortPlayId = videoInfo.short_play_id
view.videoId = videoInfo.short_play_video_id
view.present(in: nil)
}

View File

@ -9,6 +9,18 @@ import UIKit
class SPPlayBuyView: HWPanModalContentView {
var shortPlayId: String? {
didSet {
rechargeView.shortPlayId = shortPlayId
memberView.shortPlayId = shortPlayId
}
}
var videoId: String? {
didSet {
rechargeView.videoId = videoId
memberView.videoId = videoId
}
}
//MARK: UI
private lazy var bgView: UIImageView = {
@ -54,11 +66,18 @@ class SPPlayBuyView: HWPanModalContentView {
private lazy var rechargeView: SPCoinRechargeView = {
let view = SPCoinRechargeView()
view.userInfo = SPLoginManager.manager.userInfo
view.rechargeFinishHandle = { [weak self] in
self?.handleBuyFinish()
}
return view
}()
private lazy var memberView: SPMemberRechargeView = {
let view = SPMemberRechargeView()
view.buyFinishHandle = { [weak self] in
self?.handleBuyFinish()
}
return view
}()
@ -95,6 +114,17 @@ class SPPlayBuyView: HWPanModalContentView {
}
}
extension SPPlayBuyView {
///
private func handleBuyFinish() {
SPLoginManager.manager.updateUserInfo { [weak self] in
guard let self = self else { return }
self.rechargeView.userInfo = SPLoginManager.manager.userInfo
}
}
}
extension SPPlayBuyView {
private func _setupUI() {

View File

@ -10,6 +10,14 @@ import SmartCodable
class SPBuyRecordsModel: SPModel, SmartCodable {
var short_play_id: String?
var coins: Int?
var short_play_video_id: String?
var coin_type: Int?
var created_at: String?
var episode: String?
var image_url: String?
var name: String?
}

View File

@ -30,6 +30,9 @@ class SPCoinRechargeView: UIView {
}
}
var shortPlayId: String?
var videoId: String?
//MARK: UI
private lazy var coinNameLabel: UILabel = {
let label = UILabel()
@ -136,8 +139,9 @@ extension SPCoinRechargeView: UICollectionViewDelegate, UICollectionViewDataSour
guard let model = self.dataArr?[indexPath.row] else { return }
SPIAPManager.manager.startRecharge(model: model) { [weak self] finish in
SPIAPManager.manager.startRecharge(model: model, shortPlayId: shortPlayId, videoId: videoId) { [weak self] finish in
if finish {
SPToast.show(text: "success".localized)
self?.rechargeFinishHandle?()
}
}

View File

@ -11,7 +11,10 @@ class SPConsumptionRecordsCell: SPTableViewCell {
var model: SPBuyRecordsModel? {
didSet {
titleLabel.text = "Purchase Single Episode".localized
timeLabel.text = model?.created_at
desLabel.text = "Ep.\(model?.episode ?? "") \(model?.name ?? "")"
coinLabel.text = "-\(model?.coins ?? 0) Coins"
}
}
@ -46,10 +49,6 @@ class SPConsumptionRecordsCell: SPTableViewCell {
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
titleLabel.text = "Purchase Single Episode"
timeLabel.text = "2024-6-10 23:41:18"
desLabel.text = "Ep.8 Romantic Flash Marriage In Progress"
coinLabel.text = "-500 Coins"
_setupUI()
}

View File

@ -27,6 +27,9 @@ class SPMemberRechargeView: UIView {
}
}
var shortPlayId: String?
var videoId: String?
//MARK: UI
private lazy var titleLabel: UILabel = {
let label = UILabel()
@ -101,8 +104,9 @@ extension SPMemberRechargeView: UICollectionViewDelegate, UICollectionViewDataSo
func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
guard let model = dataArr?[indexPath.row] else { return }
SPIAPManager.manager.startRecharge(model: model) { [weak self] finish in
SPIAPManager.manager.startRecharge(model: model, shortPlayId: shortPlayId, videoId: videoId) { [weak self] finish in
if finish {
SPToast.show(text: "success".localized)
self?.buyFinishHandle?()
}
}

View File

@ -28,7 +28,7 @@ class SPIAPManager: NSObject {
private var payId: String?
///
func startRecharge(model: SPPayTemplateItem, handler: CompletionHandler? = nil) {
func startRecharge(model: SPPayTemplateItem, shortPlayId: String? = nil, videoId: String? = nil, handler: CompletionHandler? = nil) {
guard let payId = model.id else {
handler?(false)
return
@ -39,7 +39,7 @@ class SPIAPManager: NSObject {
SPHUD.show()
SPWalletAPI.requestCreateOrder(payId: payId) { orderModel in
SPWalletAPI.requestCreateOrder(payId: payId, shortPlayId: shortPlayId ?? "0", videoId: videoId ?? "0") { orderModel in
guard let orderModel = orderModel else {
SPHUD.dismiss()
self.completionHandler?(false)

View File

@ -7,6 +7,7 @@
*/
"Home" = "Home";
"success" = "success";
"For You" = "For You";
"Error" = "Error";
"Profile" = "Profile";
@ -88,6 +89,7 @@
"This episode is locked" = "This episode is locked";
"Unlock now for" = "Unlock now for";
"Unlock the previous episode" = "Unlock the previous episode";
"Purchase Single Episode" = "Purchase Single Episode";
///请购买上一集提示
"kAlertMessage_01" = "The previous episode of this series has not been unlocked yet. Please unlock the previous episode first.";