add: 优化台桌

This commit is contained in:
gyq
2025-09-29 13:44:39 +08:00
parent 610410afa6
commit 3174d24e30
3 changed files with 182 additions and 164 deletions

View File

@@ -1,197 +1,214 @@
<template> <template>
<el-dialog <el-dialog
:title="form.id ? '编辑台桌' : '添加台桌'" :title="form.id ? '编辑台桌' : '添加台桌'"
v-model="dialogVisible" v-model="dialogVisible"
@open="tbShopAreaGet" @open="tbShopAreaGet"
@close="reset" @close="reset"
> >
<el-form ref="refForm" :model="form" :rules="rules" label-width="120px" label-position="left"> <el-form
<el-form-item label="选择区域" prop="areaId"> ref="refForm"
<el-select v-model="form.areaId" placeholder="请选择区域"> :model="form"
<el-option :rules="rules"
:label="item.name" label-width="120px"
:value="item.id" label-position="left"
v-for="item in areaList" >
:key="item.id" <el-form-item label="选择区域" prop="areaId">
></el-option> <el-select v-model="form.areaId" placeholder="请选择区域">
</el-select> <el-option
</el-form-item> :label="item.name"
<el-form-item label="台桌状态" prop="status" v-if="form.id"> :value="item.id"
<el-select v-model="form.status" placeholder="请选择台桌状态"> v-for="item in areaList"
<el-option :key="item.id"
:label="item.name" ></el-option>
:value="item.value" </el-select>
v-for="item in status" </el-form-item>
:key="item.value" <el-form-item label="台桌状态" prop="status" v-if="form.id">
></el-option> <el-select v-model="form.status" placeholder="请选择台桌状态">
</el-select> <el-option
</el-form-item> :label="item.label"
<el-form-item label="台桌标识" prop="sign" v-if="!form.id"> :value="item.value"
<div class="u-flex"> v-for="item in statusList"
<div class="u-flex" style="width: 57px"> :key="item.value"
<el-input v-model="form.sign" placeholder="A"></el-input> ></el-option>
</div> </el-select>
</el-form-item>
<el-form-item label="台桌标识" prop="sign" v-if="!form.id">
<div class="u-flex">
<div class="u-flex" style="width: 57px">
<el-input v-model="form.sign" placeholder="A"></el-input>
</div>
<div class="u-flex u-m-l-30"> <div class="u-flex u-m-l-30">
<div class="u-flex"> <div class="u-flex">
<div class="u-m-r-4">起始</div> <div class="u-m-r-4">起始</div>
<el-input <el-input
v-model="form.start" v-model="form.start"
style="width: 57px" style="width: 57px"
placeholder="请输入起始值" placeholder="请输入起始值"
></el-input> ></el-input>
</div> </div>
<div <div
style="background-color: #d9d9d9; height: 1px; width: 32px; border-radius: 1px" style="
class="u-m-l-16 u-m-r-16" background-color: #d9d9d9;
></div> height: 1px;
<div class="u-flex"> width: 32px;
<span class="u-m-r-4">结束</span> border-radius: 1px;
<el-input "
v-model="form.end" class="u-m-l-16 u-m-r-16"
style="width: 57px" ></div>
placeholder="请输入结束值" <div class="u-flex">
></el-input> <span class="u-m-r-4">结束</span>
</div> <el-input
</div> v-model="form.end"
</div> style="width: 57px"
</el-form-item> placeholder="请输入结束值"
<el-form-item label="台桌名称" prop="name" v-if="form.id"> ></el-input>
<el-input v-model="form.name" placeholder="请输入台桌名称"></el-input> </div>
</el-form-item> </div>
<el-form-item label="客座数"> </div>
<el-input-number </el-form-item>
v-model="form.maxCapacity" <el-form-item label="台桌名称" prop="name" v-if="form.id">
:min="0" <el-input v-model="form.name" placeholder="请输入台桌名称"></el-input>
controls-position="right" </el-form-item>
></el-input-number> <el-form-item label="客座数">
</el-form-item> <el-input-number
<el-form-item label="清台管理"> v-model="form.maxCapacity"
<el-radio-group v-model="form.autoClear"> :min="0"
<el-radio-button :value="0">手动清台</el-radio-button> controls-position="right"
<el-radio-button :value="1">自动清台</el-radio-button> ></el-input-number>
</el-radio-group> </el-form-item>
</el-form-item> <el-form-item label="清台管理">
<el-form-item v-if="form.id" label="网络预定开关"> <el-radio-group v-model="form.autoClear">
<el-switch v-model="form.isPredate" :active-value="1" :inactive-value="2"></el-switch> <el-radio-button :value="0">手动清台</el-radio-button>
</el-form-item> <el-radio-button :value="1">自动清台</el-radio-button>
<el-form-item v-if="form.id" label="网络预定台桌支付金额"> </el-radio-group>
<el-input-number </el-form-item>
v-model="form.predateAmount" <el-form-item v-if="form.id" label="网络预定开关">
:min="0" <el-switch
controls-position="right" v-model="form.isPredate"
></el-input-number> :active-value="1"
</el-form-item> :inactive-value="2"
</el-form> ></el-switch>
<template #footer> </el-form-item>
<span class="dialog-footer"> <el-form-item v-if="form.id" label="网络预定台桌支付金额">
<el-button @click="close"> </el-button> <el-input-number
<el-button type="primary" :loading="loading" @click="onSubmitHandle"> </el-button> v-model="form.predateAmount"
</span> :min="0"
</template> controls-position="right"
</el-dialog> ></el-input-number>
</el-form-item>
</el-form>
<template #footer>
<span class="dialog-footer">
<el-button @click="close"> </el-button>
<el-button type="primary" :loading="loading" @click="onSubmitHandle">
</el-button>
</span>
</template>
</el-dialog>
</template> </template>
<script setup> <script setup>
import shopAreaApi from "@/api/account/shopArea"; import shopAreaApi from "@/api/account/shopArea";
import tableApi from "@/api/account/table"; import tableApi from "@/api/account/table";
import status from "../status.js";
let dialogVisible = ref(false); let dialogVisible = ref(false);
let resetForm = {}; let resetForm = {};
let loading = ref(false); let loading = ref(false);
let status = [
{ value: "pending", name: "挂单中" }, let statusList = Object.entries(status).map(([key, value]) => {
{ value: "using", name: "开台中" }, // key = 原对象的键(如 'unbound'value = 原对象的键值(如 {label: '未绑定', type: '#909090'}
{ value: "paying", name: "结算中" }, return {
{ value: "idle", name: "空闲" }, value: key, // 原键名作为新的 value
{ value: "subscribe", name: "预定" }, label: value.label, // 继承原 label
{ value: "closed", name: "关台" }, type: value.type, // 继承原 type
// {value:'opening',name:'开台中'}, };
{ value: "cleaning", name: "台桌清理中" }, });
];
const form = reactive({ const form = reactive({
areaId: "", areaId: "",
sign: "", sign: "",
start: 1, start: 1,
end: 10, end: 10,
maxCapacity: 0, maxCapacity: 0,
autoClear: 1, autoClear: 1,
isPredate: "", isPredate: "",
predateAmount: "", predateAmount: "",
}); });
const rules = { const rules = {
areaId: [ areaId: [
{ {
required: true, required: true,
message: "请选择区域", message: "请选择区域",
trigger: ["blur", "change"], trigger: ["blur", "change"],
}, },
], ],
sign: [ sign: [
{ {
required: true, required: true,
message: "请输入台桌标识", message: "请输入台桌标识",
trigger: ["blur", "change"], trigger: ["blur", "change"],
}, },
], ],
}; };
let areaList = ref([]); let areaList = ref([]);
onMounted(() => { onMounted(() => {
resetForm = { ...form }; resetForm = { ...form };
}); });
//解决selectc值改变后未验证问题 //解决selectc值改变后未验证问题
const refForm = ref(null); const refForm = ref(null);
const emits = defineEmits(["success"]); const emits = defineEmits(["success"]);
function onSubmitHandle() { function onSubmitHandle() {
refForm.value.validate(async (valid) => { refForm.value.validate(async (valid) => {
if (valid) { if (valid) {
loading.value = true; loading.value = true;
try { try {
let res = form.id ? await tableApi.edit(form) : await tableApi.add(form); let res = form.id ? await tableApi.edit(form) : await tableApi.add(form);
console.log(res); console.log(res);
emits("success", res); emits("success", res);
ElNotification({ ElNotification({
title: "成功", title: "成功",
message: `${form.id ? "编辑" : "添加"}成功`, message: `${form.id ? "编辑" : "添加"}成功`,
type: "success", type: "success",
}); });
loading.value = false; loading.value = false;
close(); close();
} catch (error) { } catch (error) {
loading.value = false; loading.value = false;
console.log(error); console.log(error);
} }
} }
}); });
} }
function show(obj) { function show(obj) {
dialogVisible.value = true; dialogVisible.value = true;
if (obj && obj.id) { if (obj && obj.id) {
Object.assign(form, obj); Object.assign(form, obj);
} }
} }
function close() { function close() {
dialogVisible.value = false; dialogVisible.value = false;
} }
function reset() { function reset() {
delete form.id; delete form.id;
Object.assign(form, resetForm); Object.assign(form, resetForm);
console.log(form); console.log(form);
} }
// 获取区域 // 获取区域
async function tbShopAreaGet() { async function tbShopAreaGet() {
try { try {
const data = await shopAreaApi.getList({}); const data = await shopAreaApi.getList({});
areaList.value = data.records; areaList.value = data.records;
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
} }
defineExpose({ defineExpose({
show, show,
close, close,
}); });
</script> </script>

View File

@@ -80,8 +80,8 @@
<div class="row row1" style="align-items: flex-start"> <div class="row row1" style="align-items: flex-start">
<span style="font-size: 14px; color: #333"> <span style="font-size: 14px; color: #333">
{{ item.bookingInfo.createUserName }}{{ item.bookingInfo.bookingPerson }}{{ {{ item.bookingInfo.createUserName }}{{ item.bookingInfo.bookingPerson }}{{
item.bookingInfo.gender == 1 ? "先生" : "女士" item.bookingInfo.gender == 1 ? "先生" : "女士"
}} }}
</span> </span>
<div class="state" style="font-size: 12px; color: #666; display: flex; align-items: center"> <div class="state" style="font-size: 12px; color: #666; display: flex; align-items: center">
<img style="width: 16px; height: 16px; filter: contrast(0.5)" src="@/assets/images/perpole.png" <img style="width: 16px; height: 16px; filter: contrast(0.5)" src="@/assets/images/perpole.png"
@@ -143,8 +143,8 @@
<el-button type="info" :style="{ <el-button type="info" :style="{
backgroundColor: status[item.status].type, backgroundColor: status[item.status].type,
borderColor: status[item.status].type, borderColor: status[item.status].type,
}" @click="cleanTableHandle(item)"> }">
理中
</el-button> </el-button>
</template> </template>
<template v-else> <template v-else>

View File

@@ -7,4 +7,5 @@ export default {
settled: { label: "待清台", type: "#FF9500" }, settled: { label: "待清台", type: "#FF9500" },
closed: { label: "关台", type: "#DDDDDD" }, closed: { label: "关台", type: "#DDDDDD" },
subscribe: { label: "预定", type: "#58B22C" }, subscribe: { label: "预定", type: "#58B22C" },
cleaning: { label: "清理中", type: "#909090" },
}; };