From f3c0856506f36387db012feb9f650492a67e0334 Mon Sep 17 00:00:00 2001 From: iqudoo Date: Thu, 30 Apr 2026 11:17:05 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E6=94=AF=E6=8C=81?= =?UTF-8?q?=E6=8E=A7=E5=88=B6=E6=98=AF=E5=90=A6=E6=98=BE=E7=A4=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo.html | 6 +++++- dist/index.d.ts | 41 ++++++++++++++++++++++++++++++++++++++ dist/index.html | 6 +++++- dist/index.js | 2 +- res/scan_beep.ogg | Bin 0 -> 12237 bytes src/services/config.js | 10 ++++++---- src/services/web/index.js | 41 +++++++++++++++++++++++++------------- src/services/wx/index.js | 11 ++++++---- types/index.d.ts | 41 ++++++++++++++++++++++++++++++++++++++ webpack.base.js | 2 +- webpack.rules.js | 8 ++++++++ 11 files changed, 142 insertions(+), 26 deletions(-) create mode 100644 res/scan_beep.ogg diff --git a/demo.html b/demo.html index ec2c684..4af5210 100644 --- a/demo.html +++ b/demo.html @@ -129,7 +129,11 @@ output("call ready"); hide(); var url = "https://vet.iqudoo.com/api?action=api.biz.wechat.JSSDKConfig"; - initSDK({ initWechatJssdk: { apiUrl: url } }, function () { + initSDK({ + webCanvasEnabled: true, + webScanBeepEnabled: true, + initWechatJssdk: { apiUrl: url } + }, function () { IScan.setStatusListener(function (res) { output("status", IScan.getStatus()); }); diff --git a/dist/index.d.ts b/dist/index.d.ts index dc895a3..e826c52 100644 --- a/dist/index.d.ts +++ b/dist/index.d.ts @@ -6,6 +6,22 @@ interface ScanConfigOptions { * 网页扫码canvas样式 */ webCanvasStyle?: string, + /** + * 网页扫码类型,默认支持二维码和条码 + */ + webScanType?: ('qrCode' | 'barCode')[], + /** + * 网页扫码canvas是否启用,默认启用 + */ + webCanvasEnabled?: boolean, + /** + * 网页扫码成功提示音地址,默认使用内置提示音 + */ + webScanBeepAudio?: string, + /** + * 网页扫码成功提示音是否启用,默认启用 + */ + webScanBeepEnabled?: boolean, /** * 微信JSSDK配置,微信环境才会生效,配置后会自动初始化微信JSSDK */ @@ -14,6 +30,31 @@ interface ScanConfigOptions { * 微信JSSDK配置API地址,调用接口会带上当前页面url作为参数 */ apiUrl: string, + /** + * 微信JSSDK配置参数,不配置则自动获取 + */ + sdkConfig?: { + /** + * 是否开启调试模式 + */ + debug?: boolean, + /** + * 微信公众平台应用ID + */ + appId: string, + /** + * 时间戳 + */ + timestamp: number, + /** + * 随机字符串 + */ + nonceStr: string, + /** + * 签名 + */ + signature: string, + }, /** * 微信JSSDK配置SDK地址,默认为https://res.wx.qq.com/open/js/jweixin-1.6.0.js */ diff --git a/dist/index.html b/dist/index.html index f18c7f9..5d223fb 100644 --- a/dist/index.html +++ b/dist/index.html @@ -100,7 +100,11 @@ output("call ready"); hide(); var url = "https://vet.iqudoo.com/api?action=api.biz.wechat.JSSDKConfig"; - initSDK({ initWechatJssdk: { apiUrl: url } }, function () { + initSDK({ + webCanvasEnabled: true, + webScanBeepEnabled: true, + initWechatJssdk: { apiUrl: url } + }, function () { IScan.setStatusListener(function (res) { output("status", IScan.getStatus()); }); diff --git a/dist/index.js b/dist/index.js index f90be7e..5bc9bab 100644 --- a/dist/index.js +++ b/dist/index.js @@ -1 +1 @@ -!function(n){var t={};function e(r){if(t[r])return t[r].exports;var o=t[r]={i:r,l:!1,exports:{}};return n[r].call(o.exports,o,o.exports,e),o.l=!0,o.exports}e.m=n,e.c=t,e.d=function(n,t,r){e.o(n,t)||Object.defineProperty(n,t,{enumerable:!0,get:r})},e.r=function(n){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(n,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(n,"__esModule",{value:!0})},e.t=function(n,t){if(1&t&&(n=e(n)),8&t)return n;if(4&t&&"object"==typeof n&&n&&n.__esModule)return n;var r=Object.create(null);if(e.r(r),Object.defineProperty(r,"default",{enumerable:!0,value:n}),2&t&&"string"!=typeof n)for(var o in n)e.d(r,o,function(t){return n[t]}.bind(null,o));return r},e.n=function(n){var t=n&&n.__esModule?function(){return n.default}:function(){return n};return e.d(t,"a",t),t},e.o=function(n,t){return Object.prototype.hasOwnProperty.call(n,t)},e.p="",e(e.s=7)}([function(n,t,e){"use strict";t.__esModule=!0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n};t.getVersion=function(){return o.version},t.getConfig=function(n){var t=u[n];return t||(t=i[n]),t},t.setConfig=function(n){n&&"object"==(void 0===n?"undefined":r(n))&&Object.assign(u,n)};var o={version:"0.0.1.0430.1033"},i={},u={}},function(n,t,e){"use strict";t.__esModule=!0;var r;r="undefined"!=typeof GameGlobal?Object.assign({},GameGlobal):"undefined"==typeof window?{setTimeout:function(n){function t(){return n.apply(this,arguments)}return t.toString=function(){return n.toString()},t}((function(){return setTimeout.apply(void 0,arguments)})),setInterval:function(n){function t(){return n.apply(this,arguments)}return t.toString=function(){return n.toString()},t}((function(){return setInterval.apply(void 0,arguments)})),clearTimeout:function(n){function t(){return n.apply(this,arguments)}return t.toString=function(){return n.toString()},t}((function(){return clearTimeout.apply(void 0,arguments)})),clearInterval:function(n){function t(){return n.apply(this,arguments)}return t.toString=function(){return n.toString()},t}((function(){return clearInterval.apply(void 0,arguments)}))}:window,t.default=r},function(n,t,e){"use strict";t.__esModule=!0,t.createUUID=function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(n){var t=16*Math.random()|0;return("x"==n?t:3&t|8).toString(16)}))}},function(n,t,e){"use strict";t.__esModule=!0,t.isReadyCalled=function(){return s},e(8);var r=function(n){return n&&n.__esModule?n:{default:n}}(e(1)),o=e(0),i=e(13),u=e(6),c=e(5),a=null,s=!1;r.default.__IScanReady__&&r.default.__IScanReady__(),t.default=Object.assign({},{config:function(n){return n&&(0,o.setConfig)(n),a||(a=Promise.resolve().then((function(){return(0,c.printDebug)("-------------------------------"),(0,c.printDebug)("sdk_version:",(0,o.getVersion)()),(0,c.printDebug)("-------------------------------"),(0,u.initWxJssdk)(),Promise.resolve().then((function(){s=!0})).catch((function(n){throw a=null,n}))})))},onScanListener:i.onScanListener,offScanListener:i.offScanListener,setStatusListener:i.setStatusListener,getStatus:i.getStatus,startScan:i.startScan,stopScan:i.stopScan,clear:i.clear})},function(n,t,e){"use strict";t.__esModule=!0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n};t.toAny=function(n,t){if(null==n)return t;var e=function(n){if("string"!=typeof n)return void 0===n?"undefined":r(n);try{var t=JSON.parse(n);return void 0===t?"undefined":r(t)}catch(t){var e=parseFloat(n);return isNaN(e)||""+e!==n?"string":"number"}}(n);switch(null!=t&&(e=void 0===t?"undefined":r(t)),e){case"number":return function(n){try{return JSON.parse(n)}catch(t){return parseFloat(n)}}(n);case"boolean":return function(n){return!!n&&"false"!=n&&"0"!=n}(n);case"object":return function(n,t){if("object"===(void 0===n?"undefined":r(n)))return n;try{return JSON.parse(n)}catch(n){}return t}(n,t);case"string":return function(n,t){try{var e=void 0===n?"undefined":r(n);if("string"===e)return n;if("boolean"===e)return n?"true":"false";if("number"===e)return""+n;if("object"===e)return JSON.stringify(n)}catch(n){}return t}(n,t)}return t}},function(n,t,e){"use strict";t.__esModule=!0,t.printError=function(n){for(var t,e=arguments.length,r=Array(e>1?e-1:0),o=1;o1?e-1:0),o=1;o1?e-1:0),o=1;o1)for(var e=1;e0?(0,u.startScanner)((function(n){!function(n){if(function(n){for(var t=0;t=0&&e.splice(r,1)}},t.bridgeSync=l,t.bridgeAsync=function(n,t,e){return new Promise((function(r,o){if(f()){var u=!1,a=null;e>0&&(a=setTimeout((function(){u=!0,a=null,o("bridgeAsync timeout")}),e));var s=(0,i.createUUID)()+"_"+Date.now();!function(n,t){t&&(c[n]=t)}(s,(function(n,t){u||(a&&clearTimeout(a),0==n?r(t):o(t))})),l(n,Object.assign({request_id:s},t))}else o("Can't bridgeAsync, because not in runtime")})).then((function(e){var r=[n];return t&&(r.push("params:"),r.push(t)),e&&(r.push("resp:"),r.push(e)),o.printDebug.apply(void 0,["bridge resp >>>"].concat(r)),e})).catch((function(e){throw t?(0,o.printWarn)("bridge err >>>",n,"params:",t,e):(0,o.printWarn)("bridge err >>>",n,e),e}))};var r=e(4),o=e(5),i=e(2),u={},c={},a="__bridge_client__";function s(){var n=a+"_handle_callback";window[n]||(window[n]=function(n){var t=(0,r.toAny)(n,{}),e=t.method,o=t.payload,i=t.code,a=t.request_id,s=(0,r.toAny)(o,{});a?c[a]&&c[a](i,s):u[e]&&u[e].forEach((function(n){n&&n(s)}))})}function f(){return!!window[a]}function l(n,t){s();var e=(0,r.toAny)(function(n){for(var t=n.split("."),e=window;t.length>1;)e=e[t.shift()];if(e&&1==t.length&&e.hasOwnProperty(t[0])){for(var r,o=arguments.length,i=Array(o>1?o-1:0),u=1;u>>"].concat(i)),e}},function(n,t,e){"use strict";t.__esModule=!0,t.isSupportWebScan=function(){return"undefined"!=typeof navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia&&"undefined"!=typeof BarcodeDetector},t.isSupportImageScan=function(){return"undefined"!=typeof document&&"undefined"!=typeof BarcodeDetector&&"undefined"!=typeof URL&&URL.createObjectURL},t.stopScanForWeb=f,t.startScanForImage=function(){return s((0,o.getConfig)("scanType")).then((function(n){return new Promise((function(n){var t=document.createElement("input");t.type="file",t.accept="image/*",t.style.display="none";var e=!1,r=function(t){e||(e=!0,u("__webscan_image_input__"),n(t))};t.id="__webscan_image_input__",t.onchange=function(){r(t.files&&t.files[0])},t.oncancel=function(){r(null)},document.body.appendChild(t),t.click()})).then((function(t){return function(n,t){return t?"undefined"!=typeof createImageBitmap?createImageBitmap(t).then((function(t){return n.detect(t).then((function(n){return t.close&&t.close(),n&&n[0]})).catch((function(n){throw t.close&&t.close(),n}))})):new Promise((function(e,r){var o=new Image,i=URL.createObjectURL(t);o.onload=function(){n.detect(o).then((function(n){URL.revokeObjectURL(i),e(n&&n[0])})).catch((function(n){URL.revokeObjectURL(i),r(n)}))},o.onerror=function(n){URL.revokeObjectURL(i),r(n)},o.src=i})):Promise.resolve(null)}(n,t)}))})).then((function(n){return n&&n.rawValue?{result:n.rawValue}:{success:!1,error:"未识别到二维码或条形码"}}))},t.startScanForWeb=function(n,t){return new Promise((function(e,u){try{i.uuid=(0,r.createUUID)(),i.finish=!1;var l,d=c("video","__webscan_video__","display: none",!1),p=n||"position: fixed; width: 300px; height: 240px; top: 0; left: 0; z-index: 9999;",h=c("canvas","__webscan_canvas__",p+" display: none;",!0);h.style.display,h.style.cssText=p,l=h.style.display,h.style.display="none";var v=h.getContext("2d"),y=i.uuid;d.width=300,d.height=300,d.uuid=i.uuid,s((0,o.getConfig)("scanType")).then((function(n){return navigator.mediaDevices.getUserMedia({video:{facingMode:"environment"}}).then((function(t){return{detector:n,stream:t}}))})).then((function(n){var r=n.detector,c=n.stream;d.srcObject=c,d.setAttribute("playsinline",!0),d.play();var s=(0,o.getConfig)("closeWebScan",(function(){})),p=(0,o.getConfig)("displayWebScan",(function(n,t){}));p&&p(h,(function(){f()})),h.style.display="none";var g=!1,m=!1,_=!1,b=function(){if(!_){_=!0;try{c.getTracks()[0].stop()}catch(n){}s&&s()}};requestAnimationFrame((function(){!function n(){try{d.readyState!==d.HAVE_ENOUGH_DATA||g||(h.height=d.videoHeight,h.width=d.videoWidth,v.setTransform(-1,0,0,1,h.width,0),v.drawImage(d,0,0,h.width,h.height),v.setTransform(1,0,0,1,0,0),m||(m=!0,h.style.display=l||""),g=!0,r.detect(d).then((function(n){var r=n&&n[0];if(r&&r.rawValue&&i.uuid==y){if(t&&!t(r.rawValue))return;!function(n,t,e){var r=e.cornerPoints;if(r&&r.length)for(var o=0;o1&&(e[t[0]]=t[1])}})),s.status>=200&&s.status<300){var r={errMsg:"request:ok"};try{var o=JSON.parse(s.response);r.data=o}catch(n){r.data=s.response}r.header=e,r.statusCode=s.status,n.success&&n.success(r)}else n.fail&&n.fail({errMsg:"request:fail",data:s.response,header:e})}},s.send(t)}(Object.assign({},{url:t,method:e,data:f,headers:c,json:a,timeout:s},{success:n,fail:r}))})).then((function(n){if(n.statusCode&&200!=n.statusCode)throw n;return n}))};var r=e(2),o=e(17),i=e(18)},function(n,t,e){"use strict";t.__esModule=!0,t.hex_md5=function(n){return h(o(d(n),n.length*r))},t.b64_md5=function(n){return v(o(d(n),n.length*r))},t.str_md5=function(n){return p(o(d(n),n.length*r))},t.hex_hmac_md5=function(n,t){return h(f(n,t))},t.b64_hmac_md5=function(n,t){return v(f(n,t))},t.str_hmac_md5=function(n,t){return p(f(n,t))};var r=8;function o(n,t){n[t>>5]|=128<>>9<<4)]=t;for(var e=1732584193,r=-271733879,o=-1732584194,i=271733878,f=0;f>>32-t}(l(l(t,n),l(r,i)),o),e)}function u(n,t,e,r,o,u,c){return i(t&e|~t&r,n,t,o,u,c)}function c(n,t,e,r,o,u,c){return i(t&r|e&~r,n,t,o,u,c)}function a(n,t,e,r,o,u,c){return i(t^e^r,n,t,o,u,c)}function s(n,t,e,r,o,u,c){return i(e^(t|~r),n,t,o,u,c)}function f(n,t){var e=d(n);e.length>16&&(e=o(e,n.length*r));for(var i=Array(16),u=Array(16),c=0;c<16;c++)i[c]=909522486^e[c],u[c]=1549556828^e[c];var a=o(i.concat(d(t)),512+t.length*r);return o(u.concat(a),640)}function l(n,t){var e=(65535&n)+(65535&t);return(n>>16)+(t>>16)+(e>>16)<<16|65535&e}function d(n){for(var t=Array(),e=(1<>5]|=(n.charCodeAt(o/r)&e)<>5]>>>o%32&e);return t}function h(n){for(var t="0123456789abcdef",e="",r=0;r<4*n.length;r++)e+=t.charAt(n[r>>2]>>r%4*8+4&15)+t.charAt(n[r>>2]>>r%4*8&15);return e}function v(n){for(var t="",e=0;e<4*n.length;e+=3)for(var r=(n[e>>2]>>e%4*8&255)<<16|(n[e+1>>2]>>(e+1)%4*8&255)<<8|n[e+2>>2]>>(e+2)%4*8&255,o=0;o<4;o++)8*e+6*o>32*n.length?t+="":t+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(r>>6*(3-o)&63);return t}},function(n,t,e){"use strict";t.__esModule=!0,t.stringifyQuery=function(n){return Object.keys(n).map((function(t){var e=n[t];return t+"="+encodeURIComponent(e)})).join("&")},t.decodeQuery=function(n){return Object.keys(n).reduce((function(t,e){var r=n[e];return t[e]=decodeURIComponent(r),t}),{})},t.parseQueryParams=o,t.appendQueryParams=function(n){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},e=o(n),r=e.url,i=e.params;Object.keys(t).forEach((function(n){var e=t[n];null!=e?i[n]=e:delete i[n]}));var u=Object.keys(i).map((function(n){var t=i[n];return n+"="+encodeURIComponent(t)})).join("&");return r?u?r+"?"+u:r:u},t.getQueryString=function(n,t){var e=r.default.location.search,o=new RegExp("(^|&)"+n+"=([^&]*)(&|$)"),i=e.substr(1).match(o);return null!=i?decodeURIComponent(unescape(i[2])):t};var r=function(n){return n&&n.__esModule?n:{default:n}}(e(1));function o(n){var t="",e={};if(!n||"string"!=typeof n)return{url:t,params:e};var r="",o=n.indexOf("?"),i=n.indexOf("#"),u=n.indexOf("=");return o>=0?(t=n.substring(0,o),r=n.substring(o+1,i>0?i:n.length)):u>=0?(t="",r=n):(t=n,r=""),r.split("&").map((function(n){var t=n.indexOf("=");if(t>0){var r=n.substring(0,t),o=n.substring(t+1);e[r]=decodeURIComponent(o)}})),{url:t,params:e}}},function(n,t,e){"use strict";t.__esModule=!0,t.startScanner=function(n){n&&"function"==typeof n&&(r=n,"scanning"!==o&&(o="scanning",a(),window.addEventListener("keydown",s)))},t.stopScanner=function(){"scanning"===o&&(o="closed",r=null,a(),window.removeEventListener("keydown",s))};var r=null,o="closed",i="",u=null,c=0;function a(){i="",c=0,u&&(clearTimeout(u),u=null)}function s(n){if("scanning"===o&&!(n.ctrlKey||n.metaKey||n.altKey)){if("Enter"===n.key){var t=function(n){return n.replace(/[\uFF01-\uFF5E]/g,(function(n){return String.fromCharCode(n.charCodeAt(0)-65248)})).replace(/\u3002/g,".")}(i);return t&&function(n){n.preventDefault&&n.preventDefault(),n.stopPropagation&&n.stopPropagation()}(n),console.log("onScannerKeydown",t),a(),void(t&&r&&r(t))}if(n.key&&1===n.key.length){var e=Date.now();c&&e-c>100&&a(),c=e,i+=n.key,u&&clearTimeout(u),u=setTimeout((function(){a()}),100)}}}},function(n,t,e){"use strict";t.__esModule=!0;var r="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(n){return typeof n}:function(n){return n&&"function"==typeof Symbol&&n.constructor===Symbol&&n!==Symbol.prototype?"symbol":typeof n};t.exportSDK=function(n,t){for(var e=arguments.length,i=Array(e>2?e-2:0),u=2;u1&&void 0!==arguments[1]?arguments[1]:"",o={};return Object.keys(t).forEach((function(i){var u=t[i];if("object"===(void 0===u?"undefined":r(u)))Object.assign(o,n(u,""+e+i+"."));else if("function"==typeof u){var c,a=""+e+i;Object.assign(o,((c={})[a]=a,c))}})),o}(n);var a={};return Object.keys(c).forEach((function(t){var e=c[t],r=e&&e.method||t;!function(n,t,e){var r=t.split(".");r.forEach((function(t,o){o==r.length-1?n[t]=e:n[t]||(n[t]={}),n=n[t]}))}(a,t,(function(){for(var e=arguments.length,u=Array(e),c=0;c1;)e=e[r.shift()];if(e&&1==r.length&&e.hasOwnProperty(r[0])){for(var o,i=arguments.length,u=Array(i>2?i-2:0),c=2;c1?t-1:0),r=1;r1?t-1:0),r=1;r1?t-1:0),r=1;r1)for(var t=1;t0?(0,i.startScanner)((function(A){!function(A){if(function(A){for(var n=0;n=0&&t.splice(e,1)}},n.bridgeSync=f,n.bridgeAsync=function(A,n,t){return new Promise((function(e,r){if(s()){var i=!1,c=null;t>0&&(c=setTimeout((function(){i=!0,c=null,r("bridgeAsync timeout")}),t));var a=(0,o.createUUID)()+"_"+Date.now();!function(A,n){n&&(u[A]=n)}(a,(function(A,n){i||(c&&clearTimeout(c),0==A?e(n):r(n))})),f(A,Object.assign({request_id:a},n))}else r("Can't bridgeAsync, because not in runtime")})).then((function(t){var e=[A];return n&&(e.push("params:"),e.push(n)),t&&(e.push("resp:"),e.push(t)),r.printDebug.apply(void 0,["bridge resp >>>"].concat(e)),t})).catch((function(t){throw n?(0,r.printWarn)("bridge err >>>",A,"params:",n,t):(0,r.printWarn)("bridge err >>>",A,t),t}))};var e=t(4),r=t(5),o=t(2),i={},u={},c="__bridge_client__";function a(){var A=c+"_handle_callback";window[A]||(window[A]=function(A){var n=(0,e.toAny)(A,{}),t=n.method,r=n.payload,o=n.code,c=n.request_id,a=(0,e.toAny)(r,{});c?u[c]&&u[c](o,a):i[t]&&i[t].forEach((function(A){A&&A(a)}))})}function s(){return!!window[c]}function f(A,n){a();var t=(0,e.toAny)(function(A){for(var n=A.split("."),t=window;n.length>1;)t=t[n.shift()];if(t&&1==n.length&&t.hasOwnProperty(n[0])){for(var e,r=arguments.length,o=Array(r>1?r-1:0),i=1;i>>"].concat(o)),t}},function(A,n,t){"use strict";n.__esModule=!0,n.isSupportWebScan=function(){return"undefined"!=typeof navigator&&navigator.mediaDevices&&navigator.mediaDevices.getUserMedia&&"undefined"!=typeof BarcodeDetector},n.isSupportImageScan=function(){return"undefined"!=typeof document&&"undefined"!=typeof BarcodeDetector&&"undefined"!=typeof URL&&URL.createObjectURL},n.stopScanForWeb=function(){return Promise.resolve().then((function(){o.uuid=null}))},n.startScanForImage=function(){return s((0,r.getConfig)("webScanType")).then((function(A){return new Promise((function(A){var n=document.createElement("input");n.type="file",n.accept="image/*",n.style.display="none";var t=!1,e=function(n){t||(t=!0,u("__webscan_image_input__"),A(n))};n.id="__webscan_image_input__",n.onchange=function(){e(n.files&&n.files[0])},n.oncancel=function(){e(null)},document.body.appendChild(n),n.click()})).then((function(n){return function(A,n){return n?"undefined"!=typeof createImageBitmap?createImageBitmap(n).then((function(n){return A.detect(n).then((function(A){return n.close&&n.close(),A&&A[0]})).catch((function(A){throw n.close&&n.close(),A}))})):new Promise((function(t,e){var r=new Image,o=URL.createObjectURL(n);r.onload=function(){A.detect(r).then((function(A){URL.revokeObjectURL(o),t(A&&A[0])})).catch((function(A){URL.revokeObjectURL(o),e(A)}))},r.onerror=function(A){URL.revokeObjectURL(o),e(A)},r.src=o})):Promise.resolve(null)}(A,n)}))})).then((function(A){return A&&A.rawValue?{result:A.rawValue}:{success:!1,error:"未识别到二维码或条形码"}}))},n.startScanForWeb=function(A,n){return new Promise((function(t,u){try{o.uuid=(0,e.createUUID)(),o.finish=!1;var f,l=c("video","__webscan_video__","display: none",!1),g=!1!==(0,r.getConfig)("webCanvasEnabled"),d=A||"position: fixed; width: 300px; height: 240px; top: 0; left: 0; z-index: 9999;",p=c("canvas","__webscan_canvas__",d+" display: none;",!0);p.style.display,p.style.cssText=d,f=p.style.display,p.style.display="none";var C=p.getContext("2d"),h=o.uuid;l.width=300,l.height=300,l.uuid=o.uuid,s((0,r.getConfig)("webScanType")).then((function(A){return navigator.mediaDevices.getUserMedia({video:{facingMode:"environment"}}).then((function(n){return{detector:A,stream:n}}))})).then((function(A){var e=A.detector,c=A.stream;l.srcObject=c,l.setAttribute("playsinline",!0),l.play(),p.style.display="none";var s=!1,d=!1,w=!1,B=function(){if(!w){w=!0;try{c.getTracks()[0].stop()}catch(A){}}};requestAnimationFrame((function(){!function A(){try{l.readyState!==l.HAVE_ENOUGH_DATA||s||(p.height=l.videoHeight,p.width=l.videoWidth,C.setTransform(-1,0,0,1,p.width,0),C.drawImage(l,0,0,p.width,p.height),C.setTransform(1,0,0,1,0,0),g&&!d&&(d=!0,p.style.display=f||""),s=!0,e.detect(l).then((function(A){var e=A&&A[0];if(e&&e.rawValue&&o.uuid==h){if(!n||!n(e.rawValue))return;!function(A,n,t){var e=t.cornerPoints;if(e&&e.length)for(var r=0;r1&&(t[n[0]]=n[1])}})),a.status>=200&&a.status<300){var e={errMsg:"request:ok"};try{var r=JSON.parse(a.response);e.data=r}catch(A){e.data=a.response}e.header=t,e.statusCode=a.status,A.success&&A.success(e)}else A.fail&&A.fail({errMsg:"request:fail",data:a.response,header:t})}},a.send(n)}(Object.assign({},{url:n,method:t,data:s,headers:u,json:c,timeout:a},{success:A,fail:e}))})).then((function(A){if(A.statusCode&&200!=A.statusCode)throw A;return A}))};var e=t(2),r=t(18),o=t(19)},function(A,n,t){"use strict";n.__esModule=!0,n.hex_md5=function(A){return d(r(l(A),A.length*e))},n.b64_md5=function(A){return p(r(l(A),A.length*e))},n.str_md5=function(A){return g(r(l(A),A.length*e))},n.hex_hmac_md5=function(A,n){return d(s(A,n))},n.b64_hmac_md5=function(A,n){return p(s(A,n))},n.str_hmac_md5=function(A,n){return g(s(A,n))};var e=8;function r(A,n){A[n>>5]|=128<>>9<<4)]=n;for(var t=1732584193,e=-271733879,r=-1732584194,o=271733878,s=0;s>>32-n}(f(f(n,A),f(e,o)),r),t)}function i(A,n,t,e,r,i,u){return o(n&t|~n&e,A,n,r,i,u)}function u(A,n,t,e,r,i,u){return o(n&e|t&~e,A,n,r,i,u)}function c(A,n,t,e,r,i,u){return o(n^t^e,A,n,r,i,u)}function a(A,n,t,e,r,i,u){return o(t^(n|~e),A,n,r,i,u)}function s(A,n){var t=l(A);t.length>16&&(t=r(t,A.length*e));for(var o=Array(16),i=Array(16),u=0;u<16;u++)o[u]=909522486^t[u],i[u]=1549556828^t[u];var c=r(o.concat(l(n)),512+n.length*e);return r(i.concat(c),640)}function f(A,n){var t=(65535&A)+(65535&n);return(A>>16)+(n>>16)+(t>>16)<<16|65535&t}function l(A){for(var n=Array(),t=(1<>5]|=(A.charCodeAt(r/e)&t)<>5]>>>r%32&t);return n}function d(A){for(var n="0123456789abcdef",t="",e=0;e<4*A.length;e++)t+=n.charAt(A[e>>2]>>e%4*8+4&15)+n.charAt(A[e>>2]>>e%4*8&15);return t}function p(A){for(var n="",t=0;t<4*A.length;t+=3)for(var e=(A[t>>2]>>t%4*8&255)<<16|(A[t+1>>2]>>(t+1)%4*8&255)<<8|A[t+2>>2]>>(t+2)%4*8&255,r=0;r<4;r++)8*t+6*r>32*A.length?n+="":n+="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/".charAt(e>>6*(3-r)&63);return n}},function(A,n,t){"use strict";n.__esModule=!0,n.stringifyQuery=function(A){return Object.keys(A).map((function(n){var t=A[n];return n+"="+encodeURIComponent(t)})).join("&")},n.decodeQuery=function(A){return Object.keys(A).reduce((function(n,t){var e=A[t];return n[t]=decodeURIComponent(e),n}),{})},n.parseQueryParams=r,n.appendQueryParams=function(A){var n=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},t=r(A),e=t.url,o=t.params;Object.keys(n).forEach((function(A){var t=n[A];null!=t?o[A]=t:delete o[A]}));var i=Object.keys(o).map((function(A){var n=o[A];return A+"="+encodeURIComponent(n)})).join("&");return e?i?e+"?"+i:e:i},n.getQueryString=function(A,n){var t=e.default.location.search,r=new RegExp("(^|&)"+A+"=([^&]*)(&|$)"),o=t.substr(1).match(r);return null!=o?decodeURIComponent(unescape(o[2])):n};var e=function(A){return A&&A.__esModule?A:{default:A}}(t(1));function r(A){var n="",t={};if(!A||"string"!=typeof A)return{url:n,params:t};var e="",r=A.indexOf("?"),o=A.indexOf("#"),i=A.indexOf("=");return r>=0?(n=A.substring(0,r),e=A.substring(r+1,o>0?o:A.length)):i>=0?(n="",e=A):(n=A,e=""),e.split("&").map((function(A){var n=A.indexOf("=");if(n>0){var e=A.substring(0,n),r=A.substring(n+1);t[e]=decodeURIComponent(r)}})),{url:n,params:t}}},function(A,n,t){"use strict";n.__esModule=!0,n.startScanner=function(A){A&&"function"==typeof A&&(e=A,"scanning"!==r&&(r="scanning",c(),window.addEventListener("keydown",a)))},n.stopScanner=function(){"scanning"===r&&(r="closed",e=null,c(),window.removeEventListener("keydown",a))};var e=null,r="closed",o="",i=null,u=0;function c(){o="",u=0,i&&(clearTimeout(i),i=null)}function a(A){if("scanning"===r&&!(A.ctrlKey||A.metaKey||A.altKey)){if("Enter"===A.key){var n=function(A){return A.replace(/[\uFF01-\uFF5E]/g,(function(A){return String.fromCharCode(A.charCodeAt(0)-65248)})).replace(/\u3002/g,".")}(o);return n&&function(A){A.preventDefault&&A.preventDefault(),A.stopPropagation&&A.stopPropagation()}(A),console.log("onScannerKeydown",n),c(),void(n&&e&&e(n))}if(A.key&&1===A.key.length){var t=Date.now();u&&t-u>100&&c(),u=t,o+=A.key,i&&clearTimeout(i),i=setTimeout((function(){c()}),100)}}}},function(A,n,t){"use strict";n.__esModule=!0;var e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(A){return typeof A}:function(A){return A&&"function"==typeof Symbol&&A.constructor===Symbol&&A!==Symbol.prototype?"symbol":typeof A};n.exportSDK=function(A,n){for(var t=arguments.length,o=Array(t>2?t-2:0),i=2;i1&&void 0!==arguments[1]?arguments[1]:"",r={};return Object.keys(n).forEach((function(o){var i=n[o];if("object"===(void 0===i?"undefined":e(i)))Object.assign(r,A(i,""+t+o+"."));else if("function"==typeof i){var u,c=""+t+o;Object.assign(r,((u={})[c]=c,u))}})),r}(A);var c={};return Object.keys(u).forEach((function(n){var t=u[n],e=t&&t.method||n;!function(A,n,t){var e=n.split(".");e.forEach((function(n,r){r==e.length-1?A[n]=t:A[n]||(A[n]={}),A=A[n]}))}(c,n,(function(){for(var t=arguments.length,i=Array(t),u=0;u1;)t=t[e.shift()];if(t&&1==e.length&&t.hasOwnProperty(e[0])){for(var r,o=arguments.length,i=Array(o>2?o-2:0),u=2;u&@ zQK1zvA4?G`Yau+>uj}L-9P9=Z`1g3W_HGovY5Oos zg_uKZ-x|3gbm{@Ivh;7433XzsQAarQNB;NVkL15uy};j1GU3nvIHU#sPBR;BBZCO)UjS-W zD?A9G1E@zS>ev)SDI`lNSutk5RJLjldq2}^m2{%=f>qva8c~_5`5dcMZ>@yROeXLL z?6ZuOOHQ*CQBBq`Uz3%jX^yQ_Q+yW6eDgXf@*v~F4-!9{oU6%UVERCsiaDRzj+oh>< z!PIa&0EUZ%^)@--sd0e-A{>*nf;DLcA!$RY86wFkr4%3m1aTST6>iIH*(*ETnY}gP zPyWa0of9;3YBS5@{Vxd$+ftf;6d_Wkabedr^`5z*aiVl)zMaxW|=e^{tmCSXh zG@YGiSG^Y(|T;1r;XsP2_>wfoOyL#k?uV&q-z^PEHno#LXi2NtyHUA{MUF?(NnS#qg_QM1$v z-Lhs^x9~+hYr;lMhjNpuJiNlns$Ctl3)rq=Q}m-D?X84n24=eOXWo#ieLgQzOsD8C zIca>>062eAejq*j|DGR}JES#SWbo8~v|!OAH)|#PW`!KjDJss@y<7OczWm+)c8X64xH?)Db=ydFTUT{!S8PmCmz3aBSNW!q zx^<*p+e72Odwd{kjs*3L{%bV;WdMN0or`j950sr`G`d~&nQr>suGZad%>V6hdSvV* zi-Z;BD=b$zxm~{~(_U2nSejO|`WshEVeL2VhKZbU8PlY^+j6E>nJqc?$;bG5B?vC4 zS4OQy&B~GOF2m~9?WQ`j3tCKVi_dkrI8+uYE_BeSaSwZ$hquF81xk+TvkT+`(kgKf z2;)!uOlPJ%L6-waka88%-pk(5u053Lde>-B*)`4de4bmosn$vMUDJ6dkH}~j%1cm?X^%oxCH*Jw2T9-K}r*N5z6-j>beg$TC zj}x<+g|`FQ;R8qiI~B9no$0-p*-X7Fj!}RQ7Im!9Fep++spL)w!6P)w{H(?y&`|+-fk9iJIk*p{P|Iq@0xj2sC=1-Y7x$i zsKRk7&wnv9`@gcfS>e92*1i0ht(n=rIQDsV&=h9=TQ?TVwetnJ<*skd$j!SC4)FSoGD z6jv|tf~qwRp+?mn0byk=sYas5qg)pZ<+EMAbPK9-Ol=FIGF^pL3$k3(H3}4Uhw=kE zUEb32-Cg$==gS3XX|!ay9?&RI@=nvQRg99vsa*G0;)`_c+X?~g(g6&d3K!QdsPb^w zR2I3~0jIiWX^&Gm+G}rYw;!hEcUjuR$i;=>eH!C{que{|EmTok}aNzI5(Y_KF4=?MP zgD?1t7q=(|v{$yQa|^4kQQWm!zsDzP|aa7=U4l(Gbm8480gz2(|M_mZ`96GJC-gEjiP5NI5yn>s?+F!y&AI&Gt&KWM{dC z87ZKz=b?x8PbzGF0ee$Q1;Ld7iHv}?r-E}!HnnAF>^P-WQg~swX71WknrS5^B{ktY zPHE%c`tow`sVDX27v7x;oqD48t`SF-l$7hXHEt~_K}(Ba#n_3G;d*>>>4W%%cXu!8 zJ*n9;>*jDhMjSQa@9u8HPCpwfm2GRvf7TmLwnU)aU3Q&-B5q2z^y;)0ia6gC1|q~3 zTA-9`D=iuQsdh5k68M?(oFrj(lO5G*ucc9dWX(&;a&^d#a&@pTuI}MWE1!BBrCdYx zTa?1?(~zPEjJ~1#=(l)9b(o{fr&sqpjlx^yT^*JpM_eyd4=N{1mQ;I%wVO`RR)tme zC`C(IDFXQj$-mS8=CFvSbwI*@7$B0&-f#~WUEyFf$PZQa{k@G^ZPbFdmLg~PZ}}dX z|CS$!-b0=zp+cUFlAH=j&8FUps7C+2wZa&5Dpu|MH)=h@@63;12_UJG=xP?1W<pA~w9w9UP;arID)kD}PWx8XMw^+h>zHDy`Nn~(jRNzVy`qYd1CWTr zRS6Ih5!(plb>hYl?Tw&F#$o`=)O%99s=zoX>mU43&5=kHHF zxc|Vutn`EIu|lP+TBy11&n;V7ptaoW3ZY;^M+%d3 zc!hNAXfmM-SA}6>DZrLPQ3UDjALjr2^T)Xa=)t$s^@JQ_@pS2cq@7M_)mj-;k7k(+s{uMPH-~pU04L~`5Z&vLj|&)528w5>@NmV?BS7U z-wye2&w+bh1V&`BUjhD>QMuZ%5OtY*VEv9ZBQ%!5kLifZIQ@`4zznto_UT#;6Egth z-x@(3wUL4`=N~pjjNC2ClhuM#twE!2Vp4xS*l_ws{R#I2AL55B&BrMEnCAk-H*KPD zm%!MlEaZAXCkI7~F?^P0h1<=QJ{t6^N2IYBc%B5@TZF`s^TVKuQ-;LgA_6>yC>~ta zc@GM3S;%2z8CU<0GUO$c5lw#tNkQN)XOW_hO}T!=YzoBJ1*tq6HSE8=@N3z-9;LYr zDnpz(u}IJ$OgKt0PxOBVmiurgnO8Wluskdm+sU6@L6t{%C95Divw9vkp?`8IO6wrBq<_j zvl8Hbnn@T^d=yDF!s1xL=&KmTpGMxN*JsqDFC-n5}q<~ zgl@uKZ5-Vk=4Fo7^+_eNSM>c7e4$mohf2l(@0?&T96-r|(_bk{>`6VEw&JTzu$MXp zb5f}l4@UiG&n);eXZOgww%(DBm?cHRi#b?@K{oAS05=BZLI^lWfe?Wr3R!bj7PL}R z(eJ$xZ!(|vez_Q+=)h&v<;BJ*v5X;PmkItzZ6uf;(3=oQ#(`L!Y803+?{=b2@DwH} z=t?SFVZY+twS9LM)9DGqTmkCu82Qn`n4-9QPq+G=i(PwVpkklfO7n|27k55Rf;zM-WXgkIvJ zcI=gVBYw5A!vr7Eej%816e6e)+b0Gx;p8tR_&`%rQkWb!GWuk3*cl){^kX{f=ttB0JrBsX4}yrMo9YHh@+rKr-()S z6OEqoDgzxCKUGFOUv%ryp%3xFDLd&XcM%jA+hY%P;xM_d{xSS|{@2pc)X-5+D`yID z+r$6`nB0M!6gZ3PvjxC#K6LtEbIHZHi&&!bUt4=Z9LYp*6oJzy7|gqX<)K)%)j7*M z2e$})v9+YQQK;&jMC>Ws0+oU1j5!V88rWOPHeCGKyTi(ygA9&VFez$aE8sV}Mnnq#VRAxutUdIm2f4aEEJssD91Qp{thWoqTRg z$%i8tN~0!k68JJsgy^aRLj)2-+B#Pg)ZYYfr#uPaH33 zv1cc$s+OKvDH3*`-y{K@C^a^T3omB>r3m@^!satll8LmG5G^+4HptMEge){~p(3a5 zPVQ_t*Y17k=jT^E*XhwX!9}DgL>R-^3`7$v2ah+R%T-$?vVx$y(S2t#dVt=8eoz$n zTwzgQ^1J~2WMEsgR1mk*T(rdu%Qo8;oYa9XGbv3vQ((_*o&tl)72uwelWUc1bg@u> z?^IcHY<_x_OC+ncdE?eiykR>n9x(?oy$V+RDeda)H2zcZeSDKqmjJ(}+JHYm$5$~A z^vb~hfe>R6bXoe!-AH8s{Vp@|Go@(;@EC%yR|YVA0FiAduA8yJMWc5>0<6R={EYF@ zS>eNI3Jnc*@?9fOf+Wa27Lq913e~FOGi@ly3Q+nDVFX% z2G10zhlYb0KQed5Je;N-7_&2=NEo;I*9@-%vP1z$^p7C|Uv5)6J+y$d;+wwmgwLaM zDDVFO539&~DC8rAuo6*mP>o?2U`&$=$-2l++Qq9On4$E&ooS7jKXqJ|0h(wXwMGWR zoLIIDs0v;FP*Q(kVM=-6b>gUj;LI6ZiMfw0cKX$>G7)?>C^$M8Ty&+m>ojv@+;aOL zGv~kHR-=otmWPNLFtJe=)>IMS!cfbu0X<=_1eH8~_VK!#*N@7;Z%N?nBw*8-IfzRC zuj5WeYVn0l^gUZs13lLCw`la-P~Bx2dlBI|$+y>MCq7>-e>2H`m4m8~l!wd1nEod| zHU|$EpUtpUVS%Lv!s-~=ni`w@V)SLxmWg}Y_YBM{m=l7NPI1$dLhf<()CB_wN2X~B zx-j5aMPP605BdcPU%EyJt|9jQ4Nw>kbUBnPWm*$YAH(Dy&K+0^KlY;rlL{e=Ij~v) zCM5;Cpp(=uC=2Ve-(Pb1>RMIxH|1|xLF|<0-|PyKbWkJpMV1-@2> zYc!*+JI=bTmRNRhM@Hk#>!e@0WMfZ$#XyIY()G_@J9bx-hgCE=Q$#|$=Qj=Nropnp z3=fzi(7D)~0K+sY6+8969+AI z6vR3LPgosx%ZjvGZF#fQ$8={2JKkF)-|*J;woIdWqPM7Tn_7RW%uiJ~lO?6Se*Y!e z=niB}Mbd(Lg$qXZ428e9mYw28=v;*hGPexgzl8@LmczKs)u^ zW07QE{J47ZzyV@2jhl_ur#botowOsUtyoIC^JvV~^Zu|EQF&>$kYcJ9|{; zHZ428lY^l!594tpG*cqUoV~;ppcOxKP9qRs}0L>5;P>Twg zLeN=@`bg>PKZxGFboBvbo{0dt2i+QmJnE$4$xcIdb8%wu%V#goDkh{qdQ&6&N=!RS zM8tS?+ z5DcNIEa(hX^qK8_{gh#WfWomVv6mb7-8XxX{-$n~Lz-CJ(;8Ew!kcAXi8+WWaP-b7 z?WESJL&&|#gOiW%beaC^X{Zoq?^_1Tfc|8&0O+lxQ2k^e9$*y6TS$)yVd%^i0DjuQ ztNz_ww;0ODgD_P#F?xeQGM|@X_8`U<;O+u)A14K0zG-vD1?^cg z7WIqm3VU#2%TS4}uH~&o-__O@W#4sIq%;n8jgG|JP2!a~MHa@U180Fc^#?;9*Edm7x1^uLLof1_LRzPZz^u<$ka@uFgoM z{LxzmYbu-n+41Y($S3)^qbJ#B!qA6IfLP$>3j)Jdm;5Ej2}kp2voa;|C`yJC%He(VTE&yZ#i!R&FgUpCjnyT{t#w45C18>&V@BiX3$Iaf&yGn~$PO`H3*2UYJ&#b69~b);eM@@?bSTSwOw zVA_Jlym8x*2U@C;8FT9u%4yBN^-g(Hls$W&Vbb|D!-OPnCjr@uz> zbv_6~%~OVTveBPdf3s+FW%V0M z|Cw=fcUTPN-@3vxoDmOxU4ic7{axMNPjje`d&`bWu7!yXl1Qf;nZV@<*+ zlgbqZ?mi042TozR2NWW0XMw-y!WHi1i5z4yMp;#uIPxoxqySW5jZT5Dlq@Nk_nYm} zO)`Y}LEzHNXvP;)<`SuEE-pE#Peu}Ei@Z{aBeZ=VJeHE$6y{s6<8-X9zFB_8T3rnf z=E~K^*|+b|vNd!XdrB+r7_4#Ql==B82sG>|bT~Ox0+`%J;S!+O)h)yj^+(#+>80HG zEym9+d5@>#2U}5upb7M41l%ydW+#mU&Ogf0n6w`^#&<%{A_k}Fw_oW(=L6cgJl%Jq zCgq#%-hX16^N~Gc$GXrLI@#{6f${I9y+S*STwAyAb0}cQ30u;VZcLnrxWh*ED6Qz; z+O{%y-PZ3Fk6Sy|{fjHkg^w%tZ24kx6Fm7sA=Ni(O=LlY9|fEhKrDoZ%D|WjJj|A` zY9y_^W5F6lNH(F4(%szmY%n_ zF;4Z(4JkPY5$m2TIXjYR6t{4-{UX++SJ6cYe{4}!7s0ybM7dTMa<&LE=oM=CJ< zy2sCzCnP&rnaenDH2%5#Xvd6Dt$FwV*_|O&eYD}d$6QgxZ^H)3qJ^uw%@&G zu4hDLfOgutBlm@EGTq)a_TeOAE%BIldgZqkzPKqEx4p!BM#3JXsPW?n4}bS#$wi`JQOImsZ+G+CI6jOz&xTu)bOR z>X2J%*}eHor|DZhDw$PwLOCw%On>6_R@1bs>8f+wgd2rst6cUo+-~W0y5706@0Y_t zvB`DvFsG?p2a3vNup-LUWK|KXggD`5K(|@RAorsoIJVdeg-QmQN3lc=#AI+M1tLz9 z7;xKsqSC}cQ9zafuCHu@s>+r0TE>ec zjD>vs-rfl4h-v|>F}PDHdM@Bq3h-8Y-Ev%5*#Z& z#}6%*>Z)21KDe(8-cr8Mq19l5eYO3paKkRkZ3htgTDx8^cylSJ`vJ0&hF*D)=TCsayM7k=bg9T{&1Hd@hbi2fb-pk=hxM*3#}*6 zDDcU3!|u-8tpgRYPkuQr(iwXv!wqn!!sI$Yc6D_<5E|1UuQgj0Q5M>u0oO-jz5j~- znjaTptj)VB4bfVdvH{oR?RDAkWul+-j}9qZlHPZuLEj}X^}9}e)Qxf#)fw8q-hQ%+ z+nwm}^H`clW#1E1$?XfQGY=m2v3?xsnf5Sx%goU19(U2k9v@V`%#ot@de)xno5x49 zRIvp9(N`XL4M3t6t)9gVfL#XCDT!FON<$2`qs~k$mT1svF<}=#h$C$$&_VNDR-#D=R#42i|7s12m{)r&D z7B17793sno;)=p9un?5veV+ty4mr606dYdQ zmgL^;zN0H_=K2|y(Zkz3I8D!2E?AUP_T`L&Vwuc2YuT97BideN4tC#*Z>OBv-R*5^ zaVGbpmJL%}o|fK|N|by@uj8XKqv@X(k!REEJDS5^#Rxa^u2A^qoym8IMJE@N6vm-c zI}WhWIFQqUx73O#k`X5`M-u=J=3@4DP}UTMd9z@~FZ`Ds!ADOo*UR5;`cj&=-1>A? z=ucMC%aCZ{S45{|Kcj;?A2^O-h0)v5R6KP=dLbN1VJtaZ#1v>9U(%HY zNf8Xbw`{~p8u-UaELizG&S4r6x^QLBF0;Tx;?7U)^reGDL=!J8o4@0&|BUA9+7E5- z*9_;xM|s~PlbuCNOvI}n7-%U;$BE@y_p>q>w`tzI}JKoyC>+-(@7DSi(Js?yhLA4r*c$73jrjwy&*&F$Tb~*KE@dnC2U4ANtrWuqnc2wf~DwN|HpX zg2oNqNy%FMjbrzwySc;u*u+Qs+9TFl-o4Yl?nMa(*UKsz{5Us`-D5cqRLq_Ey?X^U z%>fQ=)g`!pPCx{HKsrB-N3A=eNM(}G5fJ;J768=rr5mg~JW&98fDo^O-f=X2 zv|SIpABjFn^H_aXNVxv}4>x~@);BhS z%Ur$b(D^4;mkv(5&VIIZps(_pU`efErkBs%1C;QUA+<5Wj}5LkPp5~aaBCH}nafNV z4Q&`MW1zr4edf^w50B-s-o+Oxes7zO6yVHZVcmgGsEkKK5ip`5os33;Oh?InCJOw7 zmI36LJjkqhb{T_(N!w|(H6U9ISE2908t-Kcp`8X^f86)gzHGDkC%3FjN~C|AQ^wg< zt8Ld59&X4H+WK+*7Dv53nr6Q?N{y>;vM;*8%^7}p{8jSECI)r4n@EiO@~mrVO zV@puNe5NrvZ zz|itJBZ{&g4RDJnN}NffYG&&>nX5KB4Xu<<6n%AO&j~y6E9|>CC z+NxqMm2?HhCW0yCR)QO`9puQXQitjCMO)BZ^NH?`Kv#`V$IW>(ODZG#g$JM){5`H;`H%*W2gAa{Sk|-ZAuR^G!)JpPxo13A2f4^ zebDm7s$ctyPfA{X|9N>yu;e?l;j;rC_hZ6u7M)?dkZA0Q^V!}+mOMRq?cuKvrZ({l zq>`2ka9_p{fU#Bv*7;*VopZ`iEkP$DKtLIeg`q($k6$?9qL9UBNSH-Di0?nXS+;$}eNQ(=BPT zTTp-5b*$^C)}zCtmj-2`%hYyiy_qk#{lKv^7@x-ZDm2lRqJoF2S$meIgrA2tdb@>&w55FA9&|xh-4V+{Ki~)!Ev&>;hor_4Gfe19DS1NGQNKIiGbrTK zLzn%fwzLI|ClCI--*Y+en$G2$EKYb^;Kv>Jmpqy8w{mV+yt%mDK--~xL!OKiuhnn3 zHlHq>X7^cYKDX41zA~WNTSDr1|AS?od|KDlgswAv;wuqpOcVd94% z>V^n38dt=?P#6xpktC_FMAgJf02Ps;j{)G*4JAGU(q5&qa!^YVc^v}3Wy#-PwcN>k zH=}Do785!&b)SK#+^8!}Pc7yxjO^{q-XwJ4V}1V0Ps_9SR_ZszD*T|{@hFwr6tvDr zJ1U{yamng+C%q*mTVotn^jUA3rXhgds#XbMJuZ(Yod%Cr&G?vb=4BG4>Op?lKvtRjGMNSZt0s+#PSziQ;bHlDfJ zbyanzIqL`W^54^e)%bFIgP8g887HL#Z@6^rTI6}xr=Vn8*#>LdXO6jVS(h7xH?D~E zG3hzb8U8V2)5RS#Y0MwDkj;pz@u(hJvJ^r_|mowmlksgu6PD8IX8ark)l`;OE} z#_JuAzlW4u4$GgyXIk0qe^G(G5+p&a)FDg!zNDDo4g6GaqVVsb85FMf%DdW^jDiPsHQ zc2>$U#+Hn|dI7VpS?$=nVTaFJ@{I2DtxGd1Lel~ zyZ-T@)T((_ZdH#`CJf3PZk{ZE2SP1B=SVnxy?8@EefsQ%h`|l!Ymc!vonY_uzWy%1 q{G6<%V!cO7b@o!vH_bVTFI9!_+!##0sBnp|c%xb>xfm||=lDNdH@MdT literal 0 HcmV?d00001 diff --git a/src/services/config.js b/src/services/config.js index 98e08da..ce0610c 100644 --- a/src/services/config.js +++ b/src/services/config.js @@ -13,11 +13,13 @@ export function getVersion() { } export function getConfig(key) { - let item = _customConfig[key]; - if (!item) { - item = _defConfig[key]; + if (Object.prototype.hasOwnProperty.call(_customConfig, key)) { + return _customConfig[key]; } - return item; + if (Object.prototype.hasOwnProperty.call(_defConfig, key)) { + return _defConfig[key]; + } + return undefined; } export function setConfig(config) { diff --git a/src/services/web/index.js b/src/services/web/index.js index 049fd36..88d6cb1 100644 --- a/src/services/web/index.js +++ b/src/services/web/index.js @@ -1,11 +1,14 @@ import { createUUID } from "../../utils/uuid"; import { getConfig } from "../config"; +import scanBeepAudio from "../../../res/scan_beep.ogg"; const scanWeb = { uuid: null, finish: true } +const DEFAULT_SCAN_BEEP_AUDIO = scanBeepAudio; + function removeEl(id) { try { let el = document.getElementById(id); @@ -101,6 +104,24 @@ function drawBarcode(context, width, barcode) { } } +function playScanBeep() { + if (getConfig("webScanBeepEnabled") === false) { + return; + } + const audioSrc = getConfig("webScanBeepAudio") || DEFAULT_SCAN_BEEP_AUDIO; + if (!audioSrc || typeof Audio === 'undefined') { + return; + } + try { + const audio = new Audio(audioSrc); + const playPromise = audio.play(); + playPromise && playPromise.catch && playPromise.catch(() => { + // no thing + }); + } catch (e) { + } +} + export function isSupportWebScan() { return typeof navigator !== 'undefined' && navigator.mediaDevices @@ -184,7 +205,7 @@ function detectImageFile(detector, file) { } export function startScanForImage() { - return createBarcodeDetector(getConfig("scanType")).then(detector => { + return createBarcodeDetector(getConfig("webScanType")).then(detector => { return chooseImageFile().then(file => detectImageFile(detector, file)); }).then(code => { if (code && code.rawValue) { @@ -207,6 +228,7 @@ export function startScanForWeb(canvasStyle, onResult) { let videoEl = createEl("video", "__webscan_video__", "display: none", false); + let canvasEnabled = getConfig("webCanvasEnabled") !== false; let canvasDisplay = ""; let canvasBaseStyle = canvasStyle || "position: fixed; width: 300px; height: 240px; top: 0; left: 0; z-index: 9999;"; let canvasEl = createEl("canvas", @@ -221,7 +243,7 @@ export function startScanForWeb(canvasStyle, onResult) { videoEl.width = 300; videoEl.height = 300; videoEl.uuid = scanWeb.uuid; - createBarcodeDetector(getConfig("scanType")).then(detector => { + createBarcodeDetector(getConfig("webScanType")).then(detector => { return navigator.mediaDevices.getUserMedia({ video: { facingMode: "environment" @@ -238,15 +260,6 @@ export function startScanForWeb(canvasStyle, onResult) { videoEl.srcObject = stream; videoEl.setAttribute("playsinline", true); // iOS使用 videoEl.play(); - let closeWebScan = getConfig("closeWebScan", () => { - // no thing - }); - let displayWebScan = getConfig("displayWebScan", (canvasEl, cancal) => { - // no thing - }); - displayWebScan && displayWebScan(canvasEl, () => { - stopScanForWeb(); - }); canvasEl.style.display = "none"; let detecting = false; let displayed = false; @@ -259,7 +272,6 @@ export function startScanForWeb(canvasStyle, onResult) { try { stream.getTracks()[0].stop(); } catch (_e) { } - closeWebScan && closeWebScan(); }; let tick = () => { try { @@ -269,7 +281,7 @@ export function startScanForWeb(canvasStyle, onResult) { context.setTransform(-1, 0, 0, 1, canvasEl.width, 0); context.drawImage(videoEl, 0, 0, canvasEl.width, canvasEl.height); context.setTransform(1, 0, 0, 1, 0, 0); - if (!displayed) { + if (canvasEnabled && !displayed) { displayed = true; canvasEl.style.display = canvasDisplay || ""; } @@ -277,10 +289,11 @@ export function startScanForWeb(canvasStyle, onResult) { detector.detect(videoEl).then(barcodes => { const code = barcodes && barcodes[0]; if (code && code.rawValue && scanWeb.uuid == currentUuid) { - if (onResult && !onResult(code.rawValue)) { + if (!onResult || !onResult(code.rawValue)) { return; } drawBarcode(context, canvasEl.width, code); + playScanBeep(); scanWeb.uuid = null; scanWeb.finish = true; close(); diff --git a/src/services/wx/index.js b/src/services/wx/index.js index b3d3808..683e80e 100644 --- a/src/services/wx/index.js +++ b/src/services/wx/index.js @@ -45,9 +45,12 @@ function loadWxScript() { function fetchWxConfig() { let initWechatJssdk = toAny(getConfig("initWechatJssdk"), {}); + if (!!initWechatJssdk.sdkConfig) { + return Promise.resolve(toAny(initWechatJssdk.sdkConfig, {})); + } let apiUrl = toAny(initWechatJssdk.apiUrl, ""); if (!apiUrl) { - return Promise.reject(new Error("initWechatJssdk.apiUrl is required, but not found")); + return Promise.reject(new Error("initWechatJssdk.apiUrl or initWechatJssdk.sdkConfig is required, but not found")); } return request({ url: apiUrl, @@ -61,7 +64,7 @@ function fetchWxConfig() { return null; } if (data.code !== 0) { - throw new Error(data.msg || "wx config fetch failed"); + throw new Error(data.msg || "wechat jssdk config fetch failed"); } if (data.data) { return data.data; @@ -94,10 +97,10 @@ export function initWxJssdk() { const wx = items[0]; const config = items[1]; if (!wx || !wx.config) { - throw new Error("wx jssdk is not ready"); + throw new Error("wechat jssdk is not ready"); } if (!config) { - throw new Error("wx config is empty"); + throw new Error("wechat jssdk config is empty"); } const jsApiList = config.jsApiList || []; if (jsApiList.indexOf(WX_SCAN_API) === -1) { diff --git a/types/index.d.ts b/types/index.d.ts index dc895a3..e826c52 100644 --- a/types/index.d.ts +++ b/types/index.d.ts @@ -6,6 +6,22 @@ interface ScanConfigOptions { * 网页扫码canvas样式 */ webCanvasStyle?: string, + /** + * 网页扫码类型,默认支持二维码和条码 + */ + webScanType?: ('qrCode' | 'barCode')[], + /** + * 网页扫码canvas是否启用,默认启用 + */ + webCanvasEnabled?: boolean, + /** + * 网页扫码成功提示音地址,默认使用内置提示音 + */ + webScanBeepAudio?: string, + /** + * 网页扫码成功提示音是否启用,默认启用 + */ + webScanBeepEnabled?: boolean, /** * 微信JSSDK配置,微信环境才会生效,配置后会自动初始化微信JSSDK */ @@ -14,6 +30,31 @@ interface ScanConfigOptions { * 微信JSSDK配置API地址,调用接口会带上当前页面url作为参数 */ apiUrl: string, + /** + * 微信JSSDK配置参数,不配置则自动获取 + */ + sdkConfig?: { + /** + * 是否开启调试模式 + */ + debug?: boolean, + /** + * 微信公众平台应用ID + */ + appId: string, + /** + * 时间戳 + */ + timestamp: number, + /** + * 随机字符串 + */ + nonceStr: string, + /** + * 签名 + */ + signature: string, + }, /** * 微信JSSDK配置SDK地址,默认为https://res.wx.qq.com/open/js/jweixin-1.6.0.js */ diff --git a/webpack.base.js b/webpack.base.js index d6a585b..2a19acc 100644 --- a/webpack.base.js +++ b/webpack.base.js @@ -28,7 +28,7 @@ const config = { template: 'demo.html' }), new CpWebpackPlugin([ - { from: path.resolve('./types'), to: path.resolve('./dist') } + { from: path.resolve('./types'), to: path.resolve('./dist') }, ]) ], devtool: 'cheap-module-souce-map', diff --git a/webpack.rules.js b/webpack.rules.js index 838d400..3a53923 100644 --- a/webpack.rules.js +++ b/webpack.rules.js @@ -23,6 +23,14 @@ const rules = [{ limit: 8192, }, }], +}, { + test: /\.(ogg|mp3|wav)$/, + use: [{ + loader: 'url-loader', + options: { + limit: 65536, + }, + }], }, { test: /\.css$/, use: [{