// // SPStoreViewController.swift // MoviaBox // // Created by 佳尔 on 2025/4/29. // import UIKit class SPStoreViewController: SPViewController { //MARK: UI属性 private lazy var scrollView: SPScrollView = { let scrollView = SPScrollView() return scrollView }() private lazy var stackView: UIStackView = { let view = UIStackView() view.axis = .vertical view.spacing = 16 return view }() private lazy var rechargeView: SPCoinRechargeView = { let view = SPCoinRechargeView() view.userInfo = SPLoginManager.manager.userInfo view.rechargeFinishHandle = { [weak self] in self?.buyFinish() } return view }() private lazy var memberView: SPMemberRechargeView = { let view = SPMemberRechargeView() view.buyFinishHandle = { [weak self] in self?.buyFinish() } return view }() private lazy var tipTitleLabel: UILabel = { let label = UILabel() label.font = .fontMedium(ofSize: 12) label.textColor = .colorFFFFFF(alpha: 0.7) return label }() private lazy var tipTextLabel: UILabel = { let label = UILabel() label.numberOfLines = 0 label.textColor = .colorFFFFFF(alpha: 0.5) label.font = .fontRegular(ofSize: 12) return label }() private lazy var agreementLabel: YYLabel = { let text1 = "movia_terms_of_service".localized let text2 = "movia_profile_Privacy_Policy".localized let text3 = "movia_renewal_agreement".localized let text = "\(text1) | \(text2)\n\(text3)" let range1 = text.ocString().range(of: text1) let range2 = text.ocString().range(of: text2) let range3 = text.ocString().range(of: text3) let string = NSMutableAttributedString(string: text) string.color = .colorFFFFFF() string.font = tipTextLabel.font string.setTextHighlight(range1, color: nil, backgroundColor: nil) { [weak self] _, _, _, _ in guard let self = self else { return } let vc = SPWebViewController() vc.urlStr = SPUserAgreementWebUrl self.navigationController?.pushViewController(vc, animated: true) } string.setTextHighlight(range2, color: nil, backgroundColor: nil) { [weak self] _, _, _, _ in guard let self = self else { return } let vc = SPWebViewController() vc.urlStr = SPPrivacyPolicyWebUrl self.navigationController?.pushViewController(vc, animated: true) } string.setTextHighlight(range3, color: nil, backgroundColor: nil) { [weak self] _, _, _, _ in guard let self = self else { return } let vc = SPWebViewController() vc.urlStr = SPMemberShipAgreement self.navigationController?.pushViewController(vc, animated: true) } let label = YYLabel() label.numberOfLines = 0 label.attributedText = string return label }() override func viewDidLoad() { super.viewDidLoad() self.title = "Store".localized self.edgesForExtendedLayout = .top setBackgroundView(isShowGradient: false, bgImage: UIImage(named: "buy_bg_image_02")) let rightBarButton = UIBarButtonItem(title: "Restore".localized, style: .plain, target: self, action: #selector(handelRightBarButton)) self.navigationItem.rightBarButtonItem = rightBarButton tipTitleLabel.text = "kStoreTipTitle".localized tipTextLabel.text = "kStoreTipText".localized _setupUI() requestPayTemplate() } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.navigationController?.setNavigationBarHidden(false, animated: true) setNavigationNormalStyle(backgroundColor: .clear, isTranslucent: true) } } extension SPStoreViewController { @objc private func handelRightBarButton() { SPIAPManager.manager.restore { [weak self] isFinish in guard let self = self else { return } self.buyFinish() } } @objc private func buyFinish() { SPLoginManager.manager.updateUserInfo { [weak self] in self?.rechargeView.userInfo = SPLoginManager.manager.userInfo } } } extension SPStoreViewController { private func _setupUI() { view.addSubview(scrollView) scrollView.addSubview(stackView) scrollView.addSubview(tipTitleLabel) scrollView.addSubview(tipTextLabel) scrollView.addSubview(agreementLabel) scrollView.snp.makeConstraints { make in make.left.right.bottom.equalToSuperview() make.top.equalToSuperview().offset(kSPNavBarHeight) } stackView.snp.makeConstraints { make in make.left.right.top.equalToSuperview() // make.bottom.equalTo(-(kSPTabbarSafeBottomMargin + 10)) make.width.equalTo(kSPScreenWidth) } tipTitleLabel.snp.makeConstraints { make in make.left.equalToSuperview().offset(24) make.top.equalTo(stackView.snp.bottom).offset(34) } tipTextLabel.snp.makeConstraints { make in make.left.equalTo(tipTitleLabel) make.right.lessThanOrEqualTo(stackView).offset(-24) make.top.equalTo(tipTitleLabel.snp.bottom).offset(4) // make.bottom.equalTo(-(kSPTabbarSafeBottomMargin + 10)) } agreementLabel.snp.makeConstraints { make in make.top.equalTo(tipTextLabel.snp.bottom).offset(20) make.left.equalTo(tipTextLabel) make.bottom.equalTo(-(kSPTabbarSafeBottomMargin + 10)) } } } extension SPStoreViewController { ///请求支付模版 private func requestPayTemplate() { SPWalletAPI.requestPayTemplate { [weak self] templateModel in guard let self = self else { return } self.rechargeView.dataArr = templateModel?.list_coins self.memberView.setDataArr(dataArr: templateModel?.list_sub_vip) self.stackView.removeAllArrangedSubview() self.stackView.addArrangedSubview(self.memberView) self.stackView.addArrangedSubview(self.rechargeView) } } }