|
1 | 1 | <template>
|
2 |
| - <el-form-item label="取值范围" prop="max"> |
| 2 | + <el-form-item label="取值范围"> |
3 | 3 | <div class="flex items-center justify-between">
|
4 |
| - <el-input v-model="dataSpecs.min" placeholder="请输入最小值" /> |
| 4 | + <el-form-item |
| 5 | + :rules="[ |
| 6 | + { required: true, message: '最小值不能为空' }, |
| 7 | + { validator: validateMin, trigger: 'blur' } |
| 8 | + ]" |
| 9 | + class="mb-0" |
| 10 | + prop="property.dataSpecs.min" |
| 11 | + > |
| 12 | + <el-input v-model="dataSpecs.min" placeholder="请输入最小值" /> |
| 13 | + </el-form-item> |
5 | 14 | <span class="mx-2">~</span>
|
6 |
| - <el-input v-model="dataSpecs.max" placeholder="请输入最大值" /> |
| 15 | + <el-form-item |
| 16 | + :rules="[ |
| 17 | + { required: true, message: '最大值不能为空' }, |
| 18 | + { validator: validateMax, trigger: 'blur' } |
| 19 | + ]" |
| 20 | + class="mb-0" |
| 21 | + prop="property.dataSpecs.max" |
| 22 | + > |
| 23 | + <el-input v-model="dataSpecs.max" placeholder="请输入最大值" /> |
| 24 | + </el-form-item> |
7 | 25 | </div>
|
8 | 26 | </el-form-item>
|
9 |
| - <el-form-item label="步长" prop="step"> |
| 27 | + <el-form-item |
| 28 | + :rules="[ |
| 29 | + { required: true, message: '步长不能为空' }, |
| 30 | + { validator: validateStep, trigger: 'blur' } |
| 31 | + ]" |
| 32 | + label="步长" |
| 33 | + prop="property.dataSpecs.step" |
| 34 | + > |
10 | 35 | <el-input v-model="dataSpecs.step" placeholder="请输入步长" />
|
11 | 36 | </el-form-item>
|
12 |
| - <el-form-item label="单位" prop="unit"> |
| 37 | + <el-form-item |
| 38 | + :rules="[{ required: true, message: '请选择单位' }]" |
| 39 | + label="单位" |
| 40 | + prop="property.dataSpecs.unit" |
| 41 | + > |
13 | 42 | <el-select
|
14 | 43 | :model-value="dataSpecs.unit ? dataSpecs.unitName + '-' + dataSpecs.unit : ''"
|
15 | 44 | filterable
|
@@ -44,6 +73,72 @@ const unitChange = (UnitSpecs: string) => {
|
44 | 73 | dataSpecs.value.unitName = unitName
|
45 | 74 | dataSpecs.value.unit = unit
|
46 | 75 | }
|
| 76 | +
|
| 77 | +// 校验最小值 |
| 78 | +const validateMin = (_: any, __: any, callback: any) => { |
| 79 | + const min = Number(dataSpecs.value.min) |
| 80 | + const max = Number(dataSpecs.value.max) |
| 81 | +
|
| 82 | + if (isNaN(min)) { |
| 83 | + callback(new Error('请输入有效的数值')) |
| 84 | + return |
| 85 | + } |
| 86 | +
|
| 87 | + if (max !== undefined && !isNaN(max) && min >= max) { |
| 88 | + callback(new Error('最小值必须小于最大值')) |
| 89 | + return |
| 90 | + } |
| 91 | +
|
| 92 | + callback() |
| 93 | +} |
| 94 | +
|
| 95 | +// 校验最大值 |
| 96 | +const validateMax = (_: any, __: any, callback: any) => { |
| 97 | + const min = Number(dataSpecs.value.min) |
| 98 | + const max = Number(dataSpecs.value.max) |
| 99 | +
|
| 100 | + if (isNaN(max)) { |
| 101 | + callback(new Error('请输入有效的数值')) |
| 102 | + return |
| 103 | + } |
| 104 | +
|
| 105 | + if (min !== undefined && !isNaN(min) && max <= min) { |
| 106 | + callback(new Error('最大值必须大于最小值')) |
| 107 | + return |
| 108 | + } |
| 109 | +
|
| 110 | + callback() |
| 111 | +} |
| 112 | +
|
| 113 | +// 校验步长 |
| 114 | +const validateStep = (_: any, __: any, callback: any) => { |
| 115 | + const step = Number(dataSpecs.value.step) |
| 116 | + const min = Number(dataSpecs.value.min) |
| 117 | + const max = Number(dataSpecs.value.max) |
| 118 | +
|
| 119 | + if (isNaN(step)) { |
| 120 | + callback(new Error('请输入有效的数值')) |
| 121 | + return |
| 122 | + } |
| 123 | +
|
| 124 | + if (step <= 0) { |
| 125 | + callback(new Error('步长必须大于0')) |
| 126 | + return |
| 127 | + } |
| 128 | +
|
| 129 | + if (!isNaN(min) && !isNaN(max) && step > max - min) { |
| 130 | + callback(new Error('步长不能大于最大值和最小值的差值')) |
| 131 | + return |
| 132 | + } |
| 133 | +
|
| 134 | + callback() |
| 135 | +} |
47 | 136 | </script>
|
48 | 137 |
|
49 |
| -<style lang="scss" scoped></style> |
| 138 | +<style lang="scss" scoped> |
| 139 | +:deep(.el-form-item) { |
| 140 | + .el-form-item { |
| 141 | + margin-bottom: 0; |
| 142 | + } |
| 143 | +} |
| 144 | +</style> |
0 commit comments