xiaohaizhao 2 days ago
parent
commit
aacf858362

+ 405 - 29
package-lock.json

@@ -10,26 +10,10 @@
       "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==",
       "dev": true
     },
-    "@zxing/library": {
-      "version": "0.21.3",
-      "resolved": "https://registry.npmmirror.com/@zxing/library/-/library-0.21.3.tgz",
-      "integrity": "sha512-hZHqFe2JyH/ZxviJZosZjV+2s6EDSY0O24R+FQmlWZBZXP9IqMo7S3nb3+2LBWxodJQkSurdQGnqE7KXqrYgow==",
-      "requires": {
-        "@zxing/text-encoding": "~0.9.0",
-        "ts-custom-error": "^3.2.1"
-      }
-    },
-    "@zxing/text-encoding": {
-      "version": "0.9.0",
-      "resolved": "https://registry.npmmirror.com/@zxing/text-encoding/-/text-encoding-0.9.0.tgz",
-      "integrity": "sha512-U/4aVJ2mxI0aDNI8Uq0wEhMgY+u4CNtEb0om3+y3+niDAsoTCOB33UF0sxpzqzdqXLqmvc+vZyAt4O8pPdfkwA==",
-      "optional": true
-    },
     "ajv": {
       "version": "6.12.6",
       "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz",
       "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
-      "dev": true,
       "requires": {
         "fast-deep-equal": "^3.1.1",
         "fast-json-stable-stringify": "^2.0.0",
@@ -68,11 +52,34 @@
         "picomatch": "^2.0.4"
       }
     },
+    "asn1": {
+      "version": "0.2.6",
+      "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz",
+      "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==",
+      "requires": {
+        "safer-buffer": "~2.1.0"
+      }
+    },
+    "assert-plus": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz",
+      "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw=="
+    },
     "asynckit": {
       "version": "0.4.0",
       "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz",
       "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q=="
     },
+    "aws-sign2": {
+      "version": "0.7.0",
+      "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz",
+      "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA=="
+    },
+    "aws4": {
+      "version": "1.13.2",
+      "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.13.2.tgz",
+      "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw=="
+    },
     "axios": {
       "version": "1.11.0",
       "resolved": "https://registry.npmmirror.com/axios/-/axios-1.11.0.tgz",
@@ -83,6 +90,14 @@
         "proxy-from-env": "^1.1.0"
       }
     },
+    "bcrypt-pbkdf": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz",
+      "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==",
+      "requires": {
+        "tweetnacl": "^0.14.3"
+      }
+    },
     "big.js": {
       "version": "5.2.2",
       "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz",
@@ -113,6 +128,11 @@
         "function-bind": "^1.1.2"
       }
     },
+    "caseless": {
+      "version": "0.12.0",
+      "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz",
+      "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw=="
+    },
     "chokidar": {
       "version": "3.6.0",
       "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.6.0.tgz",
@@ -173,6 +193,32 @@
         "delayed-stream": "~1.0.0"
       }
     },
+    "core-util-is": {
+      "version": "1.0.2",
+      "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz",
+      "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ=="
+    },
+    "cwise-compiler": {
+      "version": "1.1.3",
+      "resolved": "https://registry.npmmirror.com/cwise-compiler/-/cwise-compiler-1.1.3.tgz",
+      "integrity": "sha512-WXlK/m+Di8DMMcCjcWr4i+XzcQra9eCdXIJrgh4TUgh0pIS/yJduLxS9JgefsHJ/YVLdgPtXm9r62W92MvanEQ==",
+      "requires": {
+        "uniq": "^1.0.0"
+      }
+    },
+    "dashdash": {
+      "version": "1.14.1",
+      "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz",
+      "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==",
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "data-uri-to-buffer": {
+      "version": "0.0.3",
+      "resolved": "https://registry.npmmirror.com/data-uri-to-buffer/-/data-uri-to-buffer-0.0.3.tgz",
+      "integrity": "sha512-Cp+jOa8QJef5nXS5hU7M1DWzXPEIoVR3kbV0dQuVGwROZg8bGf1DcCnkmajBTnvghTtSNMUdRrPjgaT6ZQucbw=="
+    },
     "dayjs": {
       "version": "1.11.13",
       "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz",
@@ -204,6 +250,15 @@
         "gopd": "^1.2.0"
       }
     },
+    "ecc-jsbn": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz",
+      "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==",
+      "requires": {
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.1.0"
+      }
+    },
     "emoji-regex": {
       "version": "8.0.0",
       "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz",
@@ -251,17 +306,25 @@
       "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==",
       "dev": true
     },
+    "extend": {
+      "version": "3.0.2",
+      "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz",
+      "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g=="
+    },
+    "extsprintf": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz",
+      "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g=="
+    },
     "fast-deep-equal": {
       "version": "3.1.3",
       "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz",
-      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==",
-      "dev": true
+      "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q=="
     },
     "fast-json-stable-stringify": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz",
-      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==",
-      "dev": true
+      "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw=="
     },
     "fill-range": {
       "version": "7.1.1",
@@ -277,6 +340,11 @@
       "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.15.11.tgz",
       "integrity": "sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ=="
     },
+    "forever-agent": {
+      "version": "0.6.1",
+      "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz",
+      "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw=="
+    },
     "form-data": {
       "version": "4.0.4",
       "resolved": "https://registry.npmmirror.com/form-data/-/form-data-4.0.4.tgz",
@@ -324,6 +392,24 @@
         "math-intrinsics": "^1.1.0"
       }
     },
