库存商品导入成功刷新货商

This commit is contained in:
weiwei committed 2025-08-06 11:01:39 +08:00
1 parent f4e0ea65ca
commit 6026e1ac78
4 files changed
+66 -101

No files matched your search

@@ -101,7 +101,7 @@
:data="vxeTableData"
:edit-rules="validRules"
show-footer
:footer-data="footerData"
:footer-data="[{ seq: '合计', totalAmount }]"
:merge-footer-items="[{ row: 0, col: 2, rowspan: 1, colspan: 6 }]"
@checkbox-all=""
@checkbox-change=""
@@ -122,13 +122,8 @@
</template>
</vxe-column>
<vxe-column field="selectedUnitObj" title="包装单位" :edit-render="{}">
<template #edit="{ row, $rowIndex }">
<el-select
v-model="row.selectedUnitObj"
value-key="id"
placeholder="请选择包装单位"
@change="reComputeTotalAmount(row, $rowIndex)"
>
<template #edit="{ row }">
<el-select v-model="row.selectedUnitObj" value-key="id" placeholder="请选择包装单位" @change="onUnitChange(row)">
<el-option
v-for="item in row.erpUnitVos"
:key="item.id"
@@ -151,9 +146,9 @@
v-model="row.quantity"
:min="0"
:precision="0"
@change="reComputeTotalAmount(row, $rowIndex)"
@change="onRowValueChange(row, $rowIndex)"
/>
<el-input-number v-else v-model="row.quantity" :min="0" :precision="2" @change="reComputeTotalAmount(row, $rowIndex)" />
<el-input-number v-else v-model="row.quantity" :min="0" :precision="2" @change="onRowValueChange(row, $rowIndex)" />
</template>
</vxe-column>
<vxe-column field="purchasePrice" title="原进价">
@@ -171,28 +166,19 @@
v-model="row.selectedUnitObj.realPrice"
:min="0"
:precision="2"
@change="reComputeTotalAmount(row, $rowIndex)"
@change="onRowValueChange(row, $rowIndex)"
/>
</template>
</vxe-column>
<vxe-column field="totalAmount" title="累计总金额" :edit-render="{ autoFocus: 'input', placeholder: '请输入' }">
<template #default="{ row }">
{{ row?.selectedUnitObj?.totalAmount }}
<!-- <span v-if="row.selectedUnitObj && row.quantity">
{{ Number((row.quantity * parseFloat(row.selectedUnitObj.realPrice || 0)).toFixed(2)) }}
</span> -->
</template>
<template #edit="{ row }">
<el-input-number
v-if="row.selectedUnitObj"
v-model="row.selectedUnitObj.totalAmount"
:min="0"
:precision="2"
@change="updateFootEvent"
/>
<template #edit="{ row, $rowIndex }">
<el-input-number v-if="row.selectedUnitObj" v-model="row.selectedUnitObj.totalAmount" :min="0" :precision="2" />
</template>
<template #footer="{ row }">
<span style="color: #2e5cf6; font-weight: bold">{{ footerData[0].totalAmount }} 元</span>
<span style="color: #2e5cf6; font-weight: bold">{{ totalAmount }} 元</span>
</template>
</vxe-column>
<vxe-column field="remark" title="备注" :edit-render="{ autoFocus: 'input', placeholder: '请输入' }">
@@ -219,24 +205,16 @@
<!-- 商品选择对话框 -->
<select-dialog ref="erpSpuSelectDialogRef" @getSelectedRows="getSelectedRows" />
<!-- <link-code-dialog
ref="linkCodeDialogRef"
title="关联采购订单"
:getTableData="getCgddPage"
@getSelectedLinkCode="getSelectedLinkCode"
/> -->
</div>
</div>
</template>
<script setup lang="ts">
import { ref, reactive, computed, onMounted } from "vue"
import { ref, reactive, computed, onMounted, defineAsyncComponent } from "vue"
import { getObj, addObj, putObj } from "/@/api/supermarketerp/smErpInventoryRecords"
import { getPlanCode, getErpSpuSimpleAll, getCgddPage } from "/@/api/supermarketerp/common"
import { getPlanCode, getErpSpuSimpleAll } from "/@/api/supermarketerp/common"
import { VxeTablePropTypes, type VxeTableInstance } from "vxe-table"
import { formatDate } from "/@/utils/formatTime"
// import LinkCodeDialog from "/@/views/supermarketerp/components/link-code-dialog.vue"
import { displayPrice, storePrice } from "/@/utils/formatMoney"
import { tablePrint } from "../../supermarketUtils"
import { useSmProcessFormAction } from "/@/hooks/smProcessFormAction"
@@ -260,10 +238,10 @@ const emit = defineEmits(["close"])
const loading = ref(false)
const disabled = ref(false)
const erpSpuSelectDialogRef = ref()
// const linkCodeDialogRef = ref()
const baseFormRef = ref()
const vxeTableRef = ref<VxeTableInstance<any>>()
const baseInfoRef = ref()
const baseDataForm = reactive<any>({
id: "",
inventoryCode: "",
@@ -275,24 +253,25 @@ const baseDataForm = reactive<any>({
})
const vxeTableData = ref<any>([])
const erpSpuSimpleAll = ref<any>([])
const footerData = ref([{ seq: "合计", totalAmount: "0" }])
// 基本信息表单校验规则
const dataRules = ref({
inventoryCode: [{ required: true, message: "编号不能为空", trigger: "blur" }],
inventoryDate: [{ required: true, message: "单据日期不能为空", trigger: "blur" }],
supplierId: [{ required: true, message: "货商不能为空", trigger: "blur" }],
})
// 可编辑表格校验规则
const validRules = ref<VxeTablePropTypes.EditRules<any>>({
selectedUnitObj: [{ required: true, message: "必须选择" }],
quantity: [{ required: true, type: "number", min: 1, message: "必需大于等于0" }],
})
// 合计总金额
const totalAmount = computed(() =>
vxeTableData.value.reduce((sum: any, row: any) => sum + Number(row.selectedUnitObj?.totalAmount || 0), 0).toFixed(2),
)
onMounted(async () => {
await getInitData()
updateFootCount(vxeTableData.value)
})
// 初始化数据
@@ -337,51 +316,33 @@ const getInitData = async () => {
erpSpuSimpleAllData && erpSpuSimpleAllData.code === 0 && (erpSpuSimpleAll.value = erpSpuSimpleAllData.data)
}
// 点击商品选择
// 商品选择
const handleClickSpuSelect = () => erpSpuSelectDialogRef.value.openDialog()
// 点击关联采购申请编号
// const handleClickLinkCode = () => linkCodeDialogRef.value.openLinkCodeDialog(2)
// 商品选择回调
const getSelectedRows = (selectionRows: any[]) => {
console.log("selectionRows", selectionRows)
// 获取选择的采购申请
// const getSelectedLinkCode = (selectionRows: any) => {
// console.log("被选择的关联数据", selectionRows)
// baseDataForm.linkCode = selectionRows.code
// vxeTableData.value = selectionRows.items.map((item: any) => ({
// ...item,
// selectedUnitObj: {},
// realPrice: displayPrice(item.purchasePrice, ""),
// }))
// }
// 获取被选择的商品行
const getSelectedRows = (selectionRows: any) => {
console.log("被选择的商品行", selectionRows)
// 筛选新勾选的项
// 只添加新商品
const addedItems = selectionRows
.filter((item: any) => !vxeTableData.value.some((vxeTableItem: any) => vxeTableItem.erpSpuId === item.erpSpuId))
.map((addItem: any) => {
// const index = state.erpSpuItemsMemo.findIndex((item: any) => item.erpSpuId === addItem.erpSpuId)
// if (index !== -1) return state.erpSpuItemsMemo[index]
const firstUnit = addItem.erpUnitVos[0]
return {
...addItem,
erpUnitVos: addItem.erpUnitVos.map((item: any) => ({ ...item, realPrice: Number(displayPrice(item.purchasePrice, "")) })),
selectedUnitObj: {
...addItem.erpUnitVos[0],
realPrice: parseFloat(displayPrice(addItem.erpUnitVos[0].purchasePrice, "")),
totalAmount: 1 * parseFloat(displayPrice(addItem.erpUnitVos[0].purchasePrice, "")),
...firstUnit,
realPrice: Number(displayPrice(firstUnit.purchasePrice, "")),
totalAmount: 1 * Number(displayPrice(firstUnit.purchasePrice, "")),
},
unitId: addItem.erpUnitVos[0].id,
unitId: firstUnit.id,
quantity: 1,
isNew: true,
}
})
vxeTableData.value.push(...addedItems)
updateFootCount(vxeTableData.value)
console.log("vxeTableData.value", vxeTableData.value)
}
@@ -392,35 +353,23 @@ const removeRow = () => {
const selectRecords = $table.getCheckboxRecords()
if (selectRecords.length > 0) {
vxeTableData.value = vxeTableData.value.filter((item: any) => !selectRecords.some((row) => row.erpSpuId === item.erpSpuId))
updateFootCount(vxeTableData.value)
}
}
}
// 重新计算累计总金额
const reComputeTotalAmount = (row: any, index: number) => {
vxeTableData.value[index].selectedUnitObj.totalAmount = Number((row.quantity * parseFloat(row.selectedUnitObj.realPrice || 0)).toFixed(2))
updateFootEvent()
// 包装单位选择联动
const onUnitChange = (row: any) => {
// 更新 unitId
row.unitId = row.selectedUnitObj.id
// 更新 realPrice
row.selectedUnitObj.realPrice = Number(displayPrice(row.realPrice ?? row.selectedUnitObj.purchasePrice, ""))
// 重新计算行内累计总金额
row.selectedUnitObj.totalAmount = Number((row.quantity * Number(row.selectedUnitObj.realPrice || 0)).toFixed(2))
}
// 更新尾行合计
const updateFootEvent = () => {
const $table = vxeTableRef.value
if ($table) {
const fullData = $table.getFullData()
updateFootCount(fullData)
}
}
const updateFootCount = (list: any[]) => {
const [sumNObj] = footerData.value
sumNObj.totalAmount = sumNum(list, "totalAmount")
}
const sumNum = (list: any[], field: string) => {
let count = 0
list.forEach((item) => {
count += Number(item.selectedUnitObj[field])
})
return count.toFixed(2)
// 数量、进价变动联动
const onRowValueChange = (row: any, $rowIndex: number) => {
row.selectedUnitObj.totalAmount = Number((row.quantity * Number(row.selectedUnitObj.realPrice || 0)).toFixed(2))
}
// 整理table数据
@@ -463,10 +412,10 @@ const onSave = async () => {
emit("close")
}
// 清空填写的数据
// 清空数据
const clearData = () => {
for (const key in baseDataForm) {
if (key === "id" || key === "inventoryCode" || key === "inventoryDate" || key === "inventoryType" || key === "orderType") continue
if (["id", "inventoryCode", "inventoryDate", "inventoryType", "orderType"].includes(key)) continue
baseDataForm[key] = ""
}
vxeTableData.value = []
@@ -11,10 +11,10 @@
<span class="font-bold">单据日期:</span>
<span>{{ baseDataForm.inventoryDate }}</span>
</div>
<div style="width: 33.33%; height: 28px; line-height: 28px">
<!-- <div style="width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">经办人:</span>
<span>{{ baseDataForm.handlerUserId }}</span>
</div>
</div> -->
<div style="width: 33.33%; height: 28px; line-height: 28px">
<span class="font-bold">货商:</span>
<span>{{ baseDataForm.supplierId }}</span>
@@ -33,14 +33,14 @@
<el-form-item label="单据日期" prop="inventoryDate">
<el-input v-model.trim="baseDataForm.inventoryDate" readonly style="width: 200px" :disabled="disabled" />
</el-form-item>
<el-form-item label="经办人" prop="handlerUserId">
<!-- <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser
v-model.trim="baseDataForm.handlerUserId"
placeholder="请选择经办人"
style="width: 200px"
:disabled="disabled"
/>
</el-form-item>
</el-form-item> -->
<el-form-item label="货商" prop="supplierId">
<SelectSupermarketSupplier v-model="baseDataForm.supplierId" style="width: 200px" :disabled="disabled" />
</el-form-item>
@@ -212,7 +212,6 @@ const baseDataForm = reactive<any>({
id: "",
inventoryCode: "",
inventoryDate: formatDate(new Date(), "YYYY-mm-dd"),
handlerUserId: "",
supplierId: "",
remark: "",
orderType: "2",
@@ -15,9 +15,9 @@
value-format="YYYY-MM-DD"
/>
</el-form-item>
<el-form-item label="经办人" prop="handlerUserId">
<!-- <el-form-item label="经办人" prop="handlerUserId">
<SelectHandlerUser v-model.trim="state.queryForm.handlerUserId" placeholder="请选择经办人" style="width: 200px" />
</el-form-item>
</el-form-item> -->
<el-form-item>
<el-button icon="search" type="primary" @click="getDataList">查询</el-button>
<el-button icon="Refresh" @click="resetQuery">重置</el-button>
@@ -65,7 +65,7 @@
<el-table-column prop="inventoryCode" label="单据编号" show-overflow-tooltip />
<el-table-column prop="inventoryDate" label="单据日期" show-overflow-tooltip />
<el-table-column prop="productName" label="商品名称" show-overflow-tooltip />
<el-table-column prop="handlerUserName" label="经办人" show-overflow-tooltip />
<!-- <el-table-column prop="handlerUserName" label="经办人" show-overflow-tooltip /> -->
<el-table-column prop="supplierName" label="货商" show-overflow-tooltip />
<el-table-column prop="remark" label="备注" show-overflow-tooltip />
<el-table-column prop="totalAmount" label="总金额" show-overflow-tooltip>
@@ -163,7 +163,7 @@
ref="excelUploadRef"
:title="$t('supermarket.importErpSpuTip')"
url="/supermarket/supermarketSpu/import"
@refreshDataList="getDataList"
@refreshDataList="refreshDataList"
/>
</div>
</template>
@@ -211,6 +211,12 @@ const exportExcel = () => {
downBlobFile("/supermarket/supermarketSpu/export", Object.assign(state.queryForm, { ids: selectObjs }), "库存商品.xlsx")
}
// 导入成功刷新数据
const refreshDataList = () => {
getDataList()
getSupplierAll()
}
// 多选事件
const selectionChangHandle = (objs: { id: string }[]) => {
selectObjs.value = objs.map(({ id }) => id)
@@ -250,11 +256,22 @@ onMounted(async () => {
// supermarketBrand.value = []
// }
// 获取货商
// try {
// const res = await getSupplierSimpleAll()
// supermarketSupplier.value = res.data
// } catch (error) {
// supermarketSupplier.value = []
// }
getSupplierAll()
})
// 获取货商
const getSupplierAll = async () => {
try {
const res = await getSupplierSimpleAll()
supermarketSupplier.value = res.data
} catch (error) {
supermarketSupplier.value = []
}
})
}
</script>