ReaderHive/ReaderHive/Class/Store/V/NRStoreVipCell.swift
2026-01-28 16:43:51 +08:00

240 lines
8.5 KiB
Swift

//
// NRStoreVipCell.swift
// ReaderHive
//
// Created by on 2025/12/10.
//
import UIKit
import SnapKit
import YYCategories
import YYText
internal import StoreKit
class NRStoreVipCell: UICollectionViewCell {
var model: NRPayItem? {
didSet {
titleLabel.text = model?.brief
// desLabel.text = model?.nr_description
desLabel.text = "reader_my_vip_tips".localized
if let coins = model?.send_coins, coins > 0 {
extraLabel.text = "+\(coins) \("reader_extra".localized)"
extraBgView.isHidden = false
} else {
extraBgView.isHidden = true
}
let currency = model?.currency ?? ""
let oldPrice = model?.price ?? ""
var offerPrice: String?
if model?.discount_type == 1, let offer = model?.introductionaryOffer {
offerPrice = offer.price.stringValue
} else if model?.discount_type == 2, let offer = model?.promotionalOffers?.first {
offerPrice = offer.price.stringValue
}
if let price = offerPrice {
let oldPriceStr = NSMutableAttributedString(string: oldPrice)
oldPriceStr.yy_strikethroughColor = oldPriceLabel.textColor
oldPriceStr.yy_strikethroughStyle = .double
oldPriceLabel.attributedText = oldPriceStr
oldPriceLabel.isHidden = false
priceLabel.text = currency + price
} else {
oldPriceLabel.isHidden = true
priceLabel.text = currency + oldPrice
}
extraBgView.colors = [UIColor.white.withAlphaComponent(0.75).cgColor, UIColor.white.withAlphaComponent(0.75).cgColor]
switch model?.vip_type_key {
case .week:
bgView.image = UIImage(named: "vip_bg_image_week")
bgIconView.image = UIImage(named: "vip_bg_icon_week")
vipIconImageView.image = UIImage(named: "vip_icon_week")
titleLabel.textColors = [UIColor._389_FEA.cgColor, UIColor._062_AAE.cgColor]
priceLabel.textColor = ._062_AAE
case .month:
bgView.image = UIImage(named: "vip_bg_image_month")
bgIconView.image = UIImage(named: "vip_bg_icon_month")
vipIconImageView.image = UIImage(named: "vip_icon_month")
titleLabel.textColors = [UIColor._162_FAC.cgColor, UIColor._661794.cgColor]
priceLabel.textColor = ._661794
case .quarter:
bgView.image = UIImage(named: "vip_bg_image_quarter")
bgIconView.image = UIImage(named: "vip_bg_icon_quarter")
vipIconImageView.image = UIImage(named: "vip_icon_quarter")
titleLabel.textColors = [UIColor.CE_1_E_79.cgColor, UIColor.B_92214.cgColor]
priceLabel.textColor = .B_92214
case .year:
bgView.image = UIImage(named: "vip_bg_image_year")
bgIconView.image = UIImage(named: "vip_bg_icon_year")
vipIconImageView.image = UIImage(named: "vip_icon_year")
titleLabel.textColors = [UIColor.BA_8_A_2_A.cgColor, UIColor._8_B_5801.cgColor]
priceLabel.textColor = ._8_B_5801
extraBgView.colors = [UIColor.FFF_2_C_8.cgColor, UIColor.D_8_B_8_A_1.cgColor]
default:
break
}
}
}
private lazy var bgView: UIImageView = {
let view = UIImageView()
view.layer.cornerRadius = 12
view.layer.masksToBounds = true
view.layer.borderColor = UIColor.black.withAlphaComponent(0.05).cgColor
view.layer.borderWidth = 1
return view
}()
private lazy var bgIconView: UIImageView = {
let view = UIImageView()
return view
}()
private lazy var vipIconImageView: UIImageView = {
let imageView = UIImageView()
return imageView
}()
private lazy var titleLabel: NRLabel = {
let label = NRLabel()
label.font = .font(ofSize: 14, weight: .medium)
label.textStartPoint = .init(x: 0, y: 0.5)
label.textEndPoint = .init(x: 1, y: 0.5)
return label
}()
private lazy var priceLabel: UILabel = {
let label = UILabel()
label.font = .font(ofSize: 20, weight: .bold).nr_withBoldItalic()
return label
}()
private lazy var oldPriceLabel: UILabel = {
let label = UILabel()
label.font = .font(ofSize: 13, weight: .medium)
label.textColor = .black.withAlphaComponent(0.03)
return label
}()
private lazy var desLabel: UILabel = {
let label = UILabel()
label.font = .font(ofSize: 12, weight: .regular)
label.textColor = .black.withAlphaComponent(0.5)
label.numberOfLines = 2
return label
}()
private lazy var extraBgView: NRGradientView = {
let view = NRGradientView()
view.startPoint = .init(x: 0, y: 0.5)
view.endPoint = .init(x: 1, y: 0.5)
// view.backgroundColor = .white.withAlphaComponent(0.75)
view.nr_setRoundedCorner(topLeft: 12, topRight: 0, bottomLeft: 0, bottomRight: 0)
return view
}()
private lazy var extraLabel: UILabel = {
let label = UILabel()
label.font = .font(ofSize: 14, weight: .medium).nr_withBoldItalic()
label.textColor = ._9_C_6_A_45
label.setContentHuggingPriority(.required, for: .horizontal)
label.setContentCompressionResistancePriority(.required, for: .horizontal)
return label
}()
private lazy var extraIconView: UIView = {
let view = UIImageView(image: UIImage(named: "coins_icon_04"))
view.setContentHuggingPriority(.required, for: .horizontal)
view.setContentCompressionResistancePriority(.required, for: .horizontal)
return view
}()
override init(frame: CGRect) {
super.init(frame: frame)
nr_setupUI()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension NRStoreVipCell {
private func nr_setupUI() {
contentView.addSubview(bgView)
bgView.addSubview(bgIconView)
bgView.addSubview(vipIconImageView)
bgView.addSubview(titleLabel)
bgView.addSubview(priceLabel)
bgView.addSubview(oldPriceLabel)
bgView.addSubview(desLabel)
bgView.addSubview(extraBgView)
extraBgView.addSubview(extraLabel)
extraBgView.addSubview(extraIconView)
bgView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
bgIconView.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.right.equalToSuperview().offset(-12)
}
vipIconImageView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(12)
make.top.equalToSuperview().offset(12)
}
titleLabel.snp.makeConstraints { make in
make.centerY.equalTo(vipIconImageView)
make.left.equalTo(vipIconImageView.snp.right).offset(4)
}
priceLabel.snp.makeConstraints { make in
make.left.equalTo(vipIconImageView)
make.centerY.equalToSuperview().offset(3)
}
oldPriceLabel.snp.makeConstraints { make in
make.bottom.equalTo(priceLabel).offset(-3)
make.left.equalTo(priceLabel.snp.right).offset(3)
}
desLabel.snp.makeConstraints { make in
make.left.equalTo(priceLabel)
make.right.lessThanOrEqualTo(extraBgView.snp.left).offset(-5)
make.centerY.equalTo(self.bgView.snp.bottom).offset(-18)
}
extraBgView.snp.makeConstraints { make in
make.right.bottom.equalToSuperview()
make.height.equalTo(24)
}
extraLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalToSuperview().offset(12)
}
extraIconView.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.left.equalTo(extraLabel.snp.right).offset(4)
make.right.equalToSuperview().offset(-12)
}
}
}