+    "get-pixels": {
+      "version": "3.3.3",
+      "resolved": "https://registry.npmmirror.com/get-pixels/-/get-pixels-3.3.3.tgz",
+      "integrity": "sha512-5kyGBn90i9tSMUVHTqkgCHsoWoR+/lGbl4yC83Gefyr0HLIhgSWEx/2F/3YgsZ7UpYNuM6pDhDK7zebrUJ5nXg==",
+      "requires": {
+        "data-uri-to-buffer": "0.0.3",
+        "jpeg-js": "^0.4.1",
+        "mime-types": "^2.0.1",
+        "ndarray": "^1.0.13",
+        "ndarray-pack": "^1.1.1",
+        "node-bitmap": "0.0.1",
+        "omggif": "^1.0.5",
+        "parse-data-uri": "^0.2.0",
+        "pngjs": "^3.3.3",
+        "request": "^2.44.0",
+        "through": "^2.3.4"
+      }
+    },
     "get-proto": {
       "version": "1.0.1",
       "resolved": "https://registry.npmmirror.com/get-proto/-/get-proto-1.0.1.tgz",
@@ -333,6 +419,29 @@
         "es-object-atoms": "^1.0.0"
       }
     },
+    "getpass": {
+      "version": "0.1.7",
+      "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz",
+      "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==",
+      "requires": {
+        "assert-plus": "^1.0.0"
+      }
+    },
+    "gl-mat2": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/gl-mat2/-/gl-mat2-1.0.1.tgz",
+      "integrity": "sha512-oHgZ3DalAo9qAhMZM9QigXosqotcUCsgxarwrinipaqfSHvacI79Dzs72gY+oT4Td1kDQKEsG0RyX6mb02VVHA=="
+    },
+    "gl-vec2": {
+      "version": "1.3.0",
+      "resolved": "https://registry.npmmirror.com/gl-vec2/-/gl-vec2-1.3.0.tgz",
+      "integrity": "sha512-YiqaAuNsheWmUV0Sa8k94kBB0D6RWjwZztyO+trEYS8KzJ6OQB/4686gdrf59wld4hHFIvaxynO3nRxpk1Ij/A=="
+    },
+    "gl-vec3": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/gl-vec3/-/gl-vec3-1.2.0.tgz",
+      "integrity": "sha512-ynW7j5ZshRTHXG5UPC5u6G52cBCNx53LbNlq2HQ1bAosZbO4wOCEBufXS7KGiKL1slMgy4j/77Ikt+vMznouLg=="
+    },
     "glob-parent": {
       "version": "5.1.2",
       "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz",
@@ -355,6 +464,20 @@
       "resolved": "https://registry.npmmirror.com/gopd/-/gopd-1.2.0.tgz",
       "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg=="
     },
+    "har-schema": {
+      "version": "2.0.0",
+      "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz",
+      "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q=="
+    },
+    "har-validator": {
+      "version": "5.1.5",
+      "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz",
+      "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==",
+      "requires": {
+        "ajv": "^6.12.3",
+        "har-schema": "^2.0.0"
+      }
+    },
     "has-symbols": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.1.0.tgz",
@@ -376,12 +499,27 @@
         "function-bind": "^1.1.2"
       }
     },
+    "http-signature": {
+      "version": "1.2.0",
+      "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz",
+      "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==",
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "jsprim": "^1.2.2",
+        "sshpk": "^1.7.0"
+      }
+    },
     "immutable": {
       "version": "4.3.7",
       "resolved": "https://registry.npmmirror.com/immutable/-/immutable-4.3.7.tgz",
       "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==",
       "dev": true
     },
+    "iota-array": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/iota-array/-/iota-array-1.0.0.tgz",
+      "integrity": "sha512-pZ2xT+LOHckCatGQ3DcG/a+QuEqvoxqkiL7tvE8nn3uuu+f6i1TtpB5/FtWFbxUuVr5PZCx8KskuGatbJDXOWA=="
+    },
     "is-binary-path": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz",
@@ -391,6 +529,11 @@
         "binary-extensions": "^2.0.0"
       }
     },
+    "is-buffer": {
+      "version": "1.1.6",
+      "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz",
+      "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w=="
+    },
     "is-docker": {
       "version": "2.2.1",
       "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz",
@@ -424,6 +567,11 @@
       "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
       "dev": true
     },
+    "is-typedarray": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz",
+      "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA=="
+    },
     "is-wsl": {
       "version": "2.2.0",
       "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz",
@@ -433,11 +581,35 @@
         "is-docker": "^2.0.0"
       }
     },
+    "isstream": {
+      "version": "0.1.2",
+      "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz",
+      "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g=="
+    },
+    "jpeg-js": {
+      "version": "0.4.4",
+      "resolved": "https://registry.npmmirror.com/jpeg-js/-/jpeg-js-0.4.4.tgz",
+      "integrity": "sha512-WZzeDOEtTOBK4Mdsar0IqEU5sMr3vSV2RqkAIzUEV2BHnUfKGyswWFPFwK5EeDo93K3FohSHbLAjj0s1Wzd+dg=="
+    },
+    "jsbn": {
+      "version": "0.1.1",
+      "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz",
+      "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg=="
+    },
+    "json-schema": {
+      "version": "0.4.0",
+      "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz",
+      "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA=="
+    },
     "json-schema-traverse": {
       "version": "0.4.1",
       "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
-      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
-      "dev": true
+      "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg=="
+    },
+    "json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz",
+      "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA=="
     },
     "json5": {
       "version": "2.2.3",
@@ -445,6 +617,17 @@
       "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==",
       "dev": true
     },
+    "jsprim": {
+      "version": "1.4.2",
+      "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz",
+      "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==",
+      "requires": {
+        "assert-plus": "1.0.0",
+        "extsprintf": "1.3.0",
+        "json-schema": "0.4.0",
+        "verror": "1.10.0"
+      }
+    },
     "klona": {
       "version": "2.0.6",
       "resolved": "https://registry.npmmirror.com/klona/-/klona-2.0.6.tgz",
@@ -462,6 +645,11 @@
         "json5": "^2.1.2"
       }
     },
