// // HomeWorkStatusCardView.swift // suixinkan // import SnapKit import UIKit /// 首页在线状态与倒计时卡片。 final class HomeWorkStatusCardView: UIView { var onOnlineTap: (() -> Void)? var onReminderTap: (() -> Void)? private let contentStackView = UIStackView() private let onlineButton = UIButton(type: .system) private let countdownStackView = UIStackView() private let countdownIconView = UIImageView(image: UIImage(systemName: "clock")) private let countdownLabel = UILabel() private let reminderButton = UIButton(type: .system) override init(frame: CGRect) { super.init(frame: frame) backgroundColor = AppColor.cardBackground layer.cornerRadius = AppRadius.md clipsToBounds = true contentStackView.axis = .horizontal contentStackView.alignment = .center contentStackView.distribution = .equalSpacing contentStackView.spacing = AppSpacing.sm onlineButton.titleLabel?.font = .app(.captionMedium) onlineButton.layer.cornerRadius = AppRadius.xs onlineButton.contentEdgeInsets = UIEdgeInsets(top: 6, left: 12, bottom: 6, right: 12) onlineButton.addTarget(self, action: #selector(onlineTapped), for: .touchUpInside) countdownStackView.axis = .horizontal countdownStackView.alignment = .center countdownStackView.spacing = 6 countdownIconView.tintColor = AppColor.primary countdownIconView.contentMode = .scaleAspectFit countdownIconView.setContentCompressionResistancePriority(.required, for: .horizontal) countdownLabel.font = .app(.subtitle) countdownLabel.textColor = AppColor.primary countdownLabel.adjustsFontSizeToFitWidth = true countdownLabel.minimumScaleFactor = 0.85 countdownLabel.setContentCompressionResistancePriority(.defaultLow, for: .horizontal) reminderButton.titleLabel?.font = .app(.subtitle) reminderButton.setTitleColor(AppColor.primary, for: .normal) reminderButton.tintColor = AppColor.primary reminderButton.setImage(UIImage(systemName: "bell.fill"), for: .normal) reminderButton.semanticContentAttribute = .forceLeftToRight reminderButton.imageEdgeInsets = UIEdgeInsets(top: 0, left: 0, bottom: 0, right: 6) reminderButton.titleEdgeInsets = UIEdgeInsets(top: 0, left: 6, bottom: 0, right: -6) reminderButton.titleLabel?.adjustsFontSizeToFitWidth = true reminderButton.titleLabel?.minimumScaleFactor = 0.8 reminderButton.addTarget(self, action: #selector(reminderTapped), for: .touchUpInside) countdownStackView.addArrangedSubview(countdownIconView) countdownStackView.addArrangedSubview(countdownLabel) contentStackView.addArrangedSubview(onlineButton) contentStackView.addArrangedSubview(countdownStackView) contentStackView.addArrangedSubview(reminderButton) addSubview(contentStackView) contentStackView.snp.makeConstraints { make in make.edges.equalToSuperview().inset(15) } countdownIconView.snp.makeConstraints { make in make.width.height.equalTo(15) } snp.makeConstraints { make in make.height.equalTo(84) } } @available(*, unavailable) required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") } func apply(isOnline: Bool, countdownText: String, reminderMinutes: Int) { onlineButton.setTitle(isOnline ? "在线" : "离线", for: .normal) if isOnline { onlineButton.backgroundColor = AppColor.online onlineButton.setTitleColor(AppColor.successBackground, for: .normal) } else { onlineButton.backgroundColor = AppColor.inputBackground onlineButton.setTitleColor(AppColor.textTabInactive, for: .normal) } countdownLabel.text = countdownText let reminderTitle = reminderMinutes == 0 ? "不提醒" : "提前\(reminderMinutes)分钟" reminderButton.setTitle(reminderTitle, for: .normal) } @objc private func onlineTapped() { onOnlineTap?() } @objc private func reminderTapped() { onReminderTap?() } }