style:物料档案-新增/编辑-单位不必填

main
黄伟杰 10 hours ago
parent 7bf00dab13
commit f39a1cb892

@ -52,7 +52,8 @@
<el-col :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogUnitLabel')" prop="unitId">
<el-select v-model="formData.unitId" clearable
:placeholder="t('FactoryModeling.ProductInformation.dialogUnitPlaceholder')" class="w-1/1">
:placeholder="t('FactoryModeling.ProductInformation.dialogUnitPlaceholder')" class="w-1/1"
@change="validatePurchaseUnitFields">
<el-option v-for="unit in unitList" :key="unit.id" :label="getProductUnitName(unit)" :value="unit.id" />
<template #footer>
<div v-if="!isAddingUnit" class="px-10px py-6px">
@ -99,7 +100,8 @@
<el-col v-if="formData.categoryType === 2 || formData.categoryType === 3" :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogPurchaseUnitConvertLabel')"
prop="purchaseUnitConvertQuantity">
<el-input-number v-model="formData.purchaseUnitConvertQuantity" :min="0" :step="0.01" class="!w-1/1" />
<el-input-number v-model="formData.purchaseUnitConvertQuantity" :min="0" :step="0.01" class="!w-1/1"
@change="validatePurchaseUnitFields" />
<div class="form-item-tip">{{ purchaseUnitConvertTipText }}</div>
</el-form-item>
</el-col>
@ -642,12 +644,40 @@ const validateSuppliers = (_rule, value, callback) => {
callback()
}
const isMaterialOrSparePart = () => formData.value.categoryType === 2 || formData.value.categoryType === 3
const hasValue = (value: unknown) => value !== undefined && value !== null && value !== ''
const validateInventoryUnit = (_rule, value, callback) => {
if (!isMaterialOrSparePart()) {
callback()
return
}
if ((hasValue(formData.value.purchaseUnitId) || hasValue(formData.value.purchaseUnitConvertQuantity)) && !hasValue(value)) {
callback(new Error(t('FactoryModeling.ProductInformation.validatorUnitRequired')))
return
}
callback()
}
const validatePurchaseUnit = (_rule, value, callback) => {
if (isMaterialOrSparePart() && hasValue(formData.value.purchaseUnitConvertQuantity) && !hasValue(value)) {
callback(new Error(t('FactoryModeling.ProductInformation.validatorPurchaseUnitRequired')))
return
}
callback()
}
const validatePurchaseUnitConvertQuantity = (_rule, value, callback) => {
if (formData.value.categoryType !== 2 && formData.value.categoryType !== 3) {
callback()
return
}
if (value === undefined || value === null || value === '') {
if (!hasValue(value)) {
if (!hasValue(formData.value.purchaseUnitId)) {
callback()
return
}
callback(new Error(t('FactoryModeling.ProductInformation.validatorPurchaseUnitConvertRequired')))
return
}
@ -658,6 +688,10 @@ const validatePurchaseUnitConvertQuantity = (_rule, value, callback) => {
}
callback()
}
const validatePurchaseUnitFields = () => {
formRef.value?.validateField(['unitId', 'purchaseUnitId', 'purchaseUnitConvertQuantity']).catch(() => undefined)
}
//
const packagingSchemeDialogVisible = ref(false)
const packagingSchemeDialogLoading = ref(false)
@ -911,12 +945,12 @@ const formRules = reactive({
name: [{ required: true, message: t('FactoryModeling.ProductInformation.validatorNameRequired'), trigger: 'blur' }],
barCode: [{ validator: validateBarCode, trigger: ['blur', 'change'] }],
categoryId: [{ required: true, message: t('FactoryModeling.ProductInformation.validatorCategoryRequired'), trigger: 'blur' }],
unitId: [{ required: true, message: t('FactoryModeling.ProductInformation.validatorUnitRequired'), trigger: 'blur' }],
unitId: [{ validator: validateInventoryUnit, trigger: 'change' }],
status: [{ required: true, message: t('FactoryModeling.ProductInformation.validatorStatusRequired'), trigger: 'blur' }],
packagingSchemes: [{ required: true, validator: validatePackagingSchemes, trigger: ['change', 'blur'] }],
suppliers: [{ required: true, validator: validateSuppliers, trigger: ['change', 'blur'] }],
purchaseUnitId: [{ required: true, message: t('FactoryModeling.ProductInformation.validatorPurchaseUnitRequired'), trigger: 'change' }],
purchaseUnitConvertQuantity: [{ required: true, validator: validatePurchaseUnitConvertQuantity, trigger: ['blur', 'change'] }]
purchaseUnitId: [{ validator: validatePurchaseUnit, trigger: 'change' }],
purchaseUnitConvertQuantity: [{ validator: validatePurchaseUnitConvertQuantity, trigger: ['blur', 'change'] }]
})
const formRef = ref()
const categoryList = ref<ProductCategoryVO[]>([])
@ -1033,10 +1067,11 @@ const handleCategoryTypeChange = async () => {
const handlePurchaseUnitChange = (val: any) => {
if (!val) {
formData.value.purchaseUnitName = undefined
return
} else {
const unit = unitList.value.find((u: any) => u.id === val)
formData.value.purchaseUnitName = unit?.name ?? undefined
}
const unit = unitList.value.find((u: any) => u.id === val)
formData.value.purchaseUnitName = unit?.name ?? undefined
validatePurchaseUnitFields()
}
const isAddingUnit = ref(false)

@ -64,7 +64,7 @@
<el-form-item v-else :prop="`${$index}.productId`" :rules="formRules.productId" class="mb-0px!">
<div class="product-code-select">
<el-input v-model="row.productBarCode" readonly :clearable="!disabled"
:placeholder="t('ErpStock.Item.placeholderBarcode')" @click="handleProductInputClick(row)"
:placeholder="selectorPlaceholder" @click="handleProductInputClick(row)"
@clear="handleProductClear(row)" />
</div>
</el-form-item>
@ -618,11 +618,16 @@ const isProductMaterialStockIn = computed(() => Boolean(activeCategoryType.value
const isProductStockIn = computed(() => activeCategoryType.value === 1)
const isPurchaseUnitStockIn = computed(() => activeCategoryType.value === 2 || activeCategoryType.value === 3)
const selectorColumnLabel = computed(() => {
if (activeCategoryType.value === 2) return t('ErpStock.Item.materialLabel')
if (activeCategoryType.value === 3) return t('ErpStock.Item.sparePartLabel')
const rows = formData.value || []
return rows.length > 0 && rows.every((row) => isRowRelatedTask(row))
? `${t('ErpStock.Item.taskOrder')}/${t('ErpStock.Item.selectProduct')}`
: t('ErpStock.Item.selectProduct')
})
const selectorPlaceholder = computed(() => isProductStockIn.value
? t('ErpStock.Item.placeholderProduct')
: t('ErpStock.Item.placeholderBarcode'))
const getPurchaseQuantityUnitName = (row: any) => row.purchaseUnitName
const getInventoryQuantityUnitName = (row: any) => row.unitName || row.productUnitName
const formatSpecQuantity = (value: any) => {

Loading…
Cancel
Save