123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229 |
- let Qrcode = require('@/pages/component/reqrcode.js')
- export function toScanCode(options) {
- let resultData = ''
-
- let platform = uni.getSystemInfoSync().platform
- if (platform == 'ios') {
- resultData = scanCodeIos(options)
- } else {
- return new Promise((resolve, reject) => {
- uni.scanCode({
- onlyFromCamera: options.onlyFromCamera,
- scanType: ['barCode','qrCode'],
- autoZoom:true,
- success: function(res) {
- resolve(res.result);
- }
- });
- })
- }
-
-
- var ua = navigator.userAgent;
- var isWeixin = !!/MicroMessenger/i.test(ua);
- if (isWeixin) {
- getJsApiConfig();
- resultData = scanCodeWxH5(options)
- } else {
- resultData = scanCodeH5(options)
- }
-
- return Promise.resolve(resultData);
- }
- export function scanContent(result) {
- var obj = null;
- try {
- obj = JSON.parse(result)
- } catch (err) {
- this.$tip.error("无法识别二维码");
- return
- }
- return obj;
- }
- export function scanCodeWxH5(options) {
- let fromCamera = options.onlyFromCamera
- return new Promise((resolve, reject) => {
- wx.scanQRCode({
- needResult: 1,
- scanType: ['barCode','qrCode'],
- success: function(res) {
- resolve(res.resultStr)
- }
- });
- })
- }
- export function scanCodeIos(options) {
- let fromCamera = options.onlyFromCamera
- return new Promise((resolve, reject) => {
-
- toHsScanCode({
- evalName: "hs-scancode",
- msg: '扫码',
- fil: '0,1,2',
- onlyFromCamera: fromCamera
- }, res => {
-
- resolve(res.result)
- return true
- })
- })
- }
- export function toHsScanCode(options, results) {
- const q = Object.entries(options).map(([key, value]) => `${key}=${value}`).join('&')
- uni.$on(options.evalName || "hs-scancode", ([error, res]) => {
- if (res) {
-
- uni.navigateBack({
- delta: 1,
- animationType: "fade-out",
- animationDuration: 300,
- })
- if (results && results(res) === true) return;
- }
- })
- uni.navigateTo({
- url: `/pages/component/hs-scancode?${q}`
- })
- }
- export function getJsApiConfig() {
-
- const apiUrl = location.href.split('#')[0];
- let param = {
- url: apiUrl
- }
- this.$http.get('/sys/wx/getJsApiConfig', {
- params: param
- }).then(res => {
- if (res.data.success) {
- getConfig(res.data.result);
- } else {
- this.$tip.error(res.data.message);
- }
- }).catch((err) => {
- console.log("请求返回err", err)
- })
- }
- export function getConfig(res) {
-
- wx.config({
- debug: false,
- appId: res.appId,
- timestamp: res.timestamp,
- nonceStr: res.nonceStr,
- signature: res.signature,
- jsApiList: ['scanQRCode']
- });
-
- wx.ready(function() {
- wx.checkJsApi({
- jsApiList: ['scanQRCode'],
- success: function(res) {
- console.log('检验成功');
- }
- });
- });
-
- wx.error(function(res) {
- console.log('校验失败');
- });
- }
- export function scanCodeH5(options) {
- let fromCamera = options.onlyFromCamera
- let sourceType = ['camera','album']
- if(fromCamera){
- sourceType = ['camera']
- }
- return new Promise((resolve, reject) => {
- uni.chooseImage({
- count: 1,
- sourceType: sourceType,
- success: imgRes => {
- Qrcode.qrcode.decode(getObjectURL(imgRes.tempFiles[0]))
- Qrcode.qrcode.callback = (codeRes) => {
- if (codeRes.indexOf('error') >= 0) {
-
- reject("二维码识别失败");
- } else {
-
- let content = decodeStr(codeRes)
- let formatContent = scanContent(content)
- resolve(formatContent);
- }
- }
- }
- })
- })
- }
- export function getObjectURL(file) {
- var url = null
- if (window.createObjectURL !== undefined) {
- url = window.createObjectURL(file)
- } else if (window.URL !== undefined) {
- url = window.URL.createObjectURL(file)
- } else if (window.webkitURL !== undefined) {
- url = window.webkitURL.createObjectURL(file)
- }
- return url
- }
- export function decodeStr(str) {
- var out, i, len, c;
- var char2, char3;
- out = "";
- len = str.length;
- i = 0;
- while (i < len) {
- c = str.charCodeAt(i++);
- switch (c >> 4) {
- case 0:
- case 1:
- case 2:
- case 3:
- case 4:
- case 5:
- case 6:
- case 7:
-
- out += str.charAt(i - 1);
- break;
- case 12:
- case 13:
-
- char2 = str.charCodeAt(i++);
- out += String.fromCharCode(((c & 0x1F) << 6) | (char2 & 0x3F));
- break;
- case 14:
-
- char2 = str.charCodeAt(i++);
- char3 = str.charCodeAt(i++);
- out += String.fromCharCode(((c & 0x0F) << 12) |
- ((char2 & 0x3F) << 6) |
- ((char3 & 0x3F) << 0));
- break;
- }
- }
- return out;
- }
|