207 lines
5.6 KiB
Swift
207 lines
5.6 KiB
Swift
//
|
|
// XSStoreViewController.swift
|
|
// XSeri
|
|
//
|
|
// Created by 长沙鸿瑶 on 2026/3/16.
|
|
//
|
|
|
|
import UIKit
|
|
import SnapKit
|
|
|
|
class XSStoreViewController: XSViewController {
|
|
|
|
private var payRequest: XSPayDataRequest?
|
|
|
|
private var payDataModel: XSPayDateModel? = XSIapManager.manager.payDateModel
|
|
|
|
private lazy var scrollView: XSScrollView = {
|
|
let scrollView = XSScrollView()
|
|
return scrollView
|
|
}()
|
|
|
|
private lazy var stackView: UIStackView = {
|
|
let view = UIStackView()
|
|
view.axis = .vertical
|
|
view.spacing = 12
|
|
return view
|
|
}()
|
|
|
|
private lazy var coinsView: XSStoreCoinsView = {
|
|
let view = XSStoreCoinsView()
|
|
view.buyFinishHandle = { [weak self] in
|
|
self?.buyFinish()
|
|
}
|
|
return view
|
|
}()
|
|
|
|
private lazy var vipView: XSStoreVipView = {
|
|
let view = XSStoreVipView()
|
|
view.buyFinishHandle = { [weak self] in
|
|
self?.buyFinish()
|
|
}
|
|
return view
|
|
}()
|
|
|
|
private lazy var tipView: UIView = {
|
|
let view = UIView()
|
|
view.addSubview(tipTitleLabel)
|
|
view.addSubview(tipTextLabel)
|
|
|
|
tipTitleLabel.snp.makeConstraints { make in
|
|
make.top.equalToSuperview()
|
|
make.left.equalToSuperview().offset(16)
|
|
}
|
|
|
|
tipTextLabel.snp.makeConstraints { make in
|
|
make.left.equalToSuperview().offset(16)
|
|
make.right.lessThanOrEqualToSuperview().offset(-16)
|
|
make.top.equalTo(tipTitleLabel.snp.bottom).offset(4)
|
|
make.bottom.equalToSuperview()
|
|
}
|
|
return view
|
|
}()
|
|
|
|
private lazy var tipTitleLabel: UILabel = {
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 12, weight: .bold)
|
|
label.textColor = .white.withAlphaComponent(0.5)
|
|
label.text = "Tips".localized
|
|
return label
|
|
}()
|
|
|
|
private lazy var tipTextLabel: UILabel = {
|
|
let att = NSMutableAttributedString(string: "store_tips".localized)
|
|
att.yy_lineSpacing = 3
|
|
|
|
let label = UILabel()
|
|
label.font = .font(ofSize: 12, weight: .regular)
|
|
label.textColor = .white.withAlphaComponent(0.5)
|
|
label.attributedText = att
|
|
label.numberOfLines = 0
|
|
return label
|
|
}()
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
self.title = "Store".localized
|
|
let barButtonItem = UIBarButtonItem(title: "Restore".localized, style: .plain, target: self, action: #selector(handleRestore))
|
|
barButtonItem.tintColor = .white
|
|
self.navigationItem.rightBarButtonItem = barButtonItem
|
|
|
|
xs_setupUI()
|
|
|
|
reloadData()
|
|
|
|
requestPayData()
|
|
|
|
restore(isLoding: false)
|
|
}
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
super.viewWillAppear(animated)
|
|
self.navigationController?.setNavigationBarHidden(false, animated: true)
|
|
xs_setNavigationStyle()
|
|
}
|
|
|
|
func reloadData() {
|
|
self.stackView.xs_removeAllArrangedSubview()
|
|
guard let model = self.payDataModel else { return }
|
|
|
|
if let sort = model.sort, sort.count > 0 {
|
|
sort.forEach {
|
|
if $0 == .vip {
|
|
self.addVipView()
|
|
} else if $0 == .coin {
|
|
self.addCoinsView()
|
|
}
|
|
}
|
|
} else {
|
|
self.addVipView()
|
|
self.addCoinsView()
|
|
}
|
|
self.stackView.addArrangedSubview(tipView)
|
|
}
|
|
|
|
private func addCoinsView() {
|
|
guard let model = self.payDataModel else { return }
|
|
|
|
var newList: [XSPayItem] = []
|
|
if let list = model.list_coins, list.count > 0 {
|
|
newList = list
|
|
}
|
|
if newList.count > 0 {
|
|
coinsView.setDataArr(newList)
|
|
self.stackView.addArrangedSubview(coinsView)
|
|
}
|
|
}
|
|
|
|
private func addVipView() {
|
|
guard let list = payDataModel?.list_sub_vip else { return }
|
|
guard list.count > 0 else { return }
|
|
|
|
self.vipView.dataArr = list
|
|
self.stackView.addArrangedSubview(self.vipView)
|
|
}
|
|
|
|
private func buyFinish() {
|
|
self.requestPayData()
|
|
}
|
|
|
|
@objc private func handleRestore() {
|
|
restore(isLoding: true)
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
extension XSStoreViewController {
|
|
|
|
private func xs_setupUI() {
|
|
view.addSubview(scrollView)
|
|
scrollView.addSubview(stackView)
|
|
|
|
scrollView.snp.makeConstraints { make in
|
|
make.left.right.bottom.equalToSuperview()
|
|
make.top.equalToSuperview().offset(XSScreen.navBarHeight)
|
|
}
|
|
|
|
stackView.snp.makeConstraints { make in
|
|
make.left.centerX.equalToSuperview()
|
|
make.top.equalToSuperview().offset(12)
|
|
make.bottom.equalToSuperview().offset(-(XSScreen.safeBottom + 10))
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
extension XSStoreViewController {
|
|
|
|
private func requestPayData() {
|
|
payRequest = XSPayDataRequest()
|
|
|
|
payRequest?.requestProducts { [weak self] model in
|
|
guard let self = self else { return }
|
|
guard let model = model else { return }
|
|
|
|
self.payDataModel = model
|
|
|
|
self.reloadData()
|
|
}
|
|
|
|
}
|
|
|
|
private func restore(isLoding: Bool) {
|
|
XSIapManager.manager.restore(isLoding: isLoding) { [weak self] isFinish, buyType in
|
|
if isFinish {
|
|
Task {
|
|
await XSLoginManager.manager.updateUserInfo()
|
|
}
|
|
self?.buyFinish()
|
|
}
|
|
}
|
|
}
|
|
}
|