白屏,首页,霸王餐,网络完善
This commit is contained in:
10
App.vue
10
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
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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" />
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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">
|
||||
¥{{orderVIP.isVip ==1 && ordershopUserInfo.isMemberPrice==1?(item.memberPrice|| item.price):item.price}}
|
||||
<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>
|
||||
|
||||
@@ -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()
|
||||
}
|
||||
|
||||
|
||||
@@ -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>
|
||||
|
||||
|
||||
@@ -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
|
||||
@@ -363,7 +363,7 @@
|
||||
</view>
|
||||
</view>
|
||||
</up-popup>
|
||||
|
||||
|
||||
<Loading :isLoading="isLoading" />
|
||||
</view>
|
||||
</template>
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
// 清空购物车
|
||||
|
||||
@@ -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"
|
||||
|
||||
@@ -30,9 +30,20 @@ export const useCartStore = defineStore('cart', () => {
|
||||
// 再除以 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;
|
||||
|
||||
@@ -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'
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user