diff --git a/src/views/admin/feedingconfig/components/feeding-config-form.vue b/src/views/admin/feedingconfig/components/feeding-config-form.vue index cd41234..74e63e5 100644 --- a/src/views/admin/feedingconfig/components/feeding-config-form.vue +++ b/src/views/admin/feedingconfig/components/feeding-config-form.vue @@ -28,27 +28,30 @@ - + + + +
分钟
-
+
校准
- +
- +
- +
- + %
- +
% @@ -59,17 +62,29 @@
高速
- + %
- + %
- +
分钟 @@ -80,17 +95,23 @@
低速
- + %
- +
- + %
- +
分钟 @@ -103,61 +124,69 @@
监控
- + +
- +
- + %
- +
- + %
抖动
- + - + - + - +
返水
- + - +
堵塞
- + - +
@@ -178,6 +207,7 @@ import { ref, reactive, watch } from 'vue' import { ElMessage } from 'element-plus' import type { FormInstance } from 'element-plus' import { UspFeedingConfigApi } from '/@/api/admin/UspFeedingConfigApi' +import { QuestionFilled } from '@element-plus/icons-vue' const props = defineProps<{ modelValue: boolean @@ -189,34 +219,33 @@ const emit = defineEmits<{ }>() const formRef = ref() -// 取消类型限制,保证所有字段都能用 const formData = reactive({ configName: '', - totalTheoryTime: 0, - calibrateDuration: 0, - calibrateVolumePercent: 0, - calibrateTheorySpeed: 0, - highSpeedPercent: 0, - highSpeedVolumePercent: 0, - highSpeedTheoryTime: 0, - lowSpeedPercent: 0, - lowSpeedVolumePercent: 0, - lowSpeedTheoryTime: 0, - intervalTime: 0, - excessPercentage: 0, - timeOutSeconds: 0, - terminalVolumePercent: 0, - ditherIntervalCoefficient: 0, - ditherCoefficient: 0, - ditherMonitorTime: 0, - ditherScaleCoefficient: 0, - rebateIntervalCoefficient: 0, - rebateCoefficient: 0, - jamIntervalCoefficient: 0, - jamCoefficient: 0, + totalTheoryTime: undefined as number | undefined, + calibrateDuration: undefined as number | undefined, + calibrateVolumePercent: undefined as number | undefined, + calibrateTheorySpeed: undefined as number | undefined, + highSpeedPercent: undefined as number | undefined, + highSpeedVolumePercent: undefined as number | undefined, + highSpeedTheoryTime: undefined as number | undefined, + lowSpeedPercent: undefined as number | undefined, + lowSpeedVolumePercent: undefined as number | undefined, + lowSpeedTheoryTime: undefined as number | undefined, + intervalTime: undefined as number | undefined, + excessPercentage: undefined as number | undefined, + timeOutSeconds: undefined as number | undefined, + terminalVolumePercent: undefined as number | undefined, + ditherIntervalCoefficient: undefined as number | undefined, + ditherCoefficient: undefined as number | undefined, + ditherMonitorTime: undefined as number | undefined, + ditherScaleCoefficient: undefined as number | undefined, + rebateIntervalCoefficient: undefined as number | undefined, + rebateCoefficient: undefined as number | undefined, + jamIntervalCoefficient: undefined as number | undefined, + jamCoefficient: undefined as number | undefined, enabled: true, isTwoStep: 0, - id: 0 + id: undefined as number | undefined }) const rules = { @@ -265,45 +294,70 @@ watch( ) watch( - () => [formData.calibrateVolumePercent, formData.calibrateDuration], + () => [formData.calibrateVolumePercent, formData.calibrateDuration, formData.isTwoStep], ([volume, duration]) => { - if (duration > 0) { - formData.calibrateTheorySpeed = Number((volume / duration * 60).toFixed(2)) + if (formData.isTwoStep === 1) return; + if (typeof volume === 'number' && typeof duration === 'number' && duration > 0) { + formData.calibrateTheorySpeed = Number((volume / duration * 60).toFixed(2)) as number } else { - formData.calibrateTheorySpeed = 0 + formData.calibrateTheorySpeed = undefined } } ) // 新增:高速理论时长自动计算 watch( - () => [formData.highSpeedVolumePercent, formData.highSpeedPercent], + () => [formData.highSpeedVolumePercent, formData.highSpeedPercent, formData.isTwoStep], ([volume, percent]) => { - if (percent > 0) { - formData.highSpeedTheoryTime = Number((volume / percent).toFixed(2)) + if (formData.isTwoStep === 1) return; + if (typeof volume === 'number' && typeof percent === 'number' && percent > 0) { + formData.highSpeedTheoryTime = Number((volume / percent).toFixed(2)) as number } else { - formData.highSpeedTheoryTime = 0 + formData.highSpeedTheoryTime = undefined } } ) // 新增:低速理论时长自动计算 watch( - () => [formData.lowSpeedVolumePercent, formData.lowSpeedPercent], + () => [formData.lowSpeedVolumePercent, formData.lowSpeedPercent, formData.isTwoStep], ([volume, percent]) => { - if (percent > 0) { - formData.lowSpeedTheoryTime = Number((volume / percent).toFixed(2)) + if (formData.isTwoStep === 1) return; + if (typeof volume === 'number' && typeof percent === 'number' && percent > 0) { + formData.lowSpeedTheoryTime = Number((volume / percent).toFixed(2)) as number } else { - formData.lowSpeedTheoryTime = 0 + formData.lowSpeedTheoryTime = undefined } } ) // 新增:总理论时长自动计算 watch( - () => [formData.calibrateDuration, formData.highSpeedTheoryTime, formData.lowSpeedTheoryTime], + () => [formData.calibrateDuration, formData.highSpeedTheoryTime, formData.lowSpeedTheoryTime, formData.isTwoStep], ([calibrateDuration, highSpeedTheoryTime, lowSpeedTheoryTime]) => { - formData.totalTheoryTime = Number(((calibrateDuration / 60) + highSpeedTheoryTime + lowSpeedTheoryTime).toFixed(2)) + if (formData.isTwoStep === 1) return; + if (typeof calibrateDuration === 'number' && typeof highSpeedTheoryTime === 'number' && typeof lowSpeedTheoryTime === 'number') { + formData.totalTheoryTime = Number(((calibrateDuration / 60) + highSpeedTheoryTime + lowSpeedTheoryTime).toFixed(2)) as number + } else { + formData.totalTheoryTime = undefined + } + } +) + +watch( + () => [formData.isTwoStep, formData.highSpeedPercent], + ([isTwoStep, highSpeedPercent]) => { + if (isTwoStep === 1) { + formData.lowSpeedVolumePercent = 100 - Number(highSpeedPercent || 0) + } + } +) + +// 自动同步返水环控时间系数 = 抖动环控时间系数 +watch( + () => formData.ditherIntervalCoefficient, + (val) => { + formData.rebateIntervalCoefficient = val } ) @@ -311,31 +365,31 @@ function resetForm() { formRef.value?.resetFields() Object.assign(formData, { configName: '', - totalTheoryTime: 0, - calibrateDuration: 0, - calibrateVolumePercent: 0, - calibrateTheorySpeed: 0, - highSpeedPercent: 0, - highSpeedVolumePercent: 0, - highSpeedTheoryTime: 0, - lowSpeedPercent: 0, - lowSpeedVolumePercent: 0, - lowSpeedTheoryTime: 0, - intervalTime: 0, - excessPercentage: 0, - timeOutSeconds: 0, - terminalVolumePercent: 0, - ditherIntervalCoefficient: 0, - ditherCoefficient: 0, - ditherMonitorTime: 0, - ditherScaleCoefficient: 0, - rebateIntervalCoefficient: 0, - rebateCoefficient: 0, - jamIntervalCoefficient: 0, - jamCoefficient: 0, + totalTheoryTime: undefined, + calibrateDuration: undefined, + calibrateVolumePercent: undefined, + calibrateTheorySpeed: undefined, + highSpeedPercent: undefined, + highSpeedVolumePercent: undefined, + highSpeedTheoryTime: undefined, + lowSpeedPercent: undefined, + lowSpeedVolumePercent: undefined, + lowSpeedTheoryTime: undefined, + intervalTime: undefined, + excessPercentage: undefined, + timeOutSeconds: undefined, + terminalVolumePercent: undefined, + ditherIntervalCoefficient: undefined, + ditherCoefficient: undefined, + ditherMonitorTime: undefined, + ditherScaleCoefficient: undefined, + rebateIntervalCoefficient: undefined, + rebateCoefficient: undefined, + jamIntervalCoefficient: undefined, + jamCoefficient: undefined, enabled: true, isTwoStep: 0, - id: 0 + id: undefined }) } @@ -367,32 +421,62 @@ async function open(row?: any) { async function handleSubmit() { if (!formRef.value) return - // 新增:补料占总量百分比之和校验 - const sum = Number(formData.calibrateVolumePercent) + Number(formData.highSpeedVolumePercent) + Number(formData.lowSpeedVolumePercent) - if (sum !== 100) { - ElMessage.warning('补料占总量百分比之和必须等于100!') - return + // 只有 isTwoStep !== 1 时才校验百分比之和 + if (formData.isTwoStep !== 1) { + const sum = Number(formData.calibrateVolumePercent) + Number(formData.highSpeedVolumePercent) + Number(formData.lowSpeedVolumePercent) + if (sum !== 100) { + ElMessage.warning('补料占总量百分比之和必须等于100!') + return + } } await formRef.value.validate(async (valid: boolean) => { if (!valid) return loading.value = true try { + // 处理所有undefined为null + const data: Record = { ...formData } + Object.keys(data).forEach((key: string) => { + if (typeof data[key] === 'undefined') data[key] = null + }) + if (data.id == null) delete data.id if (formData.id) { const updateInput = { - ...formData, - setSpeed: formData.calibrateTheorySpeed, + ...data, + setSpeed: data.calibrateTheorySpeed, speedDiff: 0, - feedTime: formData.totalTheoryTime + feedTime: data.totalTheoryTime, + id: data.id, + configName: data.configName, + intervalTime: data.intervalTime, + calibrateDuration: data.calibrateDuration, + calibrateVolumePercent: data.calibrateVolumePercent, + highSpeedPercent: data.highSpeedPercent, + highSpeedVolumePercent: data.highSpeedVolumePercent, + lowSpeedPercent: data.lowSpeedPercent, + lowSpeedVolumePercent: data.lowSpeedVolumePercent, + ditherIntervalCoefficient: data.ditherIntervalCoefficient, + ditherCoefficient: data.ditherCoefficient, + ditherMonitorTime: data.ditherMonitorTime, + ditherScaleCoefficient: data.ditherScaleCoefficient, + rebateIntervalCoefficient: data.rebateIntervalCoefficient, + rebateCoefficient: data.rebateCoefficient, + jamIntervalCoefficient: data.jamIntervalCoefficient, + jamCoefficient: data.jamCoefficient, + excessPercentage: data.excessPercentage, + timeOutSeconds: data.timeOutSeconds, + terminalVolumePercent: data.terminalVolumePercent, + enabled: data.enabled, + isTwoStep: data.isTwoStep } await api.update(updateInput) ElMessage.success('修改成功') } else { const addInput = { - ...formData, - setSpeed: formData.calibrateTheorySpeed, + ...data, + setSpeed: data.calibrateTheorySpeed, speedDiff: 0, - feedTime: formData.totalTheoryTime + feedTime: data.totalTheoryTime } delete (addInput as any).id await api.add(addInput) diff --git a/src/views/admin/feedingconfig/index.vue b/src/views/admin/feedingconfig/index.vue index 1aaae75..ce84e73 100644 --- a/src/views/admin/feedingconfig/index.vue +++ b/src/views/admin/feedingconfig/index.vue @@ -1,6 +1,6 @@