詳解基於element的區間選擇組件校驗(交易金額)

需求:

這裡以項目的需求為例,基本的需求如下:

  1. 分為左右值,包含左右值,正整數
  2. 左側必須大於等於1,右側無限大,右側值必須不小於左側
  3. 左側填寫數據,右側標為必填;右側填寫數據,左側標為必填
  4. 失焦校驗成果:

代碼如下:(頁面)

<el-col :span="8" v-if="item.qttccType === 1"> 
 <el-col :span="14">
  <el-form-item :label="item.qttccName" :prop="'list.'+ index + '.startNum'" :rules="item.qttccName === '交易金額' ? startMoneyRule(tIndex) : []">
   <el-input v-model.number="item.qttcStartNum" style="width: 100%;" @change="handleMinChange(index)"></el-input>
  </el-form-item>
 </el-col>
 <el-col :span="10">
  <el-form-item label="~" label-width="10px" :prop="'list.'+ index + '.qttcEndNum'" :rules="item.qttccName === '交易金額' ? endMoneyRule(tIndex) : []">
   <el-input v-model.number="item.qttcEndNum" style="width: 60%;" @change="handleMaxChange(index)"></el-input>
  </el-form-item>
 </el-col>
</el-col>

主要思路:

  • 單個表單校驗:左側填寫數據,右側標為必填;右側填寫數據,左側標為必填、正整數校驗、區間校驗
  • 關聯校驗:右側閾值不得小於左側閾值

根據上面的思路,單個表單的校驗屬於公共校驗方法,關聯校驗需要分別校驗(因為對比對象不同,且提示語不同),由此在自定義校驗中有瞭如下定義:

公共校驗方法:正整數校驗、區間校驗

validateCom(rule, value, callback) {
   const MIN_NUMBER = 1
   const one = Number(value)
   if (Number.isInteger(one)) {
    if (one < MIN_NUMBER) {
     return callback(new Error('輸入值必須大於0'))
    } else if (one.length > 50) {
     callback(new Error('最大長度為50位'))
    }
    return callback()
   }
   return callback(new Error('請輸入數字值'))
  }

關聯校驗:

startMoneyRule(index) {
   const validateMin = (rule, value, callback) => {
    const one = Number(value)
    const max = Number(this.form.list[index].qttcEndNum)
    if (!max || one < max) {
     return callback()
    }
    return callback(new Error('輸入值不得大於最大閾值'))
   }
   const R = []
   R.push({ required: false, message: '請填寫交易金額最小值', trigger: 'blur' },
    { validator: this.validateCom, trigger: 'blur' },
    { validator: validateMin, trigger: 'blur' })
   return R
  },
  endMoneyRule(index) {
   const validateMax = (rule, value, callback) => {
    const one = Number(value)
    const min = Number(this.form.list[index].qttcStartNum)
    if (!min || one > min) {
     return callback()
    }
    return callback(new Error('輸入值不得小於最小閾值'))
   }
   const R = []
   R.push({ required: false, message: '請填寫交易金額最大值', trigger: 'blur' },
    { validator: this.validateCom, trigger: 'blur' },
    { validator: validateMax, trigger: 'blur' })
   return R
  }

填坑(重點)

很顯然,左側值是小於右側值的,但是校驗提示仍然報錯。究其原因,還是關聯校驗的問題。既然是關聯交驗,改變其中一個時應該會重新校驗兩個。很簡單,在input改變時,重新校驗表單不就OK瞭嗎

handleMinChange(index) {
   this.$refs.form.validateField('list.' + index + '.qttcEndNum')
  },
  handleMaxChange(index) {
   this.$refs.form.validateField('list.' + index + '.qttcStartNum')
  }

大功告成,忘說瞭。我的表單是動態從後臺獲取的,所以校驗rules是動態加的!!!

到此這篇關於詳解基於element的區間選擇組件校驗(交易金額)的文章就介紹到這瞭,更多相關element 區間選擇組件校驗內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: