库存商品导入成功刷新货商
This commit is contained in:
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>
|
||||
Reference in new issue
Block a user