Add login flow, session routing, and MainTab shell aligned with reference UI.

Implement token-based root routing, Android-matched login screen, five-slot MainTabBar with scan action, and placeholder tab pages.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 15:12:34 +08:00
parent e290656322
commit b7d74905b7
70 changed files with 1588 additions and 48 deletions

View File

@ -0,0 +1,50 @@
//
// ScanPlaceholderViewController.swift
// suixinkan
//
import SnapKit
import UIKit
///
final class ScanPlaceholderViewController: BaseViewController {
private let titleLabel = UILabel()
private let closeButton = UIButton(type: .system)
override func setupNavigationBar() {
navigationController?.setNavigationBarHidden(true, animated: false)
}
override func setupUI() {
view.backgroundColor = .black
titleLabel.text = "扫码核销"
titleLabel.font = .systemFont(ofSize: 20, weight: .medium)
titleLabel.textColor = .white
titleLabel.textAlignment = .center
closeButton.setTitle("关闭", for: .normal)
closeButton.setTitleColor(.white, for: .normal)
closeButton.titleLabel?.font = .systemFont(ofSize: 16, weight: .medium)
closeButton.addTarget(self, action: #selector(closeTapped), for: .touchUpInside)
view.addSubview(titleLabel)
view.addSubview(closeButton)
}
override func setupConstraints() {
titleLabel.snp.makeConstraints { make in
make.center.equalToSuperview()
}
closeButton.snp.makeConstraints { make in
make.top.equalTo(view.safeAreaLayoutGuide).offset(12)
make.trailing.equalToSuperview().inset(16)
}
}
@objc private func closeTapped() {
dismiss(animated: true)
}
}