Files
suixinkan_uikit/suixinkan/UI/Orders/Views/OrderPhoneRowView.swift
汉秋 fe84a7e8f4 Rebuild order list UI to strictly match Android OrderView and DepositOrderCard.
Add OrderTokens and shared order components, restore filter bar pills, list loading states, and role-specific card layouts with deposit badge mapping tests.

Co-authored-by: Cursor <cursoragent@cursor.com>
2026-07-07 09:12:06 +08:00

102 lines
3.1 KiB
Swift
Raw 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.

//
// OrderPhoneRowView.swift
// suixinkan
//
import SnapKit
import UIKit
/// / Android
final class OrderPhoneRowView: UIView {
enum Style {
case photographer
case deposit
}
var onTap: (() -> Void)?
private let style: Style
private let titleLabel = UILabel()
private let phoneLabel = UILabel()
private let phoneButton = UIButton(type: .system)
private let iconButton = UIButton(type: .system)
init(style: Style) {
self.style = style
super.init(frame: .zero)
setupUI()
}
@available(*, unavailable)
required init?(coder: NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func apply(phone: String, hidden: Bool = false) {
let masked = OrderPhoneMask.mask(phone)
phoneLabel.text = masked
isHidden = hidden || phone.isEmpty
}
private func setupUI() {
titleLabel.font = .app(.body)
titleLabel.textColor = OrderTokens.label563
titleLabel.text = "手机号:"
phoneLabel.font = .systemFont(ofSize: 14, weight: .medium)
phoneLabel.textAlignment = .right
phoneButton.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
iconButton.addTarget(self, action: #selector(handleTap), for: .touchUpInside)
addSubview(titleLabel)
addSubview(phoneLabel)
addSubview(phoneButton)
addSubview(iconButton)
titleLabel.snp.makeConstraints { make in
make.leading.top.bottom.equalToSuperview()
}
switch style {
case .photographer:
phoneLabel.textColor = OrderTokens.valueBlack
iconButton.backgroundColor = OrderTokens.phoneIconBackground
iconButton.layer.cornerRadius = 12
iconButton.tintColor = AppColor.primary
iconButton.setImage(UIImage(systemName: "phone.fill"), for: .normal)
iconButton.snp.makeConstraints { make in
make.trailing.centerY.equalToSuperview()
make.width.height.equalTo(24)
}
phoneLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.trailing.equalTo(iconButton.snp.leading).offset(-7)
}
case .deposit:
phoneLabel.textColor = AppColor.primary
iconButton.tintColor = AppColor.primary
iconButton.setImage(UIImage(systemName: "phone.fill"), for: .normal)
iconButton.snp.makeConstraints { make in
make.trailing.centerY.equalToSuperview()
make.width.height.equalTo(16)
}
phoneLabel.snp.makeConstraints { make in
make.centerY.equalToSuperview()
make.trailing.equalTo(iconButton.snp.leading).offset(-AppSpacing.xxs)
}
}
phoneButton.snp.makeConstraints { make in
make.leading.equalTo(phoneLabel)
make.trailing.equalTo(iconButton)
make.top.bottom.equalToSuperview()
}
}
@objc private func handleTap() {
onTap?()
}
}