From 3fe89ed7ee40428641956f9aefbc7b0ee8e58a69 Mon Sep 17 00:00:00 2001 From: dongjian <315328220@qq.com> Date: Sun, 16 Nov 2025 18:30:50 +0800 Subject: [PATCH] no message --- .hbuilderx/launch.json | 2 +- components/common/home-popup.vue | 99 ++ components/common/my-btn.vue | 2 +- components/common/share-popup.vue | 244 ++++ components/tki-qrcode/qrcode.js | 1201 +++++++++++++++++ components/tki-qrcode/tki-qrcode.vue | 211 +++ main.js | 4 + manifest.json | 10 +- package-lock.json | 243 +++- package.json | 4 +- pages/home/home.vue | 76 +- pages/login_package/login/login.vue | 8 + .../other_package/productInfo/productInfo.vue | 356 ++++- static/new/di.png | Bin 0 -> 16448 bytes static/new/logo.png | Bin 0 -> 15204 bytes static/new/share_0.png | Bin 0 -> 7033 bytes static/new/share_1.png | Bin 0 -> 5170 bytes static/new/share_2.png | Bin 0 -> 7289 bytes static/new/share_3.png | Bin 0 -> 6389 bytes static/new/share_4.png | Bin 0 -> 6468 bytes utils/config.js | 4 +- utils/func.js | 21 + 22 files changed, 2426 insertions(+), 59 deletions(-) create mode 100644 components/common/home-popup.vue create mode 100644 components/common/share-popup.vue create mode 100644 components/tki-qrcode/qrcode.js create mode 100644 components/tki-qrcode/tki-qrcode.vue create mode 100644 static/new/di.png create mode 100644 static/new/logo.png create mode 100644 static/new/share_0.png create mode 100644 static/new/share_1.png create mode 100644 static/new/share_2.png create mode 100644 static/new/share_3.png create mode 100644 static/new/share_4.png diff --git a/.hbuilderx/launch.json b/.hbuilderx/launch.json index 3a56e8a..3e70991 100644 --- a/.hbuilderx/launch.json +++ b/.hbuilderx/launch.json @@ -4,7 +4,7 @@ { "customPlaygroundType" : "local", "packageName" : "com.trustbridge.mm", - "playground" : "standard", + "playground" : "custom", "type" : "uni-app:app-android" }, { diff --git a/components/common/home-popup.vue b/components/common/home-popup.vue new file mode 100644 index 0000000..184ec5e --- /dev/null +++ b/components/common/home-popup.vue @@ -0,0 +1,99 @@ + + + + + diff --git a/components/common/my-btn.vue b/components/common/my-btn.vue index 63e2709..fc64fc9 100644 --- a/components/common/my-btn.vue +++ b/components/common/my-btn.vue @@ -1,7 +1,7 @@ + + + + diff --git a/components/tki-qrcode/qrcode.js b/components/tki-qrcode/qrcode.js new file mode 100644 index 0000000..6ea6553 --- /dev/null +++ b/components/tki-qrcode/qrcode.js @@ -0,0 +1,1201 @@ +let QRCode = {}; +(function () { + /** + * 获取单个字符的utf8编码 + * unicode BMP平面约65535个字符 + * @param {num} code + * return {array} + */ + function unicodeFormat8(code) { + // 1 byte + var c0, c1, c2; + if (code < 128) { + return [code]; + // 2 bytes + } else if (code < 2048) { + c0 = 192 + (code >> 6); + c1 = 128 + (code & 63); + return [c0, c1]; + // 3 bytes + } else { + c0 = 224 + (code >> 12); + c1 = 128 + (code >> 6 & 63); + c2 = 128 + (code & 63); + return [c0, c1, c2]; + } + } + /** + * 获取字符串的utf8编码字节串 + * @param {string} string + * @return {array} + */ + function getUTF8Bytes(string) { + var utf8codes = []; + for (var i = 0; i < string.length; i++) { + var code = string.charCodeAt(i); + var utf8 = unicodeFormat8(code); + for (var j = 0; j < utf8.length; j++) { + utf8codes.push(utf8[j]); + } + } + return utf8codes; + } + /** + * 二维码算法实现 + * @param {string} data 要编码的信息字符串 + * @param {num} errorCorrectLevel 纠错等级 + */ + function QRCodeAlg(data, errorCorrectLevel) { + this.typeNumber = -1; //版本 + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; //二维矩阵,存放最终结果 + this.moduleCount = 0; //矩阵大小 + this.dataCache = null; //数据缓存 + this.rsBlocks = null; //版本数据信息 + this.totalDataCount = -1; //可使用的数据量 + this.data = data; + this.utf8bytes = getUTF8Bytes(data); + this.make(); + } + QRCodeAlg.prototype = { + constructor: QRCodeAlg, + /** + * 获取二维码矩阵大小 + * @return {num} 矩阵大小 + */ + getModuleCount: function () { + return this.moduleCount; + }, + /** + * 编码 + */ + make: function () { + this.getRightType(); + this.dataCache = this.createData(); + this.createQrcode(); + }, + /** + * 设置二位矩阵功能图形 + * @param {bool} test 表示是否在寻找最好掩膜阶段 + * @param {num} maskPattern 掩膜的版本 + */ + makeImpl: function (maskPattern) { + this.moduleCount = this.typeNumber * 4 + 17; + this.modules = new Array(this.moduleCount); + for (var row = 0; row < this.moduleCount; row++) { + this.modules[row] = new Array(this.moduleCount); + } + this.setupPositionProbePattern(0, 0); + this.setupPositionProbePattern(this.moduleCount - 7, 0); + this.setupPositionProbePattern(0, this.moduleCount - 7); + this.setupPositionAdjustPattern(); + this.setupTimingPattern(); + this.setupTypeInfo(true, maskPattern); + if (this.typeNumber >= 7) { + this.setupTypeNumber(true); + } + this.mapData(this.dataCache, maskPattern); + }, + /** + * 设置二维码的位置探测图形 + * @param {num} row 探测图形的中心横坐标 + * @param {num} col 探测图形的中心纵坐标 + */ + setupPositionProbePattern: function (row, col) { + for (var r = -1; r <= 7; r++) { + if (row + r <= -1 || this.moduleCount <= row + r) continue; + for (var c = -1; c <= 7; c++) { + if (col + c <= -1 || this.moduleCount <= col + c) continue; + if ((0 <= r && r <= 6 && (c == 0 || c == 6)) || (0 <= c && c <= 6 && (r == 0 || r == 6)) || (2 <= r && r <= 4 && 2 <= c && c <= 4)) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + }, + /** + * 创建二维码 + * @return {[type]} [description] + */ + createQrcode: function () { + var minLostPoint = 0; + var pattern = 0; + var bestModules = null; + for (var i = 0; i < 8; i++) { + this.makeImpl(i); + var lostPoint = QRUtil.getLostPoint(this); + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + bestModules = this.modules; + } + } + this.modules = bestModules; + this.setupTypeInfo(false, pattern); + if (this.typeNumber >= 7) { + this.setupTypeNumber(false); + } + }, + /** + * 设置定位图形 + * @return {[type]} [description] + */ + setupTimingPattern: function () { + for (var r = 8; r < this.moduleCount - 8; r++) { + if (this.modules[r][6] != null) { + continue; + } + this.modules[r][6] = (r % 2 == 0); + if (this.modules[6][r] != null) { + continue; + } + this.modules[6][r] = (r % 2 == 0); + } + }, + /** + * 设置矫正图形 + * @return {[type]} [description] + */ + setupPositionAdjustPattern: function () { + var pos = QRUtil.getPatternPosition(this.typeNumber); + for (var i = 0; i < pos.length; i++) { + for (var j = 0; j < pos.length; j++) { + var row = pos[i]; + var col = pos[j]; + if (this.modules[row][col] != null) { + continue; + } + for (var r = -2; r <= 2; r++) { + for (var c = -2; c <= 2; c++) { + if (r == -2 || r == 2 || c == -2 || c == 2 || (r == 0 && c == 0)) { + this.modules[row + r][col + c] = true; + } else { + this.modules[row + r][col + c] = false; + } + } + } + } + } + }, + /** + * 设置版本信息(7以上版本才有) + * @param {bool} test 是否处于判断最佳掩膜阶段 + * @return {[type]} [description] + */ + setupTypeNumber: function (test) { + var bits = QRUtil.getBCHTypeNumber(this.typeNumber); + for (var i = 0; i < 18; i++) { + var mod = (!test && ((bits >> i) & 1) == 1); + this.modules[Math.floor(i / 3)][i % 3 + this.moduleCount - 8 - 3] = mod; + this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }, + /** + * 设置格式信息(纠错等级和掩膜版本) + * @param {bool} test + * @param {num} maskPattern 掩膜版本 + * @return {} + */ + setupTypeInfo: function (test, maskPattern) { + var data = (QRErrorCorrectLevel[this.errorCorrectLevel] << 3) | maskPattern; + var bits = QRUtil.getBCHTypeInfo(data); + // vertical + for (var i = 0; i < 15; i++) { + var mod = (!test && ((bits >> i) & 1) == 1); + if (i < 6) { + this.modules[i][8] = mod; + } else if (i < 8) { + this.modules[i + 1][8] = mod; + } else { + this.modules[this.moduleCount - 15 + i][8] = mod; + } + // horizontal + var mod = (!test && ((bits >> i) & 1) == 1); + if (i < 8) { + this.modules[8][this.moduleCount - i - 1] = mod; + } else if (i < 9) { + this.modules[8][15 - i - 1 + 1] = mod; + } else { + this.modules[8][15 - i - 1] = mod; + } + } + // fixed module + this.modules[this.moduleCount - 8][8] = (!test); + }, + /** + * 数据编码 + * @return {[type]} [description] + */ + createData: function () { + var buffer = new QRBitBuffer(); + var lengthBits = this.typeNumber > 9 ? 16 : 8; + buffer.put(4, 4); //添加模式 + buffer.put(this.utf8bytes.length, lengthBits); + for (var i = 0, l = this.utf8bytes.length; i < l; i++) { + buffer.put(this.utf8bytes[i], 8); + } + if (buffer.length + 4 <= this.totalDataCount * 8) { + buffer.put(0, 4); + } + // padding + while (buffer.length % 8 != 0) { + buffer.putBit(false); + } + // padding + while (true) { + if (buffer.length >= this.totalDataCount * 8) { + break; + } + buffer.put(QRCodeAlg.PAD0, 8); + if (buffer.length >= this.totalDataCount * 8) { + break; + } + buffer.put(QRCodeAlg.PAD1, 8); + } + return this.createBytes(buffer); + }, + /** + * 纠错码编码 + * @param {buffer} buffer 数据编码 + * @return {[type]} + */ + createBytes: function (buffer) { + var offset = 0; + var maxDcCount = 0; + var maxEcCount = 0; + var length = this.rsBlock.length / 3; + var rsBlocks = new Array(); + for (var i = 0; i < length; i++) { + var count = this.rsBlock[i * 3 + 0]; + var totalCount = this.rsBlock[i * 3 + 1]; + var dataCount = this.rsBlock[i * 3 + 2]; + for (var j = 0; j < count; j++) { + rsBlocks.push([dataCount, totalCount]); + } + } + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + for (var r = 0; r < rsBlocks.length; r++) { + var dcCount = rsBlocks[r][0]; + var ecCount = rsBlocks[r][1] - dcCount; + maxDcCount = Math.max(maxDcCount, dcCount); + maxEcCount = Math.max(maxEcCount, ecCount); + dcdata[r] = new Array(dcCount); + for (var i = 0; i < dcdata[r].length; i++) { + dcdata[r][i] = 0xff & buffer.buffer[i + offset]; + } + offset += dcCount; + var rsPoly = QRUtil.getErrorCorrectPolynomial(ecCount); + var rawPoly = new QRPolynomial(dcdata[r], rsPoly.getLength() - 1); + var modPoly = rawPoly.mod(rsPoly); + ecdata[r] = new Array(rsPoly.getLength() - 1); + for (var i = 0; i < ecdata[r].length; i++) { + var modIndex = i + modPoly.getLength() - ecdata[r].length; + ecdata[r][i] = (modIndex >= 0) ? modPoly.get(modIndex) : 0; + } + } + var data = new Array(this.totalDataCount); + var index = 0; + for (var i = 0; i < maxDcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < dcdata[r].length) { + data[index++] = dcdata[r][i]; + } + } + } + for (var i = 0; i < maxEcCount; i++) { + for (var r = 0; r < rsBlocks.length; r++) { + if (i < ecdata[r].length) { + data[index++] = ecdata[r][i]; + } + } + } + return data; + + }, + /** + * 布置模块,构建最终信息 + * @param {} data + * @param {} maskPattern + * @return {} + */ + mapData: function (data, maskPattern) { + var inc = -1; + var row = this.moduleCount - 1; + var bitIndex = 7; + var byteIndex = 0; + for (var col = this.moduleCount - 1; col > 0; col -= 2) { + if (col == 6) col--; + while (true) { + for (var c = 0; c < 2; c++) { + if (this.modules[row][col - c] == null) { + var dark = false; + if (byteIndex < data.length) { + dark = (((data[byteIndex] >>> bitIndex) & 1) == 1); + } + var mask = QRUtil.getMask(maskPattern, row, col - c); + if (mask) { + dark = !dark; + } + this.modules[row][col - c] = dark; + bitIndex--; + if (bitIndex == -1) { + byteIndex++; + bitIndex = 7; + } + } + } + row += inc; + if (row < 0 || this.moduleCount <= row) { + row -= inc; + inc = -inc; + break; + } + } + } + } + }; + /** + * 填充字段 + */ + QRCodeAlg.PAD0 = 0xEC; + QRCodeAlg.PAD1 = 0x11; + //--------------------------------------------------------------------- + // 纠错等级对应的编码 + //--------------------------------------------------------------------- + var QRErrorCorrectLevel = [1, 0, 3, 2]; + //--------------------------------------------------------------------- + // 掩膜版本 + //--------------------------------------------------------------------- + var QRMaskPattern = { + PATTERN000: 0, + PATTERN001: 1, + PATTERN010: 2, + PATTERN011: 3, + PATTERN100: 4, + PATTERN101: 5, + PATTERN110: 6, + PATTERN111: 7 + }; + //--------------------------------------------------------------------- + // 工具类 + //--------------------------------------------------------------------- + var QRUtil = { + /* + 每个版本矫正图形的位置 + */ + PATTERN_POSITION_TABLE: [ + [], + [6, 18], + [6, 22], + [6, 26], + [6, 30], + [6, 34], + [6, 22, 38], + [6, 24, 42], + [6, 26, 46], + [6, 28, 50], + [6, 30, 54], + [6, 32, 58], + [6, 34, 62], + [6, 26, 46, 66], + [6, 26, 48, 70], + [6, 26, 50, 74], + [6, 30, 54, 78], + [6, 30, 56, 82], + [6, 30, 58, 86], + [6, 34, 62, 90], + [6, 28, 50, 72, 94], + [6, 26, 50, 74, 98], + [6, 30, 54, 78, 102], + [6, 28, 54, 80, 106], + [6, 32, 58, 84, 110], + [6, 30, 58, 86, 114], + [6, 34, 62, 90, 118], + [6, 26, 50, 74, 98, 122], + [6, 30, 54, 78, 102, 126], + [6, 26, 52, 78, 104, 130], + [6, 30, 56, 82, 108, 134], + [6, 34, 60, 86, 112, 138], + [6, 30, 58, 86, 114, 142], + [6, 34, 62, 90, 118, 146], + [6, 30, 54, 78, 102, 126, 150], + [6, 24, 50, 76, 102, 128, 154], + [6, 28, 54, 80, 106, 132, 158], + [6, 32, 58, 84, 110, 136, 162], + [6, 26, 54, 82, 110, 138, 166], + [6, 30, 58, 86, 114, 142, 170] + ], + G15: (1 << 10) | (1 << 8) | (1 << 5) | (1 << 4) | (1 << 2) | (1 << 1) | (1 << 0), + G18: (1 << 12) | (1 << 11) | (1 << 10) | (1 << 9) | (1 << 8) | (1 << 5) | (1 << 2) | (1 << 0), + G15_MASK: (1 << 14) | (1 << 12) | (1 << 10) | (1 << 4) | (1 << 1), + /* + BCH编码格式信息 + */ + getBCHTypeInfo: function (data) { + var d = data << 10; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15) >= 0) { + d ^= (QRUtil.G15 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G15))); + } + return ((data << 10) | d) ^ QRUtil.G15_MASK; + }, + /* + BCH编码版本信息 + */ + getBCHTypeNumber: function (data) { + var d = data << 12; + while (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18) >= 0) { + d ^= (QRUtil.G18 << (QRUtil.getBCHDigit(d) - QRUtil.getBCHDigit(QRUtil.G18))); + } + return (data << 12) | d; + }, + /* + 获取BCH位信息 + */ + getBCHDigit: function (data) { + var digit = 0; + while (data != 0) { + digit++; + data >>>= 1; + } + return digit; + }, + /* + 获取版本对应的矫正图形位置 + */ + getPatternPosition: function (typeNumber) { + return QRUtil.PATTERN_POSITION_TABLE[typeNumber - 1]; + }, + /* + 掩膜算法 + */ + getMask: function (maskPattern, i, j) { + switch (maskPattern) { + case QRMaskPattern.PATTERN000: + return (i + j) % 2 == 0; + case QRMaskPattern.PATTERN001: + return i % 2 == 0; + case QRMaskPattern.PATTERN010: + return j % 3 == 0; + case QRMaskPattern.PATTERN011: + return (i + j) % 3 == 0; + case QRMaskPattern.PATTERN100: + return (Math.floor(i / 2) + Math.floor(j / 3)) % 2 == 0; + case QRMaskPattern.PATTERN101: + return (i * j) % 2 + (i * j) % 3 == 0; + case QRMaskPattern.PATTERN110: + return ((i * j) % 2 + (i * j) % 3) % 2 == 0; + case QRMaskPattern.PATTERN111: + return ((i * j) % 3 + (i + j) % 2) % 2 == 0; + default: + throw new Error("bad maskPattern:" + maskPattern); + } + }, + /* + 获取RS的纠错多项式 + */ + getErrorCorrectPolynomial: function (errorCorrectLength) { + var a = new QRPolynomial([1], 0); + for (var i = 0; i < errorCorrectLength; i++) { + a = a.multiply(new QRPolynomial([1, QRMath.gexp(i)], 0)); + } + return a; + }, + /* + 获取评价 + */ + getLostPoint: function (qrCode) { + var moduleCount = qrCode.getModuleCount(), + lostPoint = 0, + darkCount = 0; + for (var row = 0; row < moduleCount; row++) { + var sameCount = 0; + var head = qrCode.modules[row][0]; + for (var col = 0; col < moduleCount; col++) { + var current = qrCode.modules[row][col]; + //level 3 评价 + if (col < moduleCount - 6) { + if (current && !qrCode.modules[row][col + 1] && qrCode.modules[row][col + 2] && qrCode.modules[row][col + 3] && qrCode.modules[row][col + 4] && !qrCode.modules[row][col + 5] && qrCode.modules[row][col + 6]) { + if (col < moduleCount - 10) { + if (qrCode.modules[row][col + 7] && qrCode.modules[row][col + 8] && qrCode.modules[row][col + 9] && qrCode.modules[row][col + 10]) { + lostPoint += 40; + } + } else if (col > 3) { + if (qrCode.modules[row][col - 1] && qrCode.modules[row][col - 2] && qrCode.modules[row][col - 3] && qrCode.modules[row][col - 4]) { + lostPoint += 40; + } + } + } + } + //level 2 评价 + if ((row < moduleCount - 1) && (col < moduleCount - 1)) { + var count = 0; + if (current) count++; + if (qrCode.modules[row + 1][col]) count++; + if (qrCode.modules[row][col + 1]) count++; + if (qrCode.modules[row + 1][col + 1]) count++; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + //level 1 评价 + if (head ^ current) { + sameCount++; + } else { + head = current; + if (sameCount >= 5) { + lostPoint += (3 + sameCount - 5); + } + sameCount = 1; + } + //level 4 评价 + if (current) { + darkCount++; + } + } + } + for (var col = 0; col < moduleCount; col++) { + var sameCount = 0; + var head = qrCode.modules[0][col]; + for (var row = 0; row < moduleCount; row++) { + var current = qrCode.modules[row][col]; + //level 3 评价 + if (row < moduleCount - 6) { + if (current && !qrCode.modules[row + 1][col] && qrCode.modules[row + 2][col] && qrCode.modules[row + 3][col] && qrCode.modules[row + 4][col] && !qrCode.modules[row + 5][col] && qrCode.modules[row + 6][col]) { + if (row < moduleCount - 10) { + if (qrCode.modules[row + 7][col] && qrCode.modules[row + 8][col] && qrCode.modules[row + 9][col] && qrCode.modules[row + 10][col]) { + lostPoint += 40; + } + } else if (row > 3) { + if (qrCode.modules[row - 1][col] && qrCode.modules[row - 2][col] && qrCode.modules[row - 3][col] && qrCode.modules[row - 4][col]) { + lostPoint += 40; + } + } + } + } + //level 1 评价 + if (head ^ current) { + sameCount++; + } else { + head = current; + if (sameCount >= 5) { + lostPoint += (3 + sameCount - 5); + } + sameCount = 1; + } + } + } + // LEVEL4 + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + return lostPoint; + } + + }; + //--------------------------------------------------------------------- + // QRMath使用的数学工具 + //--------------------------------------------------------------------- + var QRMath = { + /* + 将n转化为a^m + */ + glog: function (n) { + if (n < 1) { + throw new Error("glog(" + n + ")"); + } + return QRMath.LOG_TABLE[n]; + }, + /* + 将a^m转化为n + */ + gexp: function (n) { + while (n < 0) { + n += 255; + } + while (n >= 256) { + n -= 255; + } + return QRMath.EXP_TABLE[n]; + }, + EXP_TABLE: new Array(256), + LOG_TABLE: new Array(256) + + }; + for (var i = 0; i < 8; i++) { + QRMath.EXP_TABLE[i] = 1 << i; + } + for (var i = 8; i < 256; i++) { + QRMath.EXP_TABLE[i] = QRMath.EXP_TABLE[i - 4] ^ QRMath.EXP_TABLE[i - 5] ^ QRMath.EXP_TABLE[i - 6] ^ QRMath.EXP_TABLE[i - 8]; + } + for (var i = 0; i < 255; i++) { + QRMath.LOG_TABLE[QRMath.EXP_TABLE[i]] = i; + } + //--------------------------------------------------------------------- + // QRPolynomial 多项式 + //--------------------------------------------------------------------- + /** + * 多项式类 + * @param {Array} num 系数 + * @param {num} shift a^shift + */ + function QRPolynomial(num, shift) { + if (num.length == undefined) { + throw new Error(num.length + "/" + shift); + } + var offset = 0; + while (offset < num.length && num[offset] == 0) { + offset++; + } + this.num = new Array(num.length - offset + shift); + for (var i = 0; i < num.length - offset; i++) { + this.num[i] = num[i + offset]; + } + } + QRPolynomial.prototype = { + get: function (index) { + return this.num[index]; + }, + getLength: function () { + return this.num.length; + }, + /** + * 多项式乘法 + * @param {QRPolynomial} e 被乘多项式 + * @return {[type]} [description] + */ + multiply: function (e) { + var num = new Array(this.getLength() + e.getLength() - 1); + for (var i = 0; i < this.getLength(); i++) { + for (var j = 0; j < e.getLength(); j++) { + num[i + j] ^= QRMath.gexp(QRMath.glog(this.get(i)) + QRMath.glog(e.get(j))); + } + } + return new QRPolynomial(num, 0); + }, + /** + * 多项式模运算 + * @param {QRPolynomial} e 模多项式 + * @return {} + */ + mod: function (e) { + var tl = this.getLength(), + el = e.getLength(); + if (tl - el < 0) { + return this; + } + var num = new Array(tl); + for (var i = 0; i < tl; i++) { + num[i] = this.get(i); + } + while (num.length >= el) { + var ratio = QRMath.glog(num[0]) - QRMath.glog(e.get(0)); + + for (var i = 0; i < e.getLength(); i++) { + num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); + } + while (num[0] == 0) { + num.shift(); + } + } + return new QRPolynomial(num, 0); + } + }; + + //--------------------------------------------------------------------- + // RS_BLOCK_TABLE + //--------------------------------------------------------------------- + /* + 二维码各个版本信息[块数, 每块中的数据块数, 每块中的信息块数] + */ + var RS_BLOCK_TABLE = [ + // L + // M + // Q + // H + // 1 + [1, 26, 19], + [1, 26, 16], + [1, 26, 13], + [1, 26, 9], + + // 2 + [1, 44, 34], + [1, 44, 28], + [1, 44, 22], + [1, 44, 16], + + // 3 + [1, 70, 55], + [1, 70, 44], + [2, 35, 17], + [2, 35, 13], + + // 4 + [1, 100, 80], + [2, 50, 32], + [2, 50, 24], + [4, 25, 9], + + // 5 + [1, 134, 108], + [2, 67, 43], + [2, 33, 15, 2, 34, 16], + [2, 33, 11, 2, 34, 12], + + // 6 + [2, 86, 68], + [4, 43, 27], + [4, 43, 19], + [4, 43, 15], + + // 7 + [2, 98, 78], + [4, 49, 31], + [2, 32, 14, 4, 33, 15], + [4, 39, 13, 1, 40, 14], + + // 8 + [2, 121, 97], + [2, 60, 38, 2, 61, 39], + [4, 40, 18, 2, 41, 19], + [4, 40, 14, 2, 41, 15], + + // 9 + [2, 146, 116], + [3, 58, 36, 2, 59, 37], + [4, 36, 16, 4, 37, 17], + [4, 36, 12, 4, 37, 13], + + // 10 + [2, 86, 68, 2, 87, 69], + [4, 69, 43, 1, 70, 44], + [6, 43, 19, 2, 44, 20], + [6, 43, 15, 2, 44, 16], + + // 11 + [4, 101, 81], + [1, 80, 50, 4, 81, 51], + [4, 50, 22, 4, 51, 23], + [3, 36, 12, 8, 37, 13], + + // 12 + [2, 116, 92, 2, 117, 93], + [6, 58, 36, 2, 59, 37], + [4, 46, 20, 6, 47, 21], + [7, 42, 14, 4, 43, 15], + + // 13 + [4, 133, 107], + [8, 59, 37, 1, 60, 38], + [8, 44, 20, 4, 45, 21], + [12, 33, 11, 4, 34, 12], + + // 14 + [3, 145, 115, 1, 146, 116], + [4, 64, 40, 5, 65, 41], + [11, 36, 16, 5, 37, 17], + [11, 36, 12, 5, 37, 13], + + // 15 + [5, 109, 87, 1, 110, 88], + [5, 65, 41, 5, 66, 42], + [5, 54, 24, 7, 55, 25], + [11, 36, 12], + + // 16 + [5, 122, 98, 1, 123, 99], + [7, 73, 45, 3, 74, 46], + [15, 43, 19, 2, 44, 20], + [3, 45, 15, 13, 46, 16], + + // 17 + [1, 135, 107, 5, 136, 108], + [10, 74, 46, 1, 75, 47], + [1, 50, 22, 15, 51, 23], + [2, 42, 14, 17, 43, 15], + + // 18 + [5, 150, 120, 1, 151, 121], + [9, 69, 43, 4, 70, 44], + [17, 50, 22, 1, 51, 23], + [2, 42, 14, 19, 43, 15], + + // 19 + [3, 141, 113, 4, 142, 114], + [3, 70, 44, 11, 71, 45], + [17, 47, 21, 4, 48, 22], + [9, 39, 13, 16, 40, 14], + + // 20 + [3, 135, 107, 5, 136, 108], + [3, 67, 41, 13, 68, 42], + [15, 54, 24, 5, 55, 25], + [15, 43, 15, 10, 44, 16], + + // 21 + [4, 144, 116, 4, 145, 117], + [17, 68, 42], + [17, 50, 22, 6, 51, 23], + [19, 46, 16, 6, 47, 17], + + // 22 + [2, 139, 111, 7, 140, 112], + [17, 74, 46], + [7, 54, 24, 16, 55, 25], + [34, 37, 13], + + // 23 + [4, 151, 121, 5, 152, 122], + [4, 75, 47, 14, 76, 48], + [11, 54, 24, 14, 55, 25], + [16, 45, 15, 14, 46, 16], + + // 24 + [6, 147, 117, 4, 148, 118], + [6, 73, 45, 14, 74, 46], + [11, 54, 24, 16, 55, 25], + [30, 46, 16, 2, 47, 17], + + // 25 + [8, 132, 106, 4, 133, 107], + [8, 75, 47, 13, 76, 48], + [7, 54, 24, 22, 55, 25], + [22, 45, 15, 13, 46, 16], + + // 26 + [10, 142, 114, 2, 143, 115], + [19, 74, 46, 4, 75, 47], + [28, 50, 22, 6, 51, 23], + [33, 46, 16, 4, 47, 17], + + // 27 + [8, 152, 122, 4, 153, 123], + [22, 73, 45, 3, 74, 46], + [8, 53, 23, 26, 54, 24], + [12, 45, 15, 28, 46, 16], + + // 28 + [3, 147, 117, 10, 148, 118], + [3, 73, 45, 23, 74, 46], + [4, 54, 24, 31, 55, 25], + [11, 45, 15, 31, 46, 16], + + // 29 + [7, 146, 116, 7, 147, 117], + [21, 73, 45, 7, 74, 46], + [1, 53, 23, 37, 54, 24], + [19, 45, 15, 26, 46, 16], + + // 30 + [5, 145, 115, 10, 146, 116], + [19, 75, 47, 10, 76, 48], + [15, 54, 24, 25, 55, 25], + [23, 45, 15, 25, 46, 16], + + // 31 + [13, 145, 115, 3, 146, 116], + [2, 74, 46, 29, 75, 47], + [42, 54, 24, 1, 55, 25], + [23, 45, 15, 28, 46, 16], + + // 32 + [17, 145, 115], + [10, 74, 46, 23, 75, 47], + [10, 54, 24, 35, 55, 25], + [19, 45, 15, 35, 46, 16], + + // 33 + [17, 145, 115, 1, 146, 116], + [14, 74, 46, 21, 75, 47], + [29, 54, 24, 19, 55, 25], + [11, 45, 15, 46, 46, 16], + + // 34 + [13, 145, 115, 6, 146, 116], + [14, 74, 46, 23, 75, 47], + [44, 54, 24, 7, 55, 25], + [59, 46, 16, 1, 47, 17], + + // 35 + [12, 151, 121, 7, 152, 122], + [12, 75, 47, 26, 76, 48], + [39, 54, 24, 14, 55, 25], + [22, 45, 15, 41, 46, 16], + + // 36 + [6, 151, 121, 14, 152, 122], + [6, 75, 47, 34, 76, 48], + [46, 54, 24, 10, 55, 25], + [2, 45, 15, 64, 46, 16], + + // 37 + [17, 152, 122, 4, 153, 123], + [29, 74, 46, 14, 75, 47], + [49, 54, 24, 10, 55, 25], + [24, 45, 15, 46, 46, 16], + + // 38 + [4, 152, 122, 18, 153, 123], + [13, 74, 46, 32, 75, 47], + [48, 54, 24, 14, 55, 25], + [42, 45, 15, 32, 46, 16], + + // 39 + [20, 147, 117, 4, 148, 118], + [40, 75, 47, 7, 76, 48], + [43, 54, 24, 22, 55, 25], + [10, 45, 15, 67, 46, 16], + + // 40 + [19, 148, 118, 6, 149, 119], + [18, 75, 47, 31, 76, 48], + [34, 54, 24, 34, 55, 25], + [20, 45, 15, 61, 46, 16] + ]; + + /** + * 根据数据获取对应版本 + * @return {[type]} [description] + */ + QRCodeAlg.prototype.getRightType = function () { + for (var typeNumber = 1; typeNumber < 41; typeNumber++) { + var rsBlock = RS_BLOCK_TABLE[(typeNumber - 1) * 4 + this.errorCorrectLevel]; + if (rsBlock == undefined) { + throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + this.errorCorrectLevel); + } + var length = rsBlock.length / 3; + var totalDataCount = 0; + for (var i = 0; i < length; i++) { + var count = rsBlock[i * 3 + 0]; + var dataCount = rsBlock[i * 3 + 2]; + totalDataCount += dataCount * count; + } + var lengthBytes = typeNumber > 9 ? 2 : 1; + if (this.utf8bytes.length + lengthBytes < totalDataCount || typeNumber == 40) { + this.typeNumber = typeNumber; + this.rsBlock = rsBlock; + this.totalDataCount = totalDataCount; + break; + } + } + }; + + //--------------------------------------------------------------------- + // QRBitBuffer + //--------------------------------------------------------------------- + function QRBitBuffer() { + this.buffer = new Array(); + this.length = 0; + } + QRBitBuffer.prototype = { + get: function (index) { + var bufIndex = Math.floor(index / 8); + return ((this.buffer[bufIndex] >>> (7 - index % 8)) & 1); + }, + put: function (num, length) { + for (var i = 0; i < length; i++) { + this.putBit(((num >>> (length - i - 1)) & 1)); + } + }, + putBit: function (bit) { + var bufIndex = Math.floor(this.length / 8); + if (this.buffer.length <= bufIndex) { + this.buffer.push(0); + } + if (bit) { + this.buffer[bufIndex] |= (0x80 >>> (this.length % 8)); + } + this.length++; + } + }; + + + + // xzedit + let qrcodeAlgObjCache = []; + /** + * 二维码构造函数,主要用于绘制 + * @param {参数列表} opt 传递参数 + * @return {} + */ + QRCode = function (opt) { + //设置默认参数 + this.options = { + text: '', + size: 256, + correctLevel: 3, + background: '#ffffff', + foreground: '#000000', + pdground: '#000000', + image: '', + imageSize: 30, + canvasId: opt.canvasId, + context: opt.context, + usingComponents: opt.usingComponents, + showLoading: opt.showLoading, + loadingText: opt.loadingText, + }; + if (typeof opt === 'string') { // 只编码ASCII字符串 + opt = { + text: opt + }; + } + if (opt) { + for (var i in opt) { + this.options[i] = opt[i]; + } + } + //使用QRCodeAlg创建二维码结构 + var qrCodeAlg = null; + for (var i = 0, l = qrcodeAlgObjCache.length; i < l; i++) { + if (qrcodeAlgObjCache[i].text == this.options.text && qrcodeAlgObjCache[i].text.correctLevel == this.options.correctLevel) { + qrCodeAlg = qrcodeAlgObjCache[i].obj; + break; + } + } + if (i == l) { + qrCodeAlg = new QRCodeAlg(this.options.text, this.options.correctLevel); + qrcodeAlgObjCache.push({ + text: this.options.text, + correctLevel: this.options.correctLevel, + obj: qrCodeAlg + }); + } + /** + * 计算矩阵点的前景色 + * @param {Obj} config + * @param {Number} config.row 点x坐标 + * @param {Number} config.col 点y坐标 + * @param {Number} config.count 矩阵大小 + * @param {Number} config.options 组件的options + * @return {String} + */ + let getForeGround = function (config) { + var options = config.options; + if (options.pdground && ( + (config.row > 1 && config.row < 5 && config.col > 1 && config.col < 5) || + (config.row > (config.count - 6) && config.row < (config.count - 2) && config.col > 1 && config.col < 5) || + (config.row > 1 && config.row < 5 && config.col > (config.count - 6) && config.col < (config.count - 2)) + )) { + return options.pdground; + } + return options.foreground; + } + // 创建canvas + let createCanvas = function (options) { + if (options.showLoading) { + uni.showLoading({ + title: options.loadingText, + mask: true + }); + } + var ctx = uni.createCanvasContext(options.canvasId, options.context); + var count = qrCodeAlg.getModuleCount(); + var ratioSize = options.size; + var ratioImgSize = options.imageSize; + //计算每个点的长宽 + var tileW = (ratioSize / count).toPrecision(4); + var tileH = (ratioSize / count).toPrecision(4); + //绘制 + for (var row = 0; row < count; row++) { + for (var col = 0; col < count; col++) { + var w = (Math.ceil((col + 1) * tileW) - Math.floor(col * tileW)); + var h = (Math.ceil((row + 1) * tileW) - Math.floor(row * tileW)); + var foreground = getForeGround({ + row: row, + col: col, + count: count, + options: options + }); + ctx.setFillStyle(qrCodeAlg.modules[row][col] ? foreground : options.background); + ctx.fillRect(Math.round(col * tileW), Math.round(row * tileH), w, h); + } + } + if (options.image) { + var x = Number(((ratioSize - ratioImgSize) / 2).toFixed(2)); + var y = Number(((ratioSize - ratioImgSize) / 2).toFixed(2)); + drawRoundedRect(ctx, x, y, ratioImgSize, ratioImgSize, 2, 6, true, true) + ctx.drawImage(options.image, x, y, ratioImgSize, ratioImgSize); + // 画圆角矩形 + function drawRoundedRect(ctxi, x, y, width, height, r, lineWidth, fill, stroke) { + ctxi.setLineWidth(lineWidth); + ctxi.setFillStyle(options.background); + ctxi.setStrokeStyle(options.background); + ctxi.beginPath(); // draw top and top right corner + ctxi.moveTo(x + r, y); + ctxi.arcTo(x + width, y, x + width, y + r, r); // draw right side and bottom right corner + ctxi.arcTo(x + width, y + height, x + width - r, y + height, r); // draw bottom and bottom left corner + ctxi.arcTo(x, y + height, x, y + height - r, r); // draw left and top left corner + ctxi.arcTo(x, y, x + r, y, r); + ctxi.closePath(); + if (fill) { + ctxi.fill(); + } + if (stroke) { + ctxi.stroke(); + } + } + } + setTimeout(() => { + ctx.draw(true, () => { + // 保存到临时区域 + setTimeout(() => { + uni.canvasToTempFilePath({ + width: options.width, + height: options.height, + destWidth: options.width, + destHeight: options.height, + canvasId: options.canvasId, + quality: Number(1), + success: function (res) { + if (options.cbResult) { + options.cbResult(res.tempFilePath) + } + }, + fail: function (res) { + if (options.cbResult) { + options.cbResult(res) + } + }, + complete: function () { + if (options.showLoading){ + uni.hideLoading(); + } + }, + }, options.context); + }, options.text.length + 100); + }); + }, options.usingComponents ? 0 : 150); + } + createCanvas(this.options); + // 空判定 + let empty = function (v) { + let tp = typeof v, + rt = false; + if (tp == "number" && String(v) == "") { + rt = true + } else if (tp == "undefined") { + rt = true + } else if (tp == "object") { + if (JSON.stringify(v) == "{}" || JSON.stringify(v) == "[]" || v == null) rt = true + } else if (tp == "string") { + if (v == "" || v == "undefined" || v == "null" || v == "{}" || v == "[]") rt = true + } else if (tp == "function") { + rt = false + } + return rt + } + }; + QRCode.prototype.clear = function (fn) { + var ctx = uni.createCanvasContext(this.options.canvasId, this.options.context) + ctx.clearRect(0, 0, this.options.size, this.options.size) + ctx.draw(false, () => { + if (fn) { + fn() + } + }) + }; +})() + +export default QRCode \ No newline at end of file diff --git a/components/tki-qrcode/tki-qrcode.vue b/components/tki-qrcode/tki-qrcode.vue new file mode 100644 index 0000000..2eee5fc --- /dev/null +++ b/components/tki-qrcode/tki-qrcode.vue @@ -0,0 +1,211 @@ + + + + diff --git a/main.js b/main.js index ca6205d..308c743 100644 --- a/main.js +++ b/main.js @@ -1,6 +1,8 @@ import App from './App' import messages from './locale/index' import uviewPlus from '@/uni_modules/uview-plus' +import VueClipboard from 'vue-clipboard2' + let i18nConfig = { locale: uni.getLocale(), messages @@ -12,6 +14,7 @@ import VueI18n from 'vue-i18n' import '@/uni_modules/uview-plus/theme.scss' // 引入uView的样式 +Vue.use(VueClipboard); Vue.use(VueI18n) const i18n = new VueI18n(i18nConfig) Vue.config.productionTip = false @@ -29,6 +32,7 @@ import { createI18n } from 'vue-i18n' const i18n = createI18n(i18nConfig) export function createApp() { const app = createSSRApp(App) + app.use(VueClipboard); app.use(i18n) app.use(uviewPlus) return { diff --git a/manifest.json b/manifest.json index 549093d..7d54ad5 100644 --- a/manifest.json +++ b/manifest.json @@ -24,7 +24,8 @@ "modules" : { "Payment" : {}, "Camera" : {}, - "OAuth" : {} + "OAuth" : {}, + "Share" : {} }, /* 应用发布信息 */ "distribute" : { @@ -84,7 +85,12 @@ "UniversalLinks" : "https://app.tbmall.xin/uni-universallinks/__UNI__4910728/" } }, - "share" : {} + "share" : { + "weixin" : { + "appid" : "wx7a5902cd556d9396", + "UniversalLinks" : "https://app.tbmall.xin/uni-universallinks/__UNI__4910728/" + } + } }, "icons" : { "android" : { diff --git a/package-lock.json b/package-lock.json index 2b1f31c..69da87d 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,50 +1,199 @@ { - "name": "tb", - "version": "1.0.2", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "crypto-js": { - "version": "4.2.0", - "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", - "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" - }, - "dayjs": { - "version": "1.11.13", - "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", - "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" - }, - "decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==" - }, - "echarts": { - "version": "5.6.0", - "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz", - "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", - "requires": { - "tslib": "2.3.0", - "zrender": "5.6.1" - } - }, - "tabber-component": { - "version": "1.0.0", - "resolved": "https://registry.npmmirror.com/tabber-component/-/tabber-component-1.0.0.tgz", - "integrity": "sha512-tL1cMqSlus8DtxY/VGY2qZoe3wV/D/QcL6YVO7FZhXARmmNt5ztGmm0474pZ7UgNb7j2aPv29PLERH0s1xQW8w==" - }, - "tslib": { - "version": "2.3.0", - "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", - "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" - }, - "zrender": { - "version": "5.6.1", - "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz", - "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", - "requires": { - "tslib": "2.3.0" - } - } + "name": "tb", + "version": "1.0.2", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "tb", + "version": "1.0.2", + "dependencies": { + "crypto-js": "^4.2.0", + "dayjs": "^1.11.13", + "decimal.js": "^10.6.0", + "echarts": "^5.1.2", + "qs-canvas": "^1.0.11", + "tabber-component": "^1.0.0", + "vue-clipboard2": "^0.3.3" + } + }, + "node_modules/clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==" + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "node_modules/echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "dependencies": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/qs-canvas": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/qs-canvas/-/qs-canvas-1.0.11.tgz", + "integrity": "sha512-WJwLwrAA1++ZqT6eR2F4Qa42yowybDUtQ2TDPtDOwhD1i4DzEOotug5N20cDkHat9l69ThOWoxV4qJbLKAjkNg==" + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "node_modules/tabber-component": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/tabber-component/-/tabber-component-1.0.0.tgz", + "integrity": "sha512-tL1cMqSlus8DtxY/VGY2qZoe3wV/D/QcL6YVO7FZhXARmmNt5ztGmm0474pZ7UgNb7j2aPv29PLERH0s1xQW8w==" + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "node_modules/vue-clipboard2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz", + "integrity": "sha512-aNWXIL2DKgJyY/1OOeITwAQz1fHaCIGvUFHf9h8UcoQBG5a74MkdhS/xqoYe7DNZdQmZRL+TAdIbtUs9OyVjbw==", + "dependencies": { + "clipboard": "^2.0.0" + } + }, + "node_modules/zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "dependencies": { + "tslib": "2.3.0" + } } + }, + "dependencies": { + "clipboard": { + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/clipboard/-/clipboard-2.0.11.tgz", + "integrity": "sha512-C+0bbOqkezLIsmWSvlsXS0Q0bmkugu7jcfMIACB+RDEntIzQIkdr148we28AfSloQLRdZlYL/QYyrq05j/3Faw==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "crypto-js": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/crypto-js/-/crypto-js-4.2.0.tgz", + "integrity": "sha512-KALDyEYgpY+Rlob/iriUtjV6d5Eq+Y191A5g4UqLAi8CyGP9N1+FdVbkc1SxKc2r4YAYqG8JzO2KGL+AizD70Q==" + }, + "dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, + "decimal.js": { + "version": "10.6.0", + "resolved": "https://registry.npmmirror.com/decimal.js/-/decimal.js-10.6.0.tgz", + "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==" + }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "echarts": { + "version": "5.6.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-5.6.0.tgz", + "integrity": "sha512-oTbVTsXfKuEhxftHqL5xprgLoc0k7uScAwtryCgWF6hPYFLRwOUHiFmHGCBKP5NPFNkDVopOieyUqYGH8Fa3kA==", + "requires": { + "tslib": "2.3.0", + "zrender": "5.6.1" + } + }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "requires": { + "delegate": "^3.1.2" + } + }, + "qs-canvas": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/qs-canvas/-/qs-canvas-1.0.11.tgz", + "integrity": "sha512-WJwLwrAA1++ZqT6eR2F4Qa42yowybDUtQ2TDPtDOwhD1i4DzEOotug5N20cDkHat9l69ThOWoxV4qJbLKAjkNg==" + }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "tabber-component": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/tabber-component/-/tabber-component-1.0.0.tgz", + "integrity": "sha512-tL1cMqSlus8DtxY/VGY2qZoe3wV/D/QcL6YVO7FZhXARmmNt5ztGmm0474pZ7UgNb7j2aPv29PLERH0s1xQW8w==" + }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "tslib": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.3.0.tgz", + "integrity": "sha512-N82ooyxVNm6h1riLCoyS9e3fuJ3AMG2zIZs2Gd1ATcSFjSA23Q0fzjjZeh0jbJvWVDZ0cJT8yaNNaaXHzueNjg==" + }, + "vue-clipboard2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/vue-clipboard2/-/vue-clipboard2-0.3.3.tgz", + "integrity": "sha512-aNWXIL2DKgJyY/1OOeITwAQz1fHaCIGvUFHf9h8UcoQBG5a74MkdhS/xqoYe7DNZdQmZRL+TAdIbtUs9OyVjbw==", + "requires": { + "clipboard": "^2.0.0" + } + }, + "zrender": { + "version": "5.6.1", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-5.6.1.tgz", + "integrity": "sha512-OFXkDJKcrlx5su2XbzJvj/34Q3m6PvyCZkVPHGYpcCJ52ek4U/ymZyfuV1nKE23AyBJ51E/6Yr0mhZ7xGTO4ag==", + "requires": { + "tslib": "2.3.0" + } + } + } } diff --git a/package.json b/package.json index f094d14..6d90606 100644 --- a/package.json +++ b/package.json @@ -77,6 +77,8 @@ "dayjs": "^1.11.13", "decimal.js": "^10.6.0", "echarts": "^5.1.2", - "tabber-component": "^1.0.0" + "qs-canvas": "^1.0.11", + "tabber-component": "^1.0.0", + "vue-clipboard2": "^0.3.3" } } diff --git a/pages/home/home.vue b/pages/home/home.vue index cb8e6bb..be28eef 100644 --- a/pages/home/home.vue +++ b/pages/home/home.vue @@ -201,10 +201,12 @@ + @@ -1300,4 +1638,16 @@ export default { } } } +.hideCanvasView{ + width:100%; + height:100%; + position: fixed; + top:10000; + left:10000; + z-index: 1000000000000; + // background-color: rgba(0,0,0,0.2); + display: flex; + align-items: center; + justify-content: center; +} diff --git a/static/new/di.png b/static/new/di.png new file mode 100644 index 0000000000000000000000000000000000000000..937aaf7d7cd81325eeb603d4649b77ebcd175383 GIT binary patch literal 16448 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 ag*9?ix02bX`Z>cVEJr&R+ms2yjsF9m$&t7K literal 0 HcmV?d00001 diff --git a/static/new/logo.png b/static/new/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..399ad56c9b8f519ee33af46159778b06a0a6ed88 GIT binary patch literal 15204 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 tKj6{#V@3A;y;pHAvg99~|w%vY9 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 literal 0 HcmV?d00001 diff --git a/static/new/share_1.png b/static/new/share_1.png new file mode 100644 index 0000000000000000000000000000000000000000..2a46758e3e0c5fce9c20904518fdb9f92a908e75 GIT binary patch literal 5170 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 literal 0 HcmV?d00001 diff --git a/static/new/share_2.png b/static/new/share_2.png new file mode 100644 index 0000000000000000000000000000000000000000..5ac6c4a749cc73f656d11f34eeb6b41ef71e16a9 GIT binary patch literal 7289 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 T+M@2t00000NkvXXu0mjfYGdg# literal 0 HcmV?d00001 diff --git a/static/new/share_3.png b/static/new/share_3.png new file mode 100644 index 0000000000000000000000000000000000000000..2cf5ec89a990121064fa78a455ed3e90f056ef13 GIT binary patch literal 6389 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 D+Qc)9 literal 0 HcmV?d00001 diff --git a/static/new/share_4.png b/static/new/share_4.png new file mode 100644 index 0000000000000000000000000000000000000000..4419e85740dc1bbe41688a9628f3a9b6e5943837 GIT binary patch literal 6468 zcmV-K8N23*P)`3yAN1cer5a20gK8r2QDhV zI$&|R`@qHJ=7XGLd!cdWTRit5U*jb_f@ZXUyDu(V&0SO$%v)5>cfo$V)kqJ{n$XoQ zz=g({DmvPBZWQgI(2gN(VIS-mrR-sSuKlA!UrKl!WV_$_c z%yWUyR+OcyLk}E$arwN9`VP-$k~U>y@lA65y)GzQ%=^!B#@vOvV>HrrKFR5lUTO5* zTIEF)E}~Pq(V9BuJ5Cw$fD#JN>*6pMN+M>6HHuCjMY-;fi*<*KdB$GfC|g+HBz>b7 zkcX)YclOph>u!ZU=L7CJb?4R`np7iDnqMmEv>-F%1?E^uq;5thOp)Ofv++{2=cts= z?f7K5`;d#v*_-0wy-^G3=d~04Fum0$J>Q4f&6w8P;aY&hb7=hV0Bn4TlJMXTN0m7s ztB83Ka8q{}P-ZbY$AVLK^SbBz8UNO|eXX3Rjo3Cy0ry>8=J+}8GVg1dv4^q7?z330 zqm2({--q;peZb_A+?1fv>0v>Rbh%yO>^lxOb4+f;rHEok@-%k|B6;)+(L`Bx=*8u- z!@Os0g!ZBf=!ffjHk;7R-ss8e+K=NI=FB~}65>ZWCJV_g2KH@Kq-4b-0ed!F!%UOK zE9P>J(FM)JP;I5-Vb^gN_+-s0H^2Ro@*XQMs=wd@`mWpDZ%01son7J`Y-ddCxnHYT z=h1!UqDnN`nubywW=63S=1MU5?D7SSFp8xxOx+_wom12`Y*+$Th-31XVj^wl;3aSW zTKOzz(F<%ZsDN);T(;kAwXRjsSzb4cX?>dLXLN5^@nUS%myi?TTCL#{tQus%1#ZdAV3kiSUiIHwN>~fz`>)+P9 zfZTcV$1X26XZq!X4fJxDMKGGU$5_+{@T;V1JRFz8KgE!nt>ZOpU%jr@!UQ;y#%@gI*H2Hbg){Z5}` zMYL`XOwN&;^Rjnw*0fk-X2cA$?93my%0vt9jqbbUW@Q;?*YmXJE#PKFfA6bKd%{Y#Yw^+XOSH|}dR5L1$gyiv445qeQ@?SwMz`h* zMsBev!YpK~Y^Juwpcm^_+y%P9fnwA?Hb0a4EHWJK{Vs|+fJOH{hX_8l;-g1hw(d9E zYb~H}-#NbW7k#1rnvk$)O%Z`fbgUgL#GMrp8S4gku^t9Wkuq*8T6lnCCB_Iww32?_ zrBZSt5Y|!OTAsvIpxQEjz%ypiy{esQKJkQ#rSiphEiH4pjOpWA3+U%PzOdYmDZYvT zhk$gP2%9bt%V89;FhY3XfWTDv-TV+ale*`qh%W{Y+(|lfuD`-LBJ}kWr0<^+y8b<( z%Z?9y=Ix==_6_axs*t*_*6bps8-bTJhoP4|2le@KLjtCnGF{fUo0urng77q~v4DK5 z;tQQbwl82)3@IWMa?7EZC$RvxaonRK(2FTn>WUSLFhmOmg@0yw2k+Z6bjh)yfAUwL zzyEq^{~e|6x0GguGSId-sm{!0YR_hGs@6j@HbADqhi|&{jqL4)?I8L72$We-pQA`Iq zP1!mgI{Y`Ke>p0nOj+;YAV1_ke`ILydJV1(xBwQg6)ZppV|?I10Xbj_-(%Y? zbq4wnV+G`Ec%S#&VS+z!+YRrd7Q`&7BJ*~)VL@2y?*?D28kFW~J@741MBYY4cf@H&WlufARR6gF~B-BroeB zyF!z#=O*rJj4>CqS;IWIC+)WCIZ>mQA}`r^3IFlOcVAI=5nG3t$X(P~3;n~g*a=0B z9{OGsfoiMpj}i8$-IqRB??d--AffxTH_{K6=J^+EEQ0tdLcWk^M@+fSZ@b`^DSIBbENdlNUqCw_YFFtB zWF-sXm7xZDyXYi$ynhif_cC1$T=t9_KiMx${taqVwQV<7zP;i4-5y}7dr-Eaj*!Jm zqRdlmeV&PXAA|d3u2q+q1>~)Z&-nguTBOccde7hUC;|;g;U8r)3so;{L6OYlHkhK3 zwRdgs*Ok7=2KJ*~Ew7|(tPj%h5Jv0p7E9g&w)i&ULOqvom2IT=wYM}Qgq@4tW%~-l zy*Sa}>Yg1D_M_@DFXB$MEMO-)cVrR|@GizYiSaet7VWr|HhFvV4$@|Rf$G-pmScU; zc~ZuzP>pDCAP?l&Amb*|@!nFFTj}jI%l3ZQuxe0Rt5!!^HU&Ntc=sM5 zJ}$Pkaw~SQi5ygStG*%QP!0eGO>aD77Dp4>CksdbWZ~*%;hE?nBqzaKj(e^soCkZ1 z9Wt+*lsb9b+JE?lE?8C{EK6rtvCZK+7@TmAl<9`aZZl0w5F^qw2UuSP!eRm0NNKgH5Q{EvRdy zGcURK^}6$xW(>ks!fFG=5~-GO!Ww##(w)MGa{Edx5Jhe1ksN+(T{Z6@!)F62a_ zQiN^3F}BTzuQf^GAJIa}6x*o}dASke6Tx2`lnGX5zJJo+5w`b){Vq({n@zu=#<9c* zBsam@C@ll9(3z5VU>CGV&$}?A+)a_Oa3GSIP|Q&EB5i2Av5BqyZ8P6G^YzkrbmqL@ z+*TcM1)U>1@}Hl!7`y9;YkgOrSU z=zGSPX5~-b9NK;GHM^ykr1KX(zDBFR_uKup;j| z6N(hhj><6|hshDSbqXV}AU4pr6#n8sI`Or7*|ZPs6MB{ZOv;8P_lYO(R$X(zz2hEx zZsIP^XjyPL{>G49!Y>Q($E#EK z@}35}3G>{eiMxQM>^(PePmN(J_n$yk_zsL;65!z6fi1DWI6*|;<4}N09I!H4H(&X% z9e#`=_vL`2cbB%9)$OG18;`wX0UYF+Ox%%i6X|&9=a=%}$dTpNvWK03WrpmjZ>d)= zV$z#r%KT$~D>Mk}<5&wcIQqHH(_u2Xkw)0 z`S5c#Nx*^ZmRh1xN63f-1!@h)*vFqioAh$Cdv6!HZ}t@)fKB$Py!TDq`<%uRVwRSV zRz0Je6fqGBv>xfXYVK1a>ivv4F|Cw3x3mWB{wD{{4AWmeHNIfJ9~??;@3u`IP_=Ur z8|s}O6RV!pO`{)uFdlO7mdS^&WMA3x!=zaiFu;nqxay;|Y3PqX%h=(Tho!&#ucC>X z*QqlzKJlFNXEzr8-=K)>jlJgHP29&e(|qEf1)Gi!&)BHkvTQ*-G(uG9J6M9UBR7(O zX)0X|Pw9(h(H)k6-}z`#J^YOHssAau_X+9y56pZ8zkW~ABP*r9yQyg9>TXYWKkj|7 zNxRjUDbLgVc4pPqbll`Q$badLtXUQ?CUk8mq-;gQi$rSO60l&1000Q>NklI2gd!dr zJ)vvlmIeI5squ6PU2I=+axkcC(HSAZfoe<6V6cfQliH|oh<)jHAK=MNU&Nn0Ty)jF zxhzX3@%B0{rNvim?5)!2F#=9@&lqmPwOZnu!LxvnDEi7|Vs}t{V$ANj1voIx*PfnR z7;?Kz#pFLhKD~NsG(#J8;B{|ze+!cfdpY<1`eWSA)Z(>7hmefq6T2|B!wtpE?E$ zus>Y(1mF#Q%tFR2xR0O5F}mY-Ejdo#gM+?+^6QF<&Kpjg%GH_!?&)DcI(6_O$m$WkJlO>6wuF6 zTk1;+-Ot5xQcdc)$<$a)Ns}?>;8dey=M2fH4-o}9sO@8=N3|LG&J z4aYqzN`8{yJ>0KXZuop=-1cj!?VG&-xnUDINY$t{d^mFf-1u2}%(XEY_Gty=EsZAP zth|Va!3D+^LI;RW!}QlpKL=^?ozgY;`u^{u>n2aFk}kQc=;Jp^6yTo)+^zHkk z=O)%Yw?+BrxX^FtfAGsrVJjW0BLc8njhXTc>3hhtscUvMia4vib?MY@oK`^O>rRO) zq_~`ks%?x9oBuG@cho8ugM&WdPYt*Ky66gj^!nQ$ z75%|AMZ9Nx+J$V_;12xE%|(Co?IJ9{kh>q3$l)3k_7Q*Tx%H8vi|;I1@J0T`wfR^O z-VjLc!LCP*?VEVh^=8PKsYh zaaz=u>|h5C(pZ5+bBr7tyaXKJWUM(Bpun{2)u|>mIKavIkP38AT@i<)0XTpsJh%%C zbvS7AlY7X#P?;5R+LEKgwXnE`zSaVg`<-{krC#yEycmK32c}}tgq^0DW>4Qk#%)uq zLvvdUOQ`Aagau+C{W@4qhTeeCbT}X;M1U|A*2w`aWT{cxxNzZo*T8ITeVqkl(gV-v z<9-Ra5#BD21#%$ubYPm?FItVOHY9+%_D!q1Mok=E0ttxL6P$4nTGRDYcPf@e(%Nsm z`OGzLERX5qEw(oMyal}N)OdFGv$4R%x{ZspMc4r7eFvvb!t4aYV$ZI zqCOX}hy&I1he(3n0&t`Cu}0yo*c_(&DLSzTO2LY!0A-h`IidjvrrD?R-ZydYbH=!xHLYveTl17k zF!r*KaXW+gH%=%H-;g^mFX&-|3+OrGIq}}7<48qZ5Pq+O=KWxLSeFoiCR^{CkYkfU zEJ(-0FlM*!V>wovj|I7A)zdepH$LUMC47d}kHwMe`<%zMhIl~*+@=x z^VTrD-~zU5xrmpJO3d@Vmxeb6h?!y%J%_T z-zP3RAwIo&6t62KKH@{%#leVSL2?tvpb5Ka8Q>X%Sg6Jo$Gv7i^E zo}z~b_eoJ*OATt`{?=C$dKD@<~ zv8xYvQbc^(pRI2W#YEJ^vzR9=rNs`r#$>{ + uni.showToast({ + icon:'none', + title:str, + mask:true, + duration:time + }) + },100) + + }else{ + uni.showToast({ + icon:'loading', + title:'请求中...', + mask:true, + duration:1000 + }) + } + }, debounce(func,wait = 1000,immediate = true){ // 清除定时器 if (timeout !== null) clearTimeout(timeout)