+    "lodash": {
+      "version": "4.17.21",
+      "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz",
+      "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
+    },
     "math-intrinsics": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz",
@@ -480,18 +668,56 @@
         "mime-db": "1.52.0"
       }
     },
+    "ndarray": {
+      "version": "1.0.19",
+      "resolved": "https://registry.npmmirror.com/ndarray/-/ndarray-1.0.19.tgz",
+      "integrity": "sha512-B4JHA4vdyZU30ELBw3g7/p9bZupyew5a7tX1Y/gGeF2hafrPaQZhgrGQfsvgfYbgdFZjYwuEcnaobeM/WMW+HQ==",
+      "requires": {
+        "iota-array": "^1.0.0",
+        "is-buffer": "^1.0.2"
+      }
+    },
+    "ndarray-linear-interpolate": {
+      "version": "1.0.0",
+      "resolved": "https://registry.npmmirror.com/ndarray-linear-interpolate/-/ndarray-linear-interpolate-1.0.0.tgz",
+      "integrity": "sha512-UN0f4+6XWsQzJ2pP5gVp+kKn5tJed6mA3K/L50uO619+7LKrjcSNdcerhpqxYaSkbxNJuEN76N05yBBJySnZDw=="
+    },
+    "ndarray-pack": {
+      "version": "1.2.1",
+      "resolved": "https://registry.npmmirror.com/ndarray-pack/-/ndarray-pack-1.2.1.tgz",
+      "integrity": "sha512-51cECUJMT0rUZNQa09EoKsnFeDL4x2dHRT0VR5U2H5ZgEcm95ZDWcMA5JShroXjHOejmAD/fg8+H+OvUnVXz2g==",
+      "requires": {
+        "cwise-compiler": "^1.1.2",
+        "ndarray": "^1.0.13"
+      }
+    },
     "neo-async": {
       "version": "2.6.2",
       "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz",
       "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
       "dev": true
     },
+    "node-bitmap": {
+      "version": "0.0.1",
+      "resolved": "https://registry.npmmirror.com/node-bitmap/-/node-bitmap-0.0.1.tgz",
+      "integrity": "sha512-Jx5lPaaLdIaOsj2mVLWMWulXF6GQVdyLvNSxmiYCvZ8Ma2hfKX0POoR2kgKOqz+oFsRreq0yYZjQ2wjE9VNzCA=="
+    },
     "normalize-path": {
       "version": "3.0.0",
       "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz",
       "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
       "dev": true
     },
+    "oauth-sign": {
+      "version": "0.9.0",
+      "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz",
+      "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ=="
+    },
+    "omggif": {
+      "version": "1.0.10",
+      "resolved": "https://registry.npmmirror.com/omggif/-/omggif-1.0.10.tgz",
+      "integrity": "sha512-LMJTtvgc/nugXj0Vcrrs68Mn2D1r0zf630VNtqtpI1FEO7e+O9FP4gqs9AcnBaSEeoHIPm28u6qgPR0oyEpGSw=="
+    },
     "open": {
       "version": "8.4.2",
       "resolved": "https://registry.npmmirror.com/open/-/open-8.4.2.tgz",
@@ -503,22 +729,66 @@
         "is-wsl": "^2.2.0"
       }
     },
+    "parse-data-uri": {
+      "version": "0.2.0",
+      "resolved": "https://registry.npmmirror.com/parse-data-uri/-/parse-data-uri-0.2.0.tgz",
+      "integrity": "sha512-uOtts8NqDcaCt1rIsO3VFDRsAfgE4c6osG4d9z3l4dCBlxYFzni6Di/oNU270SDrjkfZuUvLZx1rxMyqh46Y9w==",
+      "requires": {
+        "data-uri-to-buffer": "0.0.3"
+      }
+    },
+    "performance-now": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz",
+      "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow=="
+    },
     "picomatch": {
       "version": "2.3.1",
       "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz",
       "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
       "dev": true
     },
+    "pngjs": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmmirror.com/pngjs/-/pngjs-3.4.0.tgz",
+      "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w=="
+    },
     "proxy-from-env": {
       "version": "1.1.0",
       "resolved": "https://registry.npmmirror.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz",
       "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg=="
     },
+    "psl": {
+      "version": "1.15.0",
+      "resolved": "https://registry.npmmirror.com/psl/-/psl-1.15.0.tgz",
+      "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==",
+      "requires": {
+        "punycode": "^2.3.1"
+      }
+    },
     "punycode": {
       "version": "2.3.1",
       "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.3.1.tgz",
-      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
-      "dev": true
+      "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="
+    },
+    "qs": {
+      "version": "6.5.3",
+      "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz",
+      "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA=="
+    },
+    "quagga": {
+      "version": "0.12.1",
+      "resolved": "https://registry.npmmirror.com/quagga/-/quagga-0.12.1.tgz",
+      "integrity": "sha512-bb2N6eT7ss6Bg27sxQgv/CT96KQBkXa+4YeS1W8bhsaXxoWp8zOQbrOwFWEPxPDTNaWEl7hTs3ZB7OC4k3EY3Q==",
+      "requires": {
+        "get-pixels": "^3.2.3",
+        "gl-mat2": "^1.0.0",
+        "gl-vec2": "^1.0.0",
+        "gl-vec3": "^1.0.3",
+        "lodash": "^4.17.4",
+        "ndarray": "^1.0.18",
+        "ndarray-linear-interpolate": "^1.0.0"
+      }
     },
     "readdirp": {
       "version": "3.6.0",
@@ -529,6 +799,45 @@
         "picomatch": "^2.2.1"
       }
     },
