diff --git a/src/store/goods.js b/src/store/goods.js index 2900306..e75cd58 100644 --- a/src/store/goods.js +++ b/src/store/goods.js @@ -1,4 +1,5 @@ import _ from "lodash"; +import dayjs from "dayjs"; import { defineStore } from "pinia"; import { productPage, categoryList } from "@/api/product_new.js"; import { historyOrder } from "@/api/order.js"; @@ -6,6 +7,7 @@ import { useUser } from "@/store/user.js"; import { useSocket } from "@/store/socket.js"; import useStorage from "@/utils/useStorage.js"; import { formatDecimal } from "@/utils/index.js"; +import { ElMessage } from "element-plus"; // 商品store + 购物车store export const useGoods = defineStore("goods", { @@ -45,8 +47,58 @@ export const useGoods = defineStore("goods", { orderListInfo: "", // 历史订单信息 cartType: "cart", // cart order cartOrderItem: "", + pendingList: useStorage.get("pendingList") || [], }), actions: { + // 恢复挂单 + async recoverPending(item) { + let socket = useSocket(); + + if (this.cartList.length || this.orderList.length) { + this.pendingCart(); + } + + if (item.orderId) { + await this.historyOrderAjax(item.tableCode); + } + + let pendingList = useStorage.get("pendingList"); + let index = pendingList.findIndex( + (val) => val.tableCode == item.tableCode + ); + + pendingList.splice(index, 1); + useStorage.set("pendingList", pendingList); + this.pendingList = useStorage.get("pendingList"); + useStorage.set("tableCode", item.tableCode); + socket.cartInit(); + }, + // 开始挂单 + pendingCart() { + let cart = this.cartList; + let order = this.orderList; + + if (cart.length || order.length) { + let pendingList = useStorage.get("pendingList") || []; + pendingList.push({ + tableCode: cart[0].table_code || this.orderListInfo.tableCode, + productName: [ + ...cart.map((item) => item.product_name), + ...order + .map((item) => item.goods) + .flat() + .map((item) => item.product_name), + ].join("、"), + orderId: order.length && this.orderListInfo.id, + totalAmount: this.cartInfo.totalAmount, + pendingAt: dayjs().format("YYYY-MM-DD HH:mm:ss"), + }); + + useStorage.set("pendingList", pendingList); + this.pendingList = useStorage.get("pendingList"); + useStorage.del("tableCode"); + } + }, // 选中订单中的商品 selectOrderItem(index = null, i) { this.orderList.map((item) => { @@ -220,7 +272,12 @@ export const useGoods = defineStore("goods", { async getCartList(arr) { const store = useUser(); + let numCount = 0; + let packCount = 0; + arr.map((val, index) => { + numCount += +val.number; + packCount += +val.pack_number; val = this.completeGoodsInfo(val); val.active = false; if (!this.isCartInit && index == 0) { @@ -228,6 +285,12 @@ export const useGoods = defineStore("goods", { } }); + if (packCount > 0 && packCount == numCount) { + this.allSelected = 1; + } else { + this.allSelected = 0; + } + this.cartList = arr; this.isCartInit = true; @@ -267,7 +330,7 @@ export const useGoods = defineStore("goods", { product_id: params.productId || "", sku_id: params.id || "", number: params.number || 1, - pack_number: params.is_pack || 0, + pack_number: this.allSelected ? params.number : 0, is_gift: params.is_gift || 0, is_temporary: params.is_temporary || 0, discount_sale_amount: params.discount_sale_amount || 0, diff --git a/src/store/socket.js b/src/store/socket.js index 1938e9b..8941af6 100644 --- a/src/store/socket.js +++ b/src/store/socket.js @@ -119,6 +119,10 @@ export const useSocket = defineStore("socket", { // 清空购物车 goodsStore.successClearCart(); break; + case "batch": + // 打包 + this.cartInit(); + break; default: break; } @@ -127,37 +131,12 @@ export const useSocket = defineStore("socket", { } } else if (data.data_type == "order") { // 收到订单消息,打印订单小票 - // this.orderList.push(data.data); - // this.startPrintInterval(); + if (!this.orderList.some((el) => el == data.data)) { + // 防止重复打印 + this.orderList.push(data.data); + this.startPrintInterval(); + } } - - // if (data.data_type == "cart" && data.operate_type == "init") { - // // 购物车消息 - // goodsStore.getCartList(data.data); - // } else if (data.data_type == "order") { - // // 接收订单消息,打印小票 - // if (this.log) console.log("接收消息", data); - // this.ws.send( - // JSON.stringify({ - // type: "send", - // orderNo: data.orderInfo.orderNo, - // }) - // ); - // // 接收订单消息,打印小票 - // // printBill(data) - // // 打印标签小票 - // if (!this.orderList.some((el) => el == data.orderInfo.orderNo)) { - // // console.log("打印", data); - // printStore.labelPrint(data); - // printStore.pushReceiptData(data); - // this.orderList.push(data.orderInfo.orderNo); - // if (this.orderList.length > 30) { - // this.orderList.splice(0, 1); - // } - // } - // } else if (data.data_type == "heartbeat") { - // if (this.log) console.log("接收心跳"); - // } }); this.ws.addEventListener("error", () => { @@ -190,14 +169,15 @@ export const useSocket = defineStore("socket", { const printStore = usePrint(); if (this.orderListTimer !== null) return; this.orderListTimer = setInterval(async () => { - console.log("隔2秒执行===", this.orderList); try { if (!this.orderList.length) { clearInterval(this.orderListTimer); this.orderListTimer = null; } else { const orderInfo = await getOrderByIdAjax(this.orderList[0]); - printStore.pushReceiptData(commOrderPrintData(orderInfo)); + if (orderInfo.status == "done" && orderInfo.platformType != "PC") { + printStore.pushReceiptData(commOrderPrintData(orderInfo)); + } this.orderList.splice(0, 1); } } catch (error) { diff --git a/src/views/home/components/cartOperation.vue b/src/views/home/components/cartOperation.vue index 7939ada..46ba763 100644 --- a/src/views/home/components/cartOperation.vue +++ b/src/views/home/components/cartOperation.vue @@ -68,12 +68,12 @@ 删除 - +
@@ -143,12 +143,12 @@ 退菜
- +
+ + + + 挂单 +
@@ -254,14 +254,13 @@ import { ElMessage } from 'element-plus' import takeFoodCode from '@/components/takeFoodCode.vue' import TableMerging from './tableMerging.vue' import skuModal from '@/components/skuModal.vue' -import { useShop } from '@/store/shop.js' import { useGoods } from '@/store/goods.js' import { inputFilterFloat, formatDecimal } from '@/utils/index.js' -import { updatePrice, orderPrint } from '@/api/product.js' import { refundOrder } from '@/api/order.js' +import { useSocket } from '@/store/socket.js' -const shopStore = useShop() const goodsStore = useGoods() +const socket = useSocket() const tableMergingRef = ref(null) @@ -282,6 +281,18 @@ const returnForm = ref({ num: 1 }) +// 挂单 +function pendingOrderHandle() { + let cart = goodsStore.cartList; + let order = goodsStore.orderList; + if (cart.length || order.length) { + goodsStore.pendingCart() + goodsStore.successClearCart(); + socket.cartInit(); + + ElMessage.success('挂单成功') + } +} // 退菜 async function returnOrderItemHandle() { @@ -348,18 +359,20 @@ function packHandle() { // 赠送打包操作 function giftPackHandle(key) { - if (!goodsStore.cartList[goodsStore.cartActiveIndex].id) return + let item = goodsStore.cartList[goodsStore.cartActiveIndex] + if (item && item.id) { + if (key == 'is_gift' && goodsStore.cartList[goodsStore.cartActiveIndex] == 0) { + goodsStore.cartList[goodsStore.cartActiveIndex].discount_sale_amount = 0 + } - if (key == 'is_gift' && goodsStore.cartList[goodsStore.cartActiveIndex] == 0) { - goodsStore.cartList[goodsStore.cartActiveIndex].discount_sale_amount = 0 + if (goodsStore.cartList[goodsStore.cartActiveIndex][key] == 0) { + goodsStore.cartList[goodsStore.cartActiveIndex][key] = 1 + } else { + goodsStore.cartList[goodsStore.cartActiveIndex][key] = 0 + } + goodsStore.operateCart({ ...goodsStore.cartList[goodsStore.cartActiveIndex] }, 'edit') } - if (goodsStore.cartList[goodsStore.cartActiveIndex][key] == 0) { - goodsStore.cartList[goodsStore.cartActiveIndex][key] = 1 - } else { - goodsStore.cartList[goodsStore.cartActiveIndex][key] = 0 - } - goodsStore.operateCart({ ...goodsStore.cartList[goodsStore.cartActiveIndex] }, 'edit') } // 显示直接修改数量 @@ -467,9 +480,10 @@ const noteList = ref([ // 显示 function showDiscountModalHandle() { let item = goodsStore.cartList[goodsStore.cartActiveIndex] - if ((item && !item.id) || item.is_temporary || item.is_gift) return - // 存在商品并且不能为临时菜 - showDiscountModal.value = true + if ((item && item.id) && (!item.is_temporary || !item.is_gift)) { + // 存在商品并且不能为临时菜 + showDiscountModal.value = true + } } // 过滤价格输入 @@ -519,24 +533,10 @@ function discountFormSubmit() { } /**单品打折 end */ -/**免厨打印 start */ -async function kitchenPrint() { - try { - const res = await orderPrint({ - isPrint: props.item.isPrint ? 0 : 1, - shopId: props.item.shopId, - cartId: props.item.id - }) - emit('confirm', { isTemporary: true }) - } catch (error) { - console.log(error); - } -} -/**免厨打印 end */ - // 删除 function deleteHandle() { - if (goodsStore.cartList[goodsStore.cartActiveIndex].id) { + let item = goodsStore.cartList[goodsStore.cartActiveIndex] + if (item && item.id) { goodsStore.deleteCartItem() } } @@ -605,7 +605,7 @@ function packFormSubmit() { padding: 10px; display: flex; flex-direction: column; - gap: 10px; + gap: 8px; .item { width: 70px; diff --git a/src/views/home/components/pendingCartModal.vue b/src/views/home/components/pendingCartModal.vue index 121ba29..ff446ea 100644 --- a/src/views/home/components/pendingCartModal.vue +++ b/src/views/home/components/pendingCartModal.vue @@ -1,7 +1,7 @@