83 lines
2.2 KiB
Swift
83 lines
2.2 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
|
||
}
|
||
|
||
private let label = UILabel()
|
||
|
||
override init(frame: CGRect) {
|
||
super.init(frame: frame)
|
||
AppFont.captionMedium.apply(to: label)
|
||
label.textAlignment = .center
|
||
addSubview(label)
|
||
label.snp.makeConstraints { make in
|
||
make.edges.equalToSuperview().inset(
|
||
UIEdgeInsets(
|
||
top: AppSpacing.xxs,
|
||
left: AppSpacing.xs,
|
||
bottom: AppSpacing.xxs,
|
||
right: AppSpacing.xs
|
||
)
|
||
)
|
||
}
|
||
layer.cornerRadius = AppRadius.xs
|
||
clipsToBounds = true
|
||
}
|
||
|
||
@available(*, unavailable)
|
||
required init?(coder: NSCoder) {
|
||
fatalError("init(coder:) has not been implemented")
|
||
}
|
||
|
||
/// 按语义色调与文案刷新展示。
|
||
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 = AppColor.textTabInactive
|
||
backgroundColor = AppColor.inputBackground
|
||
}
|
||
}
|
||
|
||
/// 订单状态映射(对齐 Android OrderView)。
|
||
func applyOrderStatus(_ status: Int, text: String) {
|
||
switch status {
|
||
case 18, 20:
|
||
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)
|
||
}
|
||
}
|
||
}
|