From 5b9413699f15cd30d9ba89d7e76ff3a23df4e4ad Mon Sep 17 00:00:00 2001 From: Junhui Chen Date: Fri, 12 Sep 2025 15:16:12 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=8C=89=E9=92=AE=E6=98=BE=E7=A4=BA?= =?UTF-8?q?=E4=B8=8A=E4=BC=A0=E4=B8=AD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wake/View/OnBoarding/MediaUploadView.swift | 41 ++++++++++++++++------ 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/wake/View/OnBoarding/MediaUploadView.swift b/wake/View/OnBoarding/MediaUploadView.swift index a1df67c..9608e52 100644 --- a/wake/View/OnBoarding/MediaUploadView.swift +++ b/wake/View/OnBoarding/MediaUploadView.swift @@ -26,6 +26,8 @@ struct MediaUploadView: View { @State private var uploadComplete = false /// 上传完成的文件ID列表 @State private var uploadedFileIds: [[String: String]] = [] + /// Continue 提交过程中(调用接口)加载状态 + @State private var isSubmitting: Bool = false // MARK: - 视图主体 @@ -145,18 +147,32 @@ struct MediaUploadView: View { /// 继续按钮 private var continueButton: some View { - Button(action: handleContinue) { - Text("Continue") - .font(.headline) - .foregroundColor(uploadManager.selectedMedia.isEmpty ? Color.themeTextMessage : Color.themeTextMessageMain) - .frame(maxWidth: .infinity) - .frame(height: 56) - .background(uploadManager.selectedMedia.isEmpty ? Color.white : Color.themePrimary) - .cornerRadius(28) - .padding(.horizontal, 24) + let uploading = isUploading() + let hasSelection = !uploadManager.selectedMedia.isEmpty + let canProceed = uploadManager.isAllUploaded + let isLoading = uploading || isSubmitting + return Button(action: handleContinue) { + HStack(spacing: 8) { + if isLoading { + ProgressView() + .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()) - .disabled(uploadManager.selectedMedia.isEmpty) + .disabled(!canProceed || isSubmitting) } /// 媒体选择器视图 @@ -315,6 +331,9 @@ struct MediaUploadView: View { /// 处理继续按钮点击 private func handleContinue() { + // 避免重复点击触发 + guard !isSubmitting else { return } + // 获取所有已上传文件的结果 let uploadResults = uploadManager.uploadResults guard !uploadResults.isEmpty else { @@ -332,6 +351,8 @@ struct MediaUploadView: View { // 提交素材,并利用返回的素材id数组,创建第二个盲盒 Task { + isSubmitting = true + defer { isSubmitting = false } do { let materialIds = try await MaterialUpload.shared.addMaterials(files: files) print("🚀 素材ID: \(materialIds ?? [])")