117 lines
3.4 KiB
Swift
117 lines
3.4 KiB
Swift
//
|
|
// AppStatusBadge.swift
|
|
// suixinkan
|
|
//
|
|
|
|
import SnapKit
|
|
import UIKit
|
|
|
|
/// 统一状态标签,合并订单 / 个人信息等 badge 配色逻辑。
|
|
final class AppStatusBadge: UIView {
|
|
|
|
/// 语义色调。
|
|
enum Tone {
|
|
case info
|
|
case success
|
|
case warning
|
|
case danger
|
|
case neutral
|
|
}
|
|
|
|
/// 订单 badge 字号与内边距样式。
|
|
enum OrderBadgeStyle {
|
|
case photographer
|
|
case deposit
|
|
}
|
|
|
|
private let label = UILabel()
|
|
|
|
override init(frame: CGRect) {
|
|
super.init(frame: frame)
|
|
label.textAlignment = .center
|
|
addSubview(label)
|
|
applyOrderBadgeStyle(.photographer)
|
|
layer.cornerRadius = AppRadius.xs
|
|
clipsToBounds = true
|
|
}
|
|
|
|
@available(*, unavailable)
|
|
required init?(coder: NSCoder) {
|
|
fatalError("init(coder:) has not been implemented")
|
|
}
|
|
|
|
/// 设置订单 badge 样式(摄影师 14sp / 店铺 12sp)。
|
|
func applyOrderBadgeStyle(_ style: OrderBadgeStyle) {
|
|
switch style {
|
|
case .photographer:
|
|
label.font = .app(.bodyMedium)
|
|
label.snp.remakeConstraints { make in
|
|
make.edges.equalToSuperview().inset(
|
|
UIEdgeInsets(top: 0, left: AppSpacing.xxs, bottom: 0, right: AppSpacing.xxs)
|
|
)
|
|
}
|
|
case .deposit:
|
|
label.font = .app(.caption)
|
|
label.snp.remakeConstraints { make in
|
|
make.edges.equalToSuperview().inset(
|
|
UIEdgeInsets(top: 2, left: AppSpacing.xs, bottom: 2, right: AppSpacing.xs)
|
|
)
|
|
}
|
|
}
|
|
}
|
|
|
|
/// 按语义色调与文案刷新展示。
|
|
func apply(tone: Tone, text: String) {
|
|
label.text = text
|
|
switch tone {
|
|
case .info:
|
|
label.textColor = AppColor.info
|
|
backgroundColor = AppColor.infoBackground
|
|
case .success:
|
|
label.textColor = AppColor.success
|
|
backgroundColor = AppColor.successBackground
|
|
case .warning:
|
|
label.textColor = AppColor.warning
|
|
backgroundColor = AppColor.warningBackground
|
|
case .danger:
|
|
label.textColor = AppColor.danger
|
|
backgroundColor = AppColor.dangerBackground
|
|
case .neutral:
|
|
label.textColor = OrderTokens.depositRefunded
|
|
backgroundColor = OrderTokens.depositRefundedBackground
|
|
}
|
|
}
|
|
|
|
/// 摄影师订单状态映射(对齐 Android `OrderView`)。
|
|
func applyOrderStatus(_ status: Int, text: String) {
|
|
applyOrderBadgeStyle(.photographer)
|
|
switch status {
|
|
case 18:
|
|
apply(tone: .info, text: text)
|
|
case 30:
|
|
apply(tone: .success, text: text)
|
|
case 50:
|
|
apply(tone: .danger, text: text)
|
|
default:
|
|
apply(tone: .warning, text: text)
|
|
}
|
|
}
|
|
|
|
/// 店铺订单状态映射(对齐 Android `DepositOrderCard`)。
|
|
func applyDepositOrderStatus(_ status: Int, text: String) {
|
|
applyOrderBadgeStyle(.deposit)
|
|
switch status {
|
|
case 20:
|
|
apply(tone: .info, text: text)
|
|
case 30:
|
|
label.text = text
|
|
label.textColor = OrderTokens.depositSuccess
|
|
backgroundColor = OrderTokens.depositSuccessBackground
|
|
case 50:
|
|
apply(tone: .neutral, text: text)
|
|
default:
|
|
apply(tone: .warning, text: text)
|
|
}
|
|
}
|
|
}
|