diff --git a/src/store/modules/carts.ts b/src/store/modules/carts.ts index a29bcbc..d39310b 100644 --- a/src/store/modules/carts.ts +++ b/src/store/modules/carts.ts @@ -3,6 +3,7 @@ import WebSocketManager, { type ApifoxModel, msgType } from "@/utils/websocket"; import orderApi from "@/api/order/order"; import { useUserStoreHook } from "@/store/modules/user"; import { customTruncateToTwoDecimals } from '@/utils/tools' +import productApi from "@/api/product/index"; const shopUser = useUserStoreHook(); export interface CartsState { @@ -43,6 +44,24 @@ export const useCartsStore = defineStore("carts", () => { //代客下单页面商品缓存 const goods = useStorage("Instead_goods", []); + async function getGoods(query: any) { + const res = await productApi.getPage({ + page: 1, + size: 999, + status: "on_sale", + ...query, + }); + goods.value = res.records; + setGoodsMap(goods.value) + } + + function setGoodsMap(goods: any[]) { + for (let item of goods) { + goodsMap[item.id] = item; + } + + } + //赠菜 const giftList = useStorage("giftList", []); let goodsMap: { [key: string]: any } = useStorage('Instead_goods_map', {}); @@ -326,8 +345,10 @@ export const useCartsStore = defineStore("carts", () => { } // 换桌 - function changeTable(newVal: string | number) { + function changeTable(newVal: string | undefined) { table_code.value = `${newVal}`; + $initParams.table_code = newVal + concocatSocket() } //转桌 function rotTable(newVal: string | number, cart_id = []) { @@ -415,7 +436,9 @@ export const useCartsStore = defineStore("carts", () => { //获取历史订单 async function getOldOrder(table_code: string | number) { const res = await orderApi.getHistoryList({ tableCode: table_code }) - setOldOrder(res) + if (res) { + setOldOrder(res) + } } function getProductDetails(v: { product_id: string, sku_id: string }) { @@ -497,13 +520,14 @@ export const useCartsStore = defineStore("carts", () => { - function init(initParams: ApifoxModel, $goodsMap: any, $oldOrder: any) { + async function init(initParams: ApifoxModel, $oldOrder: any | undefined) { // 商品id对应的数据map - if ($goodsMap) { - goodsMap = $goodsMap - } + await getGoods({}) + if ($oldOrder) { setOldOrder($oldOrder) + } else { + oldOrder.value = { detailMap: [] } } // console.log('oldOrder.detailMap', oldOrder.value.detailMap) @@ -639,6 +663,10 @@ export const useCartsStore = defineStore("carts", () => { if (msg.operate_type === "batch") { concocatSocket({ ...$initParams, table_code: table_code.value }) } + if (msg.operate_type === "product_update") { + console.log('商品更新') + init($initParams, oldOrder.value) + } }); } @@ -687,7 +715,9 @@ export const useCartsStore = defineStore("carts", () => { changeSelCart, payMoney, clear, yiyouhui, giftList, changeTable, - rotTable + rotTable, + getGoods, + setGoodsMap }; }); diff --git a/src/utils/websocket.ts b/src/utils/websocket.ts index fcd9d58..4b0fcdb 100644 --- a/src/utils/websocket.ts +++ b/src/utils/websocket.ts @@ -34,6 +34,7 @@ class WebSocketManager { private maxReconnectAttempts = 10; // 自定义最大重试次数 private reconnectDelay = 5000; // 重试延迟(单位:毫秒) private timer: any | null = null; + private reconnectTimer: any | null = null // 初始化 WebSocket 客户端 setupWebSocket() { @@ -142,7 +143,6 @@ class WebSocketManager { this.autoConnect = false; } } - // 自动重连机制 private reconnect() { if (!this.autoConnect) { @@ -151,10 +151,11 @@ class WebSocketManager { if (this.reconnectAttempts < this.maxReconnectAttempts) { this.reconnectAttempts++; console.log(`尝试第 ${this.reconnectAttempts} 次重连...`); - setTimeout(() => { + this.reconnectTimer = setTimeout(() => { this.setupWebSocket(); }, this.reconnectDelay); } else { + clearTimeout(this.reconnectTimer); console.error("达到最大重连次数,停止重连"); ElMessageBox.confirm('达到最大重连次数' + this.maxReconnectAttempts + '次,已停止重连,是否立即重连?', '提示', { confirmButtonText: '确定', @@ -177,6 +178,10 @@ class WebSocketManager { clearInterval(this.timer); this.timer = null; } + if (this.reconnectTimer) { + clearInterval(this.reconnectTimer); + this.reconnectTimer = null; + } } } diff --git a/src/views/tool/Instead/components/carts/list.vue b/src/views/tool/Instead/components/carts/list.vue index a200e6c..2d2808e 100644 --- a/src/views/tool/Instead/components/carts/list.vue +++ b/src/views/tool/Instead/components/carts/list.vue @@ -101,7 +101,7 @@ 微信/支付宝 @@ -109,7 +109,7 @@ 现金 @@ -117,7 +117,7 @@ 更多支付 @@ -128,7 +128,7 @@ 仅下单 @@ -136,7 +136,7 @@ 去结账 @@ -147,7 +147,7 @@ 立即支付 @@ -201,10 +201,6 @@ const props = defineProps({ type: Array, default: () => [], }, - goodsMapisFinish: { - type: Boolean, - default: false, - }, }); let isXianFuKuan = computed(() => { // if (!props.table.tableCode) { @@ -230,31 +226,6 @@ function hideOrder() { function createOrder(key) { emits("createOrder", key); } -const selCartId = ref(null); - -watch( - () => props.table.tableCode, - (newval) => { - init(); - } -); - -const goodsMap = {}; -watch( - () => props.goodsMapisFinish, - (newval) => { - if (newval) { - init(); - } - } -); - -function init() { - for (let goods of props.goodsList) { - goodsMap[goods.id] = goods; - } - carts.init({ table_code: props.table.tableCode }, goodsMap, props.oldOrder); -} function itemClick(item) { carts.changeSelCart(item); @@ -268,7 +239,6 @@ function changeNumber(step, item) { // }); defineExpose({ carts, - init, }); \ No newline at end of file diff --git a/src/views/tool/Instead/components/order.vue b/src/views/tool/Instead/components/order.vue index dfcc25d..b322d35 100644 --- a/src/views/tool/Instead/components/order.vue +++ b/src/views/tool/Instead/components/order.vue @@ -571,6 +571,7 @@ async function payOrder(payType, isScan, guazhangren) { if (payType == "arrears") { res = await payApi.creditPay({ ...returnPayParams(), creditBuyerId: guazhangren.id }); } + carts.clearCart(); } catch (error) { console.log(error); clearTimeout(payTimer); diff --git a/src/views/tool/Instead/index.vue b/src/views/tool/Instead/index.vue index 083a4b6..3061b25 100644 --- a/src/views/tool/Instead/index.vue +++ b/src/views/tool/Instead/index.vue @@ -1,5 +1,9 @@