// // ScenicPromotionSettingsMaterialRowView.swift // suixinkan // // Created by Codex on 2026/7/2. // import SwiftUI /// 设置页已上传素材行,支持预览与删除。 struct ScenicPromotionSettingsMaterialRowView: View { let material: ScenicPromotionManagedMaterial let onPreview: () -> Void let onDelete: () -> Void var body: some View { HStack(spacing: 10) { Button(action: onPreview) { HStack(spacing: 12) { ScenicPromotionSettingsMaterialThumbnail(material: material) VStack(alignment: .leading, spacing: 5) { Text(material.title) .font(.system(size: 15, weight: .bold)) .foregroundStyle(AppDesign.textPrimary) .lineLimit(1) Text(material.subtitle) .font(.system(size: 12, weight: .medium)) .foregroundStyle(AppDesign.textSecondary) .lineLimit(1) Text(material.createdAt) .font(.system(size: 11, weight: .medium)) .foregroundStyle(Color(hex: 0x8A95A6)) } Spacer(minLength: 0) Image(systemName: "chevron.right") .font(.system(size: 13, weight: .bold)) .foregroundStyle(Color(hex: 0x9AA5B5)) } } .buttonStyle(.plain) Button(action: onDelete) { Image(systemName: "trash") .font(.system(size: 16, weight: .semibold)) .foregroundStyle(AppDesign.danger) .frame(width: 36, height: 36) .background(Color(hex: 0xFFF1F1), in: Circle()) } .buttonStyle(.plain) } .padding(10) .background(Color(hex: 0xF8FAFD), in: RoundedRectangle(cornerRadius: 14)) } } #if DEBUG #Preview("素材行") { ScenicPromotionSettingsMaterialRowView( material: ScenicPromotionPreviewSupport.sampleManagedMaterial, onPreview: {}, onDelete: {} ) .padding() .background(AppDesign.background) } #endif