引入真实收款与钱包页面替换首页占位入口,通过 RootView 接入 API,并支持银行卡 OSS 上传及二维码保存到相册。 Co-authored-by: Cursor <cursoragent@cursor.com>
89 lines
2.8 KiB
Swift
89 lines
2.8 KiB
Swift
//
|
||
// HomeSupportViews.swift
|
||
// suixinkan
|
||
//
|
||
// Created by Codex on 2026/6/22.
|
||
//
|
||
|
||
import SwiftUI
|
||
|
||
extension HomeRoute {
|
||
/// 将首页路由映射为真实页面或迁移占位页。
|
||
@ViewBuilder
|
||
var destinationView: some View {
|
||
switch self {
|
||
case .profileSpace:
|
||
ProfileView()
|
||
case .scenicSelection:
|
||
HomeScenicSelectionView()
|
||
case .moreFunctions:
|
||
HomeMoreFunctionsView()
|
||
case .settings:
|
||
SettingsCenterView()
|
||
case .paymentCollection:
|
||
PaymentCollectionView()
|
||
case .wallet:
|
||
WalletView()
|
||
case let .modulePlaceholder(uri, title):
|
||
HomeMigrationModuleView(title: title, uri: uri)
|
||
}
|
||
}
|
||
}
|
||
|
||
/// 首页迁移占位视图,用于承接尚未同步的功能入口。
|
||
struct HomeMigrationModuleView: View {
|
||
let title: String
|
||
let uri: String
|
||
|
||
var body: some View {
|
||
VStack(spacing: AppMetrics.Spacing.medium) {
|
||
Image(systemName: "square.grid.2x2")
|
||
.font(.system(size: 44, weight: .semibold))
|
||
.foregroundStyle(AppDesign.primary)
|
||
|
||
Text(title)
|
||
.font(.system(size: AppMetrics.FontSize.title2, weight: .semibold))
|
||
.foregroundStyle(AppDesign.textPrimary)
|
||
|
||
Text(uri)
|
||
.font(.system(size: AppMetrics.FontSize.subheadline))
|
||
.foregroundStyle(AppDesign.textSecondary)
|
||
.lineLimit(2)
|
||
.multilineTextAlignment(.center)
|
||
.padding(.horizontal, AppMetrics.Spacing.large)
|
||
}
|
||
.frame(maxWidth: .infinity, maxHeight: .infinity)
|
||
.background(Color(hex: 0xF5F7FA))
|
||
.navigationTitle(title)
|
||
.navigationBarTitleDisplayMode(.inline)
|
||
}
|
||
}
|
||
|
||
/// 首页景区选择视图,允许用户切换当前账号上下文中的景区。
|
||
struct HomeScenicSelectionView: View {
|
||
@Environment(AccountContext.self) private var accountContext
|
||
@Environment(\.dismiss) private var dismiss
|
||
|
||
var body: some View {
|
||
List(accountContext.scenicScopes) { scenic in
|
||
Button {
|
||
accountContext.selectScenic(id: scenic.id)
|
||
dismiss()
|
||
} label: {
|
||
HStack {
|
||
Text(scenic.name)
|
||
.foregroundStyle(AppDesign.textPrimary)
|
||
Spacer()
|
||
if accountContext.currentScenic?.id == scenic.id {
|
||
Image(systemName: "checkmark")
|
||
.font(.system(size: AppMetrics.ControlSize.smallIcon, weight: .semibold))
|
||
.foregroundStyle(AppDesign.primary)
|
||
}
|
||
}
|
||
}
|
||
}
|
||
.navigationTitle("景区选择")
|
||
.navigationBarTitleDisplayMode(.inline)
|
||
}
|
||
}
|