Visual_Novel_iOS/crush/Crush/Src/Modules/Wallet/View/CoinsIncomeViews.swift

259 lines
8.3 KiB
Swift
Raw Normal View History

2025-10-09 10:29:35 +00:00
//
// BillListViews.swift
// Crush
//
// Created by Leon on 2025/9/16.
//
import Combine
class CoinsIncomeHeadView: UIView{
var block: UIView!
var bottomBg: UIImageView!
var stackV:UIStackView!
var titleLabel1: CLLabel!
var coinAndLabel1 : CLIconLabel!
var line: CLLine!
var titleLabel2: CLLabel!
var queryButton: EPIconTertiaryDarkButton!
var coinAndLabel2 : CLIconLabel!
var billListEntryLabel: CLLabel!
var billListEntryButton: UIButton!
var tableTitleLabel: CLLabel!
static let heightOfHeader = 372.0
private var cancellables = Set<AnyCancellable>()
override init(frame: CGRect) {
super.init(frame: frame)
setupViews()
setupEvent()
}
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
private func setupViews() {
block = {
let v = UIView()
v.backgroundColor = .clear
v.cornerRadius = 16
v.clipsToBounds = true
v.layer.borderWidth = 1
v.layer.borderColor = UIColor.c.con.cgColor
addSubview(v)
v.snp.makeConstraints { make in
make.top.equalToSuperview().offset(16)
make.leading.equalToSuperview().offset(24)
make.trailing.equalToSuperview().offset(-24)
make.height.equalTo(292)
}
return v
}()
bottomBg = {
let v = UIImageView()
v.image = UIImage(named: "walletBg")
let size = v.image?.size ?? .zero
v.contentMode = .scaleAspectFill
v.clipsToBounds = true
block.addSubview(v)
v.snp.makeConstraints { make in
make.bottom.equalToSuperview()
make.leading.trailing.equalToSuperview()
make.height.equalTo(v.snp.width).multipliedBy(size.height / size.width)
}
return v
}()
stackV = {
let v = UIStackView()
v.axis = .vertical
v.spacing = 24
block.addSubview(v)
v.snp.makeConstraints { make in
make.leading.equalToSuperview().offset(24)
make.trailing.equalToSuperview().offset(-24)
make.top.equalToSuperview().offset(24)
}
return v
}()
do{
let view = UIView()
stackV.addArrangedSubview(view)
titleLabel1 = {
let v = CLLabel()
v.font = .t.tts
view.addSubview(v)
v.snp.makeConstraints { make in
make.leading.equalToSuperview()
make.top.equalToSuperview()
}
return v
}()
titleLabel1.text = "Income"
coinAndLabel1 = {
let v = CLIconLabel()
v.spacing = 8
v.iconSize = CGSize(width: 24, height: 24)
v.iconImageView.image = UIImage.icon32Diamond
v.contentLabel.font = .t.tndl
v.contentLabel.textColor = .white
v.contentLabel.text = "0"
view.addSubview(v)
v.snp.makeConstraints { make in
make.leading.equalToSuperview()
make.trailing.lessThanOrEqualToSuperview()
make.top.equalTo(titleLabel1.snp.bottom).offset(4)
make.bottom.equalToSuperview()
}
return v
}()
}
line = {
let v = CLLine()
stackV.addArrangedSubview(v)
v.snp.makeConstraints { make in
make.height.equalTo(1)
}
return v
}()
do{
let view = UIView()
stackV.addArrangedSubview(view)
titleLabel2 = {
let v = CLLabel()
v.font = .t.tts
view.addSubview(v)
v.snp.makeConstraints { make in
make.leading.equalToSuperview()
make.top.equalToSuperview()
}
return v
}()
titleLabel2.text = "Pending"
queryButton = {
let v = EPIconTertiaryDarkButton(radius: .round, iconSize: .xs, iconCode: .question)
v.addTarget(self, action: #selector(tapQueryButton), for: .touchUpInside)
view.addSubview(v)
v.snp.makeConstraints { make in
make.centerY.equalTo(titleLabel2)
make.leading.equalTo(titleLabel2.snp.trailing).offset(4)
make.size.equalTo(v.bgImageSize())
}
return v
}()
coinAndLabel2 = {
let v = CLIconLabel()
v.spacing = 8
v.iconSize = CGSize(width: 24, height: 24)
v.iconImageView.image = UIImage.icon32Diamond
v.contentLabel.font = .t.tndl
v.contentLabel.textColor = .white
v.contentLabel.text = "0"
view.addSubview(v)
v.snp.makeConstraints { make in
make.leading.equalToSuperview()
make.trailing.lessThanOrEqualToSuperview()
make.top.equalTo(titleLabel2.snp.bottom).offset(4)
make.bottom.equalToSuperview()
}
return v
}()
}
billListEntryLabel = {
let v = CLLabel()
v.textColor = .c.cpvn
v.font = .t.tls
block.addSubview(v)
v.snp.makeConstraints { make in
make.centerX.equalToSuperview()
make.bottom.equalToSuperview().offset(-24)
}
return v
}()
billListEntryButton = {
let v = UIButton()
// v.addTarget(self, action: #selector(billListEntryButtonAction), for: .touchUpInside)
block.addSubview(v)
v.snp.makeConstraints { make in
make.centerY.equalTo(billListEntryLabel)
make.leading.trailing.equalTo(billListEntryLabel)
make.height.equalTo(30)
}
return v
}()
tableTitleLabel = {
let v = CLLabel()
v.font = .t.ttm
addSubview(v)
v.snp.makeConstraints { make in
make.leading.equalToSuperview().offset(24)
make.top.equalTo(block.snp.bottom).offset(24)
}
return v
}()
billListEntryLabel.text = "Transaction Details>"
tableTitleLabel.text = "Creation Income"
}
private func setupEvent(){
WalletCore.shared.$balance.sink {[weak self] _ in
self?.refreshBalanceShow()
}.store(in: &cancellables)
}
// MARK: - Helper
private func refreshBalanceShow(){
let balance = WalletCore.shared.balance
let income = balance.income ?? 0
let pending = balance.awaitingIncome ?? 0
let incomeCoin = Coin(cents: income)
let pendingCoin = Coin(cents: pending)
coinAndLabel1.contentLabel.text = incomeCoin.thousandthsFormatted
coinAndLabel2.contentLabel.text = pendingCoin.thousandthsFormatted
}
// MARK: - ACtion
@objc func tapQueryButton(){
let content = "获得的收益30日后可提现."
let alert = Alert(title: "Tips", text: content)
let action1 = AlertAction(title: "Got it", actionStyle: .confirm) {
}
alert.addAction(action1)
alert.show()
}
// @objc func billListEntryButtonAction() {
// print("billListEntryButtonAction")
// }
// func config(_ model: BillListResponse?){
// let income = model?.incomeTotal ?? 0
// let pending = model?.outcomeTotal ?? 0
// let incomeCoin = Coin(cents: income)
// let pendingCoin = Coin(cents: pending)
//
// coinAndLabel1.contentLabel.text = incomeCoin.formatted
// coinAndLabel2.contentLabel.text = pendingCoin.formatted
// }
}