Files
suixinkan_uikit/suixinkan/UI/Statistics/StatisticsDailyCell.swift

109 lines
3.8 KiB
Swift
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//
// StatisticsDailyCell.swift
// suixinkan
//
import SnapKit
import UIKit
/// Android `DailyDataBox`
final class StatisticsDailyCell: UITableViewCell {
static let reuseIdentifier = "StatisticsDailyCell"
private let dateLabel = UILabel()
private let orderCountTitle = UILabel()
private let orderCountValue = UILabel()
private let averageTitle = UILabel()
private let averageValue = UILabel()
private let refundTitle = UILabel()
private let refundValue = UILabel()
private let receivedTitle = UILabel()
private let receivedValue = UILabel()
private let divider = UIView()
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: reuseIdentifier)
setupUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func configure(with item: StatisticsDailyItem, showsDivider: Bool) {
dateLabel.text = item.date
orderCountValue.text = "\(item.orderCount)"
averageValue.text = "\(item.orderPrice)"
refundValue.text = "\(item.refund)"
receivedValue.text = "\(item.received)"
divider.isHidden = !showsDivider
}
private func setupUI() {
selectionStyle = .none
backgroundColor = .clear
dateLabel.font = .systemFont(ofSize: 14)
dateLabel.textColor = .black
let metricColor = UIColor(hex: 0x4B5563)
[orderCountTitle, averageTitle, refundTitle, receivedTitle].forEach {
$0.font = .systemFont(ofSize: 14)
$0.textColor = metricColor
}
orderCountTitle.text = "订单数"
averageTitle.text = "客单价"
refundTitle.text = "退款"
receivedTitle.text = "实收"
[orderCountValue, averageValue].forEach {
$0.font = .systemFont(ofSize: 14, weight: .semibold)
$0.textColor = .black
}
refundValue.font = .systemFont(ofSize: 14, weight: .semibold)
refundValue.textColor = UIColor(hex: 0xEF4444)
receivedValue.font = .systemFont(ofSize: 14, weight: .semibold)
receivedValue.textColor = UIColor(hex: 0x22C55E)
divider.backgroundColor = UIColor(hex: 0xF4F4F4)
let metricsRow = UIStackView()
metricsRow.axis = .horizontal
metricsRow.distribution = .fillEqually
metricsRow.alignment = .fill
metricsRow.spacing = 8
metricsRow.addArrangedSubview(metricColumn(title: orderCountTitle, value: orderCountValue))
metricsRow.addArrangedSubview(metricColumn(title: averageTitle, value: averageValue))
metricsRow.addArrangedSubview(metricColumn(title: refundTitle, value: refundValue))
metricsRow.addArrangedSubview(metricColumn(title: receivedTitle, value: receivedValue))
contentView.addSubview(dateLabel)
contentView.addSubview(metricsRow)
contentView.addSubview(divider)
dateLabel.snp.makeConstraints { make in
make.top.leading.trailing.equalToSuperview().inset(UIEdgeInsets(top: 12, left: 0, bottom: 0, right: 0))
}
metricsRow.snp.makeConstraints { make in
make.top.equalTo(dateLabel.snp.bottom).offset(12)
make.leading.trailing.equalToSuperview()
make.bottom.equalToSuperview().inset(12)
}
divider.snp.makeConstraints { make in
make.leading.trailing.bottom.equalToSuperview()
make.height.equalTo(1)
}
}
private func metricColumn(title: UILabel, value: UILabel) -> UIStackView {
let stack = UIStackView(arrangedSubviews: [title, value])
stack.axis = .vertical
stack.spacing = 4
stack.alignment = .leading
return stack
}
}