import SwiftUI // MARK: - 条形码验证信息显示组件 struct BarcodeValidationInfoView: View { let validationResult: BarcodeValidator.ValidationResult? let barcodeType: BarcodeType var body: some View { VStack(alignment: .leading, spacing: 8) { if let result = validationResult { // 验证状态指示器 HStack(spacing: 8) { Image(systemName: result.isValid ? "checkmark.circle.fill" : "xmark.circle.fill") .foregroundColor(result.isValid ? .green : .red) Text(result.isValid ? "format_correct".localized : "format_error".localized) .font(.caption) .foregroundColor(result.isValid ? .green : .red) .fontWeight(.medium) Spacer() } // 错误信息 if let errorMessage = result.errorMessage { Text(errorMessage) .font(.caption) .foregroundColor(.red) .padding(.leading, 24) } // 格式要求信息 VStack(alignment: .leading, spacing: 4) { if let expectedLength = result.expectedLength { HStack { Image(systemName: "number") .foregroundColor(.blue) .font(.caption) Text(String(format: "length_requirement".localized, expectedLength)) .font(.caption) .foregroundColor(.blue) } } if let allowedCharacters = result.allowedCharacters { HStack { Image(systemName: "character") .foregroundColor(.blue) .font(.caption) Text(String(format: "allowed_characters".localized, allowedCharacters)) .font(.caption) .foregroundColor(.blue) } } } .padding(.leading, 24) // 格式化后的内容 if result.isValid && result.formattedContent != "" { HStack { Image(systemName: "textformat") .foregroundColor(.green) .font(.caption) Text(String(format: "formatted_content".localized, result.formattedContent)) .font(.caption) .foregroundColor(.green) .fontWeight(.medium) } .padding(.leading, 24) } } else { // 默认提示信息 HStack { Image(systemName: "info.circle") .foregroundColor(.blue) .font(.caption) Text(String(format: "please_enter_valid_format".localized, barcodeType.displayName)) .font(.caption) .foregroundColor(.blue) } } } .padding(12) .background( RoundedRectangle(cornerRadius: 8) .fill(Color(.systemGray6)) ) } } #Preview { VStack(spacing: 20) { // 有效格式示例 BarcodeValidationInfoView( validationResult: BarcodeValidator.ValidationResult( isValid: true, formattedContent: "123 4567 8901 2", errorMessage: nil, expectedLength: 13, allowedCharacters: "numbers_0_9".localized ), barcodeType: .ean13 ) // 无效格式示例 BarcodeValidationInfoView( validationResult: BarcodeValidator.ValidationResult( isValid: false, formattedContent: "12345", errorMessage: "ean_13_must_be_13_digits".localized, expectedLength: 13, allowedCharacters: "numbers_0_9".localized ), barcodeType: .ean13 ) // 默认状态示例 BarcodeValidationInfoView( validationResult: nil, barcodeType: .code39 ) } .padding() }