147 lines
4.5 KiB
Swift
147 lines
4.5 KiB
Swift
//
|
|
// VIPPrivilegesShowController.swift
|
|
// Crush
|
|
//
|
|
// Created by Leon on 2025/9/16.
|
|
//
|
|
|
|
import UIKit
|
|
|
|
class VIPPrivilegesShowController: CLBaseTableController {
|
|
var headView: VIPPrivilegesHeadView!
|
|
var bottomButton: StyleButton!
|
|
|
|
var data: MemberDetailOutput?
|
|
|
|
var privileges = [MemberPrivDict]()
|
|
|
|
override func viewDidLoad() {
|
|
super.viewDidLoad()
|
|
|
|
setupViews()
|
|
setupDatas()
|
|
setupEvents()
|
|
}
|
|
|
|
private func setupViews() {
|
|
let title = "Crushlevel VIP"
|
|
navigationView.bgView.alpha = 0
|
|
navigationView.alpha0Title = title
|
|
view.bringSubviewToFront(navigationView)
|
|
|
|
bottomButton = {
|
|
let v = StyleButton()
|
|
v.primary(size: .large)
|
|
v.addTarget(self, action: #selector(tapBottomButton), for: .touchUpInside)
|
|
view.addSubview(v)
|
|
v.snp.makeConstraints { make in
|
|
make.leading.equalToSuperview().offset(24)
|
|
make.trailing.equalToSuperview().offset(-24)
|
|
make.bottom.equalToSuperview().offset(-16 - UIWindow.safeAreaBottom * 0.5)
|
|
}
|
|
return v
|
|
}()
|
|
|
|
tableView.snp.remakeConstraints { make in
|
|
make.leading.trailing.equalToSuperview()
|
|
make.top.equalToSuperview()
|
|
make.bottom.equalTo(bottomButton.snp.top).offset(-16)
|
|
}
|
|
|
|
tableView.register(VIPPrivilegesListCell.self, forCellReuseIdentifier: "VIPPrivilegesListCell")
|
|
tableView.bounces = false
|
|
tableView.contentInset = UIEdgeInsets(top: 0, left: 0, bottom: 16 + UIWindow.safeAreaBottom, right: 0)
|
|
headView = {
|
|
let v = VIPPrivilegesHeadView(frame: CGRect(x: 0, y: 0, width: UIScreen.width, height: 124 + UIWindow.navBarTotalHeight))
|
|
return v
|
|
}()
|
|
|
|
tableView.tableHeaderView = headView
|
|
|
|
bottomButton.setTitle("Subscribe", for: .normal)
|
|
}
|
|
|
|
private func setupDatas() {
|
|
loadVIPInfo()
|
|
loadVIPTiers()
|
|
}
|
|
|
|
private func loadVIPInfo(){
|
|
Hud.showIndicator()
|
|
WalletProvider.request(.vipDetail, modelType: MemberDetailOutput.self) {[weak self] result in
|
|
Hud.hideIndicator()
|
|
switch result {
|
|
case .success(let model):
|
|
self?.data = model
|
|
self?.privileges = model?.memberPrivList ?? []
|
|
self?.handleVIPInfoOutput(output: model)
|
|
self?.tableView.reloadData()
|
|
case .failure:
|
|
break
|
|
}
|
|
}
|
|
}
|
|
|
|
private func handleVIPInfoOutput(output: MemberDetailOutput?){
|
|
guard let vipInfo = output?.userMemberInfo else {
|
|
return
|
|
}
|
|
|
|
guard let memberType = vipInfo.memberType else{
|
|
return
|
|
}
|
|
|
|
headView.config(info: vipInfo)
|
|
|
|
if vipInfo.getVIPValid(), memberType == .vip{
|
|
bottomButton.isHidden = true
|
|
tableView.snp.remakeConstraints { make in
|
|
make.leading.trailing.bottom.equalToSuperview()
|
|
make.top.equalToSuperview()
|
|
}
|
|
}
|
|
}
|
|
|
|
private func loadVIPTiers(){
|
|
CLPurchase.shared.loadVIPTiersProducts { products in
|
|
|
|
}
|
|
}
|
|
|
|
private func setupEvents() {
|
|
NotificationCenter.default.addObserver(self, selector: #selector(notifyVIPChanged(_:)), name: AppNotificationName.vipStateChange.notificationName, object: nil)
|
|
}
|
|
|
|
|
|
@objc private func notifyVIPChanged(_ noti: Notification){
|
|
loadVIPInfo()
|
|
}
|
|
|
|
|
|
// MARK: - Action
|
|
|
|
@objc private func tapBottomButton() {
|
|
let sheet = VIPSubscribeSheet()
|
|
sheet.show()
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
|
|
return privileges.count
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
|
|
let cell = tableView.dequeueReusableCell(withIdentifier: "VIPPrivilegesListCell", for: indexPath) as! VIPPrivilegesListCell
|
|
let data = privileges[indexPath.row]
|
|
cell.config(data)
|
|
return cell
|
|
}
|
|
|
|
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
|
print("didSelectRowAt \(indexPath.row)")
|
|
}
|
|
|
|
override func scrollViewDidScroll(_ scrollView: UIScrollView) {
|
|
NaviAlphaHandle.changeNaviTitleAlpha(scrollView: scrollView, alphaViews: [navigationView.titleLabel, navigationView.bgView])
|
|
}
|
|
}
|