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
co-authored by Cursor
parent e290656322
commit b7d74905b7
70 changed files with 1588 additions and 48 deletions
+44
View File
@@ -0,0 +1,44 @@
//
// AppStore.swift
// suixinkan
//
import Foundation
/// 本地会话存储,与 Android `AppStoreDataSource` 对齐。
/// 当前以 Token 是否非空判断登录态。
final class AppStore {
static let shared = AppStore()
private enum Key {
static let token = "key_in_token"
}
private let defaults: UserDefaults
init(defaults: UserDefaults = .standard) {
self.defaults = defaults
}
/// 登录 Token。
var token: String {
get { defaults.string(forKey: Key.token) ?? "" }
set { defaults.set(newValue, forKey: Key.token) }
}
/// Token 非空视为已登录。
var isLoggedIn: Bool {
!token.isEmpty
}
/// 保存登录 Token。
func saveToken(_ token: String) {
self.token = token
}
/// 清除登录态。
func logout() {
token = ""
}
}