优化打包、订单云打印

This commit is contained in:
gyq 2025-03-18 17:19:59 +08:00
parent 64f539623f
commit 177d987769
10 changed files with 116 additions and 35 deletions

View File

@ -113,8 +113,8 @@ export default (data) => {
`; `;
let tableBody = ""; let tableBody = "";
if (data.productDatalist && data.productDatalist.length) { if (data.productDataList && data.productDataList.length) {
for (let item of data.productDatalist) { for (let item of data.productDataList) {
tableBody += ` tableBody += `
<tr> <tr>
<td style="font-size: 12px;width:75%;"> <td style="font-size: 12px;width:75%;">

View File

@ -28,7 +28,7 @@
</div> </div>
<span class="title">{{ item.payName }}</span> <span class="title">{{ item.payName }}</span>
</div> </div>
<div class="item" :class="{ active: payActive == 'buyer' }" <!-- <div class="item" :class="{ active: payActive == 'buyer' }"
@click="payTypeChange('buyer', { payType: 'buyer' })"> @click="payTypeChange('buyer', { payType: 'buyer' })">
<div class="icon"> <div class="icon">
<div class="img" <div class="img"
@ -37,7 +37,7 @@
</div> </div>
</div> </div>
<span class="title">挂账</span> <span class="title">挂账</span>
</div> </div> -->
</div> </div>
<div class="input_wrap"> <div class="input_wrap">
<div class="input" style="flex: 1">付款{{ money }}</div> <div class="input" style="flex: 1">付款{{ money }}</div>
@ -255,11 +255,16 @@ const props = defineProps({
orderList: { orderList: {
type: Array, type: Array,
default: [] default: []
},
isPrint: {
type: [Number, String],
default: 1,
} }
}); });
watch(props, () => { watch(props, () => {
money.value = formatDecimal(props.amount) money.value = formatDecimal(props.amount)
payData.value.checkOrderPay.isPrint = props.isPrint
}) })
const emit = defineEmits(["paySuccess", 'orderExpired']); const emit = defineEmits(["paySuccess", 'orderExpired']);
@ -383,14 +388,18 @@ async function payTypeChange(index, item) {
SelectVipUserRef.value.show() SelectVipUserRef.value.show()
} }
} }
if (item.payType == "buyer") { if (item.payType == "arrears") {
//
showBuyerHandle(); showBuyerHandle();
} }
if (payActive.value != "buyer") { if(item.payType == 'deposit'){
if (payList.value[payActive.value].payType == "deposit") { scanModalRef.value.show();
scanModalRef.value.show();
}
} }
// if (payActive.value != "buyer") {
// if (payList.value[payActive.value].payType == "deposit") {
// }
// }
} catch (error) { } catch (error) {
console.log(error); console.log(error);
} }
@ -406,7 +415,7 @@ async function confirmOrder() {
payData.value.checkOrderPay.couponList = [...couponResList1.value.map(item => item.id), ...couponResList2.value.map(item => item.id)]; payData.value.checkOrderPay.couponList = [...couponResList1.value.map(item => item.id), ...couponResList2.value.map(item => item.id)];
// await staffPermission("yun_xu_shou_kuan"); // await staffPermission("yun_xu_shou_kuan");
if (payActive.value == "buyer") { if (payList.value[payActive.value].payType == "arrears") {
showBuyerHandle(); showBuyerHandle();
return return
} else if (payList.value[payActive.value].payType == "scanCode") { } else if (payList.value[payActive.value].payType == "scanCode") {
@ -823,6 +832,7 @@ function reset() {
roundAmount: 0, // roundAmount: 0, //
pointsDiscountAmount: 0, // (tb_points_basic_setting) pointsDiscountAmount: 0, // (tb_points_basic_setting)
pointsNum: 0, // 使 ( enable_deduction使) pointsNum: 0, // 使 ( enable_deduction使)
isPrint: props.isPrint
}, },
}; };
} }

View File

