白屏,首页,霸王餐,网络完善

This commit is contained in:
wwz
2025-03-27 14:41:50 +08:00
parent 98ce8b5544
commit 9094818ea1
11 changed files with 104 additions and 76 deletions

10
App.vue
View File

@@ -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

View File

@@ -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);

View File

@@ -6,7 +6,8 @@
<up-radio-group v-model="radiovalue" iconPlacement="right" @change="groupChanges" :size="28"
placement="column">
<block v-for="(item,index) in paymentMethodList" :key="index">
<view class="method_list" @click="groupChanges(item.type)" v-if="index == 0?!changeFreeenable:true">
<view class="method_list" @click="groupChanges(item.type)"
v-if="(index+1) == radiovalue?!changeFreeenable:true">
<view class="method_list_top">
<view class="method_list_top_left">
<image class="icon" :src="item.url" mode="aspectFill" />

View File

@@ -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

View File

@@ -65,12 +65,15 @@
</view>
<view class="info">
<text class="productName">{{item.productName}}</text>
<text class="productSkuName" v-if="item.productSkuName">{{item.productSkuName}}</text>
<text class="productSkuName" v-if="item.skuName">{{item.skuName}}</text>
</view>
<view class="price">
<view class="priceAmount">
<text v-if="changeFreeenable">{{item.price}}</text>
<text v-else>
{{orderVIP.isVip ==1 && ordershopUserInfo.isMemberPrice==1?(item.memberPrice|| item.price):item.price}}
</text>
</view>
<view class="num">x{{item.num}}</view>
</view>

View File

@@ -212,11 +212,11 @@
// 监听价格算法
watchEffect(async () => {
if (listinfo.combinedArray.length > 0) {
console.log(11)
// 打包费packFeess 计算购物车商品费用totalPrices 餐位费Seatcharge
try {
// 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;
// 打包费packFeess 计算购物车商品费用totalPrices 餐位费Seatcharge 商品卷Productroll 优惠卷coupondiscountAmount 积分listinfo.pointsDiscountAmount
@@ -226,27 +226,20 @@
.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)
// 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)
}
} catch (error) {
//TODO handle the exception
.freeDineConfig.rechargeTimes)).toFixed(2)
}
// 积分
if (listinfo.totalCost && listinfo.status == 'unpaid' && orderVIP.value.id) {
uni.$u.debounce(memberPointscalcUsablePoints, 500)
}
} catch (error) {
//TODO handle the exception
}
// } 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()
}

View File

@@ -14,8 +14,8 @@
</view>
<view class="item" @click="tabCut(-1)">
<view class="num_item" :style="numIndex==-1?'background-color: #E8AD7B;':'' ">
<up--input v-model="otherNum" @input="isOtherNum" @blur="blur()"
border="none" type="nubmer" maxlength="3" placeholder='请输入..'></up--input>
<up--input v-model="otherNum" @input="isOtherNum" @blur="blur()" border="none" type="nubmer"
maxlength="3" placeholder='请输入..'></up--input>
</view>
@@ -27,7 +27,7 @@
</view>
</view>
</view>
<Loading :isLoading="isLoading" />
</view>
</template>
@@ -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
})
</script>

View File

@@ -149,7 +149,7 @@
v-for="(item1,index1) in item.productList" :key="index1">
<image class="goodsImg" v-if="item1.coverImg!=null" :lazy-load="true"
@load="imageLoaded(item1,index,index1)"
:src="`${item1.coverImg}${!item1.imgLoad?'?x-oss-process=image/resize,m_lfit,w_300,h_300':''}`"
:src="`${item1.coverImg}${!item1.imgLoad?'?x-oss-process=image/resize,m_lfit,w_150,h_150':''}`"
mode="aspectFill"></image>
<image class="goodsImg"
src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/index/1.gif" mode="" v-else
@@ -466,7 +466,11 @@
}
}
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)
@@ -1067,8 +1071,9 @@
if (Message.operate_type == "init") {
cartList.value = Message.data
setTimeout(() => {
uni.hideLoading();
isLoading.value = false;
},1000)
}, 500)
}
// 清空购物车

View File

@@ -32,7 +32,7 @@
src="https://czg-qr-order.oss-cn-beijing.aliyuncs.com/my/points.png">
</image>
<view class="my_list_item_name">积分</view>
<view class="my_list_item_num">{{userInfo.accountPoints || userInfo.points}}</view>
<view class="my_list_item_num">{{userInfo.accountPoints || 0}}</view>
</view>
<view class="my_list_item">
<image class="my_list_item_icon"

View File

@@ -31,8 +31,19 @@ export const useCartStore = defineStore('cart', () => {
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;

View File

@@ -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'
});
}
}