激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

node.js|vue.js|jquery|angularjs|React|json|js教程|

香港云服务器
服務(wù)器之家 - 編程語言 - JavaScript - vue.js - iview實(shí)現(xiàn)動態(tài)表單和自定義驗(yàn)證時間段重疊

iview實(shí)現(xiàn)動態(tài)表單和自定義驗(yàn)證時間段重疊

2021-12-29 16:16董志欽 vue.js

這篇文章主要介紹了iview實(shí)現(xiàn)動態(tài)表單和自定義驗(yàn)證時間段重疊,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

動態(tài)添加表單項(xiàng)

iview的動態(tài)添加表單很簡單,只需設(shè)置好表單項(xiàng)為一個array,添加新項(xiàng)目的時候就push一個默認(rèn)好的值,剩下的iview會幫你做好。

<template lang="html">
 <div class="">

    <Form
      ref="formValidate"
      :model="formValidate"
      :rules="rulesValidate"
      :label-width="100"
      :label-colon="true"
    >
   <FormItem
    v-for="(item, index) in formValidate.showTimeDurations"
    :key="index"
    :prop=""showTimeDurations[" + index + "].value""
    :label=""顯示時段" + (index + 1)"
   >
    <Row>
     <TimePicker
      type="timerange"
      v-model="item.value"
      placement="bottom-end"
      placeholder="選擇時間段"
      style="width: 400px;"
      :disabled="isDisEdit"
      ></TimePicker>
     <Button shape="circle" icon="md-close" @click="handleRemove(index)" style="margin-left: 10px;"></Button>
    </Row>
   </FormItem>
   <FormItem style="width: 500px;" v-if="formValidate.showTimeDurations.length < 3">
    <Button type="dashed" long @click="handleAddDuration" icon="md-add">添加顯示時段</Button>
   </FormItem>
   </Form>
 </div>
</template>

<script>
export default {
 name: "banner_new",
 data() {
  return {
   formValidate: {
    showTimeDurations: [{value: ["",""]}]
   }
  }
 },
 methods: {
  handleAddDuration() {
   this.formValidate.showTimeDurations.push({value: ["",""]})
  },
  handleRemove(index) {
   this.formValidate.showTimeDurations.splice(index, 1)
  }
 }
}
</script>

<style lang="css" scoped>
</style>

iview實(shí)現(xiàn)動態(tài)表單和自定義驗(yàn)證時間段重疊

表單驗(yàn)證

iview的表單驗(yàn)證是通過在Form添加屬性 :rules="rulesValidate" ,rulesValidate是在methods里設(shè)置的方法。

添加一個title表單項(xiàng)和提交按鈕

 <FormItem label="名稱" prop="title" style="width: 500px;">
    <Input v-model="formValidate.title" :disabled="isDisEdit" :placeholder=""請輸入輪播圖名稱(最多50個字符)"" maxlength="50" show-word-limit></Input>
  </FormItem>
  ...
  <Row type="flex" justify="start" style="margin-top: 20px;">
    <Button type="primary" style="width: 100px; margin-left: 20px;" v-if="isCanSave" @click="handleSubmit("formValidate")">保存</Button>
  </Row>
  methods: {
    handleSubmit(form) {
      // 調(diào)用validate方法會執(zhí)行驗(yàn)證
      this.$refs[form].validate(validate => {
        // validate=true/false,驗(yàn)證成功與否
      })
    },
  }

表單驗(yàn)證:

