代客下单增加就餐类型切换

This commit is contained in:
YeMingfei666 2024-09-19 10:53:03 +08:00
parent 4fd8d61756
commit 5f1688173f
3 changed files with 193 additions and 49 deletions

View File

@ -1,6 +1,11 @@
// 桌台管理 // 桌台管理
import request from "@/utils/request"; import request from "@/utils/request";
//就餐形式,默认堂食后付费
const useType='dine-in-after'
function getUseType(){
const type=localStorage.getItem("useType")
return type?type:useType
}
/** /**
* 台桌列表 * 台桌列表
* @returns * @returns
@ -133,6 +138,7 @@ export function getCart(params) {
method: "get", method: "get",
params:{ params:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...params ...params
} }
}); });
@ -162,6 +168,7 @@ export function addCart(data) {
method: "post", method: "post",
data:{ data:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...data ...data
} }
}); });
@ -177,6 +184,7 @@ export function $clearCart(data) {
method: "delete", method: "delete",
data:{ data:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...data ...data
} }
}); });
@ -192,6 +200,7 @@ export function $removeCart(data) {
method: "delete", method: "delete",
data:{ data:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...data ...data
} }
}); });
@ -234,6 +243,7 @@ export function $getMasterId(data) {
method: "get", method: "get",
params:{ params:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...data ...data
} }
}); });
@ -262,6 +272,7 @@ export function $createOrder(data) {
method: "post", method: "post",
data:{ data:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...data ...data
} }
}); });
@ -278,6 +289,7 @@ export function $cacheOrder(data) {
method: "post", method: "post",
data:{ data:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...data ...data
} }
}); });
@ -293,6 +305,7 @@ export function $getCacheOrder(data) {
method: "get", method: "get",
params:{ params:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...data ...data
} }
}); });
@ -362,6 +375,7 @@ export function $choseCount(data) {
method: "put", method: "put",
data:{ data:{
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
useType: getUseType(),
...data ...data
} }
}); });

View File

@ -12,7 +12,8 @@
<div class="el-dialog__title" style="margin-right: 10px"> <div class="el-dialog__title" style="margin-right: 10px">
{{ title }} {{ title }}
</div> </div>
<el-dropdown @command="changePostPay"> <!-- 先付后付start -->
<!-- <el-dropdown @command="changePostPay">
<el-button plain type="primary" size="mini"> <el-button plain type="primary" size="mini">
{{ postPay ? "后付费" : "先付费" }} {{ postPay ? "后付费" : "先付费" }}
<i class="el-icon-caret-bottom"></i> <i class="el-icon-caret-bottom"></i>
@ -21,7 +22,11 @@
<el-dropdown-item :command="false">先付费</el-dropdown-item> <el-dropdown-item :command="false">先付费</el-dropdown-item>
<el-dropdown-item :command="true">后付费</el-dropdown-item> <el-dropdown-item :command="true">后付费</el-dropdown-item>
</el-dropdown-menu> </el-dropdown-menu>
</el-dropdown> </el-dropdown> -->
<el-button plain type="primary" size="mini">
{{ postPay ? "后付费" : "先付费" }}
</el-button>
<!-- 先付后付end -->
<span <span
@click="toggleFullScreen" @click="toggleFullScreen"
class="flex flex-xy-center cur-pointer full-screen" class="flex flex-xy-center cur-pointer full-screen"
@ -173,6 +178,18 @@
</div> </div>
</template> </template>
</div> </div>
<div class="u-m-l-20 u-p-b-10 meal_box">
<el-button-group>
<el-button
:class="{ active: item.value == useTypes.sel }"
:disabled="order.old.list.length > 0"
v-for="(item, index) in useTypes.list"
@click="changeUseType(item.value)"
:key="index"
>{{ item.name }}</el-button
>
</el-button-group>
</div>
<div class="flex row-between table-list u-m-l-20"> <div class="flex row-between table-list u-m-l-20">
<!-- <div class="tableId" @click="chooseTableOpen"> --> <!-- <div class="tableId" @click="chooseTableOpen"> -->
<el-popover <el-popover
@ -203,15 +220,27 @@
<div class="u-flex"> <div class="u-flex">
<div class="u-p-r-14 border-r u-m-r-14"> <div class="u-p-r-14 border-r u-m-r-14">
<div <template v-if="!shopInfo.isTableFee">
class="u-flex cur-pointer" <div
@click="refToggle('refChooseDinersNumber', true, perpole)" class="u-flex cur-pointer"
> @click="
<span>就餐人数{{ perpole }}</span> refToggle('refChooseDinersNumber', true, perpole)
<span "
class="el-icon-arrow-right diningPeople_cell_arrow" >
></span> <span>就餐人数{{ perpole }}</span>
</div> <span
class="el-icon-arrow-right diningPeople_cell_arrow"
></span>
</div>
</template>
<template v-else>
<div class="u-flex">
<span>就餐人数-</span>
<span
class="el-icon-arrow-right diningPeople_cell_arrow"
></span>
</div>
</template>
</div> </div>
<el-button <el-button
@click="clearCart" @click="clearCart"
@ -1071,6 +1100,8 @@ import chooseDinersNumber from "./table-diancan-components/choose-diners-number.
import returnCart from "./table-diancan-components/return-cart.vue"; import returnCart from "./table-diancan-components/return-cart.vue";
import moneyKeyboard from "./money-keyboard.vue"; import moneyKeyboard from "./money-keyboard.vue";
import dayjs from "dayjs"; import dayjs from "dayjs";
import { tbShopInfo } from "@/api/user";
import { import {
getGoodsLists, getGoodsLists,
addCart, addCart,
@ -1090,7 +1121,7 @@ import {
$choseCount, $choseCount,
$returnCart, $returnCart,
$printOrder, $printOrder,
tbShopTableGet tbShopTableGet,
} from "@/api/table"; } from "@/api/table";
import { tbShopCategoryGet } from "@/api/shop"; import { tbShopCategoryGet } from "@/api/shop";
import { import {
@ -1115,6 +1146,22 @@ export default {
}, },
data() { data() {
return { return {
//
shopInfo: {},
//
useTypes: {
list: [
{
name: "堂食",
value: "dine-in",
},
{
name: "自取",
value: "takeout",
},
],
sel: "dine-in",
},
// //
tableList: [], tableList: [],
tableShow: false, tableShow: false,
@ -1179,7 +1226,7 @@ export default {
total: 0, total: 0,
}, },
order: { order: {
seatFee:{totalAmount:0},// seatFee: { totalAmount: 0 }, //
orderId: "", orderId: "",
payType: "", payType: "",
masterId: "", masterId: "",
@ -1318,7 +1365,7 @@ export default {
allPrice() { allPrice() {
const oldPrice = this.order.old.list.reduce((a, b) => { const oldPrice = this.order.old.list.reduce((a, b) => {
const bTotal = b.info const bTotal = b.info
.filter((v) => v.isGift !== "true"&& v.status !== "return") .filter((v) => v.isGift !== "true" && v.status !== "return")
.reduce((prve, cur) => { .reduce((prve, cur) => {
return prve + cur.number * cur.salePrice; return prve + cur.number * cur.salePrice;
}, 0); }, 0);
@ -1329,7 +1376,7 @@ export default {
.reduce((a, b) => { .reduce((a, b) => {
return a + b.number * b.salePrice; return a + b.number * b.salePrice;
}, 0); }, 0);
return (oldPrice + price+this.order.seatFee.totalAmount*1).toFixed(2); return (oldPrice + price + this.order.seatFee.totalAmount * 1).toFixed(2);
}, },
allNumber() { allNumber() {
const oldNumber = this.order.old.list.reduce((a, b) => { const oldNumber = this.order.old.list.reduce((a, b) => {
@ -1374,8 +1421,12 @@ export default {
}, },
}, },
watch: { watch: {
perpole(newval,oldval) { "useTypes.sel": function (newval, oldval) {
if (!oldval&&newval&&this.table.tableId) { this.setPostPay();
this.setUseType();
},
perpole(newval, oldval) {
if (!oldval && newval && this.table.tableId) {
// $choseCount({ // $choseCount({
// masterId: this.masterId, // masterId: this.masterId,
// tableId: this.table.tableId, // tableId: this.table.tableId,
@ -1386,9 +1437,9 @@ export default {
} }
}, },
table(oldval, newval) { table(oldval, newval) {
if(oldval&&newval) { if (oldval && newval) {
this.onTableChange() this.onTableChange();
} }
// if (oldval && newval) { // if (oldval && newval) {
// console.log(oldval, newval); // console.log(oldval, newval);
// $choseTable({ // $choseTable({
@ -1407,8 +1458,8 @@ export default {
} }
}, },
"vipUser.id": async function (val) { "vipUser.id": async function (val) {
if(!this.table.tableId){ if (!this.table.tableId) {
return return;
} }
let masterId = this.order.masterId; let masterId = this.order.masterId;
if (!masterId) { if (!masterId) {
@ -1533,17 +1584,60 @@ export default {
// this.getCategory(); // this.getCategory();
// this.refToggle('refScanCode',true) // this.refToggle('refScanCode',true)
// this.refToggle("refDiscount", true); // this.refToggle("refDiscount", true);
this.getShopInfo();
}, },
methods: { methods: {
//
setUseType() {
//
if (this.useTypes.sel == "takeout") {
localStorage.setItem("useType", "takeout");
} else {
//
localStorage.setItem(
"useType",
`dine-in-${this.postPay ? "after" : "before"}`
);
}
},
//
setPostPay() {
//
// postPay true false
if (this.useTypes.sel == "takeout") {
this.postPay = false;
} else {
//munchies restaurant
this.postPay = this.shopInfo.registerType == "munchies" ? false : true;
}
},
//
async getShopInfo() {
try {
const shopId = localStorage.getItem("shopId");
const res = await tbShopInfo(shopId);
this.shopInfo = res;
this.setPostPay();
this.setUseType();
} catch (error) {}
},
//
changeUseType(type) {
if(this.order.old.list.length > 0){
return this.$message('下单后不支持更改就餐方式');
}
this.useTypes.sel = type;
},
// //
changePerpole(){ changePerpole() {
$choseCount({ $choseCount({
masterId: this.masterId, masterId: this.masterId,
tableId: this.table.tableId, tableId: this.table.tableId,
num: this.perpole, num: this.perpole,
}).then(res=>{ }).then((res) => {
this.order.seatFee=res this.order.seatFee = res;
}) });
}, },
// //
async onTableChange() { async onTableChange() {
@ -1555,11 +1649,11 @@ export default {
} }
}, },
// //
async getTableDetail(){ async getTableDetail() {
const res=await tbShopTableGet({ const res = await tbShopTableGet({
qrcode:this.table.tableId qrcode: this.table.tableId,
}) });
console.log(res) console.log(res);
}, },
// //
printOrder() { printOrder() {
@ -1587,7 +1681,7 @@ export default {
tableId: this.table.tableId, tableId: this.table.tableId,
}); });
this.order.selGoods.status = "return"; this.order.selGoods.status = "return";
this.order.old.selIndex=-1; this.order.old.selIndex = -1;
console.log(this.order.selGoods); console.log(this.order.selGoods);
}, },
// //
@ -1596,7 +1690,7 @@ export default {
const { content, total } = await tbShopTableGet({ const { content, total } = await tbShopTableGet({
shopId: localStorage.getItem("shopId"), shopId: localStorage.getItem("shopId"),
}); });
this.tableList = content.filter(v=>v.status!='closed'); this.tableList = content.filter((v) => v.status != "closed");
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
@ -1607,8 +1701,7 @@ export default {
}, },
chooseDinersNumberConfirm(e) { chooseDinersNumberConfirm(e) {
this.perpole = e; this.perpole = e;
this.changePerpole() this.changePerpole();
}, },
// //
scanPayConfirm(code) { scanPayConfirm(code) {
@ -2443,7 +2536,7 @@ export default {
this.order.selPlaceNum = -1; this.order.selPlaceNum = -1;
this.order.old.list = []; this.order.old.list = [];
this.order.selGoods = ""; this.order.selGoods = "";
this.order.seatFee={totalAmount:0}// this.order.seatFee = { totalAmount: 0 }; //
this.prveOrder.list = []; this.prveOrder.list = [];
this.prveOrder.selIndex = -1; this.prveOrder.selIndex = -1;
this.order.old.selIndex = -1; this.order.old.selIndex = -1;
@ -2461,21 +2554,22 @@ export default {
this.key = ""; this.key = "";
this.order.orderId = ""; this.order.orderId = "";
this.perpole = ""; this.perpole = "";
this.useTypes.sel='dine-in'
}, },
// //
async getCart() { async getCart() {
console.log(this.table) console.log(this.table);
const res = await getCart({ const res = await getCart({
...this.order.query, ...this.order.query,
masterId: this.masterId, masterId: this.masterId,
tableId: this.table.tableId, tableId: this.table.tableId,
}); });
this.order.seatFee=res.seatFee?res.seatFee:this.order.seatFee; this.order.seatFee = res.seatFee ? res.seatFee : this.order.seatFee;
this.perpole=res.seatFee?res.seatFee.totalNumber:1; this.perpole = res.seatFee ? res.seatFee.totalNumber : 1;
const nowCart=res.records.find((v) => v.placeNum == 0); const nowCart = res.records.find((v) => v.placeNum == 0);
this.order.list=nowCart?nowCart.info:[]; this.order.list = nowCart ? nowCart.info : [];
const oldCart=res.records.filter((v) => v.placeNum != 0); const oldCart = res.records.filter((v) => v.placeNum != 0);
this.order.old.list=oldCart?oldCart:[]; this.order.old.list = oldCart ? oldCart : [];
// if (this.key|| res.records.length) { // if (this.key|| res.records.length) {
// this.order.old.list = res.records; // this.order.old.list = res.records;
// } else { // } else {
@ -2739,11 +2833,16 @@ export default {
// this.getCart(); // this.getCart();
// } // }
// this.changePerpole() // this.changePerpole()
await $choseCount({
if (!this.shopInfo.isTableFee) {
//
await $choseCount({
masterId: this.masterId, masterId: this.masterId,
tableId: this.table.tableId, tableId: this.table.tableId,
num: this.perpole, num: this.perpole,
}) });
}
this.getCart(); this.getCart();
this.getGoods(); this.getGoods();
this.getCategory(); this.getCategory();
@ -2827,6 +2926,19 @@ input[type="number"]::-webkit-outer-spin-button {
::v-deep .el-button--text { ::v-deep .el-button--text {
// color: #000; // color: #000;
} }
::v-deep .meal_box .el-button-group {
width: 100%;
display: flex;
}
::v-deep .meal_box .el-button-group .el-button {
flex: 1;
}
::v-deep .meal_box .el-button-group .active {
border: 1px solid #409eff !important;
color: #409eff !important;
background: rgba(24, 144, 255, 0.1) !important;
z-index: 10;
}
::v-deep .number-box .el-input__inner { ::v-deep .number-box .el-input__inner {
border: none; border: none;
padding: 0 4px; padding: 0 4px;

View File

@ -223,6 +223,7 @@ import downloadTableCode from "./components/downloadTableCode";
import tableDiancan from "./components/table-diancan.vue"; import tableDiancan from "./components/table-diancan.vue";
import $status from "./status.js"; import $status from "./status.js";
import chooseDinersNumber from "./components/table-diancan-components/choose-diners-number.vue"; import chooseDinersNumber from "./components/table-diancan-components/choose-diners-number.vue";
import { tbShopInfo } from "@/api/user";
import { import {
tbShopTableGet, tbShopTableGet,
@ -251,10 +252,13 @@ export default {
status: $status, status: $status,
selTable: "", // selTable: "", //
areaMap: {}, areaMap: {},
shopInfo:{},
}; };
}, },
mounted() { mounted() {
this.tbShopAreaGet(); this.tbShopAreaGet();
this.getShopInfo()
}, },
filters: { filters: {
formatTime(time) { formatTime(time) {
@ -262,6 +266,15 @@ export default {
}, },
}, },
methods: { methods: {
//
async getShopInfo() {
try {
const shopId = localStorage.getItem("shopId");
const res = await tbShopInfo(shopId);
this.shopInfo=res
console.log(res)
} catch (error) {}
},
// //
cleanTableHandle(item) { cleanTableHandle(item) {
this.$confirm("确定要清台:"+item.name, "提示", { this.$confirm("确定要清台:"+item.name, "提示", {
@ -308,6 +321,11 @@ export default {
//key isAddGoods //key isAddGoods
//key isPayOrder //key isPayOrder
this.selTable = item; this.selTable = item;
if(this.shopInfo.isTableFee){
//
this.$refs.diancan.open(item, key, '');
return
}
const num = item.useNum || 0; const num = item.useNum || 0;
if (item.useNum <= 0) { if (item.useNum <= 0) {
return this.$refs.refChooseDinersNumber.open(); return this.$refs.refChooseDinersNumber.open();