Skip to content

Commit 5a8a1e2

Browse files
authored
Fixed and enhanced vlan field validation in the UI (#10983)
1 parent b09f3e8 commit 5a8a1e2

File tree

1 file changed

+46
-13
lines changed

1 file changed

+46
-13
lines changed

ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue

Lines changed: 46 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
<a-form-item
4040
name="vlanRangeStart"
4141
ref="vlanRangeStart"
42+
:validate-status="validStatus"
4243
has-feedback
4344
:style="{ display: 'inline-block', width: 'calc(50% - 12px)' }">
4445
<a-input-number
@@ -53,7 +54,6 @@
5354
<a-form-item
5455
name="vlanRangeEnd"
5556
ref="vlanRangeEnd"
56-
has-feedback
5757
:style="{ display: 'inline-block', width: 'calc(50% - 12px)' }">
5858
<a-input-number
5959
v-model:value="form.vlanRangeEnd"
@@ -102,9 +102,24 @@ export default {
102102
labelCol: { span: 8 },
103103
wrapperCol: { span: 12 }
104104
},
105-
validStatus: '',
106-
validMessage: '',
107-
formModel: {}
105+
validStatus: 'error',
106+
validMessage: this.$t('message.error.vlan.range'),
107+
formModel: {},
108+
rangeLimits: {
109+
VLAN: {
110+
min: 1,
111+
max: 4094
112+
},
113+
VXLAN: {
114+
min: 4096,
115+
max: 16777214
116+
},
117+
GRE: {
118+
min: 0,
119+
max: 4294967295
120+
}
121+
},
122+
isolationMethod: ''
108123
}
109124
},
110125
watch: {
@@ -120,6 +135,7 @@ export default {
120135
this.initForm()
121136
},
122137
mounted () {
138+
this.getIsolationMethod()
123139
this.fillValue()
124140
},
125141
methods: {
@@ -143,9 +159,15 @@ export default {
143159
})
144160
},
145161
fillValue () {
146-
this.form.vlanRangeStart = this.getPrefilled('vlanRangeStart')
147-
this.form.vlanRangeEnd = this.getPrefilled('vlanRangeEnd')
162+
const vlanStart = this.getPrefilled('vlanRangeStart')
163+
const vlanEnd = this.getPrefilled('vlanRangeEnd')
164+
this.form.vlanRangeStart = vlanStart
165+
this.form.vlanRangeEnd = vlanEnd
148166
this.formModel = toRaw(this.form)
167+
if (this.checkFromTo(vlanStart, vlanEnd)) {
168+
this.validStatus = 'success'
169+
this.validMessage = ''
170+
}
149171
},
150172
getPrefilled (key) {
151173
return this.prefillContent?.[key] || null
@@ -156,7 +178,7 @@ export default {
156178
157179
this.formRef.value.validate().then(() => {
158180
const values = toRaw(this.form)
159-
if (!values.vlanRangeStart || (values.vlanRangeEnd && !this.checkFromTo(values.vlanRangeStart, values.vlanRangeEnd))) {
181+
if (!this.checkFromTo(values.vlanRangeStart, values.vlanRangeEnd)) {
160182
this.validStatus = 'error'
161183
this.validMessage = this.$t('message.error.vlan.range')
162184
return
@@ -185,19 +207,30 @@ export default {
185207
toVal = value
186208
fromVal = this.form[rule.compare]
187209
}
188-
if (fromVal && toVal && !this.checkFromTo(fromVal, toVal)) {
210+
if (!this.checkFromTo(fromVal, toVal)) {
189211
this.validStatus = 'error'
190212
this.validMessage = this.$t('message.error.vlan.range')
191213
}
192214
return Promise.resolve()
193215
},
194216
checkFromTo (fromVal, toVal) {
195-
if (!fromVal) fromVal = 0
196-
if (!toVal) toVal = 0
197-
if (fromVal > toVal) {
198-
return false
217+
const vlanRange = this.rangeLimits[this.isolationMethod] ? this.rangeLimits[this.isolationMethod] : this.rangeLimits.VLAN
218+
switch (true) {
219+
case ((fromVal === null) || (toVal === null)):
220+
case fromVal === toVal:
221+
case fromVal > toVal:
222+
case toVal > vlanRange.max:
223+
case fromVal < vlanRange.min:
224+
return false
225+
default:
226+
this.validStatus = 'success'
227+
this.validMessage = ''
228+
return true
199229
}
200-
return true
230+
},
231+
getIsolationMethod () {
232+
const phyNetworks = this.getPrefilled('physicalNetworks')
233+
this.isolationMethod = phyNetworks[phyNetworks.length - 1].isolationMethod
201234
}
202235
}
203236
}

0 commit comments

Comments
 (0)