Veloria/Veloria/Class/Wallet/View/VPVipBuyCell.swift
2025-06-18 09:40:55 +08:00

268 lines
9.3 KiB
Swift

//
// VPVipBuyCell.swift
// Veloria
//
// Created by on 2025/5/29.
//
import UIKit
class VPVipBuyCell: ZKCycleScrollViewCell {
var item: VPPayTemplateItem? {
didSet {
if let key = item?.vip_type_key?.rawValue {
bgImageView.image = UIImage(named: "vip_buy_bg_\(key)")
bgIconImageView.image = UIImage(named: "vip_buy_bg_icon_\(key)")
}
// vipNameLabel.text = item?.vip_type_key?.getText()
vipNameLabel.text = item?.title
unitLabel.text = item?.currency
moneyLabel.text = item?.price
durationLabel.text = "/\(item?.vip_type_key?.getText() ?? "")"
desLabel.text = item?.sp_description
var tipText = "veloria_store_auto_renew".localized
if let coin = item?.send_coins, coin > 0 {
sendCoinBgView.isHidden = false
sendCoinView.isHidden = false
let text = "veloria_extra".localized + " \(coin)"
sendCoinView.setTitle("+" + text, for: .normal)
tipText += "\n"
tipText += "veloria_store_donate_coins_ios".localizedReplace(text: "veloria_days_count_text".localizedReplace(text: "\(item?.send_coin_ttl ?? 0)"))
} else {
sendCoinBgView.isHidden = true
sendCoinView.isHidden = true
}
tipLabel.text = tipText
var colors: [CGColor] = []
switch item?.vip_type_key {
case .week:
colors = [UIColor.color64A3A7().cgColor, UIColor.color416767().cgColor]
sendCoinBgView.colors = [UIColor.colorBDFFFB().cgColor, UIColor.color7AD9D4().cgColor]
sendCoinView.setTitleColor(.color16706A(), for: .normal)
desLabel.textColor = .color416767()
desBgView.colors = [UIColor.colorB2E7EA().cgColor, UIColor.colorB2E7EA(alpha: 0).cgColor]
tipLabel.textColor = .color8AAEA6()
case .month:
colors = [UIColor.color647DA7().cgColor, UIColor.color414867().cgColor]
sendCoinBgView.colors = [UIColor.colorADCFFF().cgColor, UIColor.color7CA1D7().cgColor]
sendCoinView.setTitleColor(.color214170(), for: .normal)
desLabel.textColor = .color303962()
desBgView.colors = [UIColor.colorD6E5F9().cgColor, UIColor.colorD6E5F9(alpha: 0).cgColor]
tipLabel.textColor = .color8790B7()
case .quarter:
colors = [UIColor.color7869FF().cgColor, UIColor.color9F45FF().cgColor]
sendCoinBgView.colors = [UIColor.colorDBC7FF().cgColor, UIColor.color975DFF().cgColor]
sendCoinView.setTitleColor(.color510087(), for: .normal)
desLabel.textColor = .color5F1EB9()
desBgView.colors = [UIColor.colorCABCFF().cgColor, UIColor.colorCABCFF(alpha: 0).cgColor]
tipLabel.textColor = .colorA395D9()
case .year:
colors = [UIColor.color9C7565().cgColor, UIColor.color573D31().cgColor]
sendCoinBgView.colors = [UIColor.colorFBF2C7().cgColor, UIColor.colorA87A46().cgColor]
sendCoinView.setTitleColor(.color683D00(), for: .normal)
desLabel.textColor = .color573D31()
desBgView.colors = [UIColor.colorFFE6CE().cgColor, UIColor.colorFFE6CE(alpha: 0).cgColor]
tipLabel.textColor = .colorAC978D()
default:
break
}
vipNameLabel.gradientLayer.colors = colors
unitLabel.gradientLayer.colors = colors
moneyLabel.gradientLayer.colors = colors
durationLabel.gradientLayer.colors = colors
}
}
var vp_isSelected = false {
didSet {
selectedImageView.isHidden = !vp_isSelected
}
}
private lazy var bgImageView: UIImageView = {
let imageView = UIImageView()
return imageView
}()
private lazy var bgIconImageView: UIImageView = {
let imageView = UIImageView()
return imageView
}()
private lazy var vipNameLabel: VPGradientLabel = {
let label = VPGradientLabel()
label.font = .fontMedium(ofSize: 12)
return label
}()
private lazy var unitLabel: VPGradientLabel = {
let label = VPGradientLabel()
label.font = .fontRegular(ofSize: 18)
return label
}()
private lazy var moneyLabel: VPGradientLabel = {
let label = VPGradientLabel()
label.font = .fontAaHouDiHei(ofSize: 32)
return label
}()
private lazy var durationLabel: VPGradientLabel = {
let label = VPGradientLabel()
label.font = .fontMedium(ofSize: 16)
return label
}()
private lazy var desBgView: VPGradientView = {
let view = VPGradientView()
view.locations = [0, 1]
view.startPoint = .init(x: 0, y: 0.5)
view.endPoint = .init(x: 1, y: 0.5)
view.layer.cornerRadius = 8
view.layer.masksToBounds = true
return view
}()
private lazy var desLabel: UILabel = {
let label = UILabel()
label.font = .fontRegular(ofSize: 10)
return label
}()
private lazy var sendCoinBgView: VPGradientView = {
let view = VPGradientView()
view.locations = [0, 1]
view.startPoint = .init(x: 0, y: 0.5)
view.endPoint = .init(x: 1, y: 0.5)
view.addRadius(topLeft: 10, topRight: 0, bottomLeft: 0, bottomRight: 10)
return view
}()
private lazy var sendCoinView: UIButton = {
let view = JXButton(type: .custom)
view.isUserInteractionEnabled = false
view.titleDirection = .left
view.space = 4
view.jx_font = .fontMedium(ofSize: 12)
view.setImage(UIImage(named: "coin_icon_02"), for: .normal)
return view
}()
private lazy var tipLabel: UILabel = {
let label = UILabel()
label.numberOfLines = 0
label.font = .fontRegular(ofSize: 10)
return label
}()
private lazy var selectedImageView: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "selected_icon_01"))
return imageView
}()
override init(frame: CGRect) {
super.init(frame: frame)
vp_setupUI()
}
@MainActor required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
}
extension VPVipBuyCell {
private func vp_setupUI() {
contentView.addSubview(bgImageView)
contentView.addSubview(bgIconImageView)
bgImageView.addSubview(vipNameLabel)
bgImageView.addSubview(unitLabel)
bgImageView.addSubview(moneyLabel)
bgImageView.addSubview(durationLabel)
bgImageView.addSubview(sendCoinBgView)
sendCoinBgView.addSubview(sendCoinView)
bgImageView.addSubview(desBgView)
desBgView.addSubview(desLabel)
bgImageView.addSubview(tipLabel)
bgImageView.addSubview(selectedImageView)
bgImageView.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
make.top.equalToSuperview().offset(10)
}
bgIconImageView.snp.makeConstraints { make in
make.top.equalToSuperview()
make.right.equalToSuperview()
}
vipNameLabel.snp.makeConstraints { make in
make.left.equalToSuperview().offset(20)
make.top.equalToSuperview().offset(10)
make.height.equalTo(22)
}
unitLabel.snp.makeConstraints { make in
make.left.equalTo(vipNameLabel)
make.top.equalTo(vipNameLabel.snp.bottom).offset(10)
make.height.equalTo(25)
}
moneyLabel.snp.makeConstraints { make in
make.left.equalTo(unitLabel.snp.right)
make.bottom.equalTo(unitLabel).offset(3)
}
durationLabel.snp.makeConstraints { make in
make.bottom.equalTo(unitLabel).offset(-2)
make.left.equalTo(moneyLabel.snp.right)
make.height.equalTo(22)
}
sendCoinBgView.snp.makeConstraints { make in
make.right.bottom.equalToSuperview()
make.height.equalTo(24)
}
sendCoinView.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.centerX.equalToSuperview()
make.left.equalToSuperview().offset(10)
}
desBgView.snp.makeConstraints { make in
make.left.equalToSuperview().offset(20)
make.bottom.equalToSuperview().offset(-35)
make.height.equalTo(16)
}
desLabel.snp.makeConstraints { make in
make.center.equalToSuperview()
make.left.equalToSuperview().offset(7)
}
tipLabel.snp.makeConstraints { make in
make.left.equalTo(desBgView)
make.top.equalTo(desBgView.snp.bottom).offset(5)
}
selectedImageView.snp.makeConstraints { make in
make.left.equalToSuperview()
make.top.equalToSuperview()
}
}
}