291 lines
9.3 KiB
Swift
291 lines
9.3 KiB
Swift
//
|
|
// FAOldVideoRechargeView.swift
|
|
// Fableon
|
|
//
|
|
// Created by 湖北秦九 on 2025/10/28.
|
|
//
|
|
|
|
import UIKit
|
|
import HWPanModal
|
|
|
|
class FAOldVideoRechargeView: FAPanModalContentView {
|
|
|
|
var buyFinishHandle: (() -> Void)?
|
|
|
|
var model: FAPayDateModel? {
|
|
didSet {
|
|
self.stackView.fa_removeAllArrangedSubview()
|
|
self.vipView.dataArr = model?.list_sub_vip ?? []
|
|
self.coinsView.setDataArr(model?.list_coins ?? [])
|
|
|
|
if let sort = model?.sort, sort.count > 0 {
|
|
sort.forEach {
|
|
if $0 == .vip, model?.list_sub_vip?.isEmpty == false {
|
|
self.stackView.addArrangedSubview(self.vipView)
|
|
} else if $0 == .coin, model?.list_coins?.isEmpty == false {
|
|
self.stackView.addArrangedSubview(self.coinsView)
|
|
}
|
|
}
|
|
} else {
|
|
if model?.list_sub_vip?.isEmpty == false {
|
|
self.stackView.addArrangedSubview(self.vipView)
|
|
}
|
|
if model?.list_coins?.isEmpty == false {
|
|
self.stackView.addArrangedSubview(self.coinsView)
|
|
}
|
|
}
|
|
|
|
// self.stackView.addArrangedSubview(self.tipView)
|
|
|
|
self.setNeedsLayoutUpdate()
|
|
}
|
|
}
|
|
|
|
var videoInfo: FAVideoInfoModel? {
|
|
didSet {
|
|
self.coinsView.videoId = videoInfo?.short_play_video_id
|
|
self.coinsView.shortPlayId = videoInfo?.short_play_id
|
|
self.vipView.videoId = videoInfo?.short_play_video_id
|
|
self.vipView.shortPlayId = videoInfo?.short_play_id
|
|
videoCoinsView.coins = videoInfo?.coins ?? 0
|
|
|
|
self.requestRestore()
|
|
}
|
|
}
|
|
|
|
private lazy var closeButton: UIButton = {
|
|
let button = UIButton(type: .custom, primaryAction: UIAction(handler: { [weak self] _ in
|
|
guard let self = self else { return }
|
|
FAStatAPI.requestEventStat(orderCode: nil, shortPlayId: self.videoInfo?.short_play_id, videoId: self.videoInfo?.short_play_video_id, eventKey: .payTemplateDialog, errorMsg: nil, otherParamenters: [
|
|
"event_name" : "pay cancel"
|
|
])
|
|
Task {
|
|
await self.dismiss(animated: true)
|
|
}
|
|
}))
|
|
button.setImage(UIImage(named: "close_icon_02"), for: .normal)
|
|
return button
|
|
}()
|
|
|
|
private lazy var scrollView: FAScrollView = {
|
|
let scrollView = FAScrollView()
|
|
scrollView.clipsToBounds = false
|
|
return scrollView
|
|
}()
|
|
|
|
private lazy var stackView: UIStackView = {
|
|
let view = UIStackView()
|
|
view.axis = .vertical
|
|
view.spacing = 18
|
|
return view
|
|
}()
|
|
|
|
private lazy var coinsView: FAStoreCoinsView = {
|
|
let view = FAStoreCoinsView()
|
|
view.buyFinishHandle = { [weak self] in
|
|
self?.buyFinishHandle?()
|
|
Task {
|
|
await self?.dismiss(animated: true)
|
|
}
|
|
}
|
|
return view
|
|
}()
|
|
|
|
private lazy var vipView: FAStoreVipView = {
|
|
let view = FAStoreVipView()
|
|
view.buyFinishHandle = { [weak self] in
|
|
self?.buyFinishHandle?()
|
|
Task {
|
|
await self?.dismiss(animated: true)
|
|
}
|
|
}
|
|
return view
|
|
}()
|
|
|
|
private lazy var videoCoinsView: FAOldVideoRechargeView.CoinsView = {
|
|
let view = FAOldVideoRechargeView.CoinsView()
|
|
view.title = "Price".localized + ":"
|
|
return view
|
|
}()
|
|
|
|
private lazy var totalCoinsView: FAOldVideoRechargeView.CoinsView = {
|
|
let view = FAOldVideoRechargeView.CoinsView()
|
|
view.title = "Balance".localized + ":"
|
|
view.coins = FALogin.manager.userInfo?.totalCoins ?? 0
|
|
return view
|
|
}()
|
|
|
|
private lazy var titleLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 12, weight: .medium)
|
|
label.textColor = .FFFFFF
|
|
label.text = "store_title_1".localized
|
|
return label
|
|
}()
|
|
|
|
deinit {
|
|
NotificationCenter.default.removeObserver(self)
|
|
}
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
NotificationCenter.default.addObserver(self, selector: #selector(userInfoUpdateNotification), name: FALogin.userInfoUpdateNotification, object: nil)
|
|
self.contentHeight = UIScreen.height - UIScreen.safeTop
|
|
// self.backgroundColor = ._000000.withAlphaComponent(0.6)
|
|
self.backgroundColor = .clear
|
|
self.mainScrollView = self.scrollView
|
|
fa_setupLayout()
|
|
}
|
|
|
|
@MainActor required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
@objc private func userInfoUpdateNotification() {
|
|
totalCoinsView.coins = FALogin.manager.userInfo?.totalCoins ?? 0
|
|
}
|
|
|
|
override func present(in view: UIView?) {
|
|
super.present(in: view)
|
|
self.hw_contentView.fa_addEffectView(style: .dark)
|
|
self.hw_contentView.fa_setRoundedCorner(topLeft: 24, topRight: 24, bottomLeft: 0, bottomRight: 0)
|
|
}
|
|
|
|
override func allowsTapBackgroundToDismiss() -> Bool {
|
|
return false
|
|
}
|
|
}
|
|
|
|
extension FAOldVideoRechargeView {
|
|
|
|
private func fa_setupLayout() {
|
|
addSubview(closeButton)
|
|
addSubview(videoCoinsView)
|
|
addSubview(totalCoinsView)
|
|
addSubview(titleLabel)
|
|
addSubview(scrollView)
|
|
scrollView.addSubview(stackView)
|
|
|
|
closeButton.snp.makeConstraints { make in
|
|
make.right.equalToSuperview().offset(-16)
|
|
make.top.equalToSuperview().offset(12)
|
|
}
|
|
|
|
videoCoinsView.snp.makeConstraints { make in
|
|
make.centerY.equalTo(closeButton)
|
|
make.left.equalToSuperview().offset(16)
|
|
}
|
|
|
|
totalCoinsView.snp.makeConstraints { make in
|
|
make.centerY.equalTo(closeButton)
|
|
make.left.equalTo(videoCoinsView.snp.right).offset(15)
|
|
}
|
|
|
|
titleLabel.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.top.equalToSuperview().offset(39)
|
|
}
|
|
|
|
scrollView.snp.makeConstraints { make in
|
|
make.left.right.equalToSuperview()
|
|
make.top.equalToSuperview().offset(74)
|
|
make.bottom.equalToSuperview()
|
|
}
|
|
|
|
stackView.snp.makeConstraints { make in
|
|
make.left.centerX.equalToSuperview()
|
|
make.top.equalToSuperview()
|
|
make.bottom.equalToSuperview().offset(-(UIScreen.safeBottom + 10))
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
extension FAOldVideoRechargeView {
|
|
|
|
@objc private func requestRestore() {
|
|
guard let shortPlayId = self.videoInfo?.short_play_id, let videoId = self.videoInfo?.short_play_video_id else { return }
|
|
|
|
FAIapManager.manager.restore(isLoding: false, shortPlayId: shortPlayId, videoId: videoId) { [weak self] isFinish, buyType in
|
|
if isFinish {
|
|
FALogin.manager.requestUserInfo(completer: nil)
|
|
self?.buyFinishHandle?()
|
|
Task {
|
|
await self?.dismiss(animated: true)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
extension FAOldVideoRechargeView {
|
|
|
|
class CoinsView: UIView {
|
|
var title: String? {
|
|
didSet {
|
|
titleLabel.text = title
|
|
}
|
|
}
|
|
|
|
var coins: Int = 0 {
|
|
didSet {
|
|
coinsLabel.text = "\(coins)"
|
|
}
|
|
}
|
|
|
|
private lazy var titleLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 14, weight: .regular)
|
|
label.textColor = .FFFFFF
|
|
return label
|
|
}()
|
|
|
|
private lazy var iconImageView: UIImageView = {
|
|
let imageView = UIImageView(image: UIImage(named: "coins_icon_08"))
|
|
return imageView
|
|
}()
|
|
|
|
private lazy var coinsLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 14, weight: .bold)
|
|
label.textColor = .F_9_F_494
|
|
return label
|
|
}()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
|
|
addSubview(titleLabel)
|
|
addSubview(iconImageView)
|
|
addSubview(coinsLabel)
|
|
|
|
titleLabel.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.bottom.lessThanOrEqualToSuperview()
|
|
make.left.equalToSuperview()
|
|
}
|
|
|
|
iconImageView.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.bottom.lessThanOrEqualToSuperview()
|
|
make.left.equalTo(titleLabel.snp.right).offset(6)
|
|
}
|
|
|
|
coinsLabel.snp.makeConstraints { make in
|
|
make.centerY.equalToSuperview()
|
|
make.bottom.lessThanOrEqualToSuperview()
|
|
make.left.equalTo(iconImageView.snp.right).offset(4)
|
|
make.right.equalToSuperview()
|
|
}
|
|
}
|
|
|
|
@MainActor required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
}
|
|
|
|
}
|