Skip to content

Commit d65a10c

Browse files
author
puhui999
committed
【功能完善】IOT: 产品物模型-数值型的 dataSpecs 校验规则完善
1 parent e36e485 commit d65a10c

File tree

1 file changed

+101
-6
lines changed

1 file changed

+101
-6
lines changed

src/views/iot/product/product/detail/ThingModel/dataSpecs/ThingModelNumberTypeDataSpecs.vue

Lines changed: 101 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,44 @@
11
<template>
2-
<el-form-item label="取值范围" prop="max">
2+
<el-form-item label="取值范围">
33
<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>
514
<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>
725
</div>
826
</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+
>
1035
<el-input v-model="dataSpecs.step" placeholder="请输入步长" />
1136
</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+
>
1342
<el-select
1443
:model-value="dataSpecs.unit ? dataSpecs.unitName + '-' + dataSpecs.unit : ''"
1544
filterable
@@ -44,6 +73,72 @@ const unitChange = (UnitSpecs: string) => {
4473
dataSpecs.value.unitName = unitName
4574
dataSpecs.value.unit = unit
4675
}
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+
}
47136
</script>
48137

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

Comments
 (0)