From 5342133cbda58aa830d8c117420d21824248ec86 Mon Sep 17 00:00:00 2001 From: wwz <1144797966@qq.com> Date: Mon, 10 Mar 2025 16:33:43 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E6=83=A0=E5=8D=B7=E5=92=8C=E5=95=86?= =?UTF-8?q?=E5=93=81=E5=8D=B7?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- common/api/member.js | 45 +- common/api/shop/index.js | 14 + common/js/uqrCode.js | 1437 ----------------- common/js/websocket.js | 20 +- components/payPassword.vue | 128 ++ components/paymentMethod.vue | 20 +- package.json | 1 + pages.json | 29 + pages/order/components/orderInfoAfter.vue | 676 ++++---- pages/order/components/paymentMethod.vue | 223 --- pages/order/coupon.vue | 572 +++++++ pages/order/detail.vue | 579 +++---- pages/order/index.vue | 71 +- pages/product/choosetable.vue | 2 +- pages/product/components/confirmorder.vue | 759 ++++++--- pages/product/index.vue | 88 +- pages/user/coupon.vue | 74 +- pages/user/member/billDetails.vue | 119 +- .../user/member/components/registermember.vue | 33 +- pages/user/member/index.vue | 39 +- pages/user/member/instructions.vue | 147 +- pages/user/member/memberdetails.vue | 65 +- pages/user/member/paycode.vue | 179 ++ pages/user/member/setPassword.vue | 356 ++-- pages/user/member/storedManage.vue | 91 +- pages/user/repairpasswordtwo.vue | 223 --- pages/user/user.vue | 2 - stores/order.js | 57 +- stores/pay.js | 10 +- stores/user.js | 99 +- 30 files changed, 2820 insertions(+), 3338 deletions(-) create mode 100644 common/api/shop/index.js delete mode 100644 common/js/uqrCode.js create mode 100644 components/payPassword.vue delete mode 100644 pages/order/components/paymentMethod.vue create mode 100644 pages/order/coupon.vue create mode 100644 pages/user/member/paycode.vue delete mode 100644 pages/user/repairpasswordtwo.vue diff --git a/common/api/member.js b/common/api/member.js index 56b654e..72ffe14 100644 --- a/common/api/member.js +++ b/common/api/member.js @@ -23,6 +23,15 @@ export const APIshopUserInfo = (data) => { }) } +// 加入会员 +export const APIshopUser = (data) => { + return request({ + url: urlAccount + '/user/shopUser', + method: 'post', + data: data + }) +} + // 获取动态会员码 3分钟内可用 export const APIusershopUsercode = (data) => { return request({ @@ -51,7 +60,7 @@ export const APIusershopInfodetail = (data) => { }) } -//桌码换取详细店铺信息 +//通过用户Id 查找优惠券 export const APIcouponfindByUserId = (data) => { return request({ url: urlAccount + '/user/coupon/findByUserId', @@ -59,6 +68,14 @@ export const APIcouponfindByUserId = (data) => { data: data }) } +//生成订单后使用 +export const APIfindCoupon = (data) => { + return request({ + url: urlAccount + '/user/coupon/findCoupon', + method: 'get', + data: data + }) +} //桌码换取详细店铺信息 export const APIuseractivate = (data) => { @@ -69,3 +86,29 @@ export const APIuseractivate = (data) => { }) } +//获取余额余额明细 +export const APIshopUsermoneyRecord = (data) => { + return request({ + url: urlAccount + '/user/shopUser/moneyRecord', + method: 'get', + data: data + }) +} + +//获取积分明细 +export const APIshopUserpointsRecord = (data) => { + return request({ + url: urlAccount + '/user/shopUser/pointsRecord', + method: 'get', + data: data + }) +} + +//获取动态会员码 +export const APIshopUsercode = (data) => { + return request({ + url: urlAccount + '/user/shopUser/code', + method: 'get', + data: data + }) +} \ No newline at end of file diff --git a/common/api/shop/index.js b/common/api/shop/index.js new file mode 100644 index 0000000..9d788b7 --- /dev/null +++ b/common/api/shop/index.js @@ -0,0 +1,14 @@ +// 引入 request 文件 +import request from '@/common/api/request.js' +const urlAccount = '/account' +const urlProduct = '/product' +const urlOrder = '/order' + +//商品列表 +export const APIgeocodelocation = (data) => { + return request({ + url: urlAccount + '/user/points/mall/goods/page', + method: 'get', + data: data + }) +} \ No newline at end of file diff --git a/common/js/uqrCode.js b/common/js/uqrCode.js deleted file mode 100644 index 62a4ad4..0000000 --- a/common/js/uqrCode.js +++ /dev/null @@ -1,1437 +0,0 @@ -// 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 diff --git a/common/js/websocket.js b/common/js/websocket.js index a0e11a2..e8cdcd1 100644 --- a/common/js/websocket.js +++ b/common/js/websocket.js @@ -56,7 +56,15 @@ const useWebSocket = (options = {}) => { // 连接 WebSocket const connect = () => { + if (!isNetworkConnected.value) { + uni.showToast({ + title: '网络未连接...', + icon: 'none' + }) + setTimeout(() => { + uni.navigateBack() + }, 1000) console.log('网络未连接,暂不尝试连接 WebSocket'); return; } @@ -70,7 +78,7 @@ const useWebSocket = (options = {}) => { isConnected.value = true; reconnectAttempts.value = 0; // 监听初始化成功在开启心跳 - // startHeartbeat(); + startHeartbeat(); }, fail: () => { console.error('WebSocket 连接失败,尝试重连'); @@ -104,6 +112,7 @@ const useWebSocket = (options = {}) => { clearTimeout(reconnectTimer.value); // 清除重连定时器 if (res.code == '1006') { console.log('服务器正常关闭,停止重连'); + uni.navigateBack() autoReconnect.value = false; return false; } @@ -129,6 +138,13 @@ const useWebSocket = (options = {}) => { const startHeartbeat = () => { if (!isNetworkConnected.value) { console.log('网络未连接,暂停心跳'); + uni.showToast({ + title: '网络未连接...', + icon: 'none' + }) + setTimeout(() => { + uni.navigateBack() + }, 1000) return; } heartbeatTimer.value = setInterval(() => { @@ -168,6 +184,7 @@ const useWebSocket = (options = {}) => { // 手动关闭连接 const closeSocket = () => { isManuallyClosed.value = true; + uni.navigateBack() closeExistingConnection(); }; @@ -213,6 +230,7 @@ const useWebSocket = (options = {}) => { title: '重连次数达到上限,停止重连', icon: 'none' }); + uni.navigateBack() } }; diff --git a/components/payPassword.vue b/components/payPassword.vue new file mode 100644 index 0000000..3e48b6b --- /dev/null +++ b/components/payPassword.vue @@ -0,0 +1,128 @@ + + + + + \ No newline at end of file diff --git a/components/paymentMethod.vue b/components/paymentMethod.vue index f4a33a1..3e3ef54 100644 --- a/components/paymentMethod.vue +++ b/components/paymentMethod.vue @@ -13,7 +13,7 @@ {{ item.name }} - 会员卡余额 ¥{{amountVIP?amountVIP.amount:0}} + 会员卡余额 ¥{{orderVIP?orderVIP.amount:0}} 去充值 @@ -51,14 +51,18 @@ freeCheck: { type: Boolean, default: false + }, + orderVIP: { + type: Object, + default: { + + } } }); - + const emits = defineEmits(['customevent', 'groupChange']); - const amountVIP = uni.cache.get('shopUserInfo') - const paymentMethodList = ref([{ name: "余额支付", type: 1, @@ -112,7 +116,6 @@ // * 监听支付方式切换 const groupChange = (type) => { - console.log(type) if (props.freeCheck && type == 1) { return; } @@ -121,13 +124,14 @@ // } radiovalue.value = type; let name = paymentMethodName.value[type - 1].name; - emits("groupChange", type) + + emits("groupChange", paymentMethodName.value[type - 1]) } // 去充值 const goRecharge = () => { - uni.pro.navigateTo('/pages/member/index', { - shopId: uni.cache.get('shopId') + uni.pro.navigateTo('user/member/index', { + shopId: props.orderVIP.shopId }) } diff --git a/package.json b/package.json index f54a791..52b8f6c 100644 --- a/package.json +++ b/package.json @@ -2,6 +2,7 @@ "dependencies": { "@dcloudio/uni-app": "^2.0.2-4040520250103001", "dayjs": "^1.11.13", + "jsbarcode": "^3.11.6", "pinia": "^2.3.1", "pinia-plugin-persistedstate": "^4.2.0" } diff --git a/pages.json b/pages.json index 0d4964a..1ba5834 100644 --- a/pages.json +++ b/pages.json @@ -59,6 +59,12 @@ "navigationBarTitleText": "订单详情" } }, + { + "path": "pages/order/coupon", + "style": { + "navigationBarTitleText": "优惠卷" + } + }, { "path": "pages/user/user", "style": { @@ -90,6 +96,12 @@ "navigationBarTitleText": "会员卡" } }, + { + "path": "pages/user/member/paycode", + "style": { + "navigationBarTitleText": "会员支付码" + } + }, { "path": "pages/user/member/billDetails", "style": { @@ -101,6 +113,23 @@ "style": { "navigationBarTitleText": "会员支付码" } + },{ + "path": "pages/user/member/setPassword", + "style": { + "navigationBarTitleText": "密码设置" + } + }, + { + "path": "pages/user/member/storedManage", + "style": { + "navigationBarTitleText": "会员管理" + } + }, + { + "path": "pages/user/member/instructions", + "style": { + "navigationBarTitleText": "使用须知" + } }, { "path": "pages/user/myself", diff --git a/pages/order/components/orderInfoAfter.vue b/pages/order/components/orderInfoAfter.vue index c7c527b..f2b71f4 100644 --- a/pages/order/components/orderInfoAfter.vue +++ b/pages/order/components/orderInfoAfter.vue @@ -4,6 +4,46 @@ + + + + + + + + {{item.title}} + + + + + + 桌台 + + {{ listinfo.tableName || '' }} + + + @@ -29,58 +69,84 @@ - ¥{{item.priceAmount}} + + ¥{{orderVIP.isVip ==1 && ordershopUserInfo.isMemberPrice==1?item.memberPrice:item.price}} + x{{item.num}} - 未付款 - + - - 餐位费 + + + 打包费 - X{{listinfo.seatCount}} + - {{listinfo.seatAmount}} + {{listinfo.packFee}} + + + + 餐位费 + + X{{listinfo.Seatcharge}} + + {{listinfo.Seatcharge}} + + + + + + - - + + - {{ item.name }} - - {{item.value}} - - - - - - {{items.name}} - X{{items.num}} - -¥{{items.discountAmount || 0}} + + + + + + {{item.value.uniqueIds}}个 + -¥{{item.value.Productroll}} + + + + {{item.value.name}} + + + @@ -95,16 +161,15 @@ + activeColor="#E8AD7B" shape="circle" icon-size="18" size="18"> - - + 优惠券 @@ -114,11 +179,10 @@ - + 商品券 - + {{item.name}} X{{item.finalUseNum}} -¥{{item.finalDiscountAmount}} @@ -138,7 +202,7 @@ 总计¥ - {{listinfo.payAmount}} + {{listinfo.totalCost}} @@ -146,30 +210,30 @@ 订单编号: - {{listinfo.orderNo}}(点击复制) + {{listinfo.orderNo}}(点击复制) 下单时间: - {{$u.timeFormat(listinfo.time, 'yyyy-mm-dd hh:MM:ss')}} + {{$u.timeFormat(listinfo.updateTime, 'yyyy-mm-dd hh:MM:ss')}} - + + + 用餐模式: + 堂食 + 外带 + 外卖 - - 订单类型: - 快递 - 外卖 - 自提 - 堂食 - - + 备注: {{ listinfo.remark || ""}} - + 就餐人数: - {{ listinfo.seatCount || ""}} + {{ listinfo.seatNum || ""}} @@ -184,9 +248,13 @@ computed, defineEmits, watch, - watchEffect + watchEffect, + defineExpose } from 'vue' + // 定义自定义事件 + const emits = defineEmits(['customevent', 'istype']); + // teb 切换送餐和打包 const tebtypeList = reactive([{ title: "送餐到桌", @@ -206,17 +274,16 @@ }, ]) - const favorable = reactive([{ - name: "优惠券", - type: "coupon", - value: "", - url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/coupon.png" - }, - { + const favorablelist = reactive([{ name: "商品券", type: "product", value: [], url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/coupon.png" + }, { + name: "优惠券", + type: "coupon", + value: "", + url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/coupon.png" }, // { name: "团购优惠", type: "group",value: "", url: "https://czg-qr-order.oss-cn-beijing.aliyuncs.com/confirmOrder/groupOffer.png"}, { @@ -227,267 +294,90 @@ } ]) + const props = defineProps({ - rechargeFreeChecked: { - type: Boolean - }, freeCheck: { type: Boolean }, listinfo: { type: Object + }, - amountVIP: { + orderVIP: { type: Object }, - }) - - const data = reactive({ - calcUsablePointsData: null, - isShow: false, - payAmount: 0, - isPointsChecked: false, - userCouponInfos: [], - selectCouponData: [], - }) - - - const childOnShow = () => { - console.log('isShow==', this.isShow) - if (!this.isShow) { - this.getCalcUsablePoints() - return; + ordershopUserInfo: { + type: Object, + default: { + isTableFee: 0 + } } - // uni.$on('couponItem',this.changeCoupon) - this.userCouponInfos = []; - this.favorable[0].value = "" - this.favorable[1].value = [] - this.listinfo.payAmount = this.payAmount - this.selectCouponData = uni.cache.get('selectCouponData') || [] - this.changeCoupon(); + }) + + const calcUsablePointsData = reactive({ + usable: '', + pointsNum: '', + equivalentPoints: '', + unusableReason: '', + + }) + const isPointsChecked = ref(false) + + const is_type = ref(0) + // 监听送餐/打包切换 + const tabClick = (item, index) => { + is_type.value = index + emits("istype", is_type.value) + // this.getchoseEatModel('tabClick', index, item); } + // 操作优惠卷 + const dataprocessing = (data) => { + if (data.typeOrder == 1) { + favorablelist[1].value = data.item + } else { + favorablelist[0].value = data + } + + } + + const childOnShow = () => {} + // * 监听优惠券/商品券选择 - const changeCoupon = (data) => { - // 优惠券数据 - let couponList = this.selectCouponData.filter(v => v.type == 1); - // 商品券列表 - let productList = this.selectCouponData.filter(v => v.type == 2); - // 优惠券处理 - if (couponList.length > 0) { - let couponData = couponList[0] - //不包含优惠券的金额 - let currentPayAmount = (this.userCouponInfos.filter(v => v.type == 1).length > 0 ? Number(this.listinfo - .payAmount) + couponData.discountAmount : this.listinfo.payAmount) - // 判断优惠金额不能大于支付金额 - if (couponData.discountAmount <= currentPayAmount) { + const changeCoupon = (data) => {} - // if ( this.isPointsChecked && this.calcUsablePointsData) { - // this.listinfo.payAmount = (this.listinfo.payAmount-(this.calcUsablePointsData.pointsNum/this.calcUsablePointsData.equivalentPoints)).toFixed(2); - // } else { - // this.listinfo.payAmount = (Number(this.listinfo.payAmount)+(this.calcUsablePointsData.pointsNum/this.calcUsablePointsData.equivalentPoints)).toFixed(2); - // } - this.listinfo.payAmount = (currentPayAmount - couponData.discountAmount).toFixed(2) - this.favorable[0].value = ('-¥' + couponData.discountAmount) - - this.userCouponInfos.push({ - userCouponId: couponData.id, - type: couponData.type, - discountAmount: couponData.discountAmount, - num: couponData.type == 1 ? 1 : couponData.num, - }) - - this.$emit("setPayAmount", { - payAmount: this.listinfo.payAmount, - userCouponInfos: this.userCouponInfos, - freeCheck: this.freeCheck, - calcUsablePointsData: this.calcUsablePointsData, - isPointsChecked: this.isPointsChecked, - }) - } else { - uni.showToast({ - title: "优惠券满减金额大于订单金额不可使用", - icon: "none", - }) - } - } - // 商品券处理 - if (productList.length > 0) { - //商品券使用数量 - - let payAmount = this.listinfo.payAmount - productList.map((item, index) => { - // 筛选选中商品券商品列表 - let productDetails = this.listinfo.details.filter(v => v.productId == item.proId); - //金额从小到大排序 - let minCouponList = productDetails.sort((a, b) => (a.memberPrice > 0 ? a.memberPrice : a - .salePrice) - (b.memberPrice > 0 ? b.memberPrice : b.salePrice)) - // 商品数量 - let productAllNum = 0; - let productNum = 0 - let productPayAmount = 0 - minCouponList.map((v, indexs) => { - productNum = 0; - productPayAmount = 0; - let productDetailsNum = 0; - productDetails.map((v, indexs) => { - productDetailsNum += v.num; - }) - for (let i = 0; i < v.num; i++) { - if (productAllNum < productDetailsNum && productNum < item.num && ((v - .memberPrice > 0 ? v.memberPrice : v.price) <= (payAmount - - productPayAmount))) { - productNum++ - productAllNum++ - productPayAmount += v.memberPrice > 0 ? v.memberPrice : v.price - } - - } - payAmount = payAmount - productPayAmount - - }) - if (productNum > 0) { - this.userCouponInfos.push({ - userCouponId: item.id, - type: item.type, - productId: item.proId, - discountAmount: productPayAmount, - num: productNum, - }) - this.favorable[1].value.push({ - userCouponId: item.id, - name: item.name, - type: item.type, - productId: item.proId, - discountAmount: productPayAmount, - num: productNum, - }) - } - }) - - } - this.setPayAmount() - } - - const setPayAmount = (cartLists) => { - let tableFee; - // this.storeInfo.registerType == 'munchies' - if (this.userCouponInfos.length > 0) { - console.log(this.userCouponInfos) - this.userCouponInfos.forEach(item => { - if (item.type == 2) { - if (item.discountAmount && item.discountAmount > 0) { - this.listinfo.payAmount = (this.listinfo.payAmount - item.discountAmount).toFixed( - 2) - } - } - }) - } - this.isPointsChecked = false; - this.getCalcUsablePoints() - this.$emit("setPayAmount", { - payAmount: this.listinfo.payAmount, - userCouponInfos: this.userCouponInfos, - freeCheck: this.freeCheck, - calcUsablePointsData: this.calcUsablePointsData, - isPointsChecked: this.isPointsChecked, - }) - } + const setPayAmount = (cartLists) => {} // * 积分状态监听 - const pointsChange = () => { - if (this.freeCheck || !this.calcUsablePointsData.usable) { - return; - } - this.isPointsChecked = !this.isPointsChecked - if (this.isPointsChecked) { - this.listinfo.payAmount = (this.listinfo.payAmount - (this.calcUsablePointsData.pointsNum / this - .calcUsablePointsData.equivalentPoints)).toFixed(2); - } else { - this.listinfo.payAmount = (Number(this.listinfo.payAmount) + (this.calcUsablePointsData.pointsNum / - this.calcUsablePointsData.equivalentPoints)).toFixed(2); - } - this.$emit("setPayAmount", { - payAmount: this.listinfo.payAmount, - userCouponInfos: this.userCouponInfos, - freeDisabled: this.freeDisabled, - freeCheck: this.freeCheck, - calcUsablePointsData: this.calcUsablePointsData, - isPointsChecked: this.isPointsChecked, - }) - } + const pointsChange = () => {} + + // 跳转 const goUrl = (item) => { - if (this.listinfo.status == 'unpaid' || this.listinfo.status == 'paying') { - let couopnInfo; - switch (item.type) { - case 'coupon': - let payAmount = this.listinfo.payAmount; - let couponList = this.userCouponInfos.filter(v => v.type == 1); - if (couponList.length > 0) { - payAmount = payAmount + couponList.discountAmount; - } - couopnInfo = { - payAmount: this.listinfo.payAmount, - userCouponInfos: this.userCouponInfos, - freeDisabled: this.freeDisabled, - freeCheck: this.freeCheck, - calcUsablePointsData: this.calcUsablePointsData, - isPointsChecked: this.isPointsChecked, - } - uni.pro.navigateTo('/pages/user/coupon', { - type: "orderInfo_coupon", - shopId: this.listinfo.shopId, - orderId: this.listinfo.id, - couopnInfo: JSON.stringify(couopnInfo), - payAmount: payAmount, - shoppingCart: JSON.stringify(this.listinfo.details), - productList: JSON.stringify(couponList) - }) - break; - case 'product': - let productList = this.userCouponInfos.filter(v => v.type == 2); - couopnInfo = { - payAmount: this.listinfo.payAmount, - userCouponInfos: this.userCouponInfos, - freeDisabled: this.freeDisabled, - freeCheck: this.freeCheck, - calcUsablePointsData: this.calcUsablePointsData, - isPointsChecked: this.isPointsChecked, - } - uni.pro.navigateTo('/pages/user/coupon', { - type: "orderInfo_product", - shopId: this.listinfo.shopId, - orderId: this.listinfo.id, - couopnInfo: JSON.stringify(couopnInfo), - payAmount: this.listinfo.payAmount, - shoppingCart: JSON.stringify(this.listinfo.details), - productList: JSON.stringify(productList) - }) - break; - } + switch (item.type) { + case 'coupon': + uni.pro.navigateTo('/pages/order/coupon', { + type: "confirm_order_coupon", + shopId: uni.cache.get('orderVIP').shopId, + shopUserId: props.orderVIP.id, + payAmount: props.listinfo.totalCost, + shoppingCart: JSON.stringify(props.listinfo.combinedArray) + }) + break; + case 'product': + uni.pro.navigateTo('/pages/order/coupon', { + type: "confirm_order_product", + shopId: uni.cache.get('orderVIP').shopId, + shopUserId: props.orderVIP.id, + payAmount: props.listinfo.totalCost, + shoppingCart: JSON.stringify(props.listinfo.combinedArray) + }) + break; } } // * 获取积分相关信息 - const getCalcUsablePoints = async () => { - let params = { - memberId: this.listinfo.memberId, - } - if (this.listinfo.pointsDiscountAmount) { - params.orderAmount = this.listinfo.payAmount + this.listinfo.pointsDiscountAmount - } else { - params.orderAmount = this.listinfo.payAmount - } - let res = await this.api.calcUsablePoints(params) - this.calcUsablePointsData = res.data; - if (this.calcUsablePointsData.usable && params.orderAmount >= this.calcUsablePointsData - .minPaymentAmount) { - this.calcUsablePointsData.pointsNum = this.calcUsablePointsData.accountPoints >= this - .calcUsablePointsData.maxUsablePoints ? this.calcUsablePointsData.maxUsablePoints : this - .calcUsablePointsData.accountPoints - } - } + const getCalcUsablePoints = async () => {} // * 复制订单号 const copyHandle = (e) => { @@ -501,9 +391,14 @@ } }); } + + // 将方法暴露给父组件 + defineExpose({ + dataprocessing + }); - diff --git a/pages/order/coupon.vue b/pages/order/coupon.vue new file mode 100644 index 0000000..82f0a71 --- /dev/null +++ b/pages/order/coupon.vue @@ -0,0 +1,572 @@ + + + + + \ No newline at end of file diff --git a/pages/order/detail.vue b/pages/order/detail.vue index 8cc840a..c4e87a4 100644 --- a/pages/order/detail.vue +++ b/pages/order/detail.vue @@ -3,9 +3,8 @@ - + - 待支付 已完成 @@ -33,11 +32,10 @@ - + :listinfo="listinfo" :orderVIP="orderVIP" :ordershopUserInfo='ordershopUserInfo' @istype="istype"> + + @@ -48,7 +46,7 @@ ref="rechargeFree" :freeDisabled="freeDisabled" :payAmount="listinfo.payAmount" - :freeDingConfig="listinfo.freeDingConfig" :shopUserInfo="amountVIP" @changeFree="changeFree"> + :freeDingConfig="listinfo.freeDingConfig" :shopUserInfo="orderVIP" @changeFree="changeFree"> + :freeDingConfig="listinfo.freeDingConfig" :shopUserInfo="orderVIP" @changeFree="changeFree"> - - - --> + --> + + + + + + - + 实付金额: - ¥{{listinfo.payAmount}} + ¥{{listinfo.totalCost}} - {{11}} + {{paymentmethod.paymentBtnText}} - - - - - - - 请输入支付密码 - - - - - - - - + @@ -100,7 +89,9 @@ import { ref, reactive, - onMounted + onMounted, + onUnmounted, + watchEffect } from 'vue'; import { @@ -108,6 +99,7 @@ } from '@/common/api/order/index.js' import { + APIusershopInfodetail, APIshopUserInfo } from '@/common/api/member.js' @@ -117,24 +109,30 @@ const cartStore = useCartStore() - // import payPasswordtwo from '@/components/payPasswordtwo.vue' + // 结账管理 + import { + Memberpay + } from '@/stores/pay.js'; + + const storeMemberpay = Memberpay(); + + import payPassword from '@/components/payPassword.vue' import orderInfoAfter from './components/orderInfoAfter.vue' // import orderInfoBefore from '../components/orderInfoBefore.vue' // import rechargeFree from '../components/rechargeFree.vue' - // import paymentMethod from '../components/paymentMethod.vue' + import paymentMethodes from '@/components/paymentMethod.vue'; //支付方式 // 输入支付密码 const ispws = ref(false) - // 支付方式切换 - const paymentmethod = reactive({ - radiovalue: 1, - paymentBtnText: "余额支付", - payType: '' + // 商品订单会员 + const ordershopUserInfo = ref({ + isTableFee: 0 }) + // 是否显示商家二维码信息 try { - const shopQrcode = uni.cache.get('shopInfo').shopQrcode + const shopQrcode = ref(uni.cache.get('shopInfo').shopQrcode) } catch (error) { //TODO handle the exception } @@ -144,117 +142,87 @@ // 订单详情 const listinfo = reactive({ - - }) - const listinfoId = ref('') - - // 会员信息? - const amountVIP = reactive({}) - - //优惠卷信息 - const couopnInfo = reactive({ - + combinedArray: {}, + Productroll: 0, + coupondiscountAmount: "", + couponInfoList: '' }) - const freeDisabled = ref(false) + // 会员信息 + const orderVIP = ref() + + //判断是否是打包商品 + const is_type = ref(0) + + //打包商品切换 + const istype = (newValue) => { + is_type.value = newValue; + }; + + //积分 const freeCheck = ref(false) - const rechargeFreeChecked = ref(false) + // * 获取订单详情接口 const orderorderInfo = async () => { let res = await APIgetOrderById({ orderId: orderId.value }) - console.log(res) if (res) { Object.assign(listinfo, res); - console.log(listinfo) - if (listinfo.couponInfoList) { - listinfo.couponInfoList = JSON.parse(listinfo.couponInfoList) - } - // this.listinfoId = res.data.orderId; - // this.shopId = res.data.shopId; - // if (listinfo.useType == " ") { - // //堂食先付费 - // } - // if (listinfo.freeDingConfig && listinfo.payAmount < listinfo.freeDingConfig - // .rechargeThreshold) { - // this.freeDisabled = true - // } - // console.log(listinfo) - // if (listinfo.useType == "dine-in-after") { - // console.log(this.$refs.orderInfoAfterRef) - // this.$nextTick(() => { - // this.$refs.orderInfoAfterRef.childOnShow(); - // }) - // } - // this.getAount(); - } - } - - const setPayAmount = (data) => { - console.log(data) - listinfo.payAmount = data.payAmount - this.couopnInfo = data; - this.freeDisabled = data.freeDisabled - this.freeCheck = data.freeCheck - if (listinfo.freeDingConfig && listinfo.payAmount < listinfo.freeDingConfig - .rechargeThreshold) { - this.freeDisabled = true - } else { - this.freeDisabled = false - } - } - - // * 免单状态监听 - const changeFree = (val) => { - // this.freeCheck = val; - this.rechargeFreeChecked = !val - - if (this.rechargeFreeChecked) { - if (this.couopnInfo) { - if (this.couopnInfo.isPointsChecked) { - listinfo.payAmount = (Number(listinfo.payAmount) + (this.couopnInfo - .calcUsablePointsData.pointsNum / this.couopnInfo.calcUsablePointsData - .equivalentPoints)).toFixed(2); - } - let couponList = this.couopnInfo.userCouponInfos.filter(v => v.type == 1); - if (couponList.length > 0) { - listinfo.payAmount = (couponList.length > 0 ? Number(listinfo.payAmount) + - couponList[0].discountAmount : listinfo.payAmount) - } - let productList = this.couopnInfo.userCouponInfos.filter(v => v.type == 2); - if (productList.length > 0) { - productList.map(item => { - - listinfo.payAmount = Number(listinfo.payAmount) + item.discountAmount + if (listinfo.status == 'unpaid') { + try { + let res = await APIhistoryOrder({ + orderId: orderId.value }) - } - + } catch (error) {} + // if (listinfo.couponInfoList) { + // listinfo.couponInfoList = JSON.parse(listinfo.couponInfoList) + // } } - listinfo.payAmount = (listinfo.payAmount * listinfo.freeDingConfig.rechargeTimes) - .toFixed(2) - } else { - listinfo.payAmount = (listinfo.payAmount / listinfo.freeDingConfig.rechargeTimes) - .toFixed(2) - if (this.couopnInfo) { - this.couopnInfo.isPointsChecked = false; - let couponList = this.couopnInfo.userCouponInfos.filter(v => v.type == 1); - if (couponList.length > 0) { - listinfo.payAmount = (couponList.length > 0 ? Number(listinfo.payAmount) - - couponList[0].discountAmount : listinfo.payAmount) - } - let productList = this.couopnInfo.userCouponInfos.filter(v => v.type == 2); - if (productList.length > 0) { - productList.map(item => { - listinfo.payAmount = Number(listinfo.payAmount) - item.discountAmount - }) - } + // 历史订单 + if (listinfo.detailMap) { + let combinedArray = []; + for (const key in listinfo.detailMap) { + if (listinfo.detailMap.hasOwnProperty(key)) { + let subArray = listinfo.detailMap[key]; + combinedArray = [...combinedArray, ...subArray] + } + } + listinfo.combinedArray = combinedArray + setTimeout(async () => { + listinfo.packFee = await cartStore.getTotalPackFee(listinfo.combinedArray) + // 计算购物车商品费用 + listinfo.totalPrices = await cartStore.getTotalTotalPrices(listinfo.combinedArray) + // 餐位费listinfo.seatNum + listinfo.Seatcharge = await cartStore.getTotalSeatcharge(listinfo.seatNum) + }) } } } + // 监听价格算法 + watchEffect(async () => { + if (listinfo.combinedArray.length > 0) { + //总价格 + console.log(listinfo.combinedArray, listinfo.packFee, listinfo.totalPrices, listinfo.Seatcharge, + listinfo.Productroll, listinfo.coupondiscountAmount) + // 打包费packFee 计算购物车商品费用totalPrices 餐位费Seatcharge + let sum = (is_type.value != 0 ? listinfo.packFee : 0) + listinfo.totalPrices + (is_type.value == + 0 ? listinfo.Seatcharge : 0); + listinfo.originAmount = Math.round(sum * 100) / 100; + + // 打包费packFee 计算购物车商品费用totalPrices 餐位费Seatcharge 商品卷Productroll 优惠卷coupondiscountAmount + let sums = (is_type.value != 0 ? listinfo.packFee : 0) + listinfo.totalPrices + (is_type.value == + 0 ? listinfo.Seatcharge : 0) - (listinfo.Productroll || 0) - (listinfo + .coupondiscountAmount || 0); + listinfo.totalCost = Math.round(sums * 100) / 100; + console.log(listinfo.totalCost) + // totalCost.value = Math.round(sums * 100) / 100; + } + }); + const saveImage = (url) => { uni.saveImage({ url: url, @@ -267,22 +235,17 @@ }); } - // * 获取会员信息 - const getAount = async () => { - let res = await this.api.shopUserInfo({ - "shopId": listinfo.shopId, - "userId": uni.cache.get('userInfo').id, - }) - if (res.code == 0) { - console.log("会员信息===", res) - this.amountVIP = res.data; - } - } + // 支付方式切换 + const paymentmethod = reactive({ + radiovalue: 1, + paymentBtnText: "余额支付", + payType: '' + }) - // * 获取会员信息 const groupChange = async (e) => { - this.radiovalue = e.type; - this.paymentBtnText = e.name; + paymentmethod.radiovalue = e.type; + paymentmethod.paymentBtnText = e.name; + paymentmethod.payType = e.payType; } // * 去充值 @@ -292,250 +255,83 @@ }) } + // 操作下单时候 + const orderInfoAfterRef = ref(null) + + // 商品卷的id储存 + const uniqueIds = ref([]) + + // 这是优惠卷传的值 + const handleReturnData = async (data) => { + console.log(data) + // 这是优惠卷 + if (data.typeOrder == 1) { + // 优惠卷减去的金额 + listinfo.coupondiscountAmount = data.item.discountAmount + uniqueIds.value.push(data.item.id) + orderInfoAfterRef.value.dataprocessing(data) + } else { + // 筛选出商品卷的id + uniqueIds.value = [...uniqueIds.value, ...new Set(data.map(item => item.id))] + // 商品卷总价价格 + listinfo.Productroll = await cartStore.getTotalProductroll(data) + let res = { + Productroll: listinfo.Productroll, + uniqueIds: uniqueIds.value.length + } + orderInfoAfterRef.value.dataprocessing(res) + } + + }; + // * 去支付 const goToPay = async () => { - if ((this.radiovalue == 2 || this.radiovalue == 3) && listinfo.payAmount <= 0) { - uni.showToast({ - title: "支付金额必须大于0", - icon: 'none' - }) - return; + // 余额支付 + if (paymentmethod.payType == '') { + ispws.value = true + return false } - if (this.couopnInfo) { - let params = { - shopId: listinfo.shopId, - orderId: listinfo.orderId, - userCouponInfos: this.couopnInfo.userCouponInfos, - } - if (this.couopnInfo.isPointsChecked && this.couopnInfo.calcUsablePointsData.pointsNum && this - .couopnInfo.calcUsablePointsData.pointsNum > 0) { - params.pointsNum = this.couopnInfo.calcUsablePointsData.pointsNum; - } - let res = await this.api.useCoupon(params) + let checkOrderPay = { + orderId: orderId.value, + vipPrice: orderVIP.value.isVip == 1 && ordershopUserInfo.value.isMemberPrice == 1 ? 1 : + 0, //是否使用会员价0否1是 + allPack: is_type.value == 0 ? 0 : 1, //是否整单打包 + seatNum: is_type.value == 0 ? listinfo.seatNum : 0, //用餐人数 + originAmount: listinfo.originAmount, //订单原金额(包含打包费+餐位费) 不含折扣价格 + discountRatio: 1, //折扣比例(计算时 向上取整保留 两位小数) 写死1 + discountAmount: 0, //手动优惠金额 写死0 + productCouponDiscountAmount: listinfo.Productroll, //商品优惠券抵扣金额 + fullCouponDiscountAmount: listinfo.coupondiscountAmount, //满减优惠券抵扣金额 + couponList: uniqueIds.value, //用户使用的卡券 + orderAmount: listinfo.totalCost, // 最中订单金额 + roundAmount: 0, //抹零金额 减免多少钱 + pointsDiscountAmount: 0, //积分抵扣金额(tb_points_basic_setting表) + pointsNum: 0, //(扣除各类折扣 enable_deduction后使用) + remark: '', //用户备注 } - - if (this.radiovalue == 2 || this.radiovalue == 3) { - this.wechatPay() //微信支付 - } else { - // 先判断是否设置支付密码。0是没设置。没设置的情况下跳转到设置页面。有的话输入支付密码 - // console.log(isPwd,'是否设置了支付密码') - if (this.amountVIP.isVip == 0) { //非会员情况 - - this.goRecharge(); - } else { - if (uni.cache.get('userInfo').isPwd == 0) { - uni.navigateTo({ - url: '/pages/member/setPassword?shopUserInfo=' + JSON.stringify(this.amountVIP) - }) - } else { - uni.hideLoading() - // this.payPasswordShow = false; - this.ispws = true - - } - } - - } - } - - // * 取消支付 - const payClose = async () => { - this.ispws = false; - console.log(2) - uni.showToast({ - icon: 'none', - title: '取消支付' + let res = await storeMemberpay.actionsltPayOrder({ + checkOrderPay, + payType: paymentmethod.payType, + buyerRemark: '', + returnUrl: '' }) - setTimeout(res => { - uni.switchTab({ - url: '/pages/order/order' - }); - }, 500) + if (res) { + await orderorderInfo() + // uni.redirectTo({ + // url: '/order/detail?orderId=' + res.id + // }); + } } - // * 余额支付 + // 余额支付 const accountPayevent = async (pwd) => { - this.ispws = false; - let res = await this.api.accountPay({ - orderId: this.listinfoId, - memberId: this.amountVIP.id, - pwd: pwd - }) - if (res.code == 0) { - // data ->1 支付成功 - // ->2 余额不足 - // ->3 未设置支付密码, - // ->4 不是会员, - if (res.data == 1) { - uni.showToast({ - title: "支付成功", - icon: 'none' - }) - let _this = this - uni.requestSubscribeMessage({ - tmplIds: ["z0fUG7-jhSfYCrw6poOvSRzh4_hgnPkm_5C7E5s5bCQ", - "AV-KybUHaK3KtFVLqpy6PHccHBS7XeX__mOM4RbufnQ" - ], - complete() { - uni.redirectTo({ - url: '/pagesOrder/order_detail/index?orderId=' + _this.listinfoId - }); - }, - }) - } else if (res.data == 2) { - uni.showToast({ - title: "余额不足", - icon: 'none' - }) - setTimeout(() => { - // 去充值 - this.goRecharge() - }, 1500) - } else if (res.data == 3) { - uni.showToast({ - title: "未设置支付密码", - icon: 'none' - }) - setTimeout(() => { - uni.navigateTo({ - url: '/pages/member/setPassword?shopUserInfo=' + JSON.stringify(this - .amountVIP) - }) - }, 1500) - - } else if (res.data == 4) { - uni.showToast({ - title: "非会员请充值", - icon: 'none' - }) - setTimeout(() => { - // 去充值 - this.goRecharge() - }, 1500) - } - - } - + console.log('输入的密码是:', pwd); + ispws.value = false; } - /** - * 微信支付 - */ - const wechatPay = async () => { - let res; - console.log(this.rechargeFreeChecked) - if (!this.rechargeFreeChecked) { - res = await this.api.orderPay({ - orderId: orderId.value, - // #ifdef MP-WEIXIN - payType: 'wechatPay', - // #endif - // #ifdef MP-ALIPAY - payType: 'aliPay', - // #endif - // payType: this.radiovalue == 2 ? 'wechatPay' : 'aliPay' - }) //判断是否支付成功 - } else { - console.log(listinfo.payAmount) - res = await this.api.paymemeberIn({ - shopId: listinfo.shopId, - amount: listinfo.payAmount, - orderId: orderId.value, - // #ifdef MP-WEIXIN - payType: 'wechatPay', - // #endif - // #ifdef MP-ALIPAY - payType: 'aliPay', - // #endif - // payType: this.radiovalue == 2 ? 'wechatPay' : 'aliPay' - }) //判断是否支付成功 - } - if (res.code == 0) { - uni.showLoading({ - title: '加载中', - mask: true - }) - uni.requestPayment({ - // #ifdef MP-WEIXIN - provider: 'wxpay', //支付类型-固定值 - partnerid: res.data.appId, // 微信支付商户号 - timeStamp: res.data.timeStamp, // 时间戳(单位:秒) - nonceStr: res.data.nonceStr, // 随机字符串 - package: res.data.package, // 固定值 - signType: res.data.signType, //固定值 - paySign: res.data.paySign, //签名 - // #endif - // #ifdef MP-ALIPAY - provider: 'alipay', //支付类型-固定值 - orderInfo: res.data.tradeNo, // 微信支付商户号 - // #endif - success: (res) => { - let _this = this - uni.showToast({ - title: "支付成功" - }) - // #ifdef MP-WEIXIN - uni.requestSubscribeMessage({ - tmplIds: ['z0fUG7-jhSfYCrw6poOvSRzh4_hgnPkm_5C7E5s5bCQ'], - complete() { - - _this.paymodfiyOrderInfo() - setTimeout(res => { - uni.hideLoading() - uni.switchTab({ - url: '/pages/order/order' - }); - }, 500) - }, - }) - // #endif - // #ifdef MP-ALIPAY - _this.paymodfiyOrderInfo() - uni.switchTab({ - url: '/pages/order/order' - }); - // #endif - }, - fail: async (err) => { - - let res = await this.api.cancelOrderPay({ - orderId: orderId.value, - }) //判断是否支付成功 - uni.showToast({ - icon: 'none', - title: '支付失败' - }) - setTimeout(res => { - uni.hideLoading() - uni.switchTab({ - url: '/pages/order/order' - }); - }, 500) - - } - }); - } - } - - // * 支付完成后请求 - const paymodfiyOrderInfo = async () => { - let res = await this.api.paymodfiyOrderInfo({ - orderId: listinfo.orderId, - }) - } - - // * 复制订单号 - const copyHandle = async (e) => { - uni.setClipboardData({ - data: e, - success() { - uni.showToast({ - title: '复制成功', - icon: 'none' - }); - } - }); - } + onUnmounted(() => { + uni.$off('returnData', handleReturnData); + }); onMounted(async () => { // 获取当前页面栈 @@ -545,16 +341,25 @@ // 获取页面参数 const options = currentPage.options; orderId.value = options.orderId - let res = await APIshopUserInfo({ - shopId: options.shopId - }) - cartStore.shopInfo = res.shopInfo - orderorderInfo() + if (options.shopId) { + // 每次进来全局更新shopId + uni.cache.set('shopId', options.shopId, 30) + uni.$on('returnData', handleReturnData); + // * 获取会员信息 + let res = await APIshopUserInfo({ + shopId: options.shopId + }) + uni.cache.set('orderVIP', res) + uni.cache.set('ordershopUserInfo', res.shopInfo) + orderVIP.value = res + ordershopUserInfo.value = res.shopInfo + } + await orderorderInfo() }) - + \ No newline at end of file diff --git a/pages/user/member/setPassword.vue b/pages/user/member/setPassword.vue index 319a489..1080522 100644 --- a/pages/user/member/setPassword.vue +++ b/pages/user/member/setPassword.vue @@ -3,19 +3,21 @@ 当前账号 - - - + - + - {{ Recapture }} + {{ datalist.Recapture }} + - {{ second }}s重新发送 + {{ datalist.second }}s重新发送 @@ -29,178 +31,179 @@ - + - 确定 + 确定 - \ No newline at end of file diff --git a/pages/user/user.vue b/pages/user/user.vue index 5402f7d..ab0e15b 100644 --- a/pages/user/user.vue +++ b/pages/user/user.vue @@ -17,7 +17,6 @@ - 我的资产 @@ -127,7 +126,6 @@ } const clickTo = (item, index) => { - console.log(item, index) let shopId = null; switch (item.type) { case 'my_order': diff --git a/stores/order.js b/stores/order.js index 28e45c6..34b02db 100644 --- a/stores/order.js +++ b/stores/order.js @@ -10,8 +10,12 @@ import { } from 'vue'; export const useCartStore = defineStore('cart', () => { - const shopInfo = null - const dinersNum = uni.cache.get('dinersNum') + // const dinersNum = uni.cache.get('dinersNum') + // const isVip = uni.cache.get('orderVIP').isVip //此用户是否是会员 + // const isMemberPrice = uni.cache.get('ordershopUserInfo').isMemberPrice //此店是否可以用会员 + // const isTableFee = uni.cache.get('ordershopUserInfo').isTableFee //此店是否免桌位费 + // const tableFee = uni.cache.get('ordershopUserInfo').tableFee //一个餐位费多钱 + // 计算单个商品的打包费用(向下取整并保留两位小数) const itemSinglePackFee = (item) => { const fee = item.packFee * item.cartNumber; @@ -24,15 +28,39 @@ export const useCartStore = defineStore('cart', () => { if (!matchedProducts || !Array.isArray(matchedProducts)) { return 0; } + // console.log(uni.cache.get('orderVIP').isVip, uni.cache.get('ordershopUserInfo').isMemberPrice, + // 111) // 购物车总数价格 let cart = matchedProducts.reduce((total, item) => { // 是否启用会员价 0否1是 - if (shopInfo.isVip == 1 && shopInfo.isMemberPrice == 1) { + if (uni.cache.get('orderVIP').isVip == 1 && uni.cache.get('ordershopUserInfo') + .isMemberPrice == 1) { // memberPrice会员价 - return total + parseFloat(item.memberPrice) * parseFloat(item.cartNumber); + return total + parseFloat(item.memberPrice) * parseFloat(item.num); } else { // salePrice销售价 - return total + parseFloat(item.salePrice) * parseFloat(item.cartNumber); + return total + parseFloat(item.price) * parseFloat(item.num); + } + }, 0); + // 向上取整并保留两位小数 + return cart = Math.ceil(cart * 100) / 100; + }); + + // 计算商品卷所选择的总价格 + const getTotalProductroll = (matchedProducts) => computed(() => { + if (!matchedProducts || !Array.isArray(matchedProducts)) { + return 0; + } + // 购物车总数价格 + let cart = matchedProducts.reduce((total, item) => { + // 是否启用会员价 0否1是 + if (uni.cache.get('orderVIP').isVip == 1 && uni.cache.get('ordershopUserInfo') + .isMemberPrice == 1) { + // memberPrice会员价 + return total + parseFloat(item.memberPrice) + } else { + // salePrice销售价 + return total + parseFloat(item.price) } }, 0); // 向上取整并保留两位小数 @@ -40,18 +68,16 @@ export const useCartStore = defineStore('cart', () => { }); // 桌位置 - const getTotalSeatcharge = () => computed(() => { + const getTotalSeatcharge = (seatNum) => computed(() => { // 是否免除桌位费 0 否 1 是 let tableFeeTotals = 0 - try { - if (shopInfo.isTableFee == 0 && dinersNum) { - const tableFeeTotals = Math.ceil(parseFloat(dinersNum) * parseFloat(shopInfo - .tableFee) * 100) / 100; - } - } catch (error) { - //TODO handle the exception + + if (uni.cache.get('ordershopUserInfo').isTableFee == 0 && (seatNum || uni.cache.get('dinersNum'))) { + tableFeeTotals = Math.ceil(parseFloat((seatNum || uni.cache.get('dinersNum'))) * parseFloat( + uni.cache.get('ordershopUserInfo').tableFee) * 100) / 100; } - return Math.floor(tableFeeTotals * 100) / 100 ? Math.floor(tableFeeTotals * 100) / 100 : 0; + console.log(uni.cache.get('ordershopUserInfo').isTableFee,seatNum,22222) + return Math.floor(tableFeeTotals * 100) / 100; }); // 计算购物车总打包费用(向下取整并保留两位小数) @@ -68,6 +94,7 @@ export const useCartStore = defineStore('cart', () => { itemSinglePackFee, getTotalPackFee, getTotalSeatcharge, - getTotalTotalPrices + getTotalTotalPrices, + getTotalProductroll }; }); \ No newline at end of file diff --git a/stores/pay.js b/stores/pay.js index f4e3349..6bef341 100644 --- a/stores/pay.js +++ b/stores/pay.js @@ -62,6 +62,9 @@ export const Memberpay = defineStore('memberpay', { title: "支付成功" }) console.log('支付成功') + setTimeout(() => { + uni.navigateBack() + }, 1000) resolve(res) // #endif // #ifdef MP-ALIPAY @@ -69,6 +72,9 @@ export const Memberpay = defineStore('memberpay', { uni.showToast({ title: "支付成功" }) + setTimeout(() => { + uni.navigateBack() + }, 1000) resolve(res) } else { uni.showToast({ @@ -110,14 +116,14 @@ export const Memberpay = defineStore('memberpay', { // #endif // #ifdef MP-ALIPAY payType: 'aliPay', - openId: uni.cache.get('alipayOpenId').wechatOpenId, + openId: uni.cache.get('alipayOpenId').alipayOpenId, // #endif returnUrl: data.returnUrl, buyerRemark: data.buyerRemark, }) if (res) { uni.showLoading({ - title: '支付吊起中...', + title: '加载中...', mask: true }) uni.requestPayment({ diff --git a/stores/user.js b/stores/user.js index ded3913..27a68a4 100644 --- a/stores/user.js +++ b/stores/user.js @@ -95,46 +95,75 @@ export const productStore = defineStore('product', { return null; }, // 扫码请求 - scanCodeactions() { + scanCodeactions(q) { return new Promise(async (resolve, reject) => { - // #ifdef APP || MP-WEIXIN || MP-ALIPAY - uni.scanCode({ - success: async (res) => { - let tableCode = this.getQueryString( - decodeURIComponent(res - .result), - 'code') - // 储存卓玛 - uni.cache.set('tableCode', tableCode) - if (tableCode) { - let data = await this.actionsproductqueryShop() - // -4请求登录 - const store = Storelogin() - if (data.code == '-4') { - if (await store.actionslogin()) { - // 成功 接着在调用 - await this.actionsproductqueryShop() - } - } - // 是否免除桌位费 0否1是 - if (uni.cache.get('shopInfo').isTableFee == 0) { - uni.pro.navigateTo('product/choosetable') - } else { - uni.pro.navigateTo( - 'product/index', { - tableCode: tableCode, - }) - } + if (q) { + // #ifdef MP-WEIXIN + let tableCode = this.getQueryString(decodeURIComponent(q), 'code') + // #endif + // #ifdef MP-ALIPAY + let tableCode = q + // #endif + // 储存卓玛 + uni.cache.set('tableCode', tableCode) + if (tableCode) { + let data = await this.actionsproductqueryShop() + // -4请求登录 + const store = Storelogin() + if (data.code == '-4') { + if (await store.actionslogin()) { + // 成功 接着在调用 + await this.actionsproductqueryShop() + } } - }, - fail: (res) => { - console.log(res) + // 是否免除桌位费 0否1是 + if (uni.cache.get('shopInfo').isTableFee == 0) { + uni.pro.navigateTo('product/choosetable') + } else { + uni.pro.navigateTo( + 'product/index', { + tableCode: tableCode, + }) + } + } - }); - // #endif - + } else { + // #ifdef APP || MP-WEIXIN || MP-ALIPAY + uni.scanCode({ + success: async (res) => { + let tableCode = this.getQueryString( + decodeURIComponent(res.result), 'code') + // 储存卓玛 + uni.cache.set('tableCode', tableCode) + if (tableCode) { + let data = await this.actionsproductqueryShop() + // -4请求登录 + const store = Storelogin() + if (data.code == '-4') { + if (await store.actionslogin()) { + // 成功 接着在调用 + await this.actionsproductqueryShop() + } + } + // 是否免除桌位费 0否1是 + if (uni.cache.get('shopInfo').isTableFee == 0) { + uni.pro.navigateTo('product/choosetable') + } else { + uni.pro.navigateTo( + 'product/index', { + tableCode: tableCode, + }) + } + } + }, + fail: (res) => { + console.log(res) + } + }); + // #endif + } // #ifdef H5 if (uni.cache.get('tableCode')) { let data = await this.actionsproductqueryShop()