From c90b77801d758ffb43cdf1b6e2ff5ca6404f1eeb Mon Sep 17 00:00:00 2001 From: duxingchen Date: Wed, 12 Aug 2026 14:50:44 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E6=89=AB=E7=A0=81=E9=A1=B5=E6=94=AF?= =?UTF-8?q?=E6=8C=81URL=E5=8F=82=E6=95=B0=E8=87=AA=E5=8A=A8=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=20=E2=80=94=20/scan=3Fsn=3Dxxx=20=E7=9B=B4=E6=8E=A5?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E6=B5=81=E8=BD=AC=E6=A0=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- frontend/src/pages/ScanPage.tsx | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) 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) => {