diff --git a/MyQrCode/ScannerView/ScannerView.swift b/MyQrCode/ScannerView/ScannerView.swift index 9a085c5..c52b3f3 100644 --- a/MyQrCode/ScannerView/ScannerView.swift +++ b/MyQrCode/ScannerView/ScannerView.swift @@ -167,12 +167,22 @@ struct ScannerView: View { NavigationLink( destination: Group { if let historyItem = selectedHistoryItem { - QRCodeDetailView(historyItem: historyItem) - .onDisappear { - // 从详情页返回时,重新开始扫描 - logInfo("🔄 从详情页返回,重新开始扫描", className: "ScannerView") - resetToScanning() - } + // 根据数据类型跳转到相应的详情页 + if historyItem.dataType == DataType.qrcode.rawValue { + QRCodeDetailView(historyItem: historyItem) + .onDisappear { + // 从详情页返回时,重新开始扫描 + logInfo("🔄 从二维码详情页返回,重新开始扫描", className: "ScannerView") + resetToScanning() + } + } else { + BarcodeDetailView(historyItem: historyItem) + .onDisappear { + // 从详情页返回时,重新开始扫描 + logInfo("🔄 从条形码详情页返回,重新开始扫描", className: "ScannerView") + resetToScanning() + } + } } }, isActive: $navigateToDetail diff --git a/MyQrCode/ScannerView/ScannerViewModel.swift b/MyQrCode/ScannerView/ScannerViewModel.swift index a04d9b5..72e3ae3 100644 --- a/MyQrCode/ScannerView/ScannerViewModel.swift +++ b/MyQrCode/ScannerView/ScannerViewModel.swift @@ -309,7 +309,7 @@ class ScannerViewModel: NSObject, ObservableObject, AVCaptureMetadataOutputObjec if let readableObject = metadataObject as? AVMetadataMachineReadableCodeObject, let stringValue = readableObject.stringValue { - let codeType = readableObject.type.rawValue + let codeType = getBarcodeTypeString(from: readableObject.type) let bounds = readableObject.bounds let detectedCode = DetectedCode( @@ -390,4 +390,43 @@ class ScannerViewModel: NSObject, ObservableObject, AVCaptureMetadataOutputObjec device.unlockForConfiguration() } } + + // MARK: - 条形码类型转换 + + /// 获取条形码类型的可读字符串 + private func getBarcodeTypeString(from metadataType: AVMetadataObject.ObjectType) -> String { + switch metadataType { + case .ean8: + return "EAN-8" + case .ean13: + return "EAN-13" + case .upce: + return "UPC-E" + case .code39: + return "Code 39" + case .code93: + return "Code 93" + case .code128: + return "Code 128" + case .itf14: + return "ITF-14" + case .pdf417: + return "PDF417" + case .qr: + return "QR Code" + case .dataMatrix: + return "Data Matrix" + case .aztec: + return "Aztec" + default: + // 处理可能包含前缀的类型字符串 + let typeString = metadataType.rawValue + if typeString.contains("org.gs1.") { + // 移除 org.gs1. 前缀 + let cleanType = typeString.replacingOccurrences(of: "org.gs1.", with: "") + return cleanType.uppercased() + } + return typeString + } + } } \ No newline at end of file