From 9094818ea13b892603068511cdfb070fdb478c39 Mon Sep 17 00:00:00 2001 From: wwz <1144797966@qq.com> Date: Thu, 27 Mar 2025 14:41:50 +0800 Subject: [PATCH] =?UTF-8?q?=E7=99=BD=E5=B1=8F=EF=BC=8C=E9=A6=96=E9=A1=B5?= =?UTF-8?q?=EF=BC=8C=E9=9C=B8=E7=8E=8B=E9=A4=90=EF=BC=8C=E7=BD=91=E7=BB=9C?= =?UTF-8?q?=E5=AE=8C=E5=96=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- App.vue | 10 ++-- common/js/websocket.js | 15 +++-- components/paymentMethod.vue | 3 +- framework/0-conf.js | 6 +- pages/order/components/orderInfoAfter.vue | 7 ++- pages/order/detail.vue | 71 ++++++++++------------- pages/product/choosetable.vue | 16 +++-- pages/product/index.vue | 23 +++++--- pages/user/user.vue | 2 +- stores/order.js | 18 +++++- stores/user.js | 9 ++- 11 files changed, 104 insertions(+), 76 deletions(-) diff --git a/App.vue b/App.vue index d37448c..dcb3298 100644 --- a/App.vue +++ b/App.vue @@ -10,7 +10,8 @@ onShow } from '@dcloudio/uni-app'; import { - getCurrentInstance + getCurrentInstance, + nextTick } from 'vue'; import { Storelogin @@ -21,15 +22,12 @@ // 小程序启动时执行 onLaunch(async () => { // 标记应用启动完成 + // clear + await nextTick() const store = useNavbarStore(); await store.initNavbarHeight(); }); - // export default { - // onLaunch: async function() { - - - // }, onShow(async () => { try { // #ifdef MP-WEIXIN diff --git a/common/js/websocket.js b/common/js/websocket.js index 89c0bdb..a4138e0 100644 --- a/common/js/websocket.js +++ b/common/js/websocket.js @@ -28,6 +28,7 @@ const useWebSocket = (options = {}) => { const initMessageSendAttempts = ref(0); //初始化连接多少次 const reconnectStartTime = ref(0); //新增:记录重连开始时间 const isPongReceived = ref(false) + const allowReconnect = ref(true); // 新增:控制是否允许重连 // 关闭现有连接并清理资源 const closeExistingConnection = () => { if (socketTask.value) { @@ -80,7 +81,7 @@ const useWebSocket = (options = {}) => { }, fail: () => { console.error('WebSocket 连接失败,尝试重连'); - if (autoReconnect.value) { + if (autoReconnect.value && allowReconnect.value) { handleReconnect(); } } @@ -98,6 +99,7 @@ const useWebSocket = (options = {}) => { console.log('初始化正常,心跳响应正常'); // 清除重连定时器 clearTimeout(reconnectTimer.value); + allowReconnect.value = false reconnectTimer.value = null; } @@ -108,7 +110,7 @@ const useWebSocket = (options = {}) => { isConnected.value = false; clearInterval(heartbeatTimer.value); // 停止心跳定时器 clearTimeout(reconnectTimer.value); // 清除重连定时器 - if (res.code == '1006') { + if (res.code == '1006' && !allowReconnect.value) { uni.showToast({ title: '网络异常,请重新扫码', icon: 'none' @@ -166,7 +168,7 @@ const useWebSocket = (options = {}) => { console.error('心跳超时,未收到响应,尝试重连'); clearInterval(heartbeatTimer.value); if (autoReconnect.value && reconnectAttempts.value < - maxReconnectAttempts) { + maxReconnectAttempts && allowReconnect.value) { handleReconnect(); } else { console.error('重连次数达到上限,停止重连和心跳'); @@ -197,7 +199,7 @@ const useWebSocket = (options = {}) => { console.error('心跳消息发送失败,尝试重连'); clearInterval(heartbeatTimer.value); if (autoReconnect.value && reconnectAttempts.value < - maxReconnectAttempts) { + maxReconnectAttempts && allowReconnect.value) { handleReconnect(); } else { console.error('重连次数达到上限,停止重连和心跳'); @@ -246,6 +248,11 @@ const useWebSocket = (options = {}) => { return; } + if (!allowReconnect.value) { + console.log('重连功能已关闭,不进行重连'); + return; + } + if (reconnectAttempts.value < maxReconnectAttempts) { reconnectAttempts.value++; const reconnectInterval = initialReconnectInterval * Math.pow(2, reconnectAttempts.value - 1); diff --git a/components/paymentMethod.vue b/components/paymentMethod.vue index abad62a..b766881 100644 --- a/components/paymentMethod.vue +++ b/components/paymentMethod.vue @@ -6,7 +6,8 @@ - + diff --git a/framework/0-conf.js b/framework/0-conf.js index b44fa65..df0f1b9 100644 --- a/framework/0-conf.js +++ b/framework/0-conf.js @@ -7,6 +7,10 @@ const proxyApi = "/api" // #ifdef MP-WEIXIN || APP || MP-ALIPAY const proxyApi = 'https://tapi.cashier.sxczgkj.cn' // 调试地址 const proxyApiwws = 'wss://sockets.sxczgkj.com/wss' // 调试地址 + +// // 本地 +// const proxyApi = 'http://192.168.1.31' // 固定的测试 +// const proxyApiwws = 'ws://192.168.1.43:2348' //宏哥本地 // #endif // #ifdef H5 @@ -15,7 +19,7 @@ const baseUrlwws = 'wss://sockets.sxczgkj.com/wss' // #endif // #ifdef APP || MP-WEIXIN || MP-ALIPAY -const baseUrl = debug ? proxyApi : 'https://cashier.sxczgkj.com' // +const baseUrl = debug ? proxyApi : 'https://cashier.sxczgkj.com' // 线上 const baseUrlwws = debug ? proxyApiwws : 'wss://czgeatws.sxczgkj.com/wss' // 线上 // #endif diff --git a/pages/order/components/orderInfoAfter.vue b/pages/order/components/orderInfoAfter.vue index 0730967..624d520 100644 --- a/pages/order/components/orderInfoAfter.vue +++ b/pages/order/components/orderInfoAfter.vue @@ -65,12 +65,15 @@ {{item.productName}} - {{item.productSkuName}} + {{item.skuName}} - ¥{{orderVIP.isVip ==1 && ordershopUserInfo.isMemberPrice==1?(item.memberPrice|| item.price):item.price}} + {{item.price}} + + ¥{{orderVIP.isVip ==1 && ordershopUserInfo.isMemberPrice==1?(item.memberPrice|| item.price):item.price}} + x{{item.num}} diff --git a/pages/order/detail.vue b/pages/order/detail.vue index beea96a..4864097 100644 --- a/pages/order/detail.vue +++ b/pages/order/detail.vue @@ -212,41 +212,34 @@ // 监听价格算法 watchEffect(async () => { if (listinfo.combinedArray.length > 0) { + console.log(11) // 打包费packFeess 计算购物车商品费用totalPrices 餐位费Seatcharge - try { - let sum = (is_type.value != 0 ? listinfo.packFeess : 0) + listinfo.totalPrices + (is_type - .value == 0 ? listinfo.Seatcharge : 0); - console.log(listinfo.totalPrices,11) - listinfo.originAmount = Math.round(sum * 100) / 100; + // try { + let sum = (is_type.value != 0 ? listinfo.packFeess : 0) + listinfo.totalPrices + (is_type + .value == 0 ? listinfo.Seatcharge : 0); + listinfo.originAmount = Math.round(sum * 100) / 100; - // 打包费packFeess 计算购物车商品费用totalPrices 餐位费Seatcharge 商品卷Productroll 优惠卷coupondiscountAmount 积分listinfo.pointsDiscountAmount - let sums = (is_type.value != 0 ? listinfo.packFeess : 0) + listinfo.totalPrices + (is_type - .value == - 0 ? listinfo.Seatcharge : 0) - (listinfo.Productroll || 0) - (listinfo - .coupondiscountAmount || 0) - (listinfo.pointsDiscountAmount || 0); - listinfo.totalCost = Math.round(sums * 100) / 100; - //总价格 - console.log(listinfo.combinedArray, listinfo.packFeess, listinfo.totalPrices, listinfo - .Seatcharge, listinfo.Productroll, listinfo.coupondiscountAmount, sums) - // 霸王餐 - try { - // console.log(orderVIP.value.freeDineConfig.enable, changeFreeenable.value) - if (orderVIP.value.freeDineConfig.enable && changeFreeenable.value) { - listinfo.totalCost = (parseFloat(listinfo.totalCost) * parseFloat(orderVIP.value - .freeDineConfig - .rechargeTimes)).toFixed(2) - } - } catch (error) { - //TODO handle the exception - } - // 积分 - if (listinfo.totalCost && listinfo.status == 'unpaid' && orderVIP.value.id) { - uni.$u.debounce(memberPointscalcUsablePoints, 500) - - } - } catch (error) { - //TODO handle the exception + // 打包费packFeess 计算购物车商品费用totalPrices 餐位费Seatcharge 商品卷Productroll 优惠卷coupondiscountAmount 积分listinfo.pointsDiscountAmount + let sums = (is_type.value != 0 ? listinfo.packFeess : 0) + listinfo.totalPrices + (is_type + .value == + 0 ? listinfo.Seatcharge : 0) - (listinfo.Productroll || 0) - (listinfo + .coupondiscountAmount || 0) - (listinfo.pointsDiscountAmount || 0); + listinfo.totalCost = Math.round(sums * 100) / 100; + //总价格 + // console.log(listinfo.combinedArray, listinfo.packFeess, listinfo.totalPrices, listinfo + // .Seatcharge, listinfo.Productroll, listinfo.coupondiscountAmount, sums) // 霸王餐 + console.log(orderVIP.value.freeDineConfig.enable, changeFreeenable.value) + if (orderVIP.value.freeDineConfig.enable && changeFreeenable.value) { + listinfo.totalCost = (parseFloat(listinfo.totalCost) * parseFloat(orderVIP.value + .freeDineConfig.rechargeTimes)).toFixed(2) } + // 积分 + if (listinfo.totalCost && listinfo.status == 'unpaid' && orderVIP.value.id) { + uni.$u.debounce(memberPointscalcUsablePoints, 500) + } + // } catch (error) { + // //TODO handle the exception + // } } }); @@ -259,22 +252,21 @@ uniqueIds.value = [] // 筛选出商品卷的id listinfo.coupondiscountAmount = 0 // 优惠卷减去的金额 listinfo.pointsNum = 0 // 商品卷总价价格 - let res = cartStore.getTotalTotalPrices(listinfo.combinedArray, 1) + // 商品价格 + listinfo.totalPrices = cartStore.getTotalTotalPrices(listinfo.combinedArray, false) // 支付方式切换 // #ifdef MP-WEIXIN paymentMethodref.value.groupChanges(2) - // paymentmethod.radiovalue = 2; - // paymentmethod.paymentBtnText = "微信支付"; - // paymentmethod.payType = 'wechatPay'; // #endif // #ifdef MP-ALIPAY paymentMethodref.value.groupChanges(3) - // paymentmethod.radiovalue = 3; - // paymentmethod.paymentBtnText = "支付宝支付"; - // paymentmethod.payType = 'wechatPay'; // #endif + } else { + // 商品价格 + listinfo.totalPrices = cartStore.getTotalTotalPrices(listinfo.combinedArray) } changeFreeenable.value = e + } const saveImage = (url) => { @@ -482,7 +474,6 @@ //TODO handle the exception } } - orderorderInfo() } diff --git a/pages/product/choosetable.vue b/pages/product/choosetable.vue index 7b46c5e..fbaba4b 100644 --- a/pages/product/choosetable.vue +++ b/pages/product/choosetable.vue @@ -14,8 +14,8 @@ - + @@ -27,7 +27,7 @@ - + @@ -35,7 +35,8 @@ import { ref, onMounted, - getCurrentInstance + getCurrentInstance, + nextTick } from 'vue' import { @@ -46,6 +47,8 @@ Storelogin } from '@/stores/user.js'; + import Loading from '@/components/Loading.vue'; + // 获取全局属性 const { proxy @@ -55,6 +58,9 @@ productStore } from '@/stores/user.js'; + // 初始加载中 + const isLoading = ref(true); + const otherNum = ref('') const numIndex = ref(0) @@ -125,6 +131,8 @@ await store.scanCodeactions(getApp().globalData.tableCode) } // #endif + await nextTick() + isLoading.value = uni.cache.get('shopInfo').isTableFee == 0 ? false : true }) diff --git a/pages/product/index.vue b/pages/product/index.vue index f706b79..ea8f37c 100644 --- a/pages/product/index.vue +++ b/pages/product/index.vue @@ -149,7 +149,7 @@ v-for="(item1,index1) in item.productList" :key="index1"> - + @@ -457,8 +457,8 @@ const showShopInfoRef = ref(null) // 初始加载中 - const isLoading = ref(true); - + const isLoading = ref(true); + //调用shop组件 const callChildMethod = () => { if (showShopInfoRef.value) { @@ -466,7 +466,11 @@ } } - const shopExtend = uni.cache.get('shopTable').shopExtendMap.shopinfo_bg + try { + const shopExtend = uni.cache.get('shopTable').shopExtendMap.shopinfo_bg + } catch (error) { + //TODO handle the exception + } // 计算高度 const navScroll = ref(null) @@ -495,7 +499,7 @@ const topArr = ref([]) // 填充高度,用于最后一项低于滚动区域时使用 - const fillHeight = ref(0) + const fillHeight = ref(200) //距离顶部的高度 const scrollTopSize = ref(0) @@ -1022,7 +1026,7 @@ product.cartNumber = cartItem.number product.cartListId = cartItem.id } - }); + }); }); }); // 遍历购物车数组 @@ -1066,9 +1070,10 @@ // 初始化 if (Message.operate_type == "init") { cartList.value = Message.data - setTimeout(()=>{ + setTimeout(() => { + uni.hideLoading(); isLoading.value = false; - },1000) + }, 500) } // 清空购物车 diff --git a/pages/user/user.vue b/pages/user/user.vue index df77509..9a09f01 100644 --- a/pages/user/user.vue +++ b/pages/user/user.vue @@ -32,7 +32,7 @@ src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/my/points.png"> 积分 - {{userInfo.accountPoints || userInfo.points}} + {{userInfo.accountPoints || 0}} { // 再除以 100 得到保留两位小数的结果 return rounded / 100; }; + + // 精确计算函数 + const preciseCalculation = (num1, num2) => { + // 将数字转换为整数,乘以 100 以保留两位小数 + const int1 = BigInt(Math.round(num1 * 100)); + const int2 = BigInt(Math.round(num2 * 100)); + // 执行乘法运算 + const result = int1 * int2; + // 再除以 10000 以还原为原来的小数 + return Number(result) / 10000; + }; // 计算购物车商品总价格 - const getTotalTotalPrices = (matchedProducts) => computed(() => { + const getTotalTotalPrices = (matchedProducts, changeFreeenable = true) => computed(() => { if (!matchedProducts || !Array.isArray(matchedProducts)) { return 0; } @@ -42,7 +53,7 @@ export const useCartStore = defineStore('cart', () => { let cart = matchedProducts.reduce((total, item) => { // 是否启用会员价 0否1是 if (uni.cache.get('orderVIP').isVip == 1 && uni.cache.get('ordershopUserInfo') - .isMemberPrice == 1) { + .isMemberPrice == 1 && changeFreeenable) { // memberPrice会员价 return total + (parseFloat(item.memberPrice || item.price) * parseFloat(item .num - item @@ -52,7 +63,8 @@ export const useCartStore = defineStore('cart', () => { return total + (parseFloat(item.price) * parseFloat(item.num - item.returnNum)); } }, 0); - cart.toFixed(2) + + cart = cart.toFixed(2) // 向上取整并保留两位小数 // let result = roundUpToTwoDecimals(cart, 'upward') return cart; diff --git a/stores/user.js b/stores/user.js index c64350c..b7951f2 100644 --- a/stores/user.js +++ b/stores/user.js @@ -111,7 +111,7 @@ export const productStore = defineStore('product', { let data = await this.actionsproductqueryShop() // -4请求登录 const store = Storelogin() - if (data.code == '-4') { + if (data.code == '500') { if (await store.actionslogin()) { // 成功 接着在调用 await this.actionsproductqueryShop() @@ -121,10 +121,9 @@ export const productStore = defineStore('product', { if (uni.cache.get('shopInfo').isTableFee == 0) { uni.pro.navigateTo('product/choosetable') } else { - uni.pro.navigateTo( - 'product/index', { - tableCode: tableCode, - }) + uni.reLaunch({ + url: '/pages/product/index' + }); } }