feat: 按钮显示上传中

This commit is contained in:
Junhui Chen 2025-09-12 15:16:12 +08:00
parent 776824b51d
commit 5b9413699f

View File

@ -26,6 +26,8 @@ struct MediaUploadView: View {
@State private var uploadComplete = false @State private var uploadComplete = false
/// ID /// ID
@State private var uploadedFileIds: [[String: String]] = [] @State private var uploadedFileIds: [[String: String]] = []
/// Continue
@State private var isSubmitting: Bool = false
// MARK: - // MARK: -
@ -145,18 +147,32 @@ struct MediaUploadView: View {
/// ///
private var continueButton: some View { private var continueButton: some View {
Button(action: handleContinue) { let uploading = isUploading()
Text("Continue") let hasSelection = !uploadManager.selectedMedia.isEmpty
.font(.headline) let canProceed = uploadManager.isAllUploaded
.foregroundColor(uploadManager.selectedMedia.isEmpty ? Color.themeTextMessage : Color.themeTextMessageMain) let isLoading = uploading || isSubmitting
.frame(maxWidth: .infinity) return Button(action: handleContinue) {
.frame(height: 56) HStack(spacing: 8) {
.background(uploadManager.selectedMedia.isEmpty ? Color.white : Color.themePrimary) if isLoading {
.cornerRadius(28) ProgressView()
.padding(.horizontal, 24) .progressViewStyle(CircularProgressViewStyle())
}
Text(uploading ? "Uploading..." : (isSubmitting ? "Processing..." : "Continue"))
.font(.headline)
}
.foregroundColor(hasSelection ? Color.themeTextMessageMain : Color.themeTextMessage)
.frame(maxWidth: .infinity)
.frame(height: 56)
.background(
hasSelection
? (isSubmitting ? Color.gray.opacity(0.3) : Color.themePrimary)
: Color.white
)
.cornerRadius(28)
.padding(.horizontal, 24)
} }
.buttonStyle(PlainButtonStyle()) .buttonStyle(PlainButtonStyle())
.disabled(uploadManager.selectedMedia.isEmpty) .disabled(!canProceed || isSubmitting)
} }
/// ///
@ -315,6 +331,9 @@ struct MediaUploadView: View {
/// ///
private func handleContinue() { private func handleContinue() {
//
guard !isSubmitting else { return }
// //
let uploadResults = uploadManager.uploadResults let uploadResults = uploadManager.uploadResults
guard !uploadResults.isEmpty else { guard !uploadResults.isEmpty else {
@ -332,6 +351,8 @@ struct MediaUploadView: View {
// id // id
Task { Task {
isSubmitting = true
defer { isSubmitting = false }
do { do {
let materialIds = try await MaterialUpload.shared.addMaterials(files: files) let materialIds = try await MaterialUpload.shared.addMaterials(files: files)
print("🚀 素材ID: \(materialIds ?? [])") print("🚀 素材ID: \(materialIds ?? [])")