@ -7,7 +7,7 @@
<el-button plain type="info" style="width: 100%" @click="inputHandle(item)">{{ item }}</el-button> <el-button plain type="info" style="width: 100%" @click="inputHandle(item)">{{ item }}</el-button>
</div> </div>
<div> <div>
<el-button plain type="info" disabled style="width: 100%">.</el-button> <el-button plain type="info" style="width: 100%" @click="inputHandle('.')">.</el-button>
</div> </div>
<div> <div>
<el-button plain type="info" style="width: 100%" @click="inputHandle(0)">0</el-button> <el-button plain type="info" style="width: 100%" @click="inputHandle(0)">0</el-button>
@ -17,7 +17,8 @@
</div> </div>
</div> </div>
<div class="footer"> <div class="footer">
<el-button type="primary" style="width: 100%" :loading="loading" @click="confirmHandle">确认</el-button> <el-button type="primary" style="width: 100%" :disabled="number <= 0" :loading="loading"
@click="confirmHandle">确认</el-button>
</div> </div>
</el-dialog> </el-dialog>
</template> </template>
@ -25,6 +26,7 @@
<script setup> <script setup>
import { ref } from "vue"; import { ref } from "vue";
import { ElMessage } from "element-plus"; import { ElMessage } from "element-plus";
import { clearNoNum } from '@/utils/index.js'
const props = defineProps({ const props = defineProps({
type: { type: {
@ -61,6 +63,7 @@ function opne() {
// //
function inputHandle(n) { function inputHandle(n) {
number.value += n; number.value += n;
number.value = clearNoNum({ value: number.value })
} }
// //
@ -72,7 +75,7 @@ function delHandle() {
const loading = ref(false) const loading = ref(false)
// //
function confirmHandle() { function confirmHandle() {
if (!number.value) return if (!number.value || !number.value <= 0) return
if (props.type == 2) { if (props.type == 2) {
if (number.value.length < 6) { if (number.value.length < 6) {
ElMessage.error('请输入正确的密码') ElMessage.error('请输入正确的密码')

View File

@ -20,7 +20,7 @@ export const useGoods = defineStore("goods", {
// tableCode: "66666666", // tableCode: "66666666",
// }, // 台桌信息 // }, // 台桌信息
tableInfo: { tableInfo: {
id: '', id: "",
name: "", name: "",
num: "", num: "",
tableCode: "", tableCode: "",
@ -175,7 +175,6 @@ export const useGoods = defineStore("goods", {
}), }),
}); });
} }
// val = this.completeGoodsInfo(val);
this.orderList = arr; this.orderList = arr;
console.log("this.orderList===", this.orderList); console.log("this.orderList===", this.orderList);
} }
@ -189,15 +188,17 @@ export const useGoods = defineStore("goods", {
await this.getGoodsList(); await this.getGoodsList();
let tableCode = useStorage.get("tableCode"); let tableCode = useStorage.get("tableCode");
if (tableCode) this.historyOrderAjax(tableCode); if (tableCode) {
await this.historyOrderAjax(tableCode);
}
}, },
// 切换商品分类 // 切换商品分类
setCategoryIndex(index) { async setCategoryIndex(index) {
this.categoryIndex = index; this.categoryIndex = index;
useStorage.set("categoryIndex", index); useStorage.set("categoryIndex", index);
if (index == 0) { if (index == 0) {
// this.getGoodsList(); await this.getGoodsList();
this.goodsList = _.chunk(this.originGoodsList, 12); this.goodsList = _.chunk(this.originGoodsList, 12);
} }
// else if (this.categoryList[index].id == "off_sale") { // else if (this.categoryList[index].id == "off_sale") {
@ -276,7 +277,11 @@ export const useGoods = defineStore("goods", {
let packCount = 0; let packCount = 0;
arr.map((val, index) => { arr.map((val, index) => {
numCount += +val.number; if (val.product_type == "weight") {
numCount++;
} else {
numCount += +val.number;
}
packCount += +val.pack_number; packCount += +val.pack_number;
val = this.completeGoodsInfo(val); val = this.completeGoodsInfo(val);
val.active = false; val.active = false;
@ -315,6 +320,8 @@ export const useGoods = defineStore("goods", {
}, },
// 添加商品到购物车 // 添加商品到购物车
addCart(params) { addCart(params) {
console.log("添加商品到购物车===", params);
let tableCode = ""; let tableCode = "";
if (this.tableInfo.tableCode) { if (this.tableInfo.tableCode) {
tableCode = this.tableInfo.tableCode; tableCode = this.tableInfo.tableCode;
@ -325,12 +332,19 @@ export const useGoods = defineStore("goods", {
tableCode = useStorage.get("tableCode"); tableCode = useStorage.get("tableCode");
} }
} }
let pack_number = 0;
if (params.type == "weight") {
pack_number = 1;
} else {
pack_number = params.number;
}
const sendData = { const sendData = {
table_code: tableCode, table_code: tableCode,
product_id: params.productId || "", product_id: params.productId || "",
sku_id: params.id || "", sku_id: params.id || "",
number: params.number || 1, number: params.number || 1,
pack_number: this.allSelected ? params.number : 0, pack_number: this.allSelected ? pack_number : 0,
is_gift: params.is_gift || 0, is_gift: params.is_gift || 0,
is_temporary: params.is_temporary || 0, is_temporary: params.is_temporary || 0,
discount_sale_amount: params.discount_sale_amount || 0, discount_sale_amount: params.discount_sale_amount || 0,
@ -342,6 +356,7 @@ export const useGoods = defineStore("goods", {
sku_name: params.sku_name || "", sku_name: params.sku_name || "",
pro_group_info: params.pro_group_info || [], pro_group_info: params.pro_group_info || [],
goods_type: params.goods_type || "", goods_type: params.goods_type || "",
product_type: params.type,
}; };
this.operateCart(sendData, "add"); this.operateCart(sendData, "add");
}, },
@ -436,7 +451,7 @@ export const useGoods = defineStore("goods", {
} }
item.product_id = item.productId; item.product_id = item.productId;
item.lowPrice = val.lowPrice; item.lowPrice = val.lowPrice || 0;
item.sku_name = sku && sku.specInfo; item.sku_name = sku && sku.specInfo;
item.group_type = val.groupType; item.group_type = val.groupType;
item.goods_type = val.type; item.goods_type = val.type;
@ -490,12 +505,25 @@ export const useGoods = defineStore("goods", {
} }
this.operateCart({ table_code: tableCode }, "cleanup"); this.operateCart({ table_code: tableCode }, "cleanup");
}, },
// 商品更新后,需要对购物车、订单进行更新
async updateGoodsList() {
const socket = useSocket();
await this.getCategoryList();
await this.getGoodsList();
socket.cartInit();
},
// 清空购物车回执操作 // 清空购物车回执操作
successClearCart() { async successClearCart() {
this.cartList = []; this.cartList = [];
this.cartInfo = {}; this.cartInfo = {};
this.orderList = []; this.orderList = [];
this.orderListInfo = ""; this.orderListInfo = "";
// 存在真实台桌,需要拉取历史订单
if (this.tableInfo.id) {
await this.historyOrderAjax(this.tableInfo.tableCode);
}
this.calcCartInfo(); this.calcCartInfo();
}, },
// 下单成功清除购物车,重新加载订单 // 下单成功清除购物车,重新加载订单

View File

@ -143,6 +143,9 @@ export const useSocket = defineStore("socket", {
this.orderList.push(data.data); this.orderList.push(data.data);
this.startPrintInterval(); this.startPrintInterval();
} }
} else if (data.data_type == "product_update") {
// 商品更新
goodsStore.updateGoodsList();
} }
}); });

View File

@ -182,7 +182,9 @@ export function commOrderPrintData(orderInfo) {
skuName: item.skuName, skuName: item.skuName,
salePrice: formatDecimal(item.price), salePrice: formatDecimal(item.price),
totalAmount: formatDecimal(+item.payAmount), totalAmount: formatDecimal(+item.payAmount),
proGroupInfo: item.proGroupInfo.map((item) => item.goods).flat(), proGroupInfo: item.proGroupInfo
? item.proGroupInfo.map((item) => item.goods).flat()
: "",
}); });
}); });

View File

@ -48,7 +48,7 @@
</el-icon> </el-icon>
<el-text class="t">赠送</el-text> <el-text class="t">赠送</el-text>
</div> </div>
<div class="item" @click="packHandle"> <div class="item" :class="{ disabled: goodsStore.allSelected }" @click="packHandle">
<el-icon class="icon"> <el-icon class="icon">
<Box /> <Box />
</el-icon> </el-icon>
@ -348,14 +348,14 @@ async function returnOrderItemAjax(num = 1) {
// //
function packHandle() { function packHandle() {
let item = goodsStore.cartList[goodsStore.cartActiveIndex] let item = goodsStore.cartList[goodsStore.cartActiveIndex]
if (item && item.id) { if (item && item.id && !goodsStore.allSelected) {
if (!item.pack_number || item.pack_number <= 0) { if (!item.pack_number || item.pack_number <= 0) {
if (item.number > 1) { if (item.number > 1 && item.goods_type != 'weight') {
// 1 // 1
showPackModal.value = true showPackModal.value = true
} else { } else {
// 1 // 1
goodsStore.operateCart({ ...item, pack_number: item.number }, 'edit') goodsStore.operateCart({ ...item, pack_number: 1 }, 'edit')
} }
} else { } else {
// //
@ -400,12 +400,20 @@ function numberChange(t) {
if (item.number < item.suitNum) { if (item.number < item.suitNum) {
goodsStore.deleteCartItem() goodsStore.deleteCartItem()
} else { } else {
goodsStore.operateCart(goodsStore.cartList[goodsStore.cartActiveIndex], 'edit') if (goodsStore.allSelected) {
goodsStore.operateCart({ ...goodsStore.cartList[goodsStore.cartActiveIndex], pack_number: goodsStore.cartList[goodsStore.cartActiveIndex].number }, 'edit')
} else {
goodsStore.operateCart(goodsStore.cartList[goodsStore.cartActiveIndex], 'edit')
}
} }
break; break;
case 'add': case 'add':
goodsStore.cartList[goodsStore.cartActiveIndex].number++ goodsStore.cartList[goodsStore.cartActiveIndex].number++
goodsStore.operateCart(goodsStore.cartList[goodsStore.cartActiveIndex], 'edit') if (goodsStore.allSelected) {
goodsStore.operateCart({ ...goodsStore.cartList[goodsStore.cartActiveIndex], pack_number: goodsStore.cartList[goodsStore.cartActiveIndex].number }, 'edit')
} else {
goodsStore.operateCart(goodsStore.cartList[goodsStore.cartActiveIndex], 'edit')
}
break; break;
default: default:
break; break;
@ -415,7 +423,11 @@ function numberChange(t) {
// //
function updateNumber(num) { function updateNumber(num) {
goodsStore.cartList[goodsStore.cartActiveIndex].number = num goodsStore.cartList[goodsStore.cartActiveIndex].number = num
goodsStore.operateCart({ ...goodsStore.cartList[goodsStore.cartActiveIndex] }, 'edit') if (goodsStore.allSelected) {
goodsStore.operateCart({ ...goodsStore.cartList[goodsStore.cartActiveIndex], pack_number: goodsStore.cartList[goodsStore.cartActiveIndex].number }, 'edit')
} else {
goodsStore.operateCart(goodsStore.cartList[goodsStore.cartActiveIndex], 'edit')
}
} }
// //

View File

@ -57,7 +57,7 @@
<template v-else> <template v-else>
<div class="li" @click.stop="goodEditor(item, 0)">下架</div> <div class="li" @click.stop="goodEditor(item, 0)">下架</div>
<div class="li" @click.stop="goodEditor(item, 1)">售罄</div> <div class="li" @click.stop="goodEditor(item, 1)">售罄</div>
<div class="li" @click.stop="goodStockNumberHandle(item)">修改库存</div> <!-- <div class="li" @click.stop="goodStockNumberHandle(item)">修改库存</div> -->
</template> </template>
<div class="li" @click.stop="item.showMore = false">取消</div> <div class="li" @click.stop="item.showMore = false">取消</div>
</div> </div>

View File

@ -35,7 +35,7 @@
<div class="footer"> <div class="footer">
<!-- <el-button icon="Edit"></el-button> --> <!-- <el-button icon="Edit"></el-button> -->
<div class="button"> <div class="button">
<el-checkbox v-model="isPrint" border label="打印结算小票" style="width: 100%" /> <el-checkbox v-model="isPrint" :true-value="1" :false-value="0" border label="打印结算小票" style="width: 100%" />
</div> </div>
<!-- <div class="print"> <!-- <div class="print">
<el-button type="warning" :loading="discountLoading" @click="showStaffDiscountHandle">添加折扣</el-button> <el-button type="warning" :loading="discountLoading" @click="showStaffDiscountHandle">添加折扣</el-button>
@ -47,7 +47,8 @@
</div> </div>
<div class="pay_wrap"> <div class="pay_wrap">
<payCard ref="payCardRef" :orderList="orderList" :amount="cartInfo.totalAmount" <payCard ref="payCardRef" :orderList="orderList" :amount="cartInfo.totalAmount"
:orderId="goodsStore.orderListInfo.id" @paySuccess="paySuccess" @orderExpired="orderExpiredHnadle" /> :orderId="goodsStore.orderListInfo.id" @paySuccess="paySuccess" @orderExpired="orderExpiredHnadle"
:isPrint="0" />
</div> </div>
</div> </div>
<!-- <el-dialog v-model="showStaffDiscount" title="员工折扣" @close="global.updateData(true)"> <!-- <el-dialog v-model="showStaffDiscount" title="员工折扣" @close="global.updateData(true)">
@ -137,7 +138,7 @@ const props = defineProps({
const cartList = ref([]) const cartList = ref([])
const orderList = ref([]) const orderList = ref([])
const isPrint = ref(true); const isPrint = ref(1);
const discountLoading = ref(false) const discountLoading = ref(false)
// //

View File

@ -119,7 +119,7 @@
<div class="left" v-else></div> <div class="left" v-else></div>
<div class="right"> <div class="right">
<el-text> <el-text>
{{ formatDecimal(goodsStore.cartInfo.total, 2, true) }} {{ formatDecimal(goodsStore.cartInfo.total || 0, 2, true) }}
</el-text>{{ formatDecimal(goodsStore.cartInfo.totalAmount || 0) }} </el-text>{{ formatDecimal(goodsStore.cartInfo.totalAmount || 0) }}
</div> </div>
</div> </div>
@ -269,6 +269,8 @@ async function createOrderHandle(t = 0) {
if (t == 1) { if (t == 1) {
settleAccountRef.value.show(t) settleAccountRef.value.show(t)
} else {
goodsStore.clearCart()
} }
// //
@ -317,8 +319,28 @@ function giftPackHandle(key, item) {
const allSelectedHandle = async () => { const allSelectedHandle = async () => {
if (goodsStore.allSelected) { if (goodsStore.allSelected) {
goodsStore.allSelected = 0 goodsStore.allSelected = 0
//
if (goodsStore.orderList.length) {
await goodsStore.historyOrderAjax(goodsStore.orderListInfo.tableCode)
goodsStore.calcCartInfo()
}
} else { } else {
goodsStore.allSelected = 1 goodsStore.allSelected = 1
//
if (goodsStore.orderList.length) {
goodsStore.orderList.map(item => {
item.goods.map(val => {
if (val.goods_type == 'weight') {
val.pack_number = 1
} else {
val.pack_number = val.number
}
})
})
goodsStore.calcCartInfo()
}
} }
if (goodsStore.cartList.length) { if (goodsStore.cartList.length) {