From 4183ccda7c8f3e3eb5e6b8f943933b1dea190865 Mon Sep 17 00:00:00 2001 From: hwj Date: Wed, 15 Apr 2026 09:40:21 +0800 Subject: [PATCH] =?UTF-8?q?style=EF=BC=9A=E4=BB=BB=E5=8A=A1=E5=8D=95?= =?UTF-8?q?=E6=8E=92=E4=BA=A7-=E6=96=B0=E5=A2=9E=E8=AE=A1=E5=88=92-?= =?UTF-8?q?=E6=95=B0=E9=87=8F=E5=80=BC=E6=B7=BB=E5=8A=A0=E6=A0=A1=E9=AA=8C?= =?UTF-8?q?=EF=BC=88=E4=B8=8D=E8=83=BD=E5=A4=A7=E4=BA=8E=E6=9C=AA=E8=AE=A1?= =?UTF-8?q?=E5=88=92=E6=95=B0=E9=87=8F=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/views/mes/plan/PlanForm.vue | 42 ++++++++++++++++++++++++++++++++- 1 file changed, 41 insertions(+), 1 deletion(-) diff --git a/src/views/mes/plan/PlanForm.vue b/src/views/mes/plan/PlanForm.vue index 91182959..61433502 100644 --- a/src/views/mes/plan/PlanForm.vue +++ b/src/views/mes/plan/PlanForm.vue @@ -188,6 +188,7 @@ const taskList = ref([]) // 用户列表 const taskDetailList = ref([]) // 用户列表 const deviceSelectDialogRef = ref() const selectedDeviceRows = ref([]) +const maxUnplannedNumber = ref(undefined) const { t } = useI18n() // 国际化 const message = useMessage() // 消息弹窗 @@ -306,10 +307,45 @@ const validatePlanEndTime = (_rule: any, value: any, callback: (error?: Error) = } callback() } +const getSelectedTaskDetailUnplanned = () => { + const detail = taskDetailList.value.find( + (item: any) => Number(item.id) === Number(formData.value.taskDetailId) + ) as any + if (!detail) return undefined + const total = Number(detail.number) + const planned = Number(detail.planNumber) + if (!Number.isFinite(total) || !Number.isFinite(planned)) return undefined + return Math.max(total - planned, 0) +} +const getPlanNumberLimit = () => { + const detailUnplanned = getSelectedTaskDetailUnplanned() + if (detailUnplanned !== undefined) return detailUnplanned + return maxUnplannedNumber.value +} +const validatePlanNumber = (_rule: any, value: any, callback: (error?: Error) => void) => { + if (value === undefined || value === null || value === '') { + callback() + return + } + const currentPlanNumber = Number(value) + if (!Number.isFinite(currentPlanNumber)) { + callback(new Error('计划数量必须为数字')) + return + } + const planNumberLimit = getPlanNumberLimit() + if (planNumberLimit !== undefined && currentPlanNumber > planNumberLimit) { + callback(new Error(`计划数量不能大于未计划数量(${planNumberLimit})`)) + return + } + callback() +} const formRules = reactive({ taskDetailId: [{ required: true, message: t('ProductionPlan.Plan.validatorTaskDetailRequired'), trigger: 'blur' }], taskId: [{ required: true, message: t('ProductionPlan.Plan.validatorTaskRequired'), trigger: 'blur' }], - planNumber: [{ required: true, message: t('ProductionPlan.Plan.validatorPlanNumberRequired'), trigger: 'blur' }], + planNumber: [ + { required: true, message: t('ProductionPlan.Plan.validatorPlanNumberRequired'), trigger: 'blur' }, + { validator: validatePlanNumber, trigger: ['blur', 'change'] } + ], // reyaNumber: [{ required: true, message: t('ProductionPlan.Plan.validatorReyaNumberRequired'), trigger: 'blur' }], planStartTime: [ { required: true, message: t('ProductionPlan.Plan.validatorPlanStartRequired'), trigger: 'blur' }, @@ -374,6 +410,7 @@ const open = async (type: string, id?: number, dialogTitle.value = t('action.' + type) formType.value = type resetForm() + maxUnplannedNumber.value = number !== undefined ? Math.max(Number(number), 0) : undefined formData.value.deliveryDate = taskDeliveryDate || undefined if(taskId) { formData.value.taskId = taskId @@ -465,6 +502,7 @@ const resetForm = () => { finishDate: undefined, deliveryDate: undefined } + maxUnplannedNumber.value = undefined selectedDeviceRows.value = [] formRef.value?.resetFields() } @@ -474,10 +512,12 @@ const handleTaskChange = async() => { taskDetailList.value =await TaskApi.getTaskDetailListByTaskId(formData.value.taskId) formData.value.taskDetailId = undefined formData.value.finishDate = undefined + formRef.value?.validateField('planNumber') } /** 明细变化 */ const handleTaskDetailChange = async() => { syncFinishDateByTaskDetail() + formRef.value?.validateField('planNumber') } const handlePlanStartTimeChange = () => { formRef.value?.validateField(['planStartTime', 'planEndTime'])