Files
e-party-iOS/yana/Features/ConfigView.swift
edwinQQQ c470dba79c feat: 更新项目配置和功能模块
- 修改Package.swift以支持iOS 15和macOS 12。
- 更新swift-tca-architecture-guidelines.mdc中的alwaysApply设置为false。
- 注释掉AppDelegate中的NIMSDK导入,移除不再使用的NIMConfigurationManager和NIMSessionManager文件。
- 添加新的API相关文件,包括EMailLoginFeature、IDLoginFeature和相关视图,增强登录功能。
- 更新APIConstants和APIEndpoints以反映新的API路径。
- 添加本地化支持文件,包含英文和中文简体的本地化字符串。
- 新增字体管理和安全工具类,支持AES和DES加密。
- 更新Xcode项目配置,调整版本号和启动画面设置。
2025-07-09 16:14:19 +08:00

190 lines
8.4 KiB
Swift

import SwiftUI
import ComposableArchitecture
struct ConfigView: View {
let store: StoreOf<ConfigFeature>
var body: some View {
WithPerceptionTracking {
NavigationView {
VStack(spacing: 20) {
//
Text("API 配置测试")
.font(.largeTitle)
.fontWeight(.bold)
.padding(.top)
//
Group {
if store.isLoading {
VStack {
ProgressView()
.scaleEffect(1.5)
Text("正在加载配置...")
.font(.headline)
.foregroundColor(.secondary)
.padding(.top, 8)
}
.frame(height: 100)
} else if let errorMessage = store.errorMessage {
VStack {
Image(systemName: "exclamationmark.triangle.fill")
.font(.system(size: 40))
.foregroundColor(.red)
Text("错误")
.font(.headline)
.fontWeight(.semibold)
Text(errorMessage)
.font(.body)
.foregroundColor(.secondary)
.multilineTextAlignment(.center)
.padding(.horizontal)
Button("清除错误") {
store.send(.clearError)
}
.buttonStyle(.borderedProminent)
.padding(.top)
}
.frame(maxHeight: .infinity)
} else if let configData = store.configData {
//
ScrollView {
VStack(alignment: .leading, spacing: 16) {
if let version = configData.version {
InfoRow(title: "版本", value: version)
}
if let features = configData.features, !features.isEmpty {
VStack(alignment: .leading, spacing: 8) {
Text("功能列表")
.font(.headline)
.fontWeight(.semibold)
ForEach(features, id: \.self) { feature in
HStack {
Circle()
.fill(Color.green)
.frame(width: 6, height: 6)
Text(feature)
.font(.body)
}
}
}
.padding()
.background(Color(.systemGray6))
.cornerRadius(12)
}
if let settings = configData.settings {
VStack(alignment: .leading, spacing: 8) {
Text("设置")
.font(.headline)
.fontWeight(.semibold)
if let enableDebug = settings.enableDebug {
InfoRow(title: "调试模式", value: enableDebug ? "启用" : "禁用")
}
if let apiTimeout = settings.apiTimeout {
InfoRow(title: "API 超时", value: "\(apiTimeout)")
}
if let maxRetries = settings.maxRetries {
InfoRow(title: "最大重试次数", value: "\(maxRetries)")
}
}
.padding()
.background(Color(.systemGray6))
.cornerRadius(12)
}
if let lastUpdated = store.lastUpdated {
Text("最后更新: \(lastUpdated, style: .time)")
.font(.caption)
.foregroundColor(.secondary)
.frame(maxWidth: .infinity, alignment: .center)
}
}
.padding()
}
} else {
VStack {
Image(systemName: "gear")
.font(.system(size: 40))
.foregroundColor(.secondary)
Text("点击下方按钮加载配置")
.font(.headline)
.foregroundColor(.secondary)
}
.frame(maxHeight: .infinity)
}
}
Spacer()
//
VStack(spacing: 12) {
Button(action: {
store.send(.loadConfig)
}) {
HStack {
if store.isLoading {
ProgressView()
.progressViewStyle(CircularProgressViewStyle(tint: .white))
.scaleEffect(0.8)
} else {
Image(systemName: "arrow.clockwise")
}
Text(store.isLoading ? "加载中..." : "加载配置")
}
}
.buttonStyle(.borderedProminent)
.disabled(store.isLoading)
.frame(maxWidth: .infinity)
.frame(height: 50)
Text("使用新的 TCA API 组件")
.font(.caption)
.foregroundColor(.secondary)
}
}
}
.navigationBarHidden(true)
}
}
}
// MARK: - Helper Views
struct InfoRow: View {
let title: String
let value: String
var body: some View {
HStack {
Text(title)
.font(.body)
.fontWeight(.medium)
Spacer()
Text(value)
.font(.body)
.foregroundColor(.secondary)
}
}
}
// MARK: - Preview
#Preview {
ConfigView(
store: Store(initialState: ConfigFeature.State()) {
ConfigFeature()
}
)
}