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 @@
+
+
+
+
+ 请输入支付密码
+
+
+ {{ password[index] ? '*' : '' }}
+
+
+
+
+ {{ num === 'delete' ? '删除' : num }}
+
+
+
+
+
+
+
+
+
\ 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 @@
+
+
+
+
+
+
+
+
+ {{item.num || 0}}
+ 张
+
+
+ ¥
+ {{item.discountAmount || 0}}
+
+
+
+ {{ item.type == 2 ? item.name : '优惠券(元)'}}
+
+
+
+
+
+
+ {{ item.shopName }}
+
+
+ 无门槛使用
+
+
+ {{ item.type == 2 ? '会员商品券' : item.name}}
+
+
+ 去使用
+
+
+
+
+
+
+
+
+ 不可使用
+
+
+
+ 有效期至:{{item.endTime}}
+
+
+
+
+
+
+
+
+
+
+
+
+ 确定
+
+
+
+
+
+
+
\ 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()