+    "request": {
+      "version": "2.88.2",
+      "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz",
+      "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==",
+      "requires": {
+        "aws-sign2": "~0.7.0",
+        "aws4": "^1.8.0",
+        "caseless": "~0.12.0",
+        "combined-stream": "~1.0.6",
+        "extend": "~3.0.2",
+        "forever-agent": "~0.6.1",
+        "form-data": "~2.3.2",
+        "har-validator": "~5.1.3",
+        "http-signature": "~1.2.0",
+        "is-typedarray": "~1.0.0",
+        "isstream": "~0.1.2",
+        "json-stringify-safe": "~5.0.1",
+        "mime-types": "~2.1.19",
+        "oauth-sign": "~0.9.0",
+        "performance-now": "^2.1.0",
+        "qs": "~6.5.2",
+        "safe-buffer": "^5.1.2",
+        "tough-cookie": "~2.5.0",
+        "tunnel-agent": "^0.6.0",
+        "uuid": "^3.3.2"
+      },
+      "dependencies": {
+        "form-data": {
+          "version": "2.3.3",
+          "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz",
+          "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==",
+          "requires": {
+            "asynckit": "^0.4.0",
+            "combined-stream": "^1.0.6",
+            "mime-types": "^2.1.12"
+          }
+        }
+      }
+    },
     "require-directory": {
       "version": "2.1.1",
       "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz",
@@ -555,6 +864,16 @@
         }
       }
     },
+    "safe-buffer": {
+      "version": "5.2.1",
+      "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz",
+      "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ=="
+    },
+    "safer-buffer": {
+      "version": "2.1.2",
+      "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz",
+      "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="
+    },
     "sass": {
       "version": "1.63.2",
       "resolved": "https://registry.npmmirror.com/sass/-/sass-1.63.2.tgz",
@@ -613,6 +932,22 @@
       "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==",
       "dev": true
     },
+    "sshpk": {
+      "version": "1.18.0",
+      "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.18.0.tgz",
+      "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==",
+      "requires": {
+        "asn1": "~0.2.3",
+        "assert-plus": "^1.0.0",
+        "bcrypt-pbkdf": "^1.0.0",
+        "dashdash": "^1.12.0",
+        "ecc-jsbn": "~0.1.1",
+        "getpass": "^0.1.1",
+        "jsbn": "~0.1.0",
+        "safer-buffer": "^2.0.2",
+        "tweetnacl": "~0.14.0"
+      }
+    },
     "string-width": {
       "version": "4.2.3",
       "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz",
@@ -633,6 +968,11 @@
         "ansi-regex": "^5.0.1"
       }
     },
+    "through": {
+      "version": "2.3.8",
+      "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz",
+      "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg=="
+    },
     "tiny-emitter": {
       "version": "2.1.0",
       "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz",
@@ -647,20 +987,56 @@
         "is-number": "^7.0.0"
       }
     },
-    "ts-custom-error": {
-      "version": "3.3.1",
-      "resolved": "https://registry.npmmirror.com/ts-custom-error/-/ts-custom-error-3.3.1.tgz",
-      "integrity": "sha512-5OX1tzOjxWEgsr/YEUWSuPrQ00deKLh6D7OTWcvNHm12/7QPyRh8SYpyWvA4IZv8H/+GQWQEh/kwo95Q9OVW1A=="
+    "tough-cookie": {
+      "version": "2.5.0",
+      "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz",
+      "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==",
+      "requires": {
+        "psl": "^1.1.28",
+        "punycode": "^2.1.1"
+      }
+    },
+    "tunnel-agent": {
+      "version": "0.6.0",
+      "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz",
+      "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==",
+      "requires": {
+        "safe-buffer": "^5.0.1"
+      }
+    },
+    "tweetnacl": {
+      "version": "0.14.5",
+      "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz",
+      "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA=="
+    },
+    "uniq": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz",
+      "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA=="
     },
     "uri-js": {
       "version": "4.4.1",
       "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz",
       "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==",
-      "dev": true,
       "requires": {
         "punycode": "^2.1.0"
       }
     },
+    "uuid": {
+      "version": "3.4.0",
+      "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz",
+      "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A=="
+    },
+    "verror": {
+      "version": "1.10.0",
+      "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz",
+      "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==",
+      "requires": {
+        "assert-plus": "^1.0.0",
+        "core-util-is": "1.0.2",
+        "extsprintf": "^1.2.0"
+      }
+    },
     "wrap-ansi": {
       "version": "7.0.0",
       "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz",

+ 2 - 2
package.json

@@ -4,10 +4,10 @@
   "description": "组件库: https://uiadmin.net/uview-plus/components/intro.html",
   "main": "main.js",
   "dependencies": {
-    "@zxing/library": "^0.21.3",
     "axios": "^1.11.0",
     "clipboard": "^2.0.11",
-    "dayjs": "^1.11.13"
+    "dayjs": "^1.11.13",
+    "quagga": "^0.12.1"
   },
   "devDependencies": {
     "rollup-plugin-visualizer": "^6.0.3",

+ 6 - 0
pages.json

@@ -36,6 +36,12 @@
 				"navigationBarTitleText": "预约服务"
 			}
 		},
