1.新增商品编辑

This commit is contained in:
gyq
2024-08-19 09:58:03 +08:00
parent e4a82411ba
commit b45793ffc9
11 changed files with 313 additions and 64 deletions

View File

@@ -12,7 +12,9 @@
<div class="info">
<div class="master_id">
<span>{{ props.masterId }}</span>
<span class="member_info" v-if="memberInfo.telephone">会员{{ memberInfo.telephone }}</span>
<span class="member_info" v-if="global.orderMemberInfo.telephone">
会员{{ global.orderMemberInfo.telephone }}
</span>
</div>
<div class="btm">
<span class="p">服务员{{ store.userInfo.loginAccount || "暂无" }}</span>
@@ -59,7 +61,7 @@
</div>
</div>
<div class="pay_wrap">
<payCard :amount="props.amount" :member="props.member" :orderId="props.orderInfo.id" @paySuccess="paySuccess" />
<payCard :amount="props.amount" :orderId="props.orderInfo.id" @paySuccess="paySuccess" />
</div>
</div>
</el-drawer>
@@ -78,8 +80,10 @@ import useStorage from '@/utils/useStorage'
import { ipcRenderer } from "electron";
import { formatDecimal } from '@/utils/index.js'
import receiptPrint from "@/components/lodop/receiptPrint.js";
import { useGlobal } from '@/store/global.js'
import { usePrint } from '@/store/print.js'
const global = useGlobal()
const printStore = usePrint()
const store = useUser();
@@ -215,37 +219,21 @@ async function printOrderLable() {
// 订单已支付
function paySuccess() {
useStorage.del('memberInfo')
dialogVisible.value = false;
global.setOrderMember({})
global.setOrderTable({})
printOrderLable()
emit("paySuccess");
}
function show() {
dialogVisible.value = true;
getLocalMemberInfo()
}
defineExpose({
show,
});
const memberInfo = ref('')
// 从本地获取会员信息
function getLocalMemberInfo() {
let localMemberInfo = useStorage.get('memberInfo')
if (localMemberInfo && localMemberInfo.telephone) {
memberInfo.value = localMemberInfo
} else {
memberInfo.value = ''
}
}
onMounted(() => {
getLocalMemberInfo()
});
</script>
<style>

View File

@@ -11,7 +11,8 @@
<div class="number" @click="takeFoodCodeRef.show()">
<el-text class="t">{{ masterId }}</el-text>
</div>
<div class="select_user" @click="fastCashierRef.show()" v-if="!memberInfo.telephone">
<div class="select_user" @click="fastCashierRef.show()"
v-if="!global.orderMemberInfo.telephone && !global.tableInfo.id">
<div class="left">
<el-icon class="icon">
<WalletFilled />
@@ -27,7 +28,12 @@
<el-icon class="icon">
<UserFilled />
</el-icon>
<el-text class="t">{{ memberInfo.telephone }}</el-text>
<div class="t_wrap" :class="{ 'big_text': global.orderMemberInfo.telephone && global.tableInfo.id }">
<div class="t" v-if="global.orderMemberInfo.telephone">
会员{{ global.orderMemberInfo.telephone }}
</div>
<div class="t" v-if="global.tableInfo.id">台桌{{ global.tableInfo.name }}</div>
</div>
</div>
<el-icon class="arrow">
<Close />
@@ -116,7 +122,7 @@
<takeFoodCode ref="takeFoodCodeRef" title="修改取餐号" placeholder="请输入取餐号" @success="takeFoodCodeSuccess" />
<!-- 结算订单 -->
<settleAccount ref="settleAccountRef" :cart="cartList" :amount="cartInfo.totalAmount" :remark="remark"
:masterId="masterId" :orderInfo="orderInfo" :member="memberInfo" @paySuccess="createCodeAjax(1)" />
:masterId="masterId" :orderInfo="orderInfo" @paySuccess="createCodeAjax(1)" />
<!-- 快捷收银 -->
<fastCashier ref="fastCashierRef" type="0" />
<!-- 挂起订单 -->
@@ -132,6 +138,7 @@ export default {
import { onMounted, ref } from "vue";
import { useRoute } from 'vue-router'
import { useUser } from "@/store/user.js";
import { useGlobal } from '@/store/global.js'
import remarkModal from "@/components/remarkModal.vue";
import takeFoodCode from "@/components/takeFoodCode.vue";
import cartOperation from "@/views/home/components/cartOperation.vue";
@@ -155,6 +162,8 @@ import {
import goods from "@/views/home/components/goods.vue";
import member from "@/views/member/index.vue";
const global = useGlobal()
const route = useRoute()
const membershow = ref(false);
@@ -177,8 +186,6 @@ const cartLoading = ref(false);
const orderInfo = ref({});
const createOrderLoading = ref(false);
const memberInfo = ref({})
// 取餐码
const masterId = ref("");
@@ -310,6 +317,7 @@ async function addCart(params, type = "add") {
const res = await createCart({
productId: params.productId,
masterId: masterId.value,
tableId: global.tableInfo.id || '',
shopId: store.userInfo.shopId,
skuId: type == "add" ? params.id : params.skuId,
number: params.number || 1,
@@ -374,7 +382,6 @@ async function createCodeAjax(type = "0") {
});
masterId.value = res.code;
queryCartAjax();
getLocalMemberInfo()
if (type == 1) {
// 结算订单 清楚商品所有红点
@@ -385,25 +392,14 @@ async function createCodeAjax(type = "0") {
}
}
// 从本地获取会员信息
function getLocalMemberInfo() {
let localMemberInfo = useStorage.get('memberInfo')
if (localMemberInfo && localMemberInfo.telephone) {
memberInfo.value = localMemberInfo
} else {
memberInfo.value = {}
}
}
// 清除本地会员
// 清除本地会员/台桌信息
function clearMember() {
useStorage.del('memberInfo')
getLocalMemberInfo()
global.setOrderMember({})
global.setOrderTable({})
}
onMounted(() => {
createCodeAjax();
getLocalMemberInfo()
});
</script>
@@ -459,7 +455,7 @@ onMounted(() => {
align-items: center;
justify-content: space-between;
background-color: var(--el-color-info-light-8);
padding: 0 var(--el-font-size-base);
padding: 0 10px;
.left {
display: flex;
@@ -470,6 +466,18 @@ onMounted(() => {
font-size: 20px;
}
.t_wrap {
display: flex;
flex-direction: column;
align-items: flex-start;
&.big_text {
.t {
font-size: 12px;
}
}
}
.t {
font-size: var(--el-font-size-base);
margin-left: 4px;

View File

@@ -418,8 +418,10 @@ const createMembermemberSubmit = async () => { ///添加会员
}
const moneys = ref('')// 钱数
// 创建会员订单
const toHome = () => {
useStorage.set('memberInfo', tableData.list[datarow.value])
// useStorage.set('memberInfo', tableData.list[datarow.value])
global.setOrderMember(tableData.list[datarow.value])
router.push({
name: 'home'
})

View File

@@ -20,8 +20,10 @@
</div>
<div class="demo_tabs_boxitem_onetow">
<div style="font-size: 16px; color: #757575;">{{ item.orderNo }}</div>
<div>
<span>{{ item.names && item.names[0] }} </span>
<div class="order_info">
<span class="sp1">{{
item.names &&
item.names[0] }} </span>
<span style="margin-left: 6px;">{{ item.names && item.names.length }}</span>
</div>
</div>
@@ -115,6 +117,19 @@ const clickitemboxshow = (e) => {
justify-content: space-around;
flex: 1;
margin-left: 20px;
.order_info {
display: flex;
align-items: center;
.sp1 {
display: inline-block;
width: 100px;
white-space: nowrap;
text-overflow: ellipsis;
overflow: hidden;
}
}
}
}
}

View File

@@ -1091,8 +1091,8 @@ onMounted(() => {
.tableDataclass {
width: 100%;
overflow: auto;
height: 90%;
overflow-y: auto;
height: 70%;
.orderbox_right_item {
margin-top: 6px;

View File

@@ -16,21 +16,67 @@
<span class="t">{{ status[props.tableInfo.status] }}</span>
</div>
<div class="place_order">
<router-link class="btn" :to="{ name: 'home', query: { table_code: 1 } }">
<div class="btn">
<div class="top">
<el-icon class="icon">
<TakeawayBox />
</el-icon>
<span class="t">点单</span>
</div>
<span class="tips">开始新订单</span>
</router-link>
<!-- <span class="tips">开始新订单</span> -->
<div class="btn_wrap">
<el-button type="primary" style="width: 100%;" @click="toOrderMeal(1)">直接点单</el-button>
</div>
<div class="btn_wrap">
<el-button type="primary" style="width: 100%;" @click="toOrderMeal(2)">选择会员点单</el-button>
</div>
</div>
</div>
<el-dialog :title="`台桌:${props.tableInfo.name} - 选择会员`" v-model="showDialog" width="80%">
<el-form inline>
<el-form-item>
<el-input placeholder="请输入手机号搜索会员" v-model="tableData.phone" />
</el-form-item>
<el-form-item>
<el-button type="primary" @click="getMemberList">搜索</el-button>
<el-button @click="resetTable">重置</el-button>
</el-form-item>
</el-form>
<el-table :data="tableData.list" height="300px" border stripe v-loading="tableData.loading">
<el-table-column prop="name" label="昵称" width="120px" />
<el-table-column prop="telephone" label="手机" width="150px" />
<el-table-column prop="code" label="编号" width="120px" />
<el-table-column prop="level" label="等级" />
<el-table-column prop="levelConsume" label="积分" />
<el-table-column prop="amount" label="余额" width="100px">
<template v-slot="scope">
{{ formatDecimal(scope.row.amount) }}
</template>
</el-table-column>
<el-table-column label="操作" width="120px">
<template v-slot="scope">
<el-button type="primary" @click="toHomeMember(scope.row)">选择</el-button>
</template>
</el-table-column>
</el-table>
<el-pagination layout="prev, pager, next, total" background style="margin-top: 20px;"
:total="Number(tableData.total)" v-model:current-page="tableData.page"
@current-change="getMemberList" />
</el-dialog>
</div>
</template>
<script setup>
import { ref } from 'vue'
import { ref, reactive } from 'vue'
import { useRouter } from 'vue-router'
import { useUser } from "@/store/user.js"
import { useGlobal } from '@/store/global.js'
import { queryMembermember } from '@/api/member/index.js'
import { formatDecimal } from '@/utils/index.js'
const router = useRouter()
const global = useGlobal()
const store = useUser()
const emit = defineEmits(['close'])
@@ -52,6 +98,65 @@ const status = ref({
function close() {
emit('close')
}
// 点单
function toOrderMeal(t) {
if (t == 1) {
// 直接点单
global.setOrderTable(props.tableInfo)
router.push({
name: 'home',
})
} else {
// 选择会员点单
showDialog.value = true
getMemberList()
}
}
const showDialog = ref(false)
const tableData = reactive({
phone: '',
loading: false,
list: [],
page: 1,
size: 10,
total: 0
})
// 重置表格
function resetTable() {
tableData.phone = ''
tableData.page = 1
getMemberList()
}
// 获取会员列表
async function getMemberList() {
try {
tableData.loading = true
const res = await queryMembermember({
shopId: store.userInfo.shopId,
phone: tableData.phone,
page: tableData.page,
pageSize: tableData.size
})
tableData.loading = false
tableData.list = res.list
tableData.total = res.total
} catch (error) {
console.log(error);
}
}
// 选择会员去下单
function toHomeMember(row) {
global.setOrderTable(props.tableInfo)
global.setOrderMember(row)
router.push({
name: 'home',
})
}
</script>
<style scoped lang="scss">
@@ -104,17 +209,21 @@ function close() {
display: flex;
align-items: center;
justify-content: center;
position: relative;
overflow: hidden;
.btn {
display: flex;
gap: 10px;
flex-direction: column;
align-items: center;
text-decoration: none;
$size: 150px;
.top {
background-color: var(--el-color-danger);
width: 130px;
height: 130px;
width: $size;
height: $size;
display: flex;
flex-direction: column;
align-items: center;
@@ -135,6 +244,10 @@ function close() {
color: #999;
padding-top: 6px;
}
.btn_wrap {
width: $size;
}
}
}
}