Introduce travel album entry with Sony PTP tethering pipeline, profile space settings page, home routing updates, Launch Screen storyboard, and related tests/docs. Co-authored-by: Cursor <cursoragent@cursor.com>
47 lines
1.6 KiB
Swift
47 lines
1.6 KiB
Swift
//
|
|
// TravelAlbumCodeSheet.swift
|
|
// suixinkan
|
|
//
|
|
// Created by Codex on 2026/6/29.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
/// 旅拍相册小程序码弹窗。
|
|
struct TravelAlbumCodeSheet: View {
|
|
let state: TravelAlbumCodeSheetState
|
|
|
|
var body: some View {
|
|
NavigationStack {
|
|
VStack(spacing: AppMetrics.Spacing.large) {
|
|
Text(state.albumName)
|
|
.font(.system(size: AppMetrics.FontSize.title3, weight: .semibold))
|
|
|
|
if state.isLoading {
|
|
ProgressView("加载小程序码…")
|
|
.frame(height: 220)
|
|
} else if state.qrImageURL.isEmpty {
|
|
AppContentUnavailableView("暂无小程序码", systemImage: "qrcode")
|
|
.frame(height: 220)
|
|
} else {
|
|
RemoteImage(urlString: state.qrImageURL) {
|
|
Image(systemName: "qrcode")
|
|
.font(.system(size: 48))
|
|
.foregroundStyle(AppDesign.placeholder)
|
|
}
|
|
.frame(width: 220, height: 220)
|
|
.clipShape(RoundedRectangle(cornerRadius: 12))
|
|
}
|
|
|
|
Text("用户可扫码进入小程序选片")
|
|
.font(.system(size: AppMetrics.FontSize.subheadline))
|
|
.foregroundStyle(AppDesign.textSecondary)
|
|
}
|
|
.padding(AppMetrics.Spacing.pageHorizontal)
|
|
.navigationTitle("相册码")
|
|
.navigationBarTitleDisplayMode(.inline)
|
|
}
|
|
.presentationDetents([.medium])
|
|
}
|
|
}
|