feat: implement dynamic inspection requirement logic based on material master data
This commit is contained in:
@ -821,6 +821,10 @@ const printCopies = ref(1)
|
||||
|
||||
const entryMode = ref('batch')
|
||||
const modeLocked = ref(false)
|
||||
|
||||
// 强制质检标记
|
||||
const isCurrentMaterialInspectionRequired = ref(false)
|
||||
|
||||
const dialogImageUrl = ref('')
|
||||
const dialogVisibleImage = ref(false)
|
||||
const arrivalFileList = ref<any[]>([])
|
||||
@ -1136,10 +1140,23 @@ const onMaterialSelected = (val: number) => {
|
||||
form.category = item.category
|
||||
form.unit = item.unit
|
||||
form.material_type = item.type
|
||||
// 保存强制质检标记
|
||||
isCurrentMaterialInspectionRequired.value = item.isInspectionRequired || false
|
||||
// 更新表单校验规则
|
||||
updateInspectionRules()
|
||||
checkHistoryAndSetMode(item.id)
|
||||
}
|
||||
}
|
||||
|
||||
// 动态更新质检相关校验规则
|
||||
const updateInspectionRules = () => {
|
||||
if (formRef.value) {
|
||||
// 清除旧的校验结果
|
||||
formRef.value.clearValidate('inspection_status')
|
||||
formRef.value.clearValidate('inspection_report')
|
||||
}
|
||||
}
|
||||
|
||||
// ------------------------------------
|
||||
// 校验规则
|
||||
// ------------------------------------
|
||||
@ -1159,12 +1176,39 @@ const validateIdentity = (rule: any, value: any, callback: any) => {
|
||||
else if (entryMode.value === 'batch' && !form.batch_number && rule.field === 'batch_number') callback(new Error('批号必填'))
|
||||
else callback()
|
||||
}
|
||||
const rules = {
|
||||
base_id: [{required: true, message: '请选择物料', trigger: 'change'}],
|
||||
in_quantity: [{required: true, message: '请输入数量', trigger: 'blur'}],
|
||||
serial_number: [{validator: validateIdentity, trigger: 'blur'}, {validator: validateUnique, trigger: 'blur'}],
|
||||
batch_number: [{validator: validateIdentity, trigger: 'blur'}, {validator: validateUnique, trigger: 'blur'}]
|
||||
}
|
||||
const rules = computed(() => {
|
||||
const baseRules = {
|
||||
base_id: [{required: true, message: '请选择物料', trigger: 'change'}],
|
||||
in_quantity: [{required: true, message: '请输入数量', trigger: 'blur'}],
|
||||
serial_number: [{validator: validateIdentity, trigger: 'blur'}, {validator: validateUnique, trigger: 'blur'}],
|
||||
batch_number: [{validator: validateIdentity, trigger: 'blur'}, {validator: validateUnique, trigger: 'blur'}]
|
||||
}
|
||||
|
||||
// 如果当前物料需要强制质检,添加质检相关校验
|
||||
if (isCurrentMaterialInspectionRequired.value) {
|
||||
// 到检状态必填
|
||||
baseRules.inspection_status = [
|
||||
{ required: true, message: '该物料为强管控物料,必须选择到检状态', trigger: 'change' }
|
||||
]
|
||||
// 检测报告必填(通过自定义校验规则:文件或外部链接至少有一个)
|
||||
baseRules.inspection_report = [
|
||||
{
|
||||
validator: (rule: any, value: any, callback: any) => {
|
||||
const hasFile = form.inspection_report && form.inspection_report.length > 0
|
||||
const hasLink = inspection_report_url.value && inspection_report_url.value.trim() !== ''
|
||||
if (!hasFile && !hasLink) {
|
||||
callback(new Error('该物料为强管控物料,必须提供检测报告文件或链接'))
|
||||
} else {
|
||||
callback()
|
||||
}
|
||||
},
|
||||
trigger: 'blur'
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
return baseRules
|
||||
})
|
||||
|
||||
const checkHistoryAndSetMode = async (baseId: number) => {
|
||||
try {
|
||||
@ -1366,7 +1410,10 @@ const handleUpdate = (row: any) => {
|
||||
inspection_report_url.value = reportLinks.length > 0 ? reportLinks[0] : ''
|
||||
if (row.serial_number) { entryMode.value = 'serial'; form.serial_number = row.serial_number; form.batch_number = '' }
|
||||
else { entryMode.value = 'batch'; form.batch_number = row.batch_number; form.serial_number = '' }
|
||||
materialOptions.value = [{ id: row.base_id, name: row.material_name, spec: row.spec_model, category: row.category, company_name: row.company_name }]
|
||||
materialOptions.value = [{ id: row.base_id, name: row.material_name, spec: row.spec_model, category: row.category, company_name: row.company_name, isInspectionRequired: row.isInspectionRequired }]
|
||||
// 设置强制质检标记
|
||||
isCurrentMaterialInspectionRequired.value = row.isInspectionRequired || false
|
||||
updateInspectionRules()
|
||||
visible.value = true
|
||||
}
|
||||
|
||||
@ -1598,6 +1645,8 @@ const confirmPrint = async () => {
|
||||
const resetForm = () => {
|
||||
materialOptions.value = []; arrivalFileList.value = []; reportFileList.value = []; inspection_report_url.value = ''
|
||||
searchPage.value = 1; hasNextPage.value = true; searchKeyword.value = '';
|
||||
// 重置强制质检标记
|
||||
isCurrentMaterialInspectionRequired.value = false
|
||||
Object.assign(form, {
|
||||
id: undefined, base_id: undefined,
|
||||
company_name: '',
|
||||
|
||||
Reference in New Issue
Block a user