import SwiftUI // MARK: - 数据类型选择界面 struct CodeTypeSelectionView: View { @State private var selectedDataType: DataType = .qrcode @State private var selectedBarcodeType: BarcodeType = .ean13 @State private var selectedQRCodeType: QRCodeType = .text var body: some View { VStack(spacing: 30) { // 数据类型选择 VStack(spacing: 20) { HStack(spacing: 0) { ForEach(DataType.allCases, id: \.self) { type in Button(action: { selectedDataType = type // 添加触觉反馈 let impactFeedback = UIImpactFeedbackGenerator(style: .light) impactFeedback.impactOccurred() }) { HStack(spacing: 6) { Image(systemName: type.icon) .font(.system(size: 16, weight: .medium)) .foregroundColor(selectedDataType == type ? .white : .primary) Text(type.displayName) .font(.system(size: 15, weight: .medium)) .foregroundColor(selectedDataType == type ? .white : .primary) } .frame(maxWidth: .infinity) .padding(.vertical, 12) .background( RoundedRectangle(cornerRadius: 8) .fill(selectedDataType == type ? Color.blue : Color(.systemGray6)) ) } .buttonStyle(PlainButtonStyle()) } } .background( RoundedRectangle(cornerRadius: 8) .fill(Color(.systemGray6)) ) .overlay( RoundedRectangle(cornerRadius: 8) .stroke(Color(.systemGray4), lineWidth: 0.5) ) } .padding(.horizontal, 20) // 具体类型选择 VStack(spacing: 20) { if selectedDataType == .barcode { VStack(spacing: 12) { Picker("barcode_type".localized, selection: $selectedBarcodeType) { ForEach(BarcodeType.allCases, id: \.self) { type in HStack { Image(systemName: type.icon) Text(type.displayName) } .tag(type) } } .pickerStyle(WheelPickerStyle()) } } else { VStack(spacing: 12) { Picker("qrcode_type".localized, selection: $selectedQRCodeType) { ForEach(QRCodeType.allCases, id: \.self) { type in HStack { Image(systemName: type.icon) Text(type.displayName) } .tag(type) } } .pickerStyle(WheelPickerStyle()) } } } .padding(.horizontal, 20) Spacer() // 下一步按钮 NavigationLink( destination: selectedDataType == .qrcode ? AnyView(CreateQRCodeView(selectedQRCodeType: selectedQRCodeType)) : AnyView(CreateCodeView( selectedDataType: selectedDataType, selectedBarcodeType: selectedBarcodeType, selectedQRCodeType: selectedQRCodeType )) ) { HStack(spacing: 8) { Text(NSLocalizedString("next", comment: "Next")) .font(.system(size: 18, weight: .semibold)) .foregroundColor(.white) Image(systemName: "arrow.right") .font(.system(size: 16, weight: .medium)) .foregroundColor(.white) } .frame(maxWidth: .infinity) .padding(.vertical, 16) .background( RoundedRectangle(cornerRadius: 12) .fill(Color.blue) ) } .padding(.horizontal, 20) .padding(.bottom, 30) } .navigationTitle(NSLocalizedString("select_type", comment: "Select type")) .navigationBarTitleDisplayMode(.inline) } } #Preview { CodeTypeSelectionView() }