diff --git a/src/api/Instead.js b/src/api/Instead.js new file mode 100644 index 0000000..296c793 --- /dev/null +++ b/src/api/Instead.js @@ -0,0 +1,68 @@ +// 代客下单 +import request from "@/utils/request"; +//就餐形式,默认堂食后付费 +const useType='dine-in-after' +function getUseType(){ + const type=localStorage.getItem("useType") + return type?type:useType +} + +// 购物车-临时菜添加 +export function $temporaryDishes(data) { + return request({ + url: '/api/place/temporaryDishes', + method: "post", + data:{ + shopId: localStorage.getItem("shopId"), + useType:getUseType(), + ...data + } + }); +} +// 购物车-单品改价 +export function $updatePrice(data) { + return request({ + url: '/api/place/updatePrice', + method: "put", + data:{ + shopId: localStorage.getItem("shopId"), + ...data + } + }); +} + +// 团购券-获取可使用团购券列表 + +export function $thirdPartyCoupon(data) { + return request({ + url: '/api/thirdPartyCoupon/list', + method: "get", + params:{ + shopId: localStorage.getItem("shopId"), + ...data + } + }); +} +//核销团购券商品 +export function $checkCoupon(data) { + return request({ + url: '/api/place/checkCoupon', + method: "post", + data:{ + shopId: localStorage.getItem("shopId"), + ...data + } + }); +} +//整体等叫/取消等叫 +export function $waitCall(data) { + return request({ + url: '/api/place/waitCall', + method: "put", + data:{ + useType:getUseType(), + shopId: localStorage.getItem("shopId"), + ...data + } + }); +} \ No newline at end of file diff --git a/src/assets/images/scan.png b/src/assets/images/scan.png new file mode 100644 index 0000000..8cb3dca Binary files /dev/null and b/src/assets/images/scan.png differ diff --git a/src/views/order_manage/order_list.vue b/src/views/order_manage/order_list.vue index a43d975..08f29fd 100644 --- a/src/views/order_manage/order_list.vue +++ b/src/views/order_manage/order_list.vue @@ -69,6 +69,8 @@ -->
diff --git a/src/views/tool/Instead/components/cart-item.vue b/src/views/tool/Instead/components/cart-item.vue index 94cd126..d275783 100644 --- a/src/views/tool/Instead/components/cart-item.vue +++ b/src/views/tool/Instead/components/cart-item.vue @@ -4,8 +4,12 @@ :class="[isActive]" @click="itemClick" > - - 退 +
+ + + + 退 +
-
备注:{{ item.note || "" }}
+
备注:{{ item.note }}
备注: @@ -74,11 +78,23 @@ ¥{{ isShowVipPrice ? vipAllPrice : allPrice }}
+ @@ -131,7 +189,7 @@ input[type="number"]::-webkit-outer-spin-button { -webkit-appearance: none; margin: 0; } -::v-deep .el-input__inner::-webkit-inner-spin-button { +::v-deep .el-input__inner::-webkit-inner-spin-button { -webkit-appearance: none; margin: 0; } diff --git a/src/views/tool/Instead/components/popup-tuan-quan.vue b/src/views/tool/Instead/components/popup-tuan-quan.vue new file mode 100644 index 0000000..ae67f2a --- /dev/null +++ b/src/views/tool/Instead/components/popup-tuan-quan.vue @@ -0,0 +1,165 @@ + + + + \ No newline at end of file diff --git a/src/views/tool/Instead/components/tuan-quan-table.vue b/src/views/tool/Instead/components/tuan-quan-table.vue new file mode 100644 index 0000000..29e5757 --- /dev/null +++ b/src/views/tool/Instead/components/tuan-quan-table.vue @@ -0,0 +1,61 @@ + + diff --git a/src/views/tool/Instead/index.vue b/src/views/tool/Instead/index.vue index 75ca1cb..59c1e8b 100644 --- a/src/views/tool/Instead/index.vue +++ b/src/views/tool/Instead/index.vue @@ -399,11 +399,18 @@
会员优惠 {{ vipDiscountPrice }}
+
+ 单品改价优惠 + {{ discountSaleAmount }} +
已优惠¥{{ youhuiAllPrice }} @@ -500,7 +507,7 @@ @@ -639,21 +646,36 @@ > 退菜
- + {{ returnWaingAllText }} +
+
+ 团购代金券 +
+ 代金券名称 + +
+ + +
+ +
优惠券
+ @@ -1019,6 +1069,7 @@ :disabledPayType="disabledPayType" > + 挂账
立即支付 @@ -1413,7 +1464,25 @@ > - + + + + + + +
@@ -1431,6 +1500,11 @@ import chooseDinersNumber from "./components/choose-diners-number.vue"; import returnCart from "./components/return-cart.vue"; import moneyKeyboard from "./components/money-keyboard.vue"; import caiAdd from "./components/popup-linshiCai.vue"; +import cartChangePrice from "./components/popup-cart-changePrice.vue"; +import popTuanQuan from "./components/popup-tuan-quan.vue"; +import tuanQuanTable from "./components/tuan-quan-table.vue"; +import popupChooseGuazhang from "./components/popup-choose-guazhang.vue"; + import dayjs from "dayjs"; import { tbShopInfo } from "@/api/user"; import { hasPermission } from "@/utils/limits.js"; @@ -1463,7 +1537,9 @@ import { $calcUsablePoints, $calcDeDuctionPoints, } from "@/api/table"; + import { tbShopCategoryGet } from "@/api/shop"; +import { $checkCoupon,$waitCall } from "@/api/Instead"; import { isCanBuy, arrayContainsAll, @@ -1480,10 +1556,15 @@ import { returnProductCoupAllPrice } from "./quan_util.js"; //商品数量从0到n每一个对应的价格 let $goodsPayPriceMap = {}; import { $status } from "@/utils/table.js"; +import PopupChooseGuazhang from "./components/popup-choose-guazhang.vue"; let $originTableList = []; export default { components: { + popupChooseGuazhang, + cartChangePrice, + popTuanQuan, + tuanQuanTable, caiAdd, quansPop, returnCart, @@ -1496,9 +1577,12 @@ export default { moneyDiscount, cartItem, chooseDinersNumber, + PopupChooseGuazhang, }, data() { return { + //挂账人 + guazhangRen: "", disabledPayType: [], //积分抵扣 points: { @@ -1512,6 +1596,8 @@ export default { value: 0, toMoney: 0, }, + //团购券 + tuanQuan: "", //选中可用优惠券 quansSelArr: [], //台桌搜索文字 @@ -1710,9 +1796,33 @@ export default { }, }, timer: null, + isAllWaitCall: false, }; }, computed: { + returnPrintText(){ + if (this.order.selIndex < 0) { + return "免厨打"; + } + return this.order.list[this.order.selIndex].isPrint + ? "免厨打" + : "打印"; + }, + returnWaingText() { + if (this.order.selIndex < 0) { + return "等叫"; + } + return this.order.list[this.order.selIndex].isWaitCall == 1 + ? "取消等叫" + : "等叫"; + }, + isHasWaiting() { + const waitingArr = this.order.list.filter((v) => v.isWaitCall == 1); + return waitingArr.length > 0 ? true : false; + }, + returnWaingAllText() { + return this.isAllWaitCall ? "取消全部等叫" : "整单等叫"; + }, pointsDiscountAmount() { if (this.points.selected) { return this.points.toMoney; @@ -1918,8 +2028,28 @@ export default { }, 0); return (oldMemberPrice + nowMemberprice).toFixed(2); }, + discountSaleAmount() { + const oldTotal = this.order.old.list.reduce((a, b) => { + const bTotal = b.info + .filter((v) => v.discountSaleAmount && v.discountSaleAmount > 0) + .reduce((prve, cur) => { + return prve + cur.number * cur.discountSaleAmount; + }, 0); + return a + bTotal; + }, 0); + const nowTotal = this.order.list + .filter((v) => v.discountSaleAmount && v.discountSaleAmount > 0) + .reduce((a, b) => { + return a + b.number * b.discountSaleAmount; + }, 0); + return (oldTotal + nowTotal).toFixed(2); + }, youhuiAllPrice() { - return (this.vipDiscountPrice * 1 + this.allGiftMoney * 1).toFixed(2); + return ( + this.vipDiscountPrice * 1 + + this.allGiftMoney * 1 + + this.discountSaleAmount * 1 + ).toFixed(2); }, allNumber() { const oldNumber = this.order.old.list.reduce((a, b) => { @@ -2194,6 +2324,38 @@ export default { this.open(this.$route.query); }, methods: { + //挂账人支付确认 + guazhangPayConfirm(guazhangren, price) { + this.guazhangRen = guazhangren; + this.pays({ + creditBuyerId: this.guazhangRen.id, + payType: "creditBuyer", + }); + }, + //挂账 + guazhangShow() { + this.$refs.refGuaZhang.open(); + }, + //团购券扫码弹窗 + shouwTuanQuan() { + this.$refs.refPopTuanQuan.open(); + }, + tuanQuanConfirm(e) { + console.log(e); + this.tuanQuan = e; + }, + //更新单品改价数据 + updateCartItem(res) { + if (res) { + // this.order.list[this.order.selIndex] = res; + this.$set(this.order.list, this.order.selIndex, res) + } + }, + // 单品改价 + refPopChangePriceShow() { + const orderGoods = this.order.list[this.order.selIndex]; + this.$refs.refPopChangePrice.open(orderGoods); + }, returnProDiscount(row) { console.log(row); //相同商品抵扣券数组 @@ -2216,20 +2378,24 @@ export default { } }, lingshicaiShow() { - this.$refs.refPopAddCai.open(); + this.$refs.refPopAddCai.open({ + masterId: this.masterId, + tableId: this.table.tableId, + vipUserId: this.vipUser.id, + }); }, delQuan(row) { const index = this.quansSelArr.findIndex((v) => v.id == row.id); console.log(index); if (index != -1) { this.quansSelArr.splice(index, 1); - this.quansSelArr - .map((v, index) => { - return { - ...v, - discountAmount:v.type==2?this.returnProDiscount(v):v.discountAmount, - }; - }); + this.quansSelArr.map((v, index) => { + return { + ...v, + discountAmount: + v.type == 2 ? this.returnProDiscount(v) : v.discountAmount, + }; + }); } }, async getCalcUsablePoints() { @@ -2249,8 +2415,8 @@ export default { this.vipUser.accountPoints, this.points.res.maxUsablePoints || 0 ); - if(!pointsRes.usable){ - this.points.selected=false + if (!pointsRes.usable) { + this.points.selected = false; } } return pointsRes; @@ -2296,11 +2462,12 @@ export default { this.createOrder.discount = 1; this.points.selected = ""; e.map((v, index) => { - return { - ...v, - discountAmount:v.type==2? this.returnProDiscount(v):v.discountAmount, - }; - }); + return { + ...v, + discountAmount: + v.type == 2 ? this.returnProDiscount(v) : v.discountAmount, + }; + }); this.quansSelArr = [...e]; $goodsPayPriceMap = goodsPayPriceMap; }, @@ -2892,7 +3059,7 @@ export default { this.pays(); }, // 支付订单 - async pays() { + async pays(par) { this.loading = true; const userCouponInfos = this.quansSelArr.reduce((prve, cur) => { const index = prve.findIndex((v) => v.userCouponId == cur.couponId); @@ -2907,6 +3074,15 @@ export default { return prve; }, []); try { + // 核销团购券商品 + if (this.tuanQuan && this.tuanQuan.goods.length > 0) { + await $checkCoupon({ + code: this.tuanQuan.couponCode, + num: this.tuanQuan.number, + orderId: this.createOrder.data.id, + cartId: this.tuanQuan.goods.map((v) => v.cartId), + }); + } const res = await $payOrder({ tableId: this.table.tableId, masterId: this.masterId, @@ -2915,8 +3091,9 @@ export default { vipUserId: this.createOrder.data.memberId || this.vipUser.id, discount: this.createOrder.discount, code: this.createOrder.code, - userCouponInfos, + userCouponInfos: userCouponInfos.length > 0 ? userCouponInfos : "", pointsNum: this.points.value, + ...par, }); this.loading = false; this.payOrderSuccess(); @@ -3044,7 +3221,16 @@ export default { updateOrder(par = {}) { let item = this.order.list[this.order.selIndex]; console.log(this.table); - const { productId, skuId, isPack, isGift, number, id } = item; + const { + productId, + skuId, + isPack, + isGift, + number, + id, + isPrint, + isWaitCall, + } = item; $updateCart({ cartId: id, masterId: this.masterId, @@ -3055,6 +3241,8 @@ export default { num: number, isPack: isPack === "true" ? true : false, isGift: isGift === "true" ? true : false, + isPrint, + isWaitCall, ...par, }).then((res) => { this.$set(this.order.list, this.order.selIndex, { @@ -3107,7 +3295,7 @@ export default { // }, //右侧控制按钮点击事件 - orderBtnsClick(key) { + async orderBtnsClick(key) { const orderGoods = this.order.list[this.order.selIndex]; if (this.key != "isJieZhang" && this.payAfter) { this.createOrderClose(); @@ -3132,6 +3320,27 @@ export default { if (key === "del") { return this.removeCart(); } + if (key === "print") { + const isPrint = orderGoods.isPrint; + this.updateOrder({ isPrint: !isPrint }); + return; + } + if (key === "isWaitCall") { + const isWaitCall = orderGoods.isWaitCall; + this.updateOrder({ isWaitCall: !isWaitCall }); + return; + } + if (key == "AllWaitCall") { + await $waitCall({ + orderId:this.createOrder.data.id, + masterId:this.masterId, + tableId:this.table.tableId, + isWaitCall: !this.isAllWaitCall?1:0 + }) + this.isAllWaitCall=!this.isAllWaitCall; + this.getCart() + return; + } if (key === "save") { this.prveOrder.list.push({ cart: this.order.list, @@ -3532,6 +3741,7 @@ export default { tableId: this.table.tableId, num: this.skuGoods.number, // 0会删除此商品 isPack: false, // 是否打包 + isWaitCall:this.isAllWaitCall //是否等叫 }); this.orderListPush({ ...res, specSnap: name }); // this.orderListPush({ @@ -3637,6 +3847,7 @@ export default { }, reset() { // this.goods.list = []; + this.guazhangRen = ""; this.order.status = ""; this.loading = false; this.table = ""; @@ -3833,6 +4044,7 @@ export default { tableId: this.table.tableId, num: item.specList[0].suit, // 0会删除此商品 isPack: false, // 是否打包 + isWaitCall:this.isAllWaitCall //是否等叫 }); this.orderListPush(res); } @@ -4114,9 +4326,7 @@ input[type="number"]::-webkit-outer-spin-button { background-color: #fff; height: 100%; } -::v-deep .el-button--text { - // color: #000; -} + ::v-deep .meal_box .el-button-group { width: 100%; display: flex; @@ -4635,13 +4845,6 @@ input[type="number"]::-webkit-outer-spin-button { background-color: #fff; border: 1px solid #dcdfe6; } -::v-deep .el-checkbox__input.is-checked .el-checkbox__inner { - // background-color: #22bf64; - // border-color: #22bf64; -} -::v-deep .el-checkbox__input.is-checked + .el-checkbox__label { - // color: #22bf64; -} ::v-deep .tag-group .el-tag--dark { background: rgba(34, 191, 100, 0.1); diff --git a/src/views/tool/Instead/util.js b/src/views/tool/Instead/util.js index 7d61c8a..3c49399 100644 --- a/src/views/tool/Instead/util.js +++ b/src/views/tool/Instead/util.js @@ -218,4 +218,14 @@ export function returnCouponAllPrice(coupArr, goodsArr, vipUser) { const poductAllprice=returnProductCouponAllPrice(coupArr, goodsArr, vipUser) const pointAllPrice=returnFullReductionCouponAllPrice(coupArr) return (poductAllprice*1+pointAllPrice*1).toFixed(2); +} + +//返回购物车商品价格 +export function returnCartPrice(goods, vipUser) { + const price=goods.price||goods.salePrice + if(!vipUser||!vipUser.id ||!vipUser.isVip){ + return price + } + const memberPrice = goods.memberPrice ? goods.memberPrice :price; + return memberPrice } \ No newline at end of file