From ea610f725ada8e51fb5088b6bd071a43cbfb1777 Mon Sep 17 00:00:00 2001 From: wuhui_zzw <1760308791@qq.com> Date: Fri, 24 Feb 2023 11:33:45 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E6=96=87=E7=AB=A0?= =?UTF-8?q?=E6=8F=92=E4=BB=B6=E7=9B=B8=E5=85=B3=E5=86=85=E5=AE=B9=20?= =?UTF-8?q?=E6=B7=BB=E5=8A=A0=EF=BC=9A=E5=85=BC=E5=AE=B9vant2=E7=89=88?= =?UTF-8?q?=E6=9C=AC=E5=86=85=E5=AE=B9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .gitignore | 1 + common/js/checkUpdater.js | 124 ++ common/js/uni-copy.js | 42 + common/js/uqrcode.js | 1439 +++++++++++++++++ components/bind-mobile/bind-mobile.vue | 413 +++++ components/farm-goods-detail-view/detail.js | 451 ++++++ .../goods-detail-view.vue | 350 ++++ components/share-panel/share-panel.vue | 408 +++++ main.js | 4 + node_modules/jweixin-module/README.md | 4 +- node_modules/jweixin-module/out/index.js | 1 - node_modules/jweixin-module/package.json | 44 +- package-lock.json | 53 +- package.json | 6 + pages.json | 52 + pages_promotion/article/detail.vue | 530 ++++++ pages_promotion/article/list.vue | 728 +++++++++ .../article/public/img/dianzan.png | Bin 0 -> 3538 bytes .../article/public/img/fenxiang.png | Bin 0 -> 3752 bytes pages_promotion/article/public/img/liulan.png | Bin 0 -> 3868 bytes pages_promotion/article/record.vue | 243 +++ pages_promotion/fenxiao/apply_upgrade.vue | 68 + pages_promotion/fenxiao/index.vue | 76 +- pages_promotion/futures/list.vue | 68 + 24 files changed, 5038 insertions(+), 67 deletions(-) create mode 100644 common/js/checkUpdater.js create mode 100644 common/js/uni-copy.js create mode 100644 common/js/uqrcode.js create mode 100644 components/bind-mobile/bind-mobile.vue create mode 100644 components/farm-goods-detail-view/detail.js create mode 100644 components/farm-goods-detail-view/goods-detail-view.vue create mode 100644 components/share-panel/share-panel.vue delete mode 100644 node_modules/jweixin-module/out/index.js create mode 100644 package.json create mode 100644 pages_promotion/article/detail.vue create mode 100644 pages_promotion/article/list.vue create mode 100644 pages_promotion/article/public/img/dianzan.png create mode 100644 pages_promotion/article/public/img/fenxiang.png create mode 100644 pages_promotion/article/public/img/liulan.png create mode 100644 pages_promotion/article/record.vue create mode 100644 pages_promotion/fenxiao/apply_upgrade.vue create mode 100644 pages_promotion/futures/list.vue diff --git a/.gitignore b/.gitignore index 07fb17e..723898b 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,4 @@ /unpackage /.hbuilderx /.idea +/node_modules/ diff --git a/common/js/checkUpdater.js b/common/js/checkUpdater.js new file mode 100644 index 0000000..2ecab14 --- /dev/null +++ b/common/js/checkUpdater.js @@ -0,0 +1,124 @@ +import Config from './config.js'; +export function checkUpdater(currentId, updaterPage) { + uni.request({ + url: Config.baseUrl+'/api/version/id', + method: 'GET', + data: { + search: 'latestId' + }, + success: res => { + if (res.statusCode === 200) { + const response = res.data + const latestId = response.latest.id + const method = response.latest.method + if (!latestId) { + console.log('当前没有发行版本') + } else if (currentId != latestId && method === 'force') { + console.log('确认强制更新,正在取得地址') + // 如果需要背地(静默)热更新,获取下载地址 + uni.request({ + url: Config.baseUrl+'/api/version/info', + method: 'GET', + data: { + search: 'latestInfo' + }, + success: (res) => { + if (res.statusCode === 200) { + console.log('地址请求成功') + const response = res.data + const iosLink = response.latest.info.iosLink + const androidLink = response.latest.info.androidLink + let downloadLink = '' + let ready = false + // 判断系统类型 + if (plus.os.name.toLowerCase() === 'android') { + console.log('安卓系统') + if (androidLink && androidLink !== '#') { // 我这里默认#也是没有地址,请根据业务自行修改 + console.log('发现下载地址') + // 安卓:创建下载任务 + if (androidLink.match(RegExp(/.wgt/))) { + console.log('确认wgt热更新包') + downloadLink = androidLink + ready = true + } else { + console.log('安卓推荐.wgt强制更新,.apk的强制更新请您自行修改程序') + } + } else { + console.log('下载地址是空的,无法继续') + } + } else { + console.log('苹果系统') + if (iosLink && iosLink !== '#') { // 我这里默认#也是没有地址,请根据业务自行修改 + console.log('发现下载地址') + // 苹果(A):进行热更新(如果iosLink是wgt更新包的下载地址)判断文件名中是否含有.wgt + if (iosLink.match(RegExp(/.wgt/))) { + console.log('确认wgt热更新包') + downloadLink = iosLink + ready = true + } else { + console.log('苹果只支持.wgt强制更新') + } + } else { + console.log('下载地址是空的,无法继续') + } + } + if (ready) { + console.log('任务开始') + let downloadTask = uni.downloadFile({ + url: downloadLink, + success: (res) => { + if (res.statusCode === 200) { + // 保存下载的安装包 + console.log('保存安装包') + uni.saveFile({ + tempFilePath: res.tempFilePath, + success: (res) => { + const packgePath = res.savedFilePath + // 保存更新记录到stroage,下次启动app时安装更新 + uni.setStorage({ + key: 'updated', + data: { + completed: false, + packgePath: packgePath + }, + success: () => { + console.log('成功保存记录') + } + }) + // 任务完成,关闭下载任务 + console.log('任务完成,关闭下载任务,下一次启动应用时将安装更新') + downloadTask.abort() + downloadTask = null + } + }) + } + } + }) + } else { + console.log('下载地址未准备,无法开启下载任务') + } + } + } + }) + } else if (currentId != latestId) { + console.log('检测到更新') + uni.showModal({ + title: '发现新版本', + content: '有新版本可用 (版本id:' + latestId + '),请问您是否更新?', + success: (res) => { + if (res.confirm) { + uni.navigateTo({ + url: updaterPage + }) + } else if (res.cancel) { + console.log('取消') + } + } + }) + } else { + console.log('现在是最新版本') + } + } + } + }) +} \ No newline at end of file diff --git a/common/js/uni-copy.js b/common/js/uni-copy.js new file mode 100644 index 0000000..6ceb604 --- /dev/null +++ b/common/js/uni-copy.js @@ -0,0 +1,42 @@ +export default function uniCopy({content,success,error}) { + if(!content) return error('复制的内容不能为空 !') + content = typeof content === 'string' ? content : content.toString() // 复制内容,必须字符串,数字需要转换为字符串 + /** + * 小程序端 和 app端的复制逻辑 + */ + //#ifndef H5 + uni.setClipboardData({ + data: content, + success: function() { + success("复制成功~") + console.log('success'); + }, + fail:function(){ + success("复制失败~") + } + }); + //#endif + + /** + * H5端的复制逻辑 + */ + // #ifdef H5 + if (!document.queryCommandSupported('copy')) { //为了兼容有些浏览器 queryCommandSupported 的判断 + // 不支持 + error('浏览器不支持') + } + let textarea = document.createElement("textarea") + textarea.value = content + textarea.readOnly = "readOnly" + document.body.appendChild(textarea) + textarea.select() // 选择对象 + textarea.setSelectionRange(0, content.length) //核心 + let result = document.execCommand("copy") // 执行浏览器复制命令 + if(result){ + success("复制成功~") + }else{ + error("复制失败,请检查h5中调用该方法的方式,是不是用户点击的方式调用的,如果不是请改为用户点击的方式触发该方法,因为h5中安全性,不能js直接调用!") + } + textarea.remove() + // #endif +} diff --git a/common/js/uqrcode.js b/common/js/uqrcode.js new file mode 100644 index 0000000..521c7a4 --- /dev/null +++ b/common/js/uqrcode.js @@ -0,0 +1,1439 @@ +// uqrcode.js +//--------------------------------------------------------------------- +// github https://github.com/Sansnn/uQRCode +//--------------------------------------------------------------------- + +let uQRCode = {}; + +(function() { + //--------------------------------------------------------------------- + // QRCode for JavaScript + // + // Copyright (c) 2009 Kazuhiko Arase + // + // URL: http://www.d-project.com/ + // + // Licensed under the MIT license: + // http://www.opensource.org/licenses/mit-license.php + // + // The word "QR Code" is registered trademark of + // DENSO WAVE INCORPORATED + // http://www.denso-wave.com/qrcode/faqpatent-e.html + // + //--------------------------------------------------------------------- + + //--------------------------------------------------------------------- + // QR8bitByte + //--------------------------------------------------------------------- + + function QR8bitByte(data) { + this.mode = QRMode.MODE_8BIT_BYTE; + this.data = data; + } + + QR8bitByte.prototype = { + + getLength: function(buffer) { + return this.data.length; + }, + + write: function(buffer) { + for (var i = 0; i < this.data.length; i++) { + // not JIS ... + buffer.put(this.data.charCodeAt(i), 8); + } + } + }; + + //--------------------------------------------------------------------- + // QRCode + //--------------------------------------------------------------------- + + function QRCode(typeNumber, errorCorrectLevel) { + this.typeNumber = typeNumber; + this.errorCorrectLevel = errorCorrectLevel; + this.modules = null; + this.moduleCount = 0; + this.dataCache = null; + this.dataList = new Array(); + } + + QRCode.prototype = { + + addData: function(data) { + var newData = new QR8bitByte(data); + this.dataList.push(newData); + this.dataCache = null; + }, + + isDark: function(row, col) { + if (row < 0 || this.moduleCount <= row || col < 0 || this.moduleCount <= col) { + throw new Error(row + "," + col); + } + return this.modules[row][col]; + }, + + getModuleCount: function() { + return this.moduleCount; + }, + + make: function() { + // Calculate automatically typeNumber if provided is < 1 + if (this.typeNumber < 1) { + var typeNumber = 1; + for (typeNumber = 1; typeNumber < 40; typeNumber++) { + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, this.errorCorrectLevel); + + var buffer = new QRBitBuffer(); + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + for (var i = 0; i < this.dataList.length; i++) { + var data = this.dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); + data.write(buffer); + } + if (buffer.getLengthInBits() <= totalDataCount * 8) + break; + } + this.typeNumber = typeNumber; + } + this.makeImpl(false, this.getBestMaskPattern()); + }, + + makeImpl: function(test, 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); + + for (var col = 0; col < this.moduleCount; col++) { + this.modules[row][col] = null; //(col + row) % 3; + } + } + + this.setupPositionProbePattern(0, 0); + this.setupPositionProbePattern(this.moduleCount - 7, 0); + this.setupPositionProbePattern(0, this.moduleCount - 7); + this.setupPositionAdjustPattern(); + this.setupTimingPattern(); + this.setupTypeInfo(test, maskPattern); + + if (this.typeNumber >= 7) { + this.setupTypeNumber(test); + } + + if (this.dataCache == null) { + this.dataCache = QRCode.createData(this.typeNumber, this.errorCorrectLevel, this.dataList); + } + + this.mapData(this.dataCache, maskPattern); + }, + + 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; + } + } + } + }, + + getBestMaskPattern: function() { + + var minLostPoint = 0; + var pattern = 0; + + for (var i = 0; i < 8; i++) { + + this.makeImpl(true, i); + + var lostPoint = QRUtil.getLostPoint(this); + + if (i == 0 || minLostPoint > lostPoint) { + minLostPoint = lostPoint; + pattern = i; + } + } + + return pattern; + }, + + createMovieClip: function(target_mc, instance_name, depth) { + + var qr_mc = target_mc.createEmptyMovieClip(instance_name, depth); + var cs = 1; + + this.make(); + + for (var row = 0; row < this.modules.length; row++) { + + var y = row * cs; + + for (var col = 0; col < this.modules[row].length; col++) { + + var x = col * cs; + var dark = this.modules[row][col]; + + if (dark) { + qr_mc.beginFill(0, 100); + qr_mc.moveTo(x, y); + qr_mc.lineTo(x + cs, y); + qr_mc.lineTo(x + cs, y + cs); + qr_mc.lineTo(x, y + cs); + qr_mc.endFill(); + } + } + } + + return qr_mc; + }, + + 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); + } + + for (var c = 8; c < this.moduleCount - 8; c++) { + if (this.modules[6][c] != null) { + continue; + } + this.modules[6][c] = (c % 2 == 0); + } + }, + + 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; + } + } + } + } + } + }, + + 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; + } + + for (var i = 0; i < 18; i++) { + var mod = (!test && ((bits >> i) & 1) == 1); + this.modules[i % 3 + this.moduleCount - 8 - 3][Math.floor(i / 3)] = mod; + } + }, + + setupTypeInfo: function(test, maskPattern) { + + var data = (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 + for (var i = 0; i < 15; i++) { + + 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); + + }, + + 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; + } + } + } + + } + + }; + + QRCode.PAD0 = 0xEC; + QRCode.PAD1 = 0x11; + + QRCode.createData = function(typeNumber, errorCorrectLevel, dataList) { + + var rsBlocks = QRRSBlock.getRSBlocks(typeNumber, errorCorrectLevel); + + var buffer = new QRBitBuffer(); + + for (var i = 0; i < dataList.length; i++) { + var data = dataList[i]; + buffer.put(data.mode, 4); + buffer.put(data.getLength(), QRUtil.getLengthInBits(data.mode, typeNumber)); + data.write(buffer); + } + + // calc num max data. + var totalDataCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalDataCount += rsBlocks[i].dataCount; + } + + if (buffer.getLengthInBits() > totalDataCount * 8) { + throw new Error("code length overflow. (" + + buffer.getLengthInBits() + + ">" + + totalDataCount * 8 + + ")"); + } + + // end code + if (buffer.getLengthInBits() + 4 <= totalDataCount * 8) { + buffer.put(0, 4); + } + + // padding + while (buffer.getLengthInBits() % 8 != 0) { + buffer.putBit(false); + } + + // padding + while (true) { + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD0, 8); + + if (buffer.getLengthInBits() >= totalDataCount * 8) { + break; + } + buffer.put(QRCode.PAD1, 8); + } + + return QRCode.createBytes(buffer, rsBlocks); + } + + QRCode.createBytes = function(buffer, rsBlocks) { + + var offset = 0; + + var maxDcCount = 0; + var maxEcCount = 0; + + var dcdata = new Array(rsBlocks.length); + var ecdata = new Array(rsBlocks.length); + + for (var r = 0; r < rsBlocks.length; r++) { + + var dcCount = rsBlocks[r].dataCount; + var ecCount = rsBlocks[r].totalCount - 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 totalCodeCount = 0; + for (var i = 0; i < rsBlocks.length; i++) { + totalCodeCount += rsBlocks[i].totalCount; + } + + var data = new Array(totalCodeCount); + 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; + + } + + //--------------------------------------------------------------------- + // QRMode + //--------------------------------------------------------------------- + + var QRMode = { + MODE_NUMBER: 1 << 0, + MODE_ALPHA_NUM: 1 << 1, + MODE_8BIT_BYTE: 1 << 2, + MODE_KANJI: 1 << 3 + }; + + //--------------------------------------------------------------------- + // QRErrorCorrectLevel + //--------------------------------------------------------------------- + + var QRErrorCorrectLevel = { + L: 1, + M: 0, + Q: 3, + H: 2 + }; + + //--------------------------------------------------------------------- + // QRMaskPattern + //--------------------------------------------------------------------- + + var QRMaskPattern = { + PATTERN000: 0, + PATTERN001: 1, + PATTERN010: 2, + PATTERN011: 3, + PATTERN100: 4, + PATTERN101: 5, + PATTERN110: 6, + PATTERN111: 7 + }; + + //--------------------------------------------------------------------- + // QRUtil + //--------------------------------------------------------------------- + + 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), + + 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; + }, + + 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; + }, + + 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); + } + }, + + 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; + }, + + getLengthInBits: function(mode, type) { + + if (1 <= type && type < 10) { + + // 1 - 9 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 10; + case QRMode.MODE_ALPHA_NUM: + return 9; + case QRMode.MODE_8BIT_BYTE: + return 8; + case QRMode.MODE_KANJI: + return 8; + default: + throw new Error("mode:" + mode); + } + + } else if (type < 27) { + + // 10 - 26 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 12; + case QRMode.MODE_ALPHA_NUM: + return 11; + case QRMode.MODE_8BIT_BYTE: + return 16; + case QRMode.MODE_KANJI: + return 10; + default: + throw new Error("mode:" + mode); + } + + } else if (type < 41) { + + // 27 - 40 + + switch (mode) { + case QRMode.MODE_NUMBER: + return 14; + case QRMode.MODE_ALPHA_NUM: + return 13; + case QRMode.MODE_8BIT_BYTE: + return 16; + case QRMode.MODE_KANJI: + return 12; + default: + throw new Error("mode:" + mode); + } + + } else { + throw new Error("type:" + type); + } + }, + + getLostPoint: function(qrCode) { + + var moduleCount = qrCode.getModuleCount(); + + var lostPoint = 0; + + // LEVEL1 + + for (var row = 0; row < moduleCount; row++) { + + for (var col = 0; col < moduleCount; col++) { + + var sameCount = 0; + var dark = qrCode.isDark(row, col); + + for (var r = -1; r <= 1; r++) { + + if (row + r < 0 || moduleCount <= row + r) { + continue; + } + + for (var c = -1; c <= 1; c++) { + + if (col + c < 0 || moduleCount <= col + c) { + continue; + } + + if (r == 0 && c == 0) { + continue; + } + + if (dark == qrCode.isDark(row + r, col + c)) { + sameCount++; + } + } + } + + if (sameCount > 5) { + lostPoint += (3 + sameCount - 5); + } + } + } + + // LEVEL2 + + for (var row = 0; row < moduleCount - 1; row++) { + for (var col = 0; col < moduleCount - 1; col++) { + var count = 0; + if (qrCode.isDark(row, col)) count++; + if (qrCode.isDark(row + 1, col)) count++; + if (qrCode.isDark(row, col + 1)) count++; + if (qrCode.isDark(row + 1, col + 1)) count++; + if (count == 0 || count == 4) { + lostPoint += 3; + } + } + } + + // LEVEL3 + + for (var row = 0; row < moduleCount; row++) { + for (var col = 0; col < moduleCount - 6; col++) { + if (qrCode.isDark(row, col) && + !qrCode.isDark(row, col + 1) && + qrCode.isDark(row, col + 2) && + qrCode.isDark(row, col + 3) && + qrCode.isDark(row, col + 4) && + !qrCode.isDark(row, col + 5) && + qrCode.isDark(row, col + 6)) { + lostPoint += 40; + } + } + } + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount - 6; row++) { + if (qrCode.isDark(row, col) && + !qrCode.isDark(row + 1, col) && + qrCode.isDark(row + 2, col) && + qrCode.isDark(row + 3, col) && + qrCode.isDark(row + 4, col) && + !qrCode.isDark(row + 5, col) && + qrCode.isDark(row + 6, col)) { + lostPoint += 40; + } + } + } + + // LEVEL4 + + var darkCount = 0; + + for (var col = 0; col < moduleCount; col++) { + for (var row = 0; row < moduleCount; row++) { + if (qrCode.isDark(row, col)) { + darkCount++; + } + } + } + + var ratio = Math.abs(100 * darkCount / moduleCount / moduleCount - 50) / 5; + lostPoint += ratio * 10; + + return lostPoint; + } + + }; + + + //--------------------------------------------------------------------- + // QRMath + //--------------------------------------------------------------------- + + var QRMath = { + + glog: function(n) { + + if (n < 1) { + throw new Error("glog(" + n + ")"); + } + + return QRMath.LOG_TABLE[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 + //--------------------------------------------------------------------- + + 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; + }, + + 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); + }, + + mod: function(e) { + + if (this.getLength() - e.getLength() < 0) { + return this; + } + + var ratio = QRMath.glog(this.get(0)) - QRMath.glog(e.get(0)); + + var num = new Array(this.getLength()); + + for (var i = 0; i < this.getLength(); i++) { + num[i] = this.get(i); + } + + for (var i = 0; i < e.getLength(); i++) { + num[i] ^= QRMath.gexp(QRMath.glog(e.get(i)) + ratio); + } + + // recursive call + return new QRPolynomial(num, 0).mod(e); + } + }; + + //--------------------------------------------------------------------- + // QRRSBlock + //--------------------------------------------------------------------- + + function QRRSBlock(totalCount, dataCount) { + this.totalCount = totalCount; + this.dataCount = dataCount; + } + + QRRSBlock.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] + ]; + + QRRSBlock.getRSBlocks = function(typeNumber, errorCorrectLevel) { + + var rsBlock = QRRSBlock.getRsBlockTable(typeNumber, errorCorrectLevel); + + if (rsBlock == undefined) { + throw new Error("bad rs block @ typeNumber:" + typeNumber + "/errorCorrectLevel:" + errorCorrectLevel); + } + + var length = rsBlock.length / 3; + + var list = new Array(); + + for (var i = 0; i < length; i++) { + + var count = rsBlock[i * 3 + 0]; + var totalCount = rsBlock[i * 3 + 1]; + var dataCount = rsBlock[i * 3 + 2]; + + for (var j = 0; j < count; j++) { + list.push(new QRRSBlock(totalCount, dataCount)); + } + } + + return list; + } + + QRRSBlock.getRsBlockTable = function(typeNumber, errorCorrectLevel) { + + switch (errorCorrectLevel) { + case QRErrorCorrectLevel.L: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 0]; + case QRErrorCorrectLevel.M: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 1]; + case QRErrorCorrectLevel.Q: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 2]; + case QRErrorCorrectLevel.H: + return QRRSBlock.RS_BLOCK_TABLE[(typeNumber - 1) * 4 + 3]; + default: + return undefined; + } + } + + //--------------------------------------------------------------------- + // 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) == 1; + }, + + put: function(num, length) { + for (var i = 0; i < length; i++) { + this.putBit(((num >>> (length - i - 1)) & 1) == 1); + } + }, + + getLengthInBits: function() { + return this.length; + }, + + 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++; + } + }; + + //--------------------------------------------------------------------- + // Support Chinese + //--------------------------------------------------------------------- + function utf16To8(text) { + var result = ''; + var c; + for (var i = 0; i < text.length; i++) { + c = text.charCodeAt(i); + if (c >= 0x0001 && c <= 0x007F) { + result += text.charAt(i); + } else if (c > 0x07FF) { + result += String.fromCharCode(0xE0 | c >> 12 & 0x0F); + result += String.fromCharCode(0x80 | c >> 6 & 0x3F); + result += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } else { + result += String.fromCharCode(0xC0 | c >> 6 & 0x1F); + result += String.fromCharCode(0x80 | c >> 0 & 0x3F); + } + } + return result; + } + + uQRCode = { + + errorCorrectLevel: QRErrorCorrectLevel, + + defaults: { + size: 354, + margin: 0, + backgroundColor: '#ffffff', + foregroundColor: '#000000', + fileType: 'png', // 'jpg', 'png' + errorCorrectLevel: QRErrorCorrectLevel.H, + typeNumber: -1 + }, + + make: function(options) { + return new Promise((reslove, reject) => { + var defaultOptions = { + canvasId: options.canvasId, + componentInstance: options.componentInstance, + text: options.text, + size: this.defaults.size, + margin: this.defaults.margin, + backgroundColor: this.defaults.backgroundColor, + foregroundColor: this.defaults.foregroundColor, + fileType: this.defaults.fileType, + errorCorrectLevel: this.defaults.errorCorrectLevel, + typeNumber: this.defaults.typeNumber + }; + if (options) { + for (var i in options) { + defaultOptions[i] = options[i]; + } + } + options = defaultOptions; + if (!options.canvasId) { + console.error('uQRCode: Please set canvasId!'); + return; + } + + function createCanvas() { + var qrcode = new QRCode(options.typeNumber, options.errorCorrectLevel); + qrcode.addData(utf16To8(options.text)); + qrcode.make(); + + var ctx = uni.createCanvasContext(options.canvasId, options.componentInstance); + ctx.setFillStyle(options.backgroundColor); + ctx.fillRect(0, 0, options.size, options.size); + + var tileW = (options.size - options.margin * 2) / qrcode.getModuleCount(); + var tileH = tileW; + + for (var row = 0; row < qrcode.getModuleCount(); row++) { + for (var col = 0; col < qrcode.getModuleCount(); col++) { + var style = qrcode.isDark(row, col) ? options.foregroundColor : options.backgroundColor; + ctx.setFillStyle(style); + var x = Math.round(col * tileW) + options.margin; + var y = Math.round(row * tileH) + options.margin; + var w = Math.ceil((col + 1) * tileW) - Math.floor(col * tileW); + var h = Math.ceil((row + 1) * tileW) - Math.floor(row * tileW); + ctx.fillRect(x, y, w, h); + } + } + + setTimeout(function() { + ctx.draw(false, (function() { + setTimeout(function() { + uni.canvasToTempFilePath({ + canvasId: options.canvasId, + fileType: options.fileType, + width: options.size, + height: options.size, + destWidth: options.size, + destHeight: options.size, + success: function(res) { + let resData; // 将统一为base64格式 + let tempFilePath = res.tempFilePath; // H5为base64,其他为相对路径 + + // #ifdef H5 + resData = tempFilePath; + options.success && options.success(resData); + reslove(resData); + // #endif + + // #ifdef APP-PLUS + const path = plus.io.convertLocalFileSystemURL(tempFilePath) // 绝对路径 + let fileReader = new plus.io.FileReader(); + fileReader.readAsDataURL(path); + fileReader.onloadend = res => { + resData = res.target.result; + options.success && options.success(resData); + reslove(resData); + }; + // #endif + + // #ifdef MP-WEIXIN || MP-QQ || MP-TOUTIAO + uni.getFileSystemManager().readFile({ + filePath: tempFilePath, + encoding: 'base64', + success: res => { + resData = 'data:image/png;base64,' + res.data; + options.success && options.success(resData); + reslove(resData); + } + }) + // #endif + + // #ifndef H5 || APP-PLUS || MP-WEIXIN || MP-QQ || MP-TOUTIAO + if (plus) { + const path = plus.io.convertLocalFileSystemURL(tempFilePath) // 绝对路径 + let fileReader = new plus.io.FileReader(); + fileReader.readAsDataURL(path); + fileReader.onloadend = res => { + resData = res.target.result; + options.success && options.success(resData); + reslove(resData); + }; + } else { + uni.request({ + url: tempFilePath, + method: 'GET', + responseType: 'arraybuffer', + success: res => { + resData = `data:image/png;base64,${uni.arrayBufferToBase64(res.data)}`; // 把arraybuffer转成base64 + options.success && options.success(resData); + reslove(resData); + } + }) + } + // #endif + }, + fail: function(error) { + options.fail && options.fail(error); + reject(error); + }, + complete: function(res) { + options.complete && options.complete(res); + } + }, options.componentInstance); + }, options.text.length + 100); + })()); + }, 150); + } + + createCanvas(); + }); + } + } + +})() + +export default uQRCode \ No newline at end of file diff --git a/components/bind-mobile/bind-mobile.vue b/components/bind-mobile/bind-mobile.vue new file mode 100644 index 0000000..c09bb1d --- /dev/null +++ b/components/bind-mobile/bind-mobile.vue @@ -0,0 +1,413 @@ + + + + + + diff --git a/components/farm-goods-detail-view/detail.js b/components/farm-goods-detail-view/detail.js new file mode 100644 index 0000000..5049870 --- /dev/null +++ b/components/farm-goods-detail-view/detail.js @@ -0,0 +1,451 @@ +// 商品详情业务 +import { + Weixin +} from '@/common/js/wx-jssdk.js'; +export default { + data() { + return { + skuId: 0, + goodsId:0, + isIphoneX: false, //判断手机是否是iphoneX以上 + whetherCollection: 0, + + //是否开启预览,0:不开启,1:开启 + preview: 0, + token: "", + videoContext: '', + + // 媒体,图片,视频 + + // 解决每个商品SKU图片数量不同时,无法切换到第一个,导致轮播图显示不出来 + swiperInterval: 1, + swiperAutoplay: false, + swiperCurrent: 1, + switchMedia: 'img', + + //评价 + goodsEvaluate: [{ + member_headimg: '', + member_name: '', + content: '', + images: [], + create_time: 0, + sku_name: '' + }], + evaluateConfig: { + evaluate_audit: 1, + evaluate_show: 0, + evaluate_status: 1 + }, + + // 是否可分享到好物圈 + goodsCircle: false, + memberId: 0, + service: null, + shareUrl: '', // 分享链接 + source_member: 0, //分享人的id + isCommunity: false, //社群弹窗 + + poster: "-1", //海报 + posterMsg: "", //海报错误信息 + posterHeight: 0, + posterParams: {}, //海报所需参数 + detailTab: 0, + goodsRoute:'', + posterApi:'', + } + }, + created() { + this.isIphoneX = this.$util.uniappIsIPhoneX(); + this.token = uni.getStorageSync('token'); + }, + + methods: { + init(params) { + this.skuId = params.sku_id; + this.goodsId = params.goods_id; + this.preview = params.preview; + this.source_member = params.source_member; + this.whetherCollection = params.whetherCollection; + this.posterParams = params.posterParams; + + this.shareUrl = params.shareUrl; + this.memberId = params.memberId; + this.goodsRoute = params.goodsRoute; + this.posterApi = params.posterApi; + this.getService(); + + // 评价设置 + this.getEvaluateConfig(); + this.videoContext = uni.createVideoContext('goodsVideo'); + + // #ifdef MP-WEIXIN + this.goodsSyncToGoodsCircle(); + // #endif + + this.getWhetherCollection(); + }, + swiperChange(e) { + this.swiperCurrent = e.detail.current + 1; + }, + + //-------------------------------------服务------------------------------------- + + openMerchantsServicePopup() { + this.$refs.merchantsServicePopup.open(); + }, + closeMerchantsServicePopup() { + this.$refs.merchantsServicePopup.close(); + }, + + //-------------------------------------属性------------------------------------- + + openAttributePopup() { + this.$refs.attributePopup.open(); + }, + closeAttributePopup() { + this.$refs.attributePopup.close(); + }, + //获取用户是否关注 + async getWhetherCollection() { + this.$api.sendRequest({ + url: "/api/goodscollect/iscollect", + data: { + goods_id: this.goodsId + }, + success: res => { + this.whetherCollection = res.data; + } + }); + }, + //-------------------------------------评价------------------------------------- + //商品评论列表 + getGoodsEvaluate() { + + this.$api.sendRequest({ + url: "/api/goodsevaluate/firstinfo", + data: { + goods_id: this.goodsSkuDetail.goods_id + }, + success: res => { + let data = res.data; + if (data) { + this.goodsEvaluate = data; + this.goodsEvaluate.forEach((item, index) => { + if (this.goodsEvaluate[index].images) this.goodsEvaluate[index].images = + this.goodsEvaluate[index].images.split(","); + if (this.goodsEvaluate[index].is_anonymous == 1) this.goodsEvaluate[ + index].member_name = this.goodsEvaluate[index].member_name + .replace( + this.goodsEvaluate[index].member_name.substring(1, this + .goodsEvaluate[index].member_name.length - 1), '***') + }) + // if (this.goodsEvaluate.images) this.goodsEvaluate.images = this.goodsEvaluate.images.split(","); + // if (this.goodsEvaluate.is_anonymous == 1) this.goodsEvaluate.member_name = this.goodsEvaluate.member_name.replace( + // this.goodsEvaluate.member_name.substring(1, this.goodsEvaluate.member_name.length - 1), '***') + } + } + }); + }, + + // 预览评价图片 + previewEvaluate(index, img_index, field) { + var paths = []; + for (let i = 0; i < this.goodsEvaluate[index][field].length; i++) { + paths.push(this.$util.img(this.goodsEvaluate[index][field][i])); + } + uni.previewImage({ + current: img_index, + urls: paths + }); + }, + //-------------------------------------关注------------------------------------- + editCollection() { + if (this.preview) return; // 开启预览,禁止任何操作和跳转 + + if (this.token) { + + //未关注添加关注 + if (this.whetherCollection == 0) { + this.$api.sendRequest({ + url: "/api/goodscollect/add", + data: { + sku_id: this.skuId, + goods_id: this.goodsSkuDetail.goods_id, + sku_name: this.goodsSkuDetail.sku_name, + sku_price: this.goodsSkuDetail.show_price, + sku_image: this.goodsSkuDetail.sku_image + }, + success: res => { + var data = res.data; + if (data > 0) { + this.whetherCollection = 1; + } + } + }); + } else { + //已关注取消关注 + this.$api.sendRequest({ + url: "/api/goodscollect/delete", + data: { + goods_id: this.goodsSkuDetail.goods_id + }, + success: res => { + var data = res.data; + if (data > 0) { + this.whetherCollection = 0; + } + } + }); + } + } else { + if (this.source_member) { + this.$refs.login.open(this.shareUrl + '&source_member=' + this.source_member); + } else { + this.$refs.login.open(this.shareUrl); + } + } + }, + + collection() { + if (this.preview) return; // 开启预览,禁止任何操作和跳转 + this.editCollection(); + if (this.token) { + return this.whetherCollection ? 0 : 1; + } + }, + //-------------------------------------分享------------------------------------- + // 打开分享弹出层 + openSharePopup() { + this.$refs.sharePopup.open(); + }, + // 关闭分享弹出层 + closeSharePopup() { + this.$refs.sharePopup.close(); + }, + copyUrl() { + let text = this.$config.h5Domain + this.shareUrl; + if (this.memberId) text += '&source_member=' + this.memberId; + this.$util.copy(text, () => { + this.closeSharePopup(); + }); + }, + + //-------------------------------------海报------------------------------------- + // 打开海报弹出层 + openPosterPopup() { + this.getGoodsPoster(); + this.$refs.sharePopup.close(); + this.$refs.posterPopup.open(); + if (this.poster != '-1') { + setTimeout(() => { + let view = uni.createSelectorQuery().in(this).select(".poster-layer .image-wrap"); + view.fields({ + size: true, + }, data => { + let posterWhith = data.width; + let ratio = parseFloat((740 / posterWhith).toFixed(2)); + if (this.token != '') { + this.posterHeight = parseInt(1240 / ratio); + } else { + this.posterHeight = parseInt(1100 / ratio); + } + }).exec(); + }, 100); + } + }, + // 关闭海报弹出层 + closePosterPopup() { + this.$refs.posterPopup.close(); + }, + //生成海报 + getGoodsPoster() { + uni.showLoading({ + 'title' : '海报生成中...' + }) + //活动海报信息 + if (this.memberId) this.posterParams.source_member = this.memberId; + + this.$api.sendRequest({ + url: this.posterApi, + data: { + page: this.goodsRoute, + qrcode_param: JSON.stringify(this.posterParams) + }, + success: res => { + if (res.code == 0) { + this.poster = res.data.path + "?time=" + new Date().getTime(); + } else { + this.posterMsg = res.message; + } + uni.hideLoading(); + }, + fail: err => { + uni.hideLoading(); + } + }); + }, + // 预览图片 + previewMedia(index) { + var paths = []; + for (let i = 0; i < this.goodsSkuDetail.sku_images.length; i++) { + paths.push(this.$util.img(this.goodsSkuDetail.sku_images[i], { + size: 'big' + })); + } + uni.previewImage({ + current: index, + urls: paths, + // longPressActions: { + // itemList: ['发送给朋友', '保存图片', '关注'], + // success: function(data) { + // console.log('选中了第' + (data.tapIndex + 1) + '个按钮,第' + (data.index + 1) + '张图片'); + // }, + // fail: function(err) { + // console.log(err.errMsg); + // } + // } + }); + }, + swiperImageError(index) { + this.goodsSkuDetail.sku_images[index] = this.$util.getDefaultImage().goods; + this.$forceUpdate(); + }, + // #ifdef MP || APP-PLUS + //小程序中保存海报 + saveGoodsPoster() { + let url = this.$util.img(this.poster); + uni.downloadFile({ + url: url, + success: (res) => { + if (res.statusCode === 200) { + uni.saveImageToPhotosAlbum({ + filePath: res.tempFilePath, + success: () => { + this.$util.showToast({ + title: "保存成功" + }); + }, + fail: () => { + this.$util.showToast({ + title: "保存失败,请稍后重试" + }); + } + }); + } + } + }); + }, + // #endif + //售后保障查询 + getService() { + this.$api.sendRequest({ + url: '/api/goods/aftersale', + success: res => { + if (res.code == 0 && res.data) { + this.service = res.data; + } + } + }); + }, + + // #ifdef MP-WEIXIN + /** + * 将商品同步到微信圈子 + */ + goodsSyncToGoodsCircle() { + this.$api.sendRequest({ + url: '/goodscircle/api/goods/sync', + data: { + goods_id: this.goodsSkuDetail.goods_id + }, + success: res => { + if (res.code == 0) { + this.goodsCircle = true; + } + } + }) + }, + /** + * 将商品推荐到微信圈子 + */ + openBusinessView() { + if (wx.openBusinessView) { + wx.openBusinessView({ + businessType: 'friendGoodsRecommend', + extraData: { + product: { + item_code: this.goodsSkuDetail.goods_id, + title: this.goodsSkuDetail.sku_name, + image_list: this.goodsSkuDetail.sku_images.map((ele) => { + return this.$util.img(ele); + }) + } + }, + success: function(res) { + console.log('success', res); + }, + fail: function(res) { + console.log('fail', res); + } + }) + } + }, + // #endif + getEvaluateConfig() { + this.$api.sendRequest({ + url: '/api/goodsevaluate/config', + success: res => { + if (res.code == 0) { + var data = res.data; + this.evaluateConfig = data; + if (this.evaluateConfig.evaluate_show == 1) { + //商品评论 + this.getGoodsEvaluate(); + } + } + } + }); + }, + toEvaluateDetail(id) { + this.$util.redirectTo('/pages_tool/goods/evaluate', { + goods_id: id + }); + }, + showImg(e) { + //拿到图片的路径里面的内容放在我们数组中 + let contentimg = e.target.dataset.nodes; + let arrImg = []; + for (var i = 0; i < contentimg.length; i++) { + var img = contentimg[i].children; + if (Array.isArray(img)) { + for (var j = 0; j < img.length; j++) { + if (img[j].attrs && img[j].name == "img") { + if (img[j].attrs.src) { + arrImg.push(img[j].attrs.src) + } + } + } + } + } + //最后一步就是把我们的所有图片放在预览的api中就可以了 + uni.previewImage({ + current: arrImg, + urls: arrImg, + }) + }, + + //-------------------------------------社群------------------------------------- + + //添加福利群 + onCommunity() { + this.isCommunity = true + }, + onCloseCommunity() { + this.isCommunity = false + } + + + } + +} diff --git a/components/farm-goods-detail-view/goods-detail-view.vue b/components/farm-goods-detail-view/goods-detail-view.vue new file mode 100644 index 0000000..6b13a6d --- /dev/null +++ b/components/farm-goods-detail-view/goods-detail-view.vue @@ -0,0 +1,350 @@ + + + + + + diff --git a/components/share-panel/share-panel.vue b/components/share-panel/share-panel.vue new file mode 100644 index 0000000..120db4e --- /dev/null +++ b/components/share-panel/share-panel.vue @@ -0,0 +1,408 @@ + + + + + + + diff --git a/main.js b/main.js index 11a6c68..ab2c6fb 100644 --- a/main.js +++ b/main.js @@ -10,6 +10,10 @@ import Lang from './common/js/lang.js' import Config from './common/js/config.js' import globalConfig from './common/js/golbalConfig.js'; +import Vant from 'vant'; +import 'vant/lib/index.less'; +Vue.use(Vant); + Vue.prototype.$store = store //挂在vue Vue.config.productionTip = false diff --git a/node_modules/jweixin-module/README.md b/node_modules/jweixin-module/README.md index f4e08bd..7c91d7b 100644 --- a/node_modules/jweixin-module/README.md +++ b/node_modules/jweixin-module/README.md @@ -19,8 +19,8 @@ https://unpkg.com/jweixin-module/out/index.js ## 使用 ```js -var wx = require('jweixin-module') -wx.ready(function(){ +var jweixin = require('jweixin-module') +jweixin.ready(function(){ // TODO }); ``` diff --git a/node_modules/jweixin-module/out/index.js b/node_modules/jweixin-module/out/index.js deleted file mode 100644 index 807ab6a..0000000 --- a/node_modules/jweixin-module/out/index.js +++ /dev/null @@ -1 +0,0 @@ -!function(e,n){"object"==typeof exports&&"object"==typeof module?module.exports=n(e):"function"==typeof define&&(define.amd||define.cmd)?define(function(){return n(e)}):n(e,!0)}(window,function(o,e){function c(n,e,i){o.WeixinJSBridge?WeixinJSBridge.invoke(n,r(e),function(e){a(n,e,i)}):d(n,i)}function i(n,i,t){o.WeixinJSBridge?WeixinJSBridge.on(n,function(e){t&&t.trigger&&t.trigger(e),a(n,e,i)}):d(n,t||i)}function r(e){return(e=e||{}).appId=M.appId,e.verifyAppId=M.appId,e.verifySignType="sha1",e.verifyTimestamp=M.timestamp+"",e.verifyNonceStr=M.nonceStr,e.verifySignature=M.signature,e}function n(e){return{timeStamp:e.timestamp+"",nonceStr:e.nonceStr,package:e.package,paySign:e.paySign,signType:e.signType||"SHA1"}}function a(e,n,i){"openEnterpriseChat"==e&&(n.errCode=n.err_code),delete n.err_code,delete n.err_desc,delete n.err_detail;var t=n.errMsg;t||(t=n.err_msg,delete n.err_msg,t=function(e,n){var i=e,t=f[i];t&&(i=t);var o="ok";if(n){var r=n.indexOf(":");"confirm"==(o=n.substring(r+1))&&(o="ok"),"failed"==o&&(o="fail"),-1!=o.indexOf("failed_")&&(o=o.substring(7)),-1!=o.indexOf("fail_")&&(o=o.substring(5)),"access denied"!=(o=(o=o.replace(/_/g," ")).toLowerCase())&&"no permission to execute"!=o||(o="permission denied"),"config"==i&&"function not exist"==o&&(o="ok"),""==o&&(o="fail")}return n=i+":"+o}(e,t),n.errMsg=t),(i=i||{})._complete&&(i._complete(n),delete i._complete),t=n.errMsg||"",M.debug&&!i.isInnerInvoke&&alert(JSON.stringify(n));var o=t.indexOf(":");switch(t.substring(o+1)){case"ok":i.success&&i.success(n);break;case"cancel":i.cancel&&i.cancel(n);break;default:i.fail&&i.fail(n)}i.complete&&i.complete(n)}function s(e){if(e){for(var n=0,i=e.length;n + + + + + {{ detail.article_title }} + + 发表时间: {{ detail.create_time }} + + + + + + + + + + + + + + + + + + + + + + + {{ set_info.browse_text || '浏览量' }}{{ detail.read_num }}次数 + + + + + 赞 {{ detail.dianzan_num }} + + + + + + + + + 推荐阅读 + + 查看更多 + + + + + + + + + {{ item.article_title }} + {{ item.article_abstract }} + + + + + + + + + + + + + + + + + + + diff --git a/pages_promotion/article/list.vue b/pages_promotion/article/list.vue new file mode 100644 index 0000000..5ec4835 --- /dev/null +++ b/pages_promotion/article/list.vue @@ -0,0 +1,728 @@ + + + + + diff --git a/pages_promotion/article/public/img/dianzan.png b/pages_promotion/article/public/img/dianzan.png new file mode 100644 index 0000000000000000000000000000000000000000..4280aac5caea6991034eaeabf073729ceb5f964e GIT binary patch literal 3538 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 literal 0 HcmV?d00001 diff --git a/pages_promotion/article/public/img/fenxiang.png b/pages_promotion/article/public/img/fenxiang.png new file mode 100644 index 0000000000000000000000000000000000000000..c5cad511e9e66ead1d5184d860e254071f9057e1 GIT binary patch literal 3752 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 OC}3)6WkA+*yZb-l-UgZg literal 0 HcmV?d00001 diff --git a/pages_promotion/article/public/img/liulan.png b/pages_promotion/article/public/img/liulan.png new file mode 100644 index 0000000000000000000000000000000000000000..6ae1ac4d37ceeef3453796f999c3b9750642807c GIT binary patch literal 3868 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 AivR!s literal 0 HcmV?d00001 diff --git a/pages_promotion/article/record.vue b/pages_promotion/article/record.vue new file mode 100644 index 0000000..79c3894 --- /dev/null +++ b/pages_promotion/article/record.vue @@ -0,0 +1,243 @@ + + + + + diff --git a/pages_promotion/fenxiao/apply_upgrade.vue b/pages_promotion/fenxiao/apply_upgrade.vue new file mode 100644 index 0000000..d128527 --- /dev/null +++ b/pages_promotion/fenxiao/apply_upgrade.vue @@ -0,0 +1,68 @@ + + + + + diff --git a/pages_promotion/fenxiao/index.vue b/pages_promotion/fenxiao/index.vue index c34c853..f481a18 100644 --- a/pages_promotion/fenxiao/index.vue +++ b/pages_promotion/fenxiao/index.vue @@ -19,63 +19,67 @@ - + + + + + {{ info.level_name }} + 提交申请可以提升等级! + + 申请升级 + - - - - - - - - + - - - - - - - - - - - - - - - + + + 总{{ fenxiaoWords.account }} + {{ info.total_commission | moneyFormat }} + + + 已提现{{ fenxiaoWords.account }} + {{ info.account_withdraw | moneyFormat }} + + + 提现中{{ fenxiaoWords.account }} + {{ info.account_withdraw_apply | moneyFormat }} + + + 申请提现 + --> -