rulesValidate: {
  title: [
    {
      required: true,
      message: "請?zhí)顚戄啿D名稱",
      trigger: "blur"
    },
    {
      type: "string",
      max: 50,
      message: "50個字以內(nèi),中文/字母/數(shù)字/常用字符",
      trigger: "change"
    }
  ],

也可以寫成

title: [{{ required: true, message: "請?zhí)顚憟D片名稱", trigger: "blur"}}]

驗(yàn)證條件是一個數(shù)組,可以寫多個。如果需要自定義驗(yàn)證可以在data里面定義一個驗(yàn)證器

data() {
  const durationValitator = (rule, value, callback) => {
    if(this.isShowTimePicker && value.toString() === ",") {
      callback(new Error("請選擇顯示時間段"));
    }else if(value[0] === value[1]) {
      callback(new Error("請正確選擇時間段"))
    }else if(!showTimeDurationsJudge(this.formValidate.showTimeVOS)){
      callback(new Error("時間段不可重復(fù)"))
    }else {
      callback()
    }
  };
  const durationValidate = [{ validator: durationValitator, trigger: "blur" }];
  return {
    rulesValidate: {
      "showTimeDurations[0].value": durationValidate,
      "showTimeDurations[1].value": durationValidate,
      "showTimeDurations[2].value": durationValidate,
    }
  }
}

"showTimeDurations[0].value": durationValidate, 這種寫法是表示驗(yàn)證表單動態(tài)項(xiàng)目里第一個子項(xiàng)目的value值,如果有3個子項(xiàng)需要重復(fù)寫3次,不知道有沒有更好的寫法?暫時先這樣。

showTimeDurationsJudge 是驗(yàn)證時間段重復(fù)的方法。

iview實(shí)現(xiàn)動態(tài)表單和自定義驗(yàn)證時間段重疊

驗(yàn)證時間段是否重疊

先考慮如果是有2段時間如何驗(yàn)證?不考慮跨天的情況。

思考的結(jié)果是兩個時間段不重疊的充要條件就是

  • 前面的一段時間(a1)的開始(start1)和結(jié)束時間(end1)都要在后面一段時間(a2)的開始時間(start2)之前
  • 后面的一段時間(a2)的開始(start2)和結(jié)束時間(end2)都要在前面一段時間(a1)的結(jié)束時間(end1)之后

滿足上面條件就能保證兩段時間是完全錯開的。

因?yàn)榭丶o的時間是"00:00:00"這種格式的字符串,我引入moment這個庫來把字符串轉(zhuǎn)化為時間戳,時間戳可以比較大小。

const judge = (a1,a2) => {
 let result = false
  const start1 = moment(a1[0],"HH:mm:ss").valueOf()
  const end1 = moment(a1[1],"HH:mm:ss").valueOf()
  const start2 =moment(a2[0],"HH:mm:ss").valueOf()
  const end2 = moment(a2[1],"HH:mm:ss").valueOf()

  if(start1 == start2) {
    return false
  }else if(start1 > start2) {
    result = start1 > end2
  }else {
    result = end1 < start2
  }
  return result
}

如果有重疊就返回false,沒有重疊返回true。在可以比較兩段時間之后,如果有更多時間段,就可以用循環(huán)的辦法比較,完整的代碼為:

import moment from "moment"

export const showTimeDurationsJudge = (durations) => {
 let judgeResult = true
 if(durations && durations.length > 1) {
  for(let i=0;i< durations.length-1;i++){
   for(let j=i+1;j < durations.length; j++) {
       judgeResult = judgeResult && judge(durations[i].value,durations[j].value)
     }
  }
 }
 return judgeResult
}

const judge = (a1,a2) => {
 let result = false
  const start1 = moment(a1[0],"HH:mm:ss").valueOf()
  const end1 = moment(a1[1],"HH:mm:ss").valueOf()
  const start2 =moment(a2[0],"HH:mm:ss").valueOf()
  const end2 = moment(a2[1],"HH:mm:ss").valueOf()

  if(start1 == start2) {
    return false
  }else if(start1 > start2) {
    result = start1 > end2
  }else {
    result = end1 < start2
  }
  return result
}

到此這篇關(guān)于iview實(shí)現(xiàn)動態(tài)表單和自定義驗(yàn)證時間段重疊的文章就介紹到這了,更多相關(guān)iview表單驗(yàn)證內(nèi)容請搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://segmentfault.com/a/1190000038910345

