diff --git a/package.json b/package.json index 55c8240..6fcb8ed 100644 --- a/package.json +++ b/package.json @@ -14,7 +14,6 @@ "apollo-link-http": "^1.5.17", "axios": "^0.21.1", "graphql": "^15.5.0", - "html5-qrcode": "^2.3.0", "node-sass": "^5.0.0", "qrcodejs2": "^0.0.2", "react": "^17.0.1", @@ -22,6 +21,7 @@ "react-infinite-scroller": "^1.2.4", "react-lazy-load-image-component": "^1.5.1", "react-modal": "^3.12.1", + "react-qr-reader": "^3.0.0-beta-1", "react-router-dom": "^5.2.0", "react-scripts": "4.0.3", "vconsole": "^3.4.0", diff --git a/src/pages/Index/Index.js b/src/pages/Index/Index.js index 3ac9ccc..36842e1 100644 --- a/src/pages/Index/Index.js +++ b/src/pages/Index/Index.js @@ -11,7 +11,7 @@ import compass from "./compass.png"; import Shops from "../Shops/Shops"; import NavBottom from "../../components/NavBottom/NavBottom"; import Modal from "react-modal"; -import { Html5Qrcode } from "html5-qrcode"; +import { QrReader } from "react-qr-reader"; // import vconsole from "vconsole"; // const vConsole = new vconsole(); export const MallCode = React.createContext(null); @@ -359,70 +359,46 @@ const Index = () => { end, }); }; - - useEffect(() => { - if (qrcodeModalOpened) { - const html5QrCode = new Html5Qrcode("qrcode-scaner"); - html5QrCode - .start( - { facingMode: "environment" }, - { fps: 10, qrbox: { width: 320, height: 320 } }, - (code) => { - try { - code = decodeURIComponent(code); - const kvs = code - .split("?") - .pop() - .split("&") - .map((kv) => kv.split("=")); - const s = kvs.find(([k]) => k === "s") - ? kvs.find(([k]) => k === "s")[1] - : ""; - const startParamList = s.split("_"); - if (startParamList.length === 3) { - let [sfloororder, spoint, sname] = startParamList; - sfloororder = Number(sfloororder); - spoint = Number(spoint); - const nxt = { - isDevice: true, - name: sname, - navPoint: spoint, - yaxis: spoint, - floorOrder: sfloororder, - }; - setStart(nxt); - setEnd(shop); - map.startNavigate({ - start: nxt, - end: shop, - }); - try { - setQrcodeModalOpened(false); - setShowQrcodeModal(false); - html5QrCode.stop(); - } catch (error) {} - } - } catch (error) { - window.weui.toast("请扫大屏二维码", { - className: "toast", - }); - } - } - ) - .catch(() => { - window.weui.toast("启动二维码失败", { - className: "toast", - }); - setQrcodeModalOpened(false); - setShowQrcodeModal(false); + const handleQrcodeResult = (code) => { + try { + code = decodeURIComponent(code); + const kvs = code + .split("?") + .pop() + .split("&") + .map((kv) => kv.split("=")); + const s = kvs.find(([k]) => k === "s") + ? kvs.find(([k]) => k === "s")[1] + : ""; + const startParamList = s.split("_"); + if (startParamList.length === 3) { + let [sfloororder, spoint, sname] = startParamList; + sfloororder = Number(sfloororder); + spoint = Number(spoint); + const nxt = { + isDevice: true, + name: sname, + navPoint: spoint, + yaxis: spoint, + floorOrder: sfloororder, + }; + setStart(nxt); + setEnd(shop); + map.startNavigate({ + start: nxt, + end: shop, }); - return () => { try { - html5QrCode.stop(); + setQrcodeModalOpened(false); + setShowQrcodeModal(false); } catch (error) {} - }; + } + } catch (error) { + window.weui.toast("请扫大屏二维码", { + className: "toast", + }); } - }, [qrcodeModalOpened]); + }; return ( @@ -436,12 +412,20 @@ const Index = () => { >
-
+ onResult={(result, error) => { + if (!!result) { + handleQrcodeResult(result?.text); + } + + if (!!error) { + console.info(error); + } + }} + videoStyle={{ objectFit: "cover" }} + >