fix: simplify bit sample product form

besure_bit
ck-chenkang 3 weeks ago
parent 9954bceaa8
commit 9a589d531a

@ -129,13 +129,15 @@ const loadSampleLabel = async (id: number) => await BitWmsApi.getSampleLabel(id)
const openProductForm = async (type: 'create' | 'update' | 'detail', id?: number) => {
formVisible.value = true
await nextTick()
const defaultData =
type === 'create'
const defaultData = {
sampleMode: true,
...(type === 'create'
? {
isSample: true,
bizUnit: 'BIT'
}
: undefined
: {})
}
formRef.value.open(type, id, defaultData)
}
const openProductCreate = () => openProductForm('create')

@ -31,7 +31,7 @@
</el-row>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col v-if="!isSampleMode" :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogCategoryTypeLabel')" prop="categoryType">
<el-radio-group v-model="formData.categoryType" @change="handleCategoryTypeChange">
<el-radio
@ -49,7 +49,7 @@
<el-input v-model="formData.name" :placeholder="t('FactoryModeling.ProductInformation.dialogNamePlaceholder')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-col v-if="!isSampleMode" :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogCategoryLabel')" prop="categoryId">
<el-tree-select
v-model="formData.categoryId"
@ -74,7 +74,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col v-if="formData.categoryType === 2 || formData.categoryType === 3" :span="12">
<el-col v-if="!isSampleMode && (formData.categoryType === 2 || formData.categoryType === 3)" :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogPurchaseUnitLabel')" prop="purchaseUnitId">
<el-select v-model="formData.purchaseUnitId" clearable :placeholder="t('FactoryModeling.ProductInformation.dialogUnitPlaceholder')" class="w-1/1" @change="handlePurchaseUnitChange">
<el-option
@ -86,12 +86,12 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="12">
<el-col v-if="!isSampleMode" :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogStandardLabel')" prop="standard">
<el-input v-model="formData.standard" :placeholder="t('FactoryModeling.ProductInformation.dialogStandardPlaceholder')" />
</el-form-item>
</el-col>
<el-col :span="12">
<el-col v-if="!isSampleMode" :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogExpiryDayLabel')" prop="expiryDay">
<el-input-number
v-model="formData.expiryDay"
@ -102,7 +102,7 @@
/>
</el-form-item>
</el-col>
<el-col v-if="isProductCategory" :span="12">
<el-col v-if="!isSampleMode && isProductCategory" :span="12">
<el-form-item label="关联设备" prop="devices">
<el-input
:model-value="deviceDisplayText"
@ -112,7 +112,7 @@
/>
</el-form-item>
</el-col>
<el-col v-if="isProductCategory" :span="12">
<el-col v-if="!isSampleMode && isProductCategory" :span="12">
<el-form-item label="关联模具" prop="molds">
<el-input
:model-value="moldDisplayText"
@ -122,7 +122,7 @@
/>
</el-form-item>
</el-col>
<el-col v-if="formData.categoryType === 1" :span="12">
<el-col v-if="!isSampleMode && formData.categoryType === 1" :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogPackagingSchemeLabel')" prop="packagingSchemes">
<el-input
:model-value="displayPackagingSchemeText"
@ -134,7 +134,7 @@
/>
</el-form-item>
</el-col>
<el-col v-if="formData.categoryType === 2 || formData.categoryType === 3" :span="12">
<el-col v-if="!isSampleMode && (formData.categoryType === 2 || formData.categoryType === 3)" :span="12">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogSupplierLabel')" prop="suppliers">
<el-input
:model-value="displaySupplierText"
@ -146,7 +146,7 @@
/>
</el-form-item>
</el-col>
<el-col v-if="formData.categoryType === 3" :span="8">
<el-col v-if="!isSampleMode && formData.categoryType === 3" :span="8">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogSparePartLevelLabel')" prop="sparePartLevel">
<el-radio-group v-model="formData.sparePartLevel">
<el-radio
@ -159,7 +159,7 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col v-if="formData.categoryType === 3" :span="8">
<el-col v-if="!isSampleMode && formData.categoryType === 3" :span="8">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogFragileFlagLabel')" prop="fragileFlag">
<el-radio-group v-model="formData.fragileFlag">
<el-radio :label="1">{{ t('common.yes') }}</el-radio>
@ -167,17 +167,17 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col v-if="formData.categoryType === 3" :span="8">
<el-col v-if="!isSampleMode && formData.categoryType === 3" :span="8">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogPurchaseCycleLabel')" prop="purchaseCycle">
<el-input-number v-model="formData.purchaseCycle" :min="0" :precision="0" class="!w-1/1" />
</el-form-item>
</el-col>
<el-col v-if="formData.categoryType === 3" :span="8">
<el-col v-if="!isSampleMode && formData.categoryType === 3" :span="8">
<el-form-item :label="t('FactoryModeling.ProductInformation.dialogBrandLabel')" prop="brand">
<el-input v-model="formData.brand" :placeholder="t('FactoryModeling.ProductInformation.dialogBrandPlaceholder')" />
</el-form-item>
</el-col>
<el-col v-if="formData.categoryType === 2 || formData.categoryType === 3" :span="12">
<el-col v-if="!isSampleMode && (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="1" :precision="0" class="!w-1/1" />
<div class="form-item-tip">{{ purchaseUnitConvertTipText }}</div>
@ -196,13 +196,13 @@
</el-radio-group>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col v-if="!isSampleMode" :span="8">
<el-form-item label="是否样品" prop="isSample">
<el-switch v-model="formData.isSample" />
</el-form-item>
</el-col>
<template v-if="formData.isSample">
<el-col :span="8">
<el-col :span="isSampleMode ? 12 : 8">
<el-form-item label="样品分类" prop="sampleCategory">
<el-select v-model="formData.sampleCategory" clearable placeholder="请选择样品分类" class="w-1/1">
<el-option
@ -214,7 +214,7 @@
</el-select>
</el-form-item>
</el-col>
<el-col :span="8">
<el-col :span="isSampleMode ? 12 : 8">
<el-form-item label="所属事业部" prop="bizUnit">
<el-input v-model="formData.bizUnit" placeholder="请输入所属事业部" />
</el-form-item>
@ -445,6 +445,7 @@ const message = useMessage()
const dialogTitle = ref('')
const formLoading = ref(false)
const formType = ref('')
const isSampleMode = ref(false)
const deviceSelectDialogRef = ref()
const moldSelectDialogRef = ref()
const searchFormRef = ref()
@ -680,6 +681,10 @@ const validateBarCode = (_rule, value, callback) => {
callback()
}
const validatePackagingSchemes = (_rule, value, callback) => {
if (isSampleMode.value) {
callback()
return
}
if (formData.value.categoryType !== 1) {
callback()
return
@ -695,6 +700,10 @@ const validatePackagingSchemes = (_rule, value, callback) => {
callback()
}
const validateSuppliers = (_rule, value, callback) => {
if (isSampleMode.value) {
callback()
return
}
if (formData.value.categoryType !== 2 && formData.value.categoryType !== 3) {
callback()
return
@ -968,16 +977,60 @@ const supplierList = ref<any[]>([])
let openRequestId = 0
const findFirstCategoryId = (tree: any[]): number | undefined => {
const queue = [...(tree || [])]
while (queue.length) {
const node = queue.shift()
if (!node) continue
if (node.id !== undefined && node.id !== null) {
return Number(node.id)
}
if (Array.isArray(node.children) && node.children.length) {
queue.push(...node.children)
}
}
return undefined
}
const applySampleDefaults = () => {
if (!isSampleMode.value) return
formData.value.isSample = true
formData.value.bizUnit = formData.value.bizUnit || 'BIT'
if (!formData.value.categoryId) {
formData.value.categoryId = findFirstCategoryId(categoryList.value) as any
}
if (!formData.value.unitId && unitList.value.length > 0) {
formData.value.unitId = unitList.value[0].id as any
}
}
const validateSampleDefaults = () => {
if (!isSampleMode.value) return true
applySampleDefaults()
if (!formData.value.categoryType || !formData.value.categoryId) {
message.warning('请先维护产品分类基础资料,用于保存样品必需的系统分类')
return false
}
if (!formData.value.unitId) {
message.warning('请先维护库存单位,或为样品选择库存单位')
return false
}
return true
}
const open = async (type: string, id?: number, defaultData?: Record<string, any>) => {
const currentOpenId = ++openRequestId
dialogTitle.value = t('action.' + type)
formType.value = type
isSampleMode.value = Boolean(defaultData?.sampleMode)
resetForm()
if (!id) {
if (defaultData) {
const initialData = { ...defaultData }
delete initialData.sampleMode
formData.value = {
...formData.value,
...defaultData
...initialData
}
}
const typeOptions = getIntDictOptions(DICT_TYPE.MATERIAL_CLASSIFICATION_TYPE)
@ -1024,12 +1077,15 @@ const open = async (type: string, id?: number, defaultData?: Record<string, any>
const categoryData = await ProductCategoryApi.getProductCategorySimpleList(formData.value.categoryType)
categoryList.value = handleTree(categoryData, 'id', 'parentId')
unitList.value = await ProductUnitApi.getProductUnitSimpleList()
//
const schemeData = await PackagingSchemeApi.getPackagingSchemePage({ pageNo: 1, pageSize: 100, status: 0 })
packagingSchemeList.value = schemeData.list || []
//
const supplierData = await SupplierApi.getSupplierPage({ pageNo: 1, pageSize: 100, status: 0 })
supplierList.value = supplierData.list || []
applySampleDefaults()
if (!isSampleMode.value) {
//
const schemeData = await PackagingSchemeApi.getPackagingSchemePage({ pageNo: 1, pageSize: 100, status: 0 })
packagingSchemeList.value = schemeData.list || []
//
const supplierData = await SupplierApi.getSupplierPage({ pageNo: 1, pageSize: 100, status: 0 })
supplierList.value = supplierData.list || []
}
}
defineExpose({ open })
@ -1126,6 +1182,7 @@ const normalizeDefaultStatus = (list: any[] | undefined, defaultId: number | und
}
const submitForm = async () => {
if (!validateSampleDefaults()) return
await formRef.value.validate()
formLoading.value = true
try {

Loading…
Cancel
Save