延伸 · 閱讀

精彩推薦
  • vue.js詳解vue 表單綁定與組件

    詳解vue 表單綁定與組件

    這篇文章主要介紹了vue 表單綁定與組件的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Latteitcjz6432022-02-12
  • vue.jsVue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    Vue項(xiàng)目中實(shí)現(xiàn)帶參跳轉(zhuǎn)功能

    最近做了一個手機(jī)端系統(tǒng),其中遇到了父頁面需要攜帶參數(shù)跳轉(zhuǎn)至子頁面的問題,現(xiàn)已解決,下面分享一下實(shí)現(xiàn)過程,感興趣的朋友一起看看吧...

    YiluRen丶4302022-03-03
  • vue.jsVue多選列表組件深入詳解

    Vue多選列表組件深入詳解

    這篇文章主要介紹了Vue多選列表組件深入詳解,這個是vue的基本組件,有需要的同學(xué)可以研究下...

    yukiwu6752022-01-25
  • vue.js梳理一下vue中的生命周期

    梳理一下vue中的生命周期

    看過很多人講vue的生命周期,但總是被繞的云里霧里,尤其是自學(xué)的同學(xué),可能js的基礎(chǔ)也不是太牢固,聽起來更是吃力,那我就已個人之淺見,以大白話...

    CRMEB技術(shù)團(tuán)隊(duì)7992021-12-22
  • vue.jsVue2.x-使用防抖以及節(jié)流的示例

    Vue2.x-使用防抖以及節(jié)流的示例

    這篇文章主要介紹了Vue2.x-使用防抖以及節(jié)流的示例,幫助大家更好的理解和學(xué)習(xí)使用vue框架,感興趣的朋友可以了解下...

    Kyara6372022-01-25
  • vue.jsVue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn)

    這篇文章主要介紹了Vue2.x 項(xiàng)目性能優(yōu)化之代碼優(yōu)化的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋...

    優(yōu)小U9632022-02-21
  • vue.js用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法

    這篇文章主要介紹了用vite搭建vue3應(yīng)用的實(shí)現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下...

    Asiter7912022-01-22
  • vue.jsVue中引入svg圖標(biāo)的兩種方式

    Vue中引入svg圖標(biāo)的兩種方式

    這篇文章主要給大家介紹了關(guān)于Vue中引入svg圖標(biāo)的兩種方式,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的...

    十里不故夢10222021-12-31
745
主站蜘蛛池模板: 国产人成精品综合欧美成人 | 国产成人aⅴ | 亚洲一区二区三区精品在线观看 | 新久草在线视频 | 亚洲一区二区免费 | 国产91一区二区三区 | 毛片视频免费播放 | 亚洲特黄a级毛片在线播放 久久久入口 | 黄色小视频在线免费看 | 国产午夜精品久久久久婷 | 伊人成人免费视频 | hd性videos意大利复古 | 日本精品一区二区 | 黄色特级片黄色特级片 | 亚洲成人精品久久久 | 久久最新网址 | 久久av免费 | 国产婷婷一区二区三区 | 黄网站在线免费 | 欧美激情综合在线 | 一级做受大片免费视频 | 国产一区二区三区影视 | 亚洲第一男人天堂 | 欧美成人做爰高潮片免费视频 | 神马顶级推理片免费看 | 欧美成人午夜一区二区三区 | 日本韩国欧美一级片 | 亚洲成人福利电影 | 欧美爱爱一区二区 | 91精品国产刺激国语对白 | 蜜桃一本色道久久综合亚洲精品冫 | 一级做a爰片性色毛片2021 | 国产va在线观看免费 | 精品成人免费一区二区在线播放 | 成年免费大片黄在线观看岛国 | 九九黄色| 色日本视频 | 国产又粗又爽又深的免费视频 | 久久亚洲精品久久国产一区二区 | 免费在线观看毛片视频 | www.国产一区.com |