88 lines
3.1 KiB
Swift
88 lines
3.1 KiB
Swift
//
|
|
// ScenicPromotionSettingsMaterialUploadCard.swift
|
|
// suixinkan
|
|
//
|
|
// Created by Codex on 2026/7/2.
|
|
//
|
|
|
|
import SwiftUI
|
|
|
|
/// 设置页视频 / 图片上传模块。
|
|
struct ScenicPromotionSettingsMaterialUploadCard: View {
|
|
@ObservedObject var viewModel: ScenicPromotionSettingsViewModel
|
|
let kind: ScenicPromotionUploadKind
|
|
let onUploadFailed: () -> Void
|
|
|
|
var body: some View {
|
|
let materials = viewModel.materials(for: kind)
|
|
|
|
ScenicPromotionSettingsCard(
|
|
title: kind.title,
|
|
subtitle: viewModel.selectedMaterialPoint == nil
|
|
? "先选择素材所属打卡点后再上传"
|
|
: "当前展示 \(viewModel.selectedMaterialPointName) 已上传素材",
|
|
icon: kind.iconName,
|
|
tint: kind == .video ? Color(hex: 0x7A4DFF) : AppDesign.primary
|
|
) {
|
|
HStack {
|
|
Text(viewModel.selectedMaterialPointName)
|
|
.font(.system(size: 14, weight: .semibold))
|
|
.foregroundStyle(AppDesign.textSecondary)
|
|
.lineLimit(1)
|
|
.minimumScaleFactor(0.78)
|
|
Spacer()
|
|
Button {
|
|
guard viewModel.addMaterial(kind: kind) else {
|
|
onUploadFailed()
|
|
return
|
|
}
|
|
} label: {
|
|
Label(kind.uploadTitle, systemImage: "square.and.arrow.up")
|
|
.font(.system(size: 13, weight: .bold))
|
|
.foregroundStyle(.white)
|
|
.padding(.horizontal, 12)
|
|
.frame(height: 34)
|
|
.background(
|
|
viewModel.selectedMaterialPoint == nil
|
|
? Color(hex: 0xAAB7C7)
|
|
: AppDesign.primary,
|
|
in: Capsule()
|
|
)
|
|
}
|
|
.buttonStyle(.plain)
|
|
}
|
|
|
|
if viewModel.selectedMaterialPoint == nil {
|
|
ScenicPromotionSettingsInlineNotice(
|
|
text: "请选择素材所属打卡点后再上传\(kind.shortTitle)",
|
|
tint: AppDesign.warning
|
|
)
|
|
} else if materials.isEmpty {
|
|
ScenicPromotionSettingsMaterialEmptyView(kind: kind)
|
|
} else {
|
|
VStack(spacing: 10) {
|
|
ForEach(materials) { material in
|
|
ScenicPromotionSettingsMaterialRowView(
|
|
material: material,
|
|
onPreview: { viewModel.openMaterialPreview(material) },
|
|
onDelete: { viewModel.deleteMaterial(material) }
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
#if DEBUG
|
|
#Preview("视频上传卡片") {
|
|
ScenicPromotionSettingsMaterialUploadCard(
|
|
viewModel: ScenicPromotionPreviewSupport.settingsViewModel(),
|
|
kind: .video,
|
|
onUploadFailed: {}
|
|
)
|
|
.padding()
|
|
.background(AppDesign.background)
|
|
}
|
|
#endif
|