diff --git a/src/api/order/order.ts b/src/api/order/order.ts index 9e86c8c..7761705 100644 --- a/src/api/order/order.ts +++ b/src/api/order/order.ts @@ -40,12 +40,36 @@ const OrderApi = { data }); }, - - edit() { }, - delete() { }, + //转桌 + mergeOrder(data: mergeOrderRequest) { + return request({ + url: `${baseURL}/mergeOrder`, + method: "post", + data + }); + }, }; export default OrderApi; +/** + * MergeOrderDTO + */ +export interface mergeOrderRequest { + /** + * 转台详情Id + */ + detailIds?: number[]; + sourceOrderId: number; + /** + * 目标订单Id + */ + targetOrderId?: number; + /** + * 目标台桌 + */ + targetTableCode?: string; + [property: string]: any; +} export interface refundOrderRequest { /** diff --git a/src/store/modules/carts.ts b/src/store/modules/carts.ts index d50d317..75a99d3 100644 --- a/src/store/modules/carts.ts +++ b/src/store/modules/carts.ts @@ -16,6 +16,11 @@ export const useCartsStore = defineStore("carts", () => { vipUser.value = user; } + //就餐类型 dine-in take-out + let dinnerType = ref('dine-in'); + + + //是否启用会员价 const useVipPrice = computed(() => { return (shopUser.userInfo.isMemberPrice && vipUser.value.id && vipUser.value.isVip) ? true : false @@ -174,9 +179,7 @@ export const useCartsStore = defineStore("carts", () => { const oldOrderMoney = computed(() => { let total = 0 for (let i in oldOrder.value.detailMap) { - console.log(oldOrder.value) total += oldOrder.value.detailMap[i].reduce((prve: number, cur: any) => { - console.log(cur) if (cur.isGift) { return prve + 0 } @@ -236,7 +239,11 @@ export const useCartsStore = defineStore("carts", () => { return; } const newNumber = item.number * 1 + step * 1; - update({ ...item, number: item.number * 1 + step * 1, pack_number: newNumber < item.pack_number ? (item.pack_number * 1 + step * 1) : item.pack_number }); + let pack_number = newNumber < item.pack_number ? (item.pack_number * 1 + step * 1) : item.pack_number; + if (dinnerType.value == 'take-out') { + pack_number = newNumber + } + update({ ...item, number: newNumber, pack_number }); } function changeSelCart(cart: CartsState) { @@ -270,6 +277,7 @@ export const useCartsStore = defineStore("carts", () => { } } + const basic_msg = { number: 1, is_gift: 0, @@ -325,10 +333,12 @@ export const useCartsStore = defineStore("carts", () => { function update(data: any) { console.log(data); - if (data.number * 1 < data.skuData.suitNum * 1) { + const suitNum = data.skuData ? (data.skuData.suitNum || 1) : 1; + if (data.number * 1 < suitNum * 1) { return sendMessage('del', data); } - sendMessage('edit', data); + const pack_number = dinnerType.value == 'take-out' ? data.number : data.pack_number + sendMessage('edit', { ...data, pack_number }); } function updateTag(key: string, val: any, cart: CartsState = selCart.value) { if (cart.number * 1 < cart.skuData.suitNum * 1) { @@ -338,7 +348,16 @@ export const useCartsStore = defineStore("carts", () => { if (key == 'discount_sale_amount' && val * 1 <= 0) { return ElMessage.error('价格不能为0!') } - sendMessage('edit', { ...cart, [key]: val }); + const msg = { ...cart, [key]: val } + if (key == 'number' && dinnerType.value == 'take-out') { + msg.pack_number == val + } + + sendMessage('edit', msg); + } + // 更改全部商品打包状态 + function changePack(is_pack: number | string) { + sendMessage('batch', { is_pack }); } function clear() { @@ -358,6 +377,14 @@ export const useCartsStore = defineStore("carts", () => { vipUser.value = {} } + function nowCartsClear() { + if (selPlaceNum.value == 1) { + selListIndex.value = -1; + } + list.value = []; + giftList.value = []; + } + // 寻找套餐商品sku interface GroupSnap { goods: { [key: string]: any }[]; @@ -439,6 +466,9 @@ export const useCartsStore = defineStore("carts", () => { } } + let $initParams = {} as ApifoxModel + + /** * * @param initParams 购物车初始化参数 @@ -446,6 +476,8 @@ export const useCartsStore = defineStore("carts", () => { * @param oldOrder 历史订单数据 */ + + function init(initParams: ApifoxModel, $goodsMap: any, $oldOrder: any) { // 商品id对应的数据map if ($goodsMap) { @@ -461,16 +493,22 @@ export const useCartsStore = defineStore("carts", () => { if (initParams) { initParams.table_code = initParams.table_code ? initParams.table_code : '' table_code.value = initParams.table_code + $initParams = initParams; } + console.log($initParams) // localStorage.setItem('cache_table_code', table_code.value); + concocatSocket($initParams) + } + function concocatSocket(initParams = $initParams) { + console.log("初始化参数", initParams); WebSocketManager.subscribeToTopic(initParams, (msg) => { console.log("收到消息:", msg); if (msg.hasOwnProperty('status') && msg.status != 1) { return ElMessage.error(msg.message || '操作失败') } if (msg && msg.data) { - if (Array.isArray(msg.data) && msg.data.length) { + if (Array.isArray(msg.data) && msg.data.length && msg.data[0].table_code) { table_code.value = msg.data[0].table_code } if (msg.data.table_code) { @@ -528,7 +566,9 @@ export const useCartsStore = defineStore("carts", () => { return ElMessage.warning(msg.message || '该商品已存在') } const skuData = getProductDetails({ product_id: msg.data.product_id, sku_id: msg.data.sku_id }) - list.value.push({ ...skuData, ...msg.data }) + const newGoods = { ...skuData, ...msg.data } + console.log('newGoods', newGoods) + list.value.push(newGoods) return ElMessage.success(msg.message || '添加成功') } @@ -588,9 +628,11 @@ export const useCartsStore = defineStore("carts", () => { } } if (msg.operate_type === "manage_cleanup") { - dataReset() + nowCartsClear() + } + if (msg.operate_type === "batch") { + concocatSocket({ ...$initParams, table_code: table_code.value }) } - console.log(list.value) }); } @@ -606,6 +648,8 @@ export const useCartsStore = defineStore("carts", () => { WebSocketManager.sendMessage(msg); } return { + dinnerType, + changePack, giftMoney, goodsTotal, isLinkFinshed, diff --git a/src/store/modules/permission.ts b/src/store/modules/permission.ts index 58d88cb..d747e10 100644 --- a/src/store/modules/permission.ts +++ b/src/store/modules/permission.ts @@ -34,7 +34,6 @@ export const usePermissionStore = defineStore("permission", () => { if (!isTest) { const dynamicRoutes = parseDynamicRoutes(data.filter(v => v.type == 0)); routes.value = [...constantRoutes, ...dynamicRoutes]; - console.log(routes.value) isRoutesLoaded.value = true; resolve(dynamicRoutes); } else { diff --git a/src/utils/websocket.ts b/src/utils/websocket.ts index c0272cc..130af84 100644 --- a/src/utils/websocket.ts +++ b/src/utils/websocket.ts @@ -1,6 +1,6 @@ import qs from "qs"; import { useUserStoreHook } from "@/store"; - +import { ElMessage, ElMessageBox } from "element-plus"; const user = useUserStoreHook() export interface ApifoxModel { @@ -20,7 +20,7 @@ export interface ApifoxModel { type: string; [property: string]: any; } -export type msgType = 'add' | 'reduce' | 'remove' | 'edit' | 'init' | 'cleanup' | 'del' | 'rottable' +export type msgType = 'add' | 'reduce' | 'remove' | 'edit' | 'init' | 'cleanup' | 'del' | 'rottable' | 'batch' class WebSocketManager { private client: WebSocket | null = null; private connected: boolean = false; @@ -80,6 +80,7 @@ class WebSocketManager { }; this.client.onerror = (error) => { clearTimeout(this.timer) + this.connected = false; console.error("WebSocket 发生错误:", error); // ElNotification({ // title: "提示", @@ -112,7 +113,7 @@ class WebSocketManager { // 订阅主题 public subscribeToTopic(initParams: ApifoxModel, onMessage: (message: any) => void) { - console.log(`正在订阅主题: `); + console.log(`正在订阅主题: `, initParams); this.initParams = { ...this.initParams, ...initParams } if (this.client && this.connected) { this.disconnect(); @@ -121,7 +122,13 @@ class WebSocketManager { this.onMessage = onMessage; } public sendMessage(message: any) { - if (this.client) { + if (!this.client || !this.connected) { + ElMessage.error('发送失败,已重新连接,请重新操作') + this.disconnect() + this.setupWebSocket(); + return + } + if (this.client && this.connected) { const msg = JSON.stringify({ ...this.initParams, ...message, @@ -130,6 +137,7 @@ class WebSocketManager { this.client.send(msg); } catch (error) { + console.log('error') ElMessage.error('发送失败') this.disconnect() this.setupWebSocket(); @@ -146,6 +154,7 @@ class WebSocketManager { console.log("断开 WebSocket 连接"); this.client.close(); this.client = null; + this.connected = false; } } } diff --git a/src/views/tool/Instead/components/carts/item.vue b/src/views/tool/Instead/components/carts/item.vue index 2a90a23..cea09f1 100644 --- a/src/views/tool/Instead/components/carts/item.vue +++ b/src/views/tool/Instead/components/carts/item.vue @@ -91,7 +91,11 @@