|
|
|
|
@ -60,7 +60,7 @@
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
|
|
|
|
|
<el-table-column :label="t('ErpStock.Item.unit')" min-width="80">
|
|
|
|
|
<el-table-column label="库存单位" min-width="80">
|
|
|
|
|
<template #default="{ row }">
|
|
|
|
|
<el-form-item class="mb-0px!">
|
|
|
|
|
<el-input disabled v-model="row.productUnitName" />
|
|
|
|
|
@ -74,7 +74,16 @@
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column v-if="isPurchaseUnitStockIn" label="采购换算数量" min-width="120">
|
|
|
|
|
<el-table-column v-if="isPurchaseUnitStockIn" min-width="120">
|
|
|
|
|
<template #header>
|
|
|
|
|
采购换算数量
|
|
|
|
|
<el-tooltip effect="dark" placement="top">
|
|
|
|
|
<template #content>
|
|
|
|
|
{{ purchaseUnitConvertTipText }}
|
|
|
|
|
</template>
|
|
|
|
|
<Icon icon="ep:question-filled" class="ml-4px" style="vertical-align: middle; color: #909399; cursor: pointer;" />
|
|
|
|
|
</el-tooltip>
|
|
|
|
|
</template>
|
|
|
|
|
<template #default="{ row }">
|
|
|
|
|
<el-form-item class="mb-0px!">
|
|
|
|
|
<el-input disabled v-model="row.purchaseUnitConvertQuantity" />
|
|
|
|
|
@ -90,7 +99,7 @@
|
|
|
|
|
</el-form-item>
|
|
|
|
|
</template>
|
|
|
|
|
</el-table-column>
|
|
|
|
|
<el-table-column v-if="isPurchaseUnitStockIn" label="录入数量" prop="inputCount" min-width="140">
|
|
|
|
|
<el-table-column v-if="isProductMaterialStockIn" label="录入数量" prop="inputCount" min-width="140">
|
|
|
|
|
<template #default="{ row, $index }">
|
|
|
|
|
<el-form-item :prop="`${$index}.inputCount`" class="mb-0px!">
|
|
|
|
|
<el-input-number v-model="row.inputCount" controls-position="right" :min="0.001" :precision="3"
|
|
|
|
|
@ -187,6 +196,7 @@
|
|
|
|
|
</Dialog>
|
|
|
|
|
</template>
|
|
|
|
|
<script setup lang="ts">
|
|
|
|
|
import { Icon } from '@/components/Icon'
|
|
|
|
|
import { ProductApi, ProductVO } from '@/api/erp/product/product'
|
|
|
|
|
import { WarehouseApi, WarehouseVO } from '@/api/erp/stock/warehouse'
|
|
|
|
|
import { WarehouseAreaApi, WarehouseAreaVO } from '@/api/erp/stock/warehousearea'
|
|
|
|
|
@ -227,6 +237,7 @@ const activeCategoryType = computed(() => stockInCategoryTypeMap[props.inType ||
|
|
|
|
|
const isProductMaterialStockIn = computed(() => Boolean(activeCategoryType.value))
|
|
|
|
|
const isProductStockIn = computed(() => activeCategoryType.value === 1)
|
|
|
|
|
const isPurchaseUnitStockIn = computed(() => activeCategoryType.value === 2 || activeCategoryType.value === 3)
|
|
|
|
|
const purchaseUnitConvertTipText = computed(() => t('FactoryModeling.ProductInformation.dialogPurchaseUnitConvertTip'))
|
|
|
|
|
const productDialogVisible = ref(false)
|
|
|
|
|
const productDialogLoading = ref(false)
|
|
|
|
|
const productDialogList = ref<any[]>([])
|
|
|
|
|
@ -289,9 +300,11 @@ watch(
|
|
|
|
|
async () => {
|
|
|
|
|
if (isProductMaterialStockIn.value) {
|
|
|
|
|
formData.value.forEach((row) => {
|
|
|
|
|
row.inputCount = row.inputCount ?? row.count ?? 1
|
|
|
|
|
if (isProductStockIn.value) {
|
|
|
|
|
row.inputUnitType = row.inputUnitType || '个'
|
|
|
|
|
}
|
|
|
|
|
syncCountByInputCount(row)
|
|
|
|
|
})
|
|
|
|
|
await loadRowsWarehouseAreas(formData.value)
|
|
|
|
|
}
|
|
|
|
|
@ -349,12 +362,13 @@ const handleAdd = () => {
|
|
|
|
|
purchaseUnitName: undefined,
|
|
|
|
|
purchaseUnitConvertQuantity: undefined,
|
|
|
|
|
inputUnitType: isProductStockIn.value ? '个' : undefined,
|
|
|
|
|
inputCount: isPurchaseUnitStockIn.value ? 1 : undefined,
|
|
|
|
|
inputCount: isProductMaterialStockIn.value ? 1 : undefined,
|
|
|
|
|
stockCount: undefined,
|
|
|
|
|
count: isPurchaseUnitStockIn.value ? undefined : 1,
|
|
|
|
|
count: isProductMaterialStockIn.value ? undefined : 1,
|
|
|
|
|
totalPrice: undefined,
|
|
|
|
|
remark: undefined
|
|
|
|
|
}
|
|
|
|
|
syncCountByInputCount(row)
|
|
|
|
|
formData.value.push(row)
|
|
|
|
|
if (row.warehouseId && isProductMaterialStockIn.value) {
|
|
|
|
|
loadWarehouseAreas(row.warehouseId)
|
|
|
|
|
@ -413,8 +427,8 @@ const clearProduct = (row: any) => {
|
|
|
|
|
row.purchaseUnitId = undefined
|
|
|
|
|
row.purchaseUnitName = undefined
|
|
|
|
|
row.purchaseUnitConvertQuantity = undefined
|
|
|
|
|
row.inputCount = isPurchaseUnitStockIn.value ? undefined : row.inputCount
|
|
|
|
|
row.count = isPurchaseUnitStockIn.value ? undefined : row.count
|
|
|
|
|
row.inputCount = isProductMaterialStockIn.value ? undefined : row.inputCount
|
|
|
|
|
row.count = isProductMaterialStockIn.value ? undefined : row.count
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const handleProductClear = (row: any) => {
|
|
|
|
|
@ -466,19 +480,25 @@ const confirmProductSelect = () => {
|
|
|
|
|
watch(
|
|
|
|
|
() => formData.value.map((row) => [row.inputCount, row.purchaseUnitConvertQuantity]),
|
|
|
|
|
() => {
|
|
|
|
|
if (!isPurchaseUnitStockIn.value) return
|
|
|
|
|
if (!isProductMaterialStockIn.value) return
|
|
|
|
|
formData.value.forEach(syncCountByInputCount)
|
|
|
|
|
},
|
|
|
|
|
{ deep: true }
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
const syncCountByInputCount = (row: any) => {
|
|
|
|
|
if (!isPurchaseUnitStockIn.value) return
|
|
|
|
|
if (!isProductMaterialStockIn.value) return
|
|
|
|
|
const inputCount = Number(row.inputCount)
|
|
|
|
|
const convertQuantity = Number(row.purchaseUnitConvertQuantity)
|
|
|
|
|
row.count = Number.isFinite(inputCount) && Number.isFinite(convertQuantity)
|
|
|
|
|
? inputCount * convertQuantity
|
|
|
|
|
: undefined
|
|
|
|
|
if (!Number.isFinite(inputCount)) {
|
|
|
|
|
row.count = undefined
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
if (!row.purchaseUnitId && !row.purchaseUnitName) {
|
|
|
|
|
row.count = inputCount
|
|
|
|
|
return
|
|
|
|
|
}
|
|
|
|
|
row.count = Number.isFinite(convertQuantity) ? inputCount * convertQuantity : inputCount
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
const loadWarehouseAreas = async (warehouseId: number) => {
|
|
|
|
|
@ -537,7 +557,15 @@ const setStockCount = async (row) => {
|
|
|
|
|
const validate = () => {
|
|
|
|
|
return formRef.value.validate()
|
|
|
|
|
}
|
|
|
|
|
defineExpose({ validate })
|
|
|
|
|
|
|
|
|
|
const resetItems = () => {
|
|
|
|
|
formData.value.splice(0, formData.value.length)
|
|
|
|
|
if (!props.disabled) {
|
|
|
|
|
handleAdd()
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
defineExpose({ validate, resetItems })
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** 初始化 */
|
|
|
|
|
|