Form 表单选择多个时间段 完成必填校验

一、案例效果

在这里插入图片描述

二、案例思路

  1. 在 Vue 中,你可以使用 v-for 指令动态渲染多个表单项,并使用 v-model 指令进行双向数据绑定。同时,你可以使用 Element UI 的 Form 组件进行表单验证。
  2. 动态定义校验 prop和rules

三、代码案例

html

    <mtd-form-item
        v-for="(item, index) in mainForm.multipleTimeArr"
        :key="index"
        :prop="'multipleTimeArr.' + index"
        :rules="{
          required: true,
          message: '请选择',
        }"
      >
        <div>
          <mtd-date-picker
            v-model="mainForm.multipleTimeArr[index]"
            class="w_440 mt-10"
            type="datetimerange"
            placeholder="开始时间-结束时间"
            value-format="yyyy-MM-dd HH:mm:ss"
          />
          <mtd-icon
            name="add-square-o"
            class="icon add-icon"
            @click="handleAddTime"
          ></mtd-icon>
          <mtd-icon
            v-if="mainForm.multipleTimeArr.length > 1"
            name="checkbox-indetermina-o"
            class="icon del-icon"
            @click="handleDelTime(item)"
          ></mtd-icon>
        </div>
      </mtd-form-item>

script

// data 举例
data() {
  return {
    mainForm: {
      multipleTimeArr: [[]]
    },
}


  private handleAddTime() {
    this.mainForm.multipleTimeArr.push([])
  }
  private handleDelTime(item: any) {
    var index = this.mainForm.multipleTimeArr.indexOf(item)
    if (index !== -1) {
      this.mainForm.multipleTimeArr.splice(index, 1)
    }
  }

四、零碎工具

  1. [[‘11’, ‘22’], [‘33’, ‘55’]]
    变成
    [
    { “beginTime”: “11”, “endTime”: “22” },
    { “beginTime”: “33”, “endTime”: “55” }
    ]
  • 可以使用 Array.prototype.map() 方法将二维数组转换为对象数组
let arr = [['11', '22'], ['33', '55']];

let result = arr.map(item => ({
  beginTime: item[0],
  endTime: item[1]
}));

console.log(result);

// 方法抽离
/**
 * 将时间段格式化所需要的接口入参
 * eg: [ { "beginTime": "", "endTime": "" } ]
 * @param timeRangeType: '1': 连续时间段 '2': 多时间段
 * @param timeData
 * 连续时间段: ['','']
 * 多时间段: [[],[]]
 */
export const timeFormatParams = (timeRangeType: string, timeData: string[] | string[][]) => {
  const timeObj: ActiveTimeType = { beginTime: '', endTime: '' }
  let singleArr: ActiveTimeType[] = []
  let multipleArr: ActiveTimeType[] = []
  if (timeRangeType === '1') {
    timeObj.beginTime = timeData[0]
    timeObj.endTime = timeData[1]
    singleArr.push(timeObj)
    return singleArr
  }
  if (timeRangeType === '2') {
    multipleArr = timeData.map(item => ({
      beginTime: item[0],
      endTime: item[1],
    }))
    return multipleArr
  }
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值