close

  使用D2Crud,新增日期(開始日期、結束日期)時要驗證使用者輸入的是否是有效日期(結束日期不得大於開始日期)

 

  參考資料

  https://d2admin.fairyever.com/#/demo/d2-crud/demo22

 

  內建的addrules只能寫blur檢查有沒有內容,所以這邊要寫自定義驗證方法。

  實作上卡住的點主要是要拿各個component的值不太容易。

 

  addRules的部分:

 

enddate: [{ required: true, message: ""请输入内容"", trigger: 'blur' },

                { validator: twocheckpass, trigger: 'blur' }]

 

  twocheckpass是自定義變數。

  很妙的是這個變數竟然定義在data的下面return的外面……

 

export default {

  data() {

    var chechenddate = (rule, value, callback) => {

      let date1 = this.$refs.d2Crud.$refs.form.fields[2].fieldValue

      let date2 = value

      let D1 = new Date(date1.split('-'))

      let D2 = new Date(date2.split('-'))

      if (D1 > D2) {

        callback('結束日期須大於開始日期!!');

      } else {

        callback();

      }

    };

    return {

      ...

    }

 

 

以上這樣就完成日期驗證了。

 

主要比較困難的就是我這樣寫只驗證結束日期,那麼該如何取到另外一個key(開始日期)

我用的是 this.$refs.d2Crud.$refs.form.fields[2].fieldValue,這一串是教學寫的,大致看得懂但我肯定,我肯定寫不出來

  fileds多少是數你驗證的是表單的第幾個component(記得從0開始,fields[2]是表單第三個component,我這個是在addTemplate裡面,要新增資料時做的驗證)

 

  value接的是被驗證component的值,也就是結束日期。

 

  接下來的D1D2是因為拿回來的值是個string,由於前端限制value-format=yyyy-MM-dd(注意MM大寫),後端也是回傳這個格式,所以只要用split()切割’-‘之後就可以得到一個裝了年月日三個數字的陣列。

  接著再用Date把陣列變成日期格式去比大小,如果開始日期D1D2大,那一定就是你亂填~~~~

  提示錯誤訊息一波!

 

  這些可以先在console.log練習一下,可能會比較好理解。

 

日期練習.png

 

 

 

 

 

 

 

 

 

 

 

arrow
arrow
    文章標籤
    d2crud 驗證
    全站熱搜

    你好我是CC 發表在 痞客邦 留言(0) 人氣()