+		{
+			"path": "pages/bookingService/getCode",
+			"style": {
+				"navigationBarTitleText": "扫描序列号"
+			}
+		},
 		{
 			"path": "pages/select/product",
 			"style": {

+ 12 - 0
pages/bookingService/getCode.vue

@@ -0,0 +1,12 @@
+<template>
+    <mumu-one-code @success='handlerSuccess' definition :readers='["code_128_reader"]'></mumu-one-code>
+</template>
+
+<script setup>
+import { ref, reactive, getCurrentInstance } from 'vue';
+const { $Http } = getCurrentInstance().proxy;
+import MumuOneCode from '@/uni_modules/mumu-oneCode/components/mumu-oneCode/mumu-oneCode.vue';
+function handlerSuccess(code) {
+    $Http.getCode(code)
+}
+</script>

+ 11 - 2
pages/bookingService/index.vue

@@ -139,7 +139,6 @@
 import { ref, reactive, getCurrentInstance } from 'vue';
 const { $Http } = getCurrentInstance().proxy;
 import { onShow } from '@dcloudio/uni-app';
-
 const WuserRecord = uni.getStorageSync('WuserRecord') || {
     name: '',
     phonenumber: '',
@@ -359,8 +358,17 @@ function changeItem(item) {
     closePopup();
 }
 
-import { BrowserMultiFormatReader } from '@zxing/library';
 function openScan() {
+    uni.navigateTo({
+        url: '/pages/bookingService/getCode'
+    });
+    $Http.getCode = (code) => {
+        form.sku = code || '';
+        skuConfirm();
+        uni.navigateBack()
+        delete $Http.getCode;
+    }
+    return
     uni.chooseImage({
         count: 1,
         success: imgRes => {
@@ -376,6 +384,7 @@ function openScan() {
                     form.sku = result.text;
                     skuConfirm();
                 } catch (err) {
+                    console.log(err)
                     uni.showToast({ title: '未识别出二维码或条码', icon: 'none' });
                 }
             };

+ 18 - 0
uni_modules/mumu-oneCode/changelog.md

@@ -0,0 +1,18 @@
+## 1.1.2(2023-01-03)
+1. 修复在新版本 HBuilderX(3.6.15) 报错问题(ReferenceError: Can't find variable: typeot)
+2. 更换 ES6 导入方式
+3. 更新一维码开源库(Quagga [最新github地址](https://github.com/ericblade/quagga2))
+## 1.1.1(2022-06-18)
+1. 提高相机的清晰度
+2. 增加识别错误判断
+3. 对开源库的错误抓取,发生错误重新识别
+## 1.0.3(2022-06-13)
+1. 修改 Quagga 库导入方式,改为本地导入
+2. 演示代码中添加商品码演示。默认一维码类型是 code_128_reader(企业码)
+## 1.0.2(2022-05-30)
+
+更新
+## 1.0.1(2022-05-30)
+更改介绍
+## 1.0.0(2022-05-30)
+本版上线

+ 16 - 0
uni_modules/mumu-oneCode/components/mumu-oneCode/loadJs.js

@@ -0,0 +1,16 @@
+function loadJs() {
+  return new Promise((resolve,reject)=>{
+    let script = document.createElement('script');
+    script.type = "text/javascript";
+    script.src= '//h5plugin.mumudev.top/public/getOneCode/quagga.min.js';
+    document.body.appendChild(script);
+    script.onload = ()=>{
+      resolve();
+    }
+    script.onerror = ()=>{
+      reject();
+    }
+  })
+}
+ 
+export default loadJs

+ 408 - 0
uni_modules/mumu-oneCode/components/mumu-oneCode/mumu-oneCode.vue

@@ -0,0 +1,408 @@
+<template>
+	<view class="canvasBox">
+		<view class="box">
+			<view class="line"></view>
+			<view class="angle"></view>
+		</view>
+		<view class="box2" v-if="isUseTorch">
+			<view class="track" @click="openTrack">
+				<svg t="1653920715959" class="icon" viewBox="0 0 1024 1024" version="1.1"
+					xmlns="http://www.w3.org/2000/svg" p-id="1351" width="32" height="32">
+					<path
+						d="M651.353043 550.479503H378.752795L240.862609 364.315031c-3.688944-4.897391-5.660621-10.876025-5.660621-17.045466v-60.040745c0-15.773416 12.847702-28.621118 28.621118-28.621118h502.459627c15.773416 0 28.621118 12.847702 28.621118 28.621118v59.977143c0 6.105839-1.971677 12.084472-5.660621 17.045466l-137.890187 186.228074zM378.752795 598.308571v398.024348c0 15.328199 12.402484 27.667081 27.667081 27.667081h217.266087c15.328199 0 27.667081-12.402484 27.66708-27.667081V598.308571H378.752795z m136.300124 176.942112c-14.564969 0-26.331429-11.76646-26.331428-26.331428v-81.283975c0-14.564969 11.76646-26.331429 26.331428-26.331429 14.564969 0 26.331429 11.76646 26.331429 26.331429v81.283975c0 14.564969-11.76646 26.331429-26.331429 26.331428zM512 222.608696c-17.554286 0-31.801242-14.246957-31.801242-31.801243V31.801242c0-17.554286 14.246957-31.801242 31.801242-31.801242s31.801242 14.246957 31.801242 31.801242v159.006211c0 17.554286-14.246957 31.801242-31.801242 31.801243zM280.932174 205.881242c-9.47677 0-18.889938-4.197764-25.122981-12.275279L158.242981 67.991056a31.864845 31.864845 0 0 1 5.597019-44.648944 31.864845 31.864845 0 0 1 44.648944 5.597018l97.502609 125.551305a31.864845 31.864845 0 0 1-5.597019 44.648944c-5.787826 4.579379-12.656894 6.741863-19.46236 6.741863zM723.987081 205.881242c-6.805466 0-13.674534-2.162484-19.462361-6.678261a31.794882 31.794882 0 0 1-5.597018-44.648944l97.566211-125.551304a31.794882 31.794882 0 0 1 44.648944-5.597019 31.794882 31.794882 0 0 1 5.597019 44.648944l-97.566211 125.551305c-6.360248 8.077516-15.709814 12.27528-25.186584 12.275279z"
+						fill="#ffffff" p-id="1352"></path>
+				</svg>
+				{{ trackStatus ? '关闭闪光灯' : '打开闪光灯' }}
+			</view>
+		</view>
+		<view class="mask1 mask" :style="'height:' + maskHeight + 'px;'"></view>
+		<view class="mask2 mask" :style="'width:' + maskWidth + 'px;top:' + maskHeight + 'px'"></view>
+		<view class="mask3 mask" :style="'height:' + maskHeight + 'px;'"></view>
+		<view class="mask4 mask" :style="'width:' + maskWidth + 'px;top:' + maskHeight + 'px'"></view>
+	</view>
+</template>
+<script>
+import Quagga from 'quagga';
+export default {
+	props: {
+		continue: {
+			type: Boolean,
+			default: false // false 监听一次   true 持续监听
+		},
+		exact: {
+			type: String,
+			default: 'environment' // environment 后摄像头  user 前摄像头
+		},
+		definition: {
+			type: Boolean,
+			default: false // fasle 正常  true 高清
+		},
+		readers: {
+			// 一维码类型
+			type: Array,
+			default: () => ['code_128_reader']
+		}
+	},
+	data() {
+		return {
+			windowWidth: 0,
+			windowHeight: 0,
+			video: null,
+			canvas2d: null,
+			canvasDom: null,
+			canvasDom2: null, // 用于画框
+			canvas2d2: null,
+			canvasWidth: 300,
+			canvasHeight: 200,
+			maskWidth: 0,
+			maskHeight: 0,
+			cpu: 1,
+			inter: 0,
+
+			track: null,
+			isUseTorch: false,
+			trackStatus: false,
+
+			isParse: false,
+
+			data1: '',
+			data2: ''
+		}
+	},
+	mounted() {
+		if (origin.indexOf('https') === -1) throw '请在 https 环境中使用摄像头组件。'
+
+		this.windowWidth = document.documentElement.clientWidth || document.body.clientWidth
+		this.windowHeight = document.documentElement.clientHeight || document.body.clientHeight
+		this.isParse = true
+		this.$nextTick(() => {
+			this.video = document.createElement('video')
+			this.video.width = this.windowWidth
+			this.video.height = this.windowHeight
+
+			const canvas = document.createElement('canvas')
+			this.canvas = canvas
+			canvas.id = 'canvas'
+			canvas.width = this.canvasWidth
+			canvas.height = this.canvasHeight
+			canvas.style = 'display:none;'
+
+			// 设置当前宽高 满屏
+			const canvasBox = document.querySelector('.canvasBox')
+			canvasBox.append(this.video)
+			canvasBox.append(canvas)
+			canvasBox.style = `width:${this.windowWidth}px;height:${this.windowHeight}px;`
+
+			this.canvas2d = canvas.getContext('2d')
+
+			// 创建第二个canvas
+			const canvas2 = document.createElement('canvas')
+			this.canvas2 = canvas2
+			canvas2.id = 'canvas2'
+			canvas2.width = this.canvasWidth
+			canvas2.height = this.canvasHeight
+			canvas2.style =
+				'position: absolute;top: 50%;left: 50%;z-index: 20;transform: translate(-50%, -50%);'
+			this.canvas2d2 = canvas2.getContext('2d')
+			canvasBox.append(canvas2)
+
+			this.cpu = 1 // navigator.hardwareConcurrency || 1
+			//	console.log(navigator.hardwareConcurrency )
+
+			this.createMsk()
+			setTimeout(() => {
+				this.openScan()
+			}, 500)
+		})
+	},
+	methods: {
+		openScan() {
+			let width = this.transtion(this.windowHeight)
+			let height = this.transtion(this.windowWidth)
+
+			const videoParam = {
+				audio: false,
+				video: {
+					facingMode: {
+						exact: this.exact
+					},
+					width,
+					height
+				}
+			}
+
+			navigator.mediaDevices
+				.getUserMedia(videoParam)
+				.then(stream => {
+					this.video.srcObject = stream
+					this.video.setAttribute('playsinline', true)
+					this.video.play()
+					this.tick()
+
+					this.track = stream.getVideoTracks()[0]
+					setTimeout(() => {
+						this.isUseTorch = this.track.getCapabilities().torch || null
+					}, 500)
+				})
+				.catch(err => {
+					console.log('设备不支持', err)
+				})
+		},
+		tick() {
+			if (!this.isParse) return
+			try {
+				if (this.video.readyState === this.video.HAVE_ENOUGH_DATA) {
+					this.canvas2d.drawImage(
+						this.video,
+						this.transtion(this.maskWidth),
+						this.transtion(this.maskHeight),
+						this.transtion(300),
+						this.transtion(200),
+						0,
+						0,
+						this.canvasWidth,
+						this.canvasHeight
+					)
+					const img = this.canvas.toDataURL('image/jpg')
+
+					Quagga.decodeSingle({
+						inputStream: {
+							size: 300 * 2
+						},
+						locator: {
+							patchSize: 'large',
+							halfSample: true
+						},
+						numOfWorkers: this.cpu,
+						decoder: {
+							readers: this.readers
+						},
+						locate: true,
+						src: img
+					},
+						result => {
+							this.canvas2d2.clearRect(0, 0, this.canvasWidth, this.canvasHeight)
+							requestAnimationFrame(this.tick)
+							if (!result || !result.codeResult) return
+
+							if (!this.data1) return (this.data1 = result.codeResult.code)
+							this.data2 = result.codeResult.code
+							console.log(this.data1, '-', this.data2)
+							if (this.data2 !== this.data1) return (this.data1 = '')
+							this.drawLine(result.box, result.line)
+							if (!this.continue) {
+								this.closeCamera()
+							}
+							this.$emit('success', result.codeResult.code)
+						}
+					)
+				} else {
+					requestAnimationFrame(this.tick)
+				}
+			} catch (e) {
+				console.log('出错了');
+				requestAnimationFrame(this.tick)
+			}
+		},
+
+		drawLine(box, line) {
+			if (!line[0] || !line[0]['x']) return
+			this.canvas2d2.beginPath()
+			this.canvas2d2.moveTo(line[0]['x'] / 2, line[0]['y'] / 2)
+			this.canvas2d2.lineTo(line[1]['x'] / 2, line[1]['y'] / 2)
+			this.canvas2d2.lineWidth = 2
+			this.canvas2d2.strokeStyle = '#FF3B58'
+			this.canvas2d2.stroke()
+		},
+
+		createMsk() {
+			this.maskWidth = this.windowWidth / 2 - 150
+			this.maskHeight = this.windowHeight / 2 - 100
+		},
+		closeCamera() {
+			this.isParse = false
+			if (this.video.srcObject) {
+				this.video.srcObject.getTracks().forEach(track => {
+					track.stop()
+				})
+			}
+		},
+
+		transtion(number) {
+			return this.definition ? number * 2.6 : number * 1.6
+		},
+
+		openTrack() {
+			this.trackStatus = !this.trackStatus
+			this.track.applyConstraints({
+				advanced: [{
+					torch: this.trackStatus
+				}]
+			})
+		}
+	},
+	beforeDestroy() {
+		this.closeCamera()
+	}
+}
+</script>
+<style scoped>
+page {
+	background-color: #333333;
+}
+
+.canvasBox {
+	width: 100vw;
+	position: relative;
+
+	background-image: linear-gradient(0deg,
+			transparent 24%,
+			rgba(32, 255, 77, 0.1) 25%,
+			rgba(32, 255, 77, 0.1) 26%,
+			transparent 27%,
+			transparent 74%,
+			rgba(32, 255, 77, 0.1) 75%,
+			rgba(32, 255, 77, 0.1) 76%,
+			transparent 77%,
+			transparent),
+		linear-gradient(90deg,
+			transparent 24%,
+			rgba(32, 255, 77, 0.1) 25%,
+			rgba(32, 255, 77, 0.1) 26%,
+			transparent 27%,
+			transparent 74%,
+			rgba(32, 255, 77, 0.1) 75%,
+			rgba(32, 255, 77, 0.1) 76%,
+			transparent 77%,
+			transparent);
+	background-size: 3rem 3rem;
+	background-position: -1rem -1rem;
+	z-index: 10;
+	background-color: #1110;
+}
+
+.box {
+	width: 300px;
+	height: 200px;
+	position: absolute;
+	left: 50%;
+	top: 50%;
+	transform: translate(-50%, -50%);
+	overflow: hidden;
+	border: 0.1rem solid rgba(0, 255, 51, 0.2);
+	z-index: 11;
+}
+
+.line {
+	height: calc(100% - 2px);
+	width: 100%;
+	background: linear-gradient(180deg, rgba(0, 255, 51, 0) 43%, #00ff33 211%);
+	border-bottom: 3px solid #00ff33;
+	transform: translateY(-100%);
+	animation: radar-beam 2s infinite alternate;
+	animation-timing-function: cubic-bezier(0.53, 0, 0.43, 0.99);
+	animation-delay: 1.4s;
+}
+
+.box2 {
+	width: 300px;
+	height: 200px;
+	position: absolute;
+	left: 50%;
+	top: 50%;
+	transform: translate(-50%, -50%);
+	z-index: 20;
+}
+
+.track {
+	position: absolute;
+	bottom: -100px;
+	left: 50%;
+	transform: translateX(-50%);
+	z-index: 20;
+	color: #fff;
+	display: flex;
+	flex-direction: column;
+	align-items: center;
+}
+
+.box:after,
+.box:before,
+.angle:after,
+.angle:before {
+	content: '';
+	display: block;
+	position: absolute;
+	width: 3vw;
+	height: 3vw;
+	z-index: 12;
+	border: 0.2rem solid transparent;
+}
+
+.box:after,
+.box:before {
+	top: 0;
+	border-top-color: #00ff33;
+}
+
+.angle:after,
+.angle:before {
+	bottom: 0;
+	border-bottom-color: #00ff33;
+}
+
+.box:before,
+.angle:before {
+	left: 0;
+	border-left-color: #00ff33;
+}
+
+.box:after,
+.angle:after {
+	right: 0;
+	border-right-color: #00ff33;
+}
+
+@keyframes radar-beam {
+	0% {
+		transform: translateY(-100%);
+	}
+
+	100% {
+		transform: translateY(0);
+	}
+}
+
+.msg {
+	text-align: center;
+	padding: 20rpx 0;
+}
+
+.mask {
+	position: absolute;
+	z-index: 10;
+	background-color: rgba(0, 0, 0, 0.55);
+}
+
+.mask1 {
+	top: 0;
+	left: 0;
+	right: 0;
+}
+
+.mask2 {
+	right: 0;
+	height: 200px;
+}
+
+.mask3 {
+	right: 0;
+	left: 0;
+	bottom: 0;
+}
+
+.mask4 {
+	left: 0;
+	height: 200px;
+}
+</style>

File diff suppressed because it is too large
+ 0 - 0
uni_modules/mumu-oneCode/components/mumu-oneCode/quagga.min.js


+ 86 - 0
uni_modules/mumu-oneCode/package.json

@@ -0,0 +1,86 @@
+{
+  "id": "mumu-oneCode",
+  "displayName": "H5调用摄像头识别条形码(一维码),可开闪光灯(原生H5调用,不需要任何sdk,本地扫描识别,不需要后端)",
+  "version": "1.1.2",
+  "description": "在浏览器中调用手机摄像头进行扫码识别条形码 一维码识别 可开闪光灯,无须任何sdk。",
+  "keywords": [
+    "一维码识别",
+    "条形码",
+    "条形码识别",
+    "摄像头",
+    "闪光灯",
+    ""
+],
+  "repository": "",
+  "engines": {
+    "HBuilderX": "^3.1.0"
+  },
+"dcloudext": {
+    "sale": {
+      "regular": {
+        "price": "0.00"
+      },
+      "sourcecode": {
+        "price": "0.00"
+      }
+    },
+    "contact": {
+      "qq": ""
+    },
+    "declaration": {
+      "ads": "无",
+      "data": "无",
+      "permissions": "摄像头"
+    },
+    "npmurl": "",
+    "type": "component-vue"
+  },
+  "uni_modules": {
+    "dependencies": [],
+    "encrypt": [],
+    "platforms": {
+      "cloud": {
+        "tcb": "y",
+        "aliyun": "y"
+      },
+      "client": {
+        "Vue": {
+          "vue2": "y",
+          "vue3": "y"
+        },
+        "App": {
+          "app-vue": "n",
+          "app-nvue": "n"
+        },
+        "H5-mobile": {
+          "Safari": "y",
+          "Android Browser": "y",
+          "微信浏览器(Android)": "y",
+          "QQ浏览器(Android)": "y"
+        },
+        "H5-pc": {
+          "Chrome": "y",
+          "IE": "n",
+          "Edge": "y",
+          "Firefox": "u",
+          "Safari": "y"
+        },
+        "小程序": {
+          "微信": "n",
+          "阿里": "n",
+          "百度": "n",
+          "字节跳动": "n",
+          "QQ": "n",
+          "钉钉": "n",
+          "快手": "n",
+          "飞书": "n",
+        "京东": "n"
+        },
+        "快应用": {
+          "华为": "u",
+          "联盟": "u"
+        }
+      }
+    }
+  }
+}

+ 82 - 0
uni_modules/mumu-oneCode/readme.md

@@ -0,0 +1,82 @@
+## 插件简绍
+### 实现原理
+
+> 一维码识别功能使用的是Quagga这个库。调用摄像头使用的 navigator.mediaDevices.getUserMedia 这个H5的api。通过 video 和  canvas 把摄像头获取到的数据展现到页面上,同时调用监听Quagga解析。
+
+
+### 使用环境
+需要https环境才能使用,本地测试可以在 manifest.json  中点击源码展示,找到h5 ,添加:"devServer" : { "https" : true}
+
+**请勿使用 UC浏览器 与 夸克等阿里旗下的浏览器,发现他们使用的内核都较低,无法正常获取视频流。在微信中可以正常使用,推荐在微信内打开演示案例 **
+
+需要https环境才能使用!!!
+
+需要https环境才能使用!!!
+
+需要https环境才能使用!!!
+
+**打开闪光灯只有在安装chrome内核中可以使用。苹果设备上的浏览器全都是Webkit。**
+
+### 插件使用
+**插件已支持 uni_modules 支持组件easycom,以下代码演示的是普通使用**
+
+``` html
+<!-- HTML -->
+		<mumu-one-code @success='handlerSuccess' definition :readers='["code_128_reader"]'></mumu-one-code>
+```
+
+``` javascript
+// js
+	import MumuOneCode from '@/uni_modules/mumu-oneCode/components/mumu-oneCode/mumu-oneCode.vue'
+
+	export default {
+		components: { MumuOneCode },
+		methods: {
+			handlerSuccess(code) {
+				uni.showModal({
+					content: code
+				}).then(res => {
+					uni.navigateBack()
+				})
+			}
+		}
+	}
+```
+readers是一维码类型,需要更具实际需求填入。数组中可填多个,但是不推荐,因为不同类型中的一维码可能会被其他类型给解码出来,这样会导致解码不正确。具体类型规则可以百度。
+
+- code_128_reader:企业内部常用,可带字母。一些电子产品类别的一维码就是这个编码
+- ean_reader :商品常用
+
+
+
+### 相关API
+
+##### 可传属性(Props)
+
+| 参数       | 说明                                                         | 类型    | 默认值              |
+| ---------- | ------------------------------------------------------------ | ------- | ------------------- |
+| continue   | 是否连续获取。false 监听一次   true 持续监听                 | Boolean | false               |
+| exact      | 选调用摄像头。environment 后摄像头  user 前摄像头            | String  | environment         |
+| readers    | 一维码类型。可选: code_128_reader ean_reader ean_8_reader code_39_reader code_39_vin_reader codabar_reader upc_reader upc_e_reader i2of5_reader 2of5_reader code_93_reade | Array   | ["code_128_reader"] |
+| definition | 调用摄像头清晰度。fasle 正常  true 高清                      | Boolean | false               |
+
+
+
+##### 事件(Events)
+
+| 事件名  | 说明                           | 回调参数   |    
+| ------- | ------------------------------ | ---------- | --- |
+| success | 检查到二维码并读取到数据是回调 | 二维码数据 |    
+
+### 案例演示
+![enter description here](https://h5plugin.mumudev.top/public/getOneCode/qrcode.png)
+
+
+
+
+
+![enter description here](https://h5plugin.mumudev.top/public/getOneCode/aaa.jpg)
+
+## 支持作者
+
+![支持作者](https://student.mumudev.top/wxMP.jpg)

Some files were not shown because too many files changed in this diff