ThimraTV/MoviaBox/Class/Mine/Controller/SPMineViewController.swift
2025-05-21 10:25:29 +08:00

205 lines
6.7 KiB
Swift
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// SPMineViewController.swift
// MoviaBox
//
// Created by on 2025/4/10.
//
import UIKit
class SPMineViewController: SPViewController {
private lazy var dataArr: [SPMineItem] = {
let arr = [
SPMineItem(type: .language, iconImage: UIImage(named: "language_icon_01"), title: "movia_profile_Language".localized),
SPMineItem(type: .feedBack, iconImage: UIImage(named: "feed_back_icon_01"), title: "movia_profile_Feedback".localized),
SPMineItem(type: .privacyPolicy, iconImage: UIImage(named: "privacy_policy_icon_01"), title: "movia_profile_Privacy_Policy".localized),
SPMineItem(type: .userAgreement, iconImage: UIImage(named: "user_agreement_icon_01"), title: "movia_profile_User_Agreement".localized),
SPMineItem(type: .aboutUs, iconImage: UIImage(named: "about_us_icon_01"), title: "movia_profile_About_Us".localized),
SPMineItem(type: .settings, iconImage: UIImage(named: "settings_icon_01"), title: "movia_profile_Setting".localized),
]
return arr
}()
///
private var isHaveEntered = false
weak var vipAlertView: SPVipAlertView?
//MARK: UI 
private lazy var headerView: SPMineHeaderView = {
let view = SPMineHeaderView()
view.frame = CGRect(x: 0, y: 0, width: kSPScreenWidth, height: view.contentHeight)
view.userInfo = SPLoginManager.manager.userInfo
return view
}()
private lazy var tableView: SPTableView = {
let tableView = SPTableView(frame: .zero, style: .plain)
tableView.delegate = self
tableView.dataSource = self
tableView.rowHeight = 50
tableView.sp_addRefreshHeader(insetTop: 0) { [weak self] in
self?.handleHeaderRefresh(nil)
}
SPMineCell.registerCell(tableView: tableView)
return tableView
}()
override func viewDidLoad() {
super.viewDidLoad()
setBackgroundView(isShowGradient: false)
requestData()
_setupUI()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
self.navigationController?.setNavigationBarHidden(true, animated: true)
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
self.headerView.userInfo = SPLoginManager.manager.userInfo
if isHaveEntered {
requestData()
}
isHaveEntered = true
///VIP
showVipAlert()
}
private func updateHeaderView() {
tableView.tableHeaderView = nil
self.headerView.height = self.headerView.contentHeight
tableView.tableHeaderView = headerView
}
override func handleHeaderRefresh(_ completer: (() -> Void)?) {
requestData { [weak self] in
self?.tableView.sp_endHeaderRefreshing()
}
}
}
extension SPMineViewController {
private func showVipAlert() {
guard SPLoginManager.manager.userInfo?.is_vip != true else { return }
guard SPVipAlertView.isShowAlert else { return }
SPWalletAPI.requestPayTemplate { model in
guard let list = model?.list_sub_vip else { return }
if !self.isDidAppear { return }
if self.vipAlertView != nil { return }
let alert = SPVipAlertView(dataArr: list).show(in: SPAPPTool.getKeyWindow())
alert.buyFinishHandle = { [weak self] in
guard let self = self else { return }
self.requestUserInfo()
}
self.vipAlertView = alert
}
}
}
extension SPMineViewController {
private func _setupUI() {
tableView.tableHeaderView = self.headerView
view.addSubview(tableView)
tableView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
}
}
//MARK: -------------- UITableViewDelegate & UITableViewDataSource --------------
extension SPMineViewController: UITableViewDelegate, UITableViewDataSource {
func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
let cell = SPMineCell.dequeueReusableCell(tableView: tableView, indexPath: indexPath)
cell.item = dataArr[indexPath.row]
return cell
}
func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
return dataArr.count
}
func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
let item = dataArr[indexPath.row]
switch item.type {
case .privacyPolicy:
let vc = SPWebViewController()
vc.urlStr = SPPrivacyPolicyWebUrl
self.navigationController?.pushViewController(vc, animated: true)
case .userAgreement:
let vc = SPWebViewController()
vc.urlStr = SPUserAgreementWebUrl
self.navigationController?.pushViewController(vc, animated: true)
case .aboutUs:
let vc = SPAboutUsViewController()
self.navigationController?.pushViewController(vc, animated: true)
case .feedBack:
let vc = SPFeedbackViewController()
self.navigationController?.pushViewController(vc, animated: true)
case .settings:
let vc = SPSettingsViewController()
self.navigationController?.pushViewController(vc, animated: true)
case .language:
let vc = SPLanguageViewController()
self.navigationController?.pushViewController(vc, animated: true)
default:
break
}
}
}
extension SPMineViewController {
private func requestData(completer: (() -> Void)? = nil) {
requestUserInfo()
requestPlayHistoryList {
completer?()
}
}
///
private func requestUserInfo() {
SPLoginManager.manager.updateUserInfo { [weak self] in
self?.headerView.userInfo = SPLoginManager.manager.userInfo
}
}
///
private func requestPlayHistoryList(completer: (() -> Void)? = nil) {
SPVideoAPI.requestPlayHistoryList(page: 1, pageSize: 10) { [weak self] listModel in
guard let self = self else { return }
if let list = listModel?.list {
self.headerView.playHistoryArr = list
self.updateHeaderView()
}
completer?()
}
}
}