更新优化商品耗材、库存

This commit is contained in:
gyq
2026-04-14 18:29:20 +08:00
parent 50a5aeb8e5
commit fa67997c86
9 changed files with 515 additions and 28411 deletions

View File

@@ -248,6 +248,8 @@
</div>
</div>
</el-dialog>
<!-- 退款推库存的操作弹窗 -->
<refundConsModal ref="refundConsModalRef" :list="refundList" @success="refundConsModalSuccess" />
</template>
<script setup>
@@ -263,6 +265,9 @@ import { refundOrder } from '@/api/order.js'
import { useSocket } from '@/store/socket.js'
import { usePrint } from '@/store/print.js'
import { useUser } from '@/store/user.js'
import refundConsModal from '@/components/refundConsModal.vue'
const refundConsModalRef = ref(null)
const goodsStore = useGoods()
const socket = useSocket()
@@ -316,15 +321,21 @@ async function returnFormSubmit() {
returnFormLoading.value = true
await returnOrderItemAjax(returnForm.value.num)
showReturnForm.value = false
ElMessage.success('退菜成功')
// ElMessage.success('退菜成功')
} catch (error) {
console.log('退菜失败了');
}
returnFormLoading.value = false
}
// 提交退菜
async function returnOrderItemAjax(num = 1) {
const refundStock = ref('')
// 退款推库存的操作
function refundConsModalSuccess(e) {
refundStock.value = e
refundNext()
}
async function refundNext() {
try {
let data = {
orderId: goodsStore.orderListInfo.id,
@@ -336,23 +347,25 @@ async function returnOrderItemAjax(num = 1) {
{
id: goodsStore.cartOrderItem.id,
returnAmount: goodsStore.cartOrderItem.lowPrice,
num: num
num: refundNum.value
}
],
operator: store.userInfo.name || store.shopInfo.shopName,
print: printStore.deviceNoteList.length ? false : true
print: printStore.deviceNoteList.length ? false : true,
refundStock: refundStock.value, // 是否推库存 1退菜图库存 2仅退菜不退库存
}
await refundOrder(data)
goodsStore.cartOrderItem.returnNum += num
ElMessage.success('退菜成功')
goodsStore.cartOrderItem.returnNum += refundNum.value
goodsStore.calcCartInfo()
getOrderByIdAjax(goodsStore.orderListInfo.id).then(res => {
let originOrderInfo = res
let index = originOrderInfo.cartList.findIndex(item => item.id == goodsStore.cartOrderItem.id)
originOrderInfo.cartList = _.at(originOrderInfo.cartList, index);
originOrderInfo.cartList[0].num = num
originOrderInfo.cartList[0].num = refundNum.value
originOrderInfo.cartList[0].returnNum = 0
originOrderInfo.cartList[0].payAmount = num * originOrderInfo.cartList[0].price
originOrderInfo.cartList[0].payAmount = refundNum.value * originOrderInfo.cartList[0].price
printStore.printRefundDish(commOrderPrintData({ ...originOrderInfo, isRefundDish: true }));
}).catch(err => {
@@ -364,6 +377,51 @@ async function returnOrderItemAjax(num = 1) {
}
}
// 提交退菜
const refundNum = ref(1)
const refundList = ref([])
async function returnOrderItemAjax(num = 1) {
try {
refundNum.value = num
let item = goodsStore.cartOrderItem
console.log('returnOrderItemAjax===', item);
// 在这里给订单的商品补全库存信息 start
goodsStore.originGoodsList.forEach(val => {
if (item.productId == val.id) {
if (store.shopInfo.refundMode == 1) {
// 跟随分类退款模式
goodsStore.categoryList.forEach(v => {
if (val.categoryId == v.id) {
item.refundMode = v.refundMode
}
})
} else {
// 跟随商品退款模式及
item.refundMode = val.refundMode
}
}
})
console.log('item===', item);
if (item.refundMode == 3) {
refundList.value = [
{
name: item.product_name,
num: refundNum.value
}
]
refundConsModalRef.value.show()
return
}
refundNext()
// 在这里给订单的商品补全库存信息 end
} catch (error) {
console.log(error);
}
}
// 显示打包
function packHandle() {
let item = goodsStore.cartList[goodsStore.cartActiveIndex]

View File

@@ -95,7 +95,7 @@
<img class="sell_out_icon" src="@/assets/icon_goods_wks.svg">
</div>
<!-- 售罄 -->
<div class="sell_out" v-else-if="item.isSoldStock">
<div class="sell_out" v-else-if="item.isSoldStock || item.isSoldOut">
<img class="sell_out_icon" src="@/assets/icon_goods_sq.svg">
</div>
<!-- 库存不足 -->
@@ -559,7 +559,7 @@ function showSkuHandle(item) {
message: '不在可售时间内',
})
return
} else if (item.isSoldStock) {
} else if (item.isSoldStock || item.isSoldOut) {
ElMessage({
type: 'error',
message: '该商品已售罄',

View File

@@ -73,8 +73,8 @@
</template>
</el-table-column>
</el-table>
<!-- <template v-if="item.returnGoods.length">
<div class="tips" style="margin-top: 20px;padding-bottom: 10px;">以下为已退部分退单/退</div>
<template v-if="item.returnGoods.length">
<div class="tips" style="margin-top: 20px;padding-bottom: 10px;">以下已完成退菜/退</div>
<el-table :data="item.returnGoods" brder stripe>
<el-table-column label="商品信息">
<template v-slot="scope">
@@ -105,7 +105,7 @@
</template>
</el-table-column>
</el-table>
</template> -->
</template>
<div class="ipt">
<el-input type="textarea" :rows="4" v-model="remark" placeholder="请输入退单原因" />
</div>
@@ -126,17 +126,19 @@
<div class="drawer_footer">
<div class="btn">
<el-button type="danger" style="width: 100%;" :loading="loading"
@click="handleRefund">手动退款</el-button>
:disabled="item.onGoods && !item.onGoods.length" @click="handleRefund">手动退款</el-button>
</div>
<div class="btn">
<el-button type="primary" style="width: 100%;" :loading="loading"
@click="refundHandle()">原路退回</el-button>
:disabled="item.onGood && !item.onGoods.length" @click="refundHandle()">原路退回</el-button>
</div>
</div>
</template>
</el-drawer>
<takeFoodCode ref="takeFoodCodeRef" title="退款密码" :type="2" input-type="password" placeholder="请输入退款密码"
@success="passwordSuccess" />
<!-- 退款退菜推库存的操作弹窗 -->
<refundConsModal ref="refundConsModalRef" :list="returnList" @success="refundConsModalSuccess" />
</template>
<script setup>
@@ -150,9 +152,13 @@ import { usePrint } from "@/store/print.js";
import { useUser } from '@/store/user.js'
import dayjs from 'dayjs'
import takeFoodCode from "@/components/takeFoodCode.vue";
import { useGoods } from '@/store/goods.js'
import refundConsModal from '@/components/refundConsModal.vue';
const refundConsModalRef = ref(null)
const emits = defineEmits(['success'])
const goodsStore = useGoods()
const store = useUser()
const printStore = usePrint();
const globalStore = useGlobal()
@@ -176,43 +182,83 @@ const takeFoodCodeRef = ref(null)
const cash = ref(false)
const amountInputRef = ref(null)
// 退款密码
async function passwordSuccess(e = '') {
try {
loading.value = true
let rows = tableRef.value.getSelectionRows()
let refundDetails = []
// if (refundType.value != 1) {
refundDetails = tableRef.value.getSelectionRows().map(val => {
return {
id: val.id,
returnAmount: val.payAmount,
num: val.refund_number
}
})
// }
// 退款推库存的操作
function refundConsModalSuccess(e) {
refundStock.value = e
refundNext()
}
// 退款密码
const returnList = ref([])
const refundDetails = ref([])
const pwd = ref('')
const refundStock = ref('')
const rows = ref([])
async function passwordSuccess(e = '') {
pwd.value = e
loading.value = true
rows.value = tableRef.value.getSelectionRows()
// if (refundType.value != 1) {
refundDetails.value = tableRef.value.getSelectionRows().map(val => {
return {
refundMode: val.refundMode,
name: val.productName,
id: val.id,
returnAmount: val.payAmount,
num: val.refund_number
}
})
// }
// 处理退菜退款的库存逻辑 判断有没有returnMode = 3,然后弹窗提示 start
console.log('refundDetails===', refundDetails.value);
refundDetails.value.forEach(item => {
if (item.refundMode == 3) {
returnList.value.push({
name: item.name,
num: item.num
})
}
})
console.log('returnList===', returnList.value);
// 显示退菜退款的弹窗
if (returnList.value.length > 0) {
refundConsModalRef.value.show()
return
}
// 处理退菜退款的库存逻辑 判断有没有returnMode = 3,然后弹窗提示 end
refundNext()
}
// 最后的退款操作
async function refundNext() {
try {
let data = {
orderId: item.value.id,
refundAmount: formatDecimal(+refundAmount.value),
modify: modify.value,
cash: cash.value,
refundReason: remark.value,
refundDetails: refundDetails,
pwd: e,
refundDetails: refundDetails.value,
pwd: pwd.value,
operator: store.userInfo.name || store.shopInfo.shopName,
print: printStore.deviceNoteList.length ? false : true
print: printStore.deviceNoteList.length ? false : true,
refundStock: refundStock.value, // 是否推库存 1退菜图库存 2仅退菜不退库存
};
await refundOrder(data)
ElMessage.success('退款成功')
await printRefund(rows)
await printRefund(rows.value)
isShow.value = false
emits('success')
} catch (error) {
console.log(error);
} finally {
loading.value = false
}
loading.value = false
}
// 显示手动退款
@@ -349,6 +395,29 @@ function show(row) {
isShow.value = true
let newRow = { ...row }
// 在这里给订单的商品补全库存信息 start
console.log('originGoodsList===', goodsStore.originGoodsList);
newRow.goods.forEach(item => {
goodsStore.originGoodsList.forEach(val => {
if (item.productId == val.id) {
if (store.shopInfo.refundMode == 1) {
// 跟随分类退款模式
goodsStore.categoryList.forEach(v => {
if (val.categoryId == v.id) {
item.refundMode = v.refundMode
}
})
} else {
// 跟随商品退款模式及
item.refundMode = val.refundMode
}
}
})
})
console.log('newRow.goods===', newRow.goods);
// 在这里给订单的商品补全库存信息 end
remark.value = ''
let onGoods = []
@@ -372,7 +441,11 @@ function show(row) {
// returnGoods.push(item)
// }
// 可以操作的退款数量
onGoods.push(item)
if (refundMaxNum > 0) {
onGoods.push(item)
} else {
returnGoods.push(item)
}
})
newRow.onGoods = onGoods