Visual_Novel_iOS/crush/Crush/Src/Modules/VIP/VIPPrivilegesShowController...

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])
}
}