diff --git a/AIStudyApp/AIStudyApp/Features/Analysis/AnalysisHomeView.swift b/AIStudyApp/AIStudyApp/Features/Analysis/AnalysisHomeView.swift index e56c03c..4473cab 100644 --- a/AIStudyApp/AIStudyApp/Features/Analysis/AnalysisHomeView.swift +++ b/AIStudyApp/AIStudyApp/Features/Analysis/AnalysisHomeView.swift @@ -48,7 +48,8 @@ struct AnalysisHomeView: View { ForEach(viewModel.recommendations.prefix(3)) { rec in HStack(spacing: 10) { Image(systemName: rec.type == "review" ? "arrow.triangle.2.circlepath" : "lightbulb.fill") - .font(.system(size: 14)).foregroundColor(Color.zxAccent).frame(width: 32, height: 32).background(Color.zxAccent.opacity(0.1)).clipShape(RoundedRectangle(cornerRadius: 8)) + .font(.system(size: 14)).foregroundColor(Color.zxAccent).frame(width: 32, height: 32) + VStack(alignment: .leading, spacing: 2) { Text(rec.title ?? "").font(.system(size: 13, weight: .semibold)).foregroundColor(Color.zxF0); if let desc = rec.description { Text(desc).font(.system(size: 11)).foregroundColor(Color.zxF04).lineLimit(1) } } Spacer() if let p = rec.priority { Text(p).font(.system(size: 10, weight: .bold)).foregroundColor(p == "high" ? Color.zxCoral : Color.zxAmber).padding(.horizontal, 6).padding(.vertical, 2).background((p == "high" ? Color.zxCoral : Color.zxAmber).opacity(0.1)).clipShape(Capsule()) } diff --git a/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift b/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift index 20bdcd5..df40f1f 100644 --- a/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift +++ b/AIStudyApp/AIStudyApp/Features/Library/LibrarySubpages.swift @@ -208,7 +208,8 @@ struct LibraryDetailPage: View { HStack(spacing: 12) { Image(systemName: src.type == "file" ? "doc.fill" : "link") .font(.system(size: 18)).foregroundColor(Color.zxPurple) - .frame(width: 40, height: 40).background(Color.zxPurpleBG(0.12)).clipShape(RoundedRectangle(cornerRadius: 10)) + .frame(width: 40, height: 40) + VStack(alignment: .leading, spacing: 2) { Text(src.title ?? src.originalFilename ?? "未命名").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0).lineLimit(1) HStack(spacing: 6) { @@ -664,7 +665,8 @@ struct ImportPage: View { ScrollView { VStack(spacing: 12) { if let error = importError { HStack(spacing: 8) { Image(systemName: "exclamationmark.triangle.fill").foregroundColor(.red); Text(error).font(.system(size: 13)).foregroundColor(.red) } - .padding(12).background(Color.red.opacity(0.1)).clipShape(RoundedRectangle(cornerRadius: 12)) + .padding(12) + } if !statusMessage.isEmpty { HStack(spacing: 8) { ProgressView(); Text(statusMessage).font(.system(size: 13)).foregroundColor(Color.zxF04) } @@ -756,7 +758,8 @@ struct ImportPage: View { } struct ZXImportRow: View { let icon: String; let title: String; let desc: String - var body: some View { HStack(spacing: 14) { Image(systemName: icon).font(.system(size: 22)).foregroundColor(Color.zxPurple).frame(width: 48, height: 48).background(Color.zxPurpleBG(0.1)).clipShape(RoundedRectangle(cornerRadius: 14)); VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 12)).foregroundColor(Color.zxF04) }; Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03) }.padding(16).background(Color.zxFill003).clipShape(RoundedRectangle(cornerRadius: 16)).overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.zxBorder006, lineWidth: 1)) } + var body: some View { HStack(spacing: 14) { Image(systemName: icon).font(.system(size: 22)).foregroundColor(Color.zxPurple).frame(width: 48, height: 48) +; VStack(alignment: .leading, spacing: 2) { Text(title).font(.system(size: 15, weight: .semibold)).foregroundColor(Color.zxF0); Text(desc).font(.system(size: 12)).foregroundColor(Color.zxF04) }; Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03) }.padding(16).background(Color.zxFill003).clipShape(RoundedRectangle(cornerRadius: 16)).overlay(RoundedRectangle(cornerRadius: 16).stroke(Color.zxBorder006, lineWidth: 1)) } } // MARK: - Import Review @@ -826,14 +829,16 @@ struct ImportReviewPage: View { } label: { Label("拒绝", systemImage: "xmark").font(.system(size: 13, weight: .medium)) .foregroundColor(Color.zxCoral).frame(maxWidth: .infinity).frame(height: 40) - .background(Color.zxCoral.opacity(0.1)).clipShape(RoundedRectangle(cornerRadius: 10)) + + } Button { Task { await acceptCandidate(c) } } label: { Label("接受", systemImage: "checkmark").font(.system(size: 13, weight: .medium)) .foregroundColor(Color.zxGreen).frame(maxWidth: .infinity).frame(height: 40) - .background(Color.zxGreen.opacity(0.1)).clipShape(RoundedRectangle(cornerRadius: 10)) + + } } .padding(.horizontal, 12).padding(.top, 8) diff --git a/AIStudyApp/AIStudyApp/Features/Profile/ProfileView.swift b/AIStudyApp/AIStudyApp/Features/Profile/ProfileView.swift index 384b975..981a3d4 100644 --- a/AIStudyApp/AIStudyApp/Features/Profile/ProfileView.swift +++ b/AIStudyApp/AIStudyApp/Features/Profile/ProfileView.swift @@ -12,17 +12,11 @@ struct ProfileView: View { Text("我的").font(.system(size: 22, weight: .heavy)).foregroundColor(Color.zxF0).tracking(-0.5) Spacer() NavigationLink(value: Route.notificationList) { - Image("icon-notifications").resizable().scaledToFit().frame(width: 18, height: 18).foregroundColor(Color.zxF05) - .frame(width: 36, height: 36).background(Color(hex:"#FFFFFF",opacity:0.05)) - .clipShape(RoundedRectangle(cornerRadius: 10)) - .overlay(RoundedRectangle(cornerRadius: 10).stroke(Color.zxBorder008, lineWidth: 1)) + Image("icon-notifications").resizable().scaledToFit().frame(width: 22, height: 22).foregroundColor(Color.zxF05) } .accessibilityLabel("通知中心") NavigationLink(value: Route.settings) { - Image("icon-settings").resizable().scaledToFit().frame(width: 18, height: 18).foregroundColor(Color.zxF05) - .frame(width: 36, height: 36).background(Color(hex:"#FFFFFF",opacity:0.05)) - .clipShape(RoundedRectangle(cornerRadius: 10)) - .overlay(RoundedRectangle(cornerRadius: 10).stroke(Color.zxBorder008, lineWidth: 1)) + Image("icon-settings").resizable().scaledToFit().frame(width: 22, height: 22).foregroundColor(Color.zxF05) } .accessibilityLabel("设置") }.padding(.horizontal, 20).padding(.top, 8).padding(.bottom, 4) @@ -100,7 +94,8 @@ struct ProfileView: View { VStack(spacing: 0) { NavigationLink(value: Route.libraryCreate) { HStack { - Image(systemName: "books.vertical.fill").font(.system(size: 18)).foregroundColor(Color.zxPurple).frame(width: 36, height: 36).background(Color.zxPurpleBG(0.12)).clipShape(RoundedRectangle(cornerRadius: 10)) + Image(systemName: "books.vertical.fill").font(.system(size: 18)).foregroundColor(Color.zxPurple).frame(width: 36, height: 36) + Text("学习资产").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0) Spacer() Text("\(viewModel.kbCount)库 \(viewModel.itemCount)项 \(viewModel.cardCount)卡").font(.system(size: 12)).foregroundColor(Color.zxF04) @@ -110,14 +105,16 @@ struct ProfileView: View { ZXProfileDivider() NavigationLink(value: Route.notificationList) { HStack { - Image(systemName: "bell.fill").font(.system(size: 18)).foregroundColor(Color.zxOrange).frame(width: 36, height: 36).background(Color.zxOrange.opacity(0.12)).clipShape(RoundedRectangle(cornerRadius: 10)) + Image(systemName: "bell.fill").font(.system(size: 18)).foregroundColor(Color.zxOrange).frame(width: 36, height: 36) + Text("消息中心").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0) Spacer(); Image(systemName: "chevron.right").font(.system(size: 12)).foregroundColor(Color.zxF03) }.padding(.horizontal, 16).padding(.vertical, 14) }.foregroundColor(.primary) ZXProfileDivider() HStack { - Image(systemName: "externaldrive.fill").font(.system(size: 18)).foregroundColor(Color.zxTeal).frame(width: 36, height: 36).background(Color.zxTeal.opacity(0.12)).clipShape(RoundedRectangle(cornerRadius: 10)) + Image(systemName: "externaldrive.fill").font(.system(size: 18)).foregroundColor(Color.zxTeal).frame(width: 36, height: 36) + VStack(alignment: .leading, spacing: 2) { Text("存储空间").font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0) Text(viewModel.formattedStorage).font(.system(size: 11)).foregroundColor(Color.zxF04) diff --git a/AIStudyApp/AIStudyApp/Features/Profile/SettingsView.swift b/AIStudyApp/AIStudyApp/Features/Profile/SettingsView.swift index 085fb22..192d969 100644 --- a/AIStudyApp/AIStudyApp/Features/Profile/SettingsView.swift +++ b/AIStudyApp/AIStudyApp/Features/Profile/SettingsView.swift @@ -82,7 +82,8 @@ struct SettingsView: View { showLogoutAlert = true } label: { HStack(spacing: 12) { - Image(systemName: "rectangle.portrait.and.arrow.right").font(.system(size: 16)).foregroundColor(.red).frame(width: 32, height: 32).background(Color.red.opacity(0.12)).clipShape(RoundedRectangle(cornerRadius: 8)) + Image(systemName: "rectangle.portrait.and.arrow.right").font(.system(size: 16)).foregroundColor(.red).frame(width: 32, height: 32) + Text("退出登录").font(.system(size: 14, weight: .semibold)).foregroundColor(.red) Spacer() }.padding(.horizontal, 16).padding(.vertical, 14) @@ -159,8 +160,8 @@ struct ZXSettingRow: View { let title: String; let value: String; let icon: String; let color: Color; var isCustom: Bool = false var body: some View { HStack(spacing: 12) { - if isCustom { Image(icon).resizable().scaledToFit().frame(width: 16, height: 16).foregroundColor(color).frame(width: 32, height: 32).background(color.opacity(0.12)).clipShape(RoundedRectangle(cornerRadius: 8)) } - else { Image(systemName: icon).font(.system(size: 16)).foregroundColor(color).frame(width: 32, height: 32).background(color.opacity(0.12)).clipShape(RoundedRectangle(cornerRadius: 8)) } + if isCustom { Image(icon).resizable().scaledToFit().frame(width: 20, height: 20).foregroundColor(color) } + else { Image(systemName: icon).font(.system(size: 18)).foregroundColor(color) } Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0) Spacer() if !value.isEmpty { Text(value).font(.system(size: 13)).foregroundColor(Color.zxF03) } @@ -173,7 +174,7 @@ struct ZXSettingToggleRow: View { let title: String; let icon: String; let color: Color; @Binding var isOn: Bool var body: some View { HStack(spacing: 12) { - Image(systemName: icon).font(.system(size: 16)).foregroundColor(color).frame(width: 32, height: 32).background(color.opacity(0.12)).clipShape(RoundedRectangle(cornerRadius: 8)) + Image(systemName: icon).font(.system(size: 18)).foregroundColor(color) Text(title).font(.system(size: 14, weight: .semibold)).foregroundColor(Color.zxF0) Spacer() Toggle("", isOn: $isOn).labelsHidden().tint(Color.zxPurple) diff --git a/AIStudyApp/AIStudyApp/Features/Study/StudyHomeView.swift b/AIStudyApp/AIStudyApp/Features/Study/StudyHomeView.swift index 603baa0..1b8742f 100644 --- a/AIStudyApp/AIStudyApp/Features/Study/StudyHomeView.swift +++ b/AIStudyApp/AIStudyApp/Features/Study/StudyHomeView.swift @@ -55,19 +55,22 @@ struct StudyHomeView: View { HStack(spacing: 12) { NavigationLink(value: Route.aiChat) { VStack(spacing: 6) { - Image(systemName: "sparkles").font(.system(size: 18)).foregroundColor(Color.zxPurple).frame(width: 44, height: 44).background(Color.zxPurpleBG(0.12)).clipShape(RoundedRectangle(cornerRadius: 12)) + Image(systemName: "sparkles").font(.system(size: 18)).foregroundColor(Color.zxPurple).frame(width: 44, height: 44) + Text("AI 问答").font(.system(size: 11)).foregroundColor(Color.zxF04) }.frame(maxWidth: .infinity) }.foregroundColor(.primary) NavigationLink(value: Route.activeRecall) { VStack(spacing: 6) { - Image(systemName: "brain.head.profile").font(.system(size: 18)).foregroundColor(Color.zxOrange).frame(width: 44, height: 44).background(Color.zxOrangeBG(0.12)).clipShape(RoundedRectangle(cornerRadius: 12)) + Image(systemName: "brain.head.profile").font(.system(size: 18)).foregroundColor(Color.zxOrange).frame(width: 44, height: 44) + Text("自测").font(.system(size: 11)).foregroundColor(Color.zxF04) }.frame(maxWidth: .infinity) }.foregroundColor(.primary) NavigationLink(value: Route.reviewCard) { VStack(spacing: 6) { - Image(systemName: "arrow.triangle.2.circlepath").font(.system(size: 18)).foregroundColor(Color.zxTeal).frame(width: 44, height: 44).background(Color.zxTeal.opacity(0.12)).clipShape(RoundedRectangle(cornerRadius: 12)) + Image(systemName: "arrow.triangle.2.circlepath").font(.system(size: 18)).foregroundColor(Color.zxTeal).frame(width: 44, height: 44) + Text("复习").font(.system(size: 11)).foregroundColor(Color.zxF04) }.frame(maxWidth: .infinity) }.foregroundColor(.primary)