diff --git a/frontend/src/pages/ScanPage.tsx b/frontend/src/pages/ScanPage.tsx index f59b8f0..463ce60 100644 --- a/frontend/src/pages/ScanPage.tsx +++ b/frontend/src/pages/ScanPage.tsx @@ -1,5 +1,6 @@ /** 扫码干活页 — 编排摄像头扫码 + 手动输入 + 查询结果 */ -import { useState, useCallback, Suspense, lazy } from "react"; +import { useState, useCallback, useEffect, Suspense, lazy } from "react"; +import { useSearchParams } from "react-router-dom"; import { QrCode, Loader2 } from "lucide-react"; import { scanProduct } from "../services/productApi"; import type { ProductScanResponse } from "../types/api"; @@ -10,6 +11,7 @@ import QueryResult from "../components/scan/QueryResult"; const CameraScanner = lazy(() => import("../components/scan/CameraScanner")); export default function ScanPage() { + const [searchParams] = useSearchParams(); const [cameraActive, setCameraActive] = useState(false); const [cameraError, setCameraError] = useState(null); const [serialNumber, setSerialNumber] = useState(""); @@ -39,6 +41,12 @@ export default function ScanPage() { } }, []); + // URL 参数自动查询(支持从看板等外部跳转) + useEffect(() => { + const sn = searchParams.get("sn"); + if (sn) doQuery(sn.trim()); + }, [searchParams, doQuery]); + /** 扫码回调:提取纯产品身份证 */ const handleScan = useCallback( (decodedText: string) => {