Files
suixinkan_uikit/suixinkan/UI/Setting/StoreAccountDeregistrationSubmittedViewController.swift

119 lines
5.2 KiB
Swift

import SnapKit
import UIKit
/// 注销申请明确受理后的退出态结果页;不持有会话、凭证或注销接口。
@MainActor
final class StoreAccountDeregistrationSubmittedViewController: BaseViewController {
private typealias Style = StoreAccountDeregistrationStyle
private let identityName: String
private let coolingUntil: String?
private let onDone: () -> Void
private let scrollView = UIScrollView()
private let contentStack = UIStackView()
private let bottomBar = UIView()
private let doneButton = Style.button("完成", id: "deregister.submitted.done")
private var didFinish = false
/// 使用提交时冻结的展示信息创建页面;点击完成后由 Scene 进入登录页。
init(identityName: String, coolingUntil: String?, onDone: @escaping () -> Void) {
let normalizedName = identityName.trimmingCharacters(in: .whitespacesAndNewlines)
self.identityName = normalizedName.isEmpty ? "当前门店身份" : normalizedName
self.coolingUntil = coolingUntil?.trimmingCharacters(in: .whitespacesAndNewlines)
self.onDone = onDone
super.init(nibName: nil, bundle: nil)
}
@available(*, unavailable)
required init?(coder: NSCoder) { fatalError("init(coder:) has not been implemented") }
override func setupNavigationBar() {
title = "注销账号"
navigationItem.hidesBackButton = true
}
override func setupUI() {
view.backgroundColor = Style.pageBackground
view.addSubview(scrollView)
scrollView.alwaysBounceVertical = true
scrollView.addSubview(contentStack)
contentStack.axis = .vertical
contentStack.spacing = 18
let badge = Style.iconBadge("lock", iconSize: 36)
let badgeRow = UIView()
badgeRow.addSubview(badge)
badge.snp.makeConstraints { $0.top.bottom.centerX.equalToSuperview() }
let titleLabel = Style.label("注销申请已提交", size: 24, weight: .semibold)
titleLabel.textAlignment = .center
titleLabel.accessibilityIdentifier = "deregister.submitted.title"
let identityLabel = Style.label("当前身份:\(identityName)", size: 15, color: Style.textSecondary)
identityLabel.textAlignment = .center
identityLabel.accessibilityIdentifier = "deregister.submitted.identity"
contentStack.addArrangedSubview(Style.stack([badgeRow, titleLabel, identityLabel], spacing: 12))
let deadlineIcon = Style.icon("calendar", size: 22)
deadlineIcon.snp.makeConstraints { $0.width.equalTo(28) }
let deadlineTextValue = coolingUntil.flatMap { $0.isEmpty ? nil : $0 } ?? "以服务端状态为准"
let deadlineLabel = Style.label(deadlineTextValue, size: 19, weight: .semibold)
deadlineLabel.accessibilityIdentifier = "deregister.submitted.deadline"
let deadlineText = Style.stack([
Style.label("冷静期截止时间", size: 13, color: Style.textSecondary),
deadlineLabel
], spacing: 8)
let deadlineRow = UIStackView(arrangedSubviews: [deadlineIcon, deadlineText])
deadlineRow.axis = .horizontal
deadlineRow.alignment = .center
deadlineRow.spacing = 12
contentStack.addArrangedSubview(Style.card(deadlineRow))
let infoIcon = Style.icon("info.circle", size: 17)
infoIcon.snp.makeConstraints { $0.width.equalTo(22) }
let infoLabel = Style.label("重新登录该身份自动撤销申请", size: 13, color: Style.textSecondary)
let infoRow = UIStackView(arrangedSubviews: [infoIcon, infoLabel])
infoRow.axis = .horizontal
infoRow.alignment = .center
infoRow.spacing = 8
contentStack.addArrangedSubview(Style.card(infoRow, background: Style.infoBackground))
view.addSubview(bottomBar)
bottomBar.backgroundColor = .white
bottomBar.addSubview(doneButton)
doneButton.addTarget(self, action: #selector(doneTapped), for: .touchUpInside)
doneButton.snp.makeConstraints {
$0.top.equalToSuperview().offset(12)
$0.leading.trailing.equalToSuperview().inset(16)
$0.bottom.equalToSuperview().inset(12)
}
}
override func setupConstraints() {
bottomBar.snp.makeConstraints {
$0.leading.trailing.equalToSuperview()
$0.bottom.equalTo(view.safeAreaLayoutGuide)
}
scrollView.snp.makeConstraints {
$0.top.leading.trailing.equalTo(view.safeAreaLayoutGuide)
$0.bottom.equalTo(bottomBar.snp.top)
}
contentStack.snp.makeConstraints {
$0.top.equalTo(scrollView.contentLayoutGuide).offset(32)
$0.leading.trailing.bottom.equalTo(scrollView.contentLayoutGuide).inset(16)
$0.width.equalTo(scrollView.frameLayoutGuide).offset(-32)
}
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationItem.hidesBackButton = true
navigationController?.interactivePopGestureRecognizer?.isEnabled = false
}
@objc private func doneTapped() {
guard !didFinish else { return }
didFinish = true
doneButton.isEnabled = false
onDone()
}
}