Fixed and enhanced vlan field validation in the UI (#10983)

diff --git a/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue b/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue
index 4c0d2c1..caf690e 100644
--- a/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue
+++ b/ui/src/views/infra/zone/AdvancedGuestTrafficForm.vue
@@ -39,6 +39,7 @@
         <a-form-item
           name="vlanRangeStart"
           ref="vlanRangeStart"
+          :validate-status="validStatus"
           has-feedback
           :style="{ display: 'inline-block', width: 'calc(50% - 12px)' }">
           <a-input-number
@@ -53,7 +54,6 @@
         <a-form-item
           name="vlanRangeEnd"
           ref="vlanRangeEnd"
-          has-feedback
           :style="{ display: 'inline-block', width: 'calc(50% - 12px)' }">
           <a-input-number
             v-model:value="form.vlanRangeEnd"
@@ -102,9 +102,24 @@
         labelCol: { span: 8 },
         wrapperCol: { span: 12 }
       },
-      validStatus: '',
-      validMessage: '',
-      formModel: {}
+      validStatus: 'error',
+      validMessage: this.$t('message.error.vlan.range'),
+      formModel: {},
+      rangeLimits: {
+        VLAN: {
+          min: 1,
+          max: 4094
+        },
+        VXLAN: {
+          min: 4096,
+          max: 16777214
+        },
+        GRE: {
+          min: 0,
+          max: 4294967295
+        }
+      },
+      isolationMethod: ''
     }
   },
   watch: {
@@ -120,6 +135,7 @@
     this.initForm()
   },
   mounted () {
+    this.getIsolationMethod()
     this.fillValue()
   },
   methods: {
@@ -143,9 +159,15 @@
       })
     },
     fillValue () {
-      this.form.vlanRangeStart = this.getPrefilled('vlanRangeStart')
-      this.form.vlanRangeEnd = this.getPrefilled('vlanRangeEnd')
+      const vlanStart = this.getPrefilled('vlanRangeStart')
+      const vlanEnd = this.getPrefilled('vlanRangeEnd')
+      this.form.vlanRangeStart = vlanStart
+      this.form.vlanRangeEnd = vlanEnd
       this.formModel = toRaw(this.form)
+      if (this.checkFromTo(vlanStart, vlanEnd)) {
+        this.validStatus = 'success'
+        this.validMessage = ''
+      }
     },
     getPrefilled (key) {
       return this.prefillContent?.[key] || null
@@ -156,7 +178,7 @@
 
       this.formRef.value.validate().then(() => {
         const values = toRaw(this.form)
-        if (!values.vlanRangeStart || (values.vlanRangeEnd && !this.checkFromTo(values.vlanRangeStart, values.vlanRangeEnd))) {
+        if (!this.checkFromTo(values.vlanRangeStart, values.vlanRangeEnd)) {
           this.validStatus = 'error'
           this.validMessage = this.$t('message.error.vlan.range')
           return
@@ -185,19 +207,30 @@
         toVal = value
         fromVal = this.form[rule.compare]
       }
-      if (fromVal && toVal && !this.checkFromTo(fromVal, toVal)) {
+      if (!this.checkFromTo(fromVal, toVal)) {
         this.validStatus = 'error'
         this.validMessage = this.$t('message.error.vlan.range')
       }
       return Promise.resolve()
     },
     checkFromTo (fromVal, toVal) {
-      if (!fromVal) fromVal = 0
-      if (!toVal) toVal = 0
-      if (fromVal > toVal) {
-        return false
+      const vlanRange = this.rangeLimits[this.isolationMethod] ? this.rangeLimits[this.isolationMethod] : this.rangeLimits.VLAN
+      switch (true) {
+        case ((fromVal === null) || (toVal === null)):
+        case fromVal === toVal:
+        case fromVal > toVal:
+        case toVal > vlanRange.max:
+        case fromVal < vlanRange.min:
+          return false
+        default:
+          this.validStatus = 'success'
+          this.validMessage = ''
+          return true
       }
-      return true
+    },
+    getIsolationMethod () {
+      const phyNetworks = this.getPrefilled('physicalNetworks')
+      this.isolationMethod = phyNetworks[phyNetworks.length - 1].isolationMethod
     }
   }
 }