vue 中多个表单元素控一个校验规则

1. 场景一

 

<el-form-item
    label="确认时长方式"
    prop="preSubResourceDurationDay"
>
    <div class="confirmDurationDay">
        最晚使用日期前
        <el-input-number
            v-model="form.preSubResourceDurationDay"
            :precision="0"
            class="dayInputNumber"
            controls-position="right"
            :min="0"
        ></el-input-number>
        天
        <el-time-picker
            v-model="form.preSubResourceDurationTime"
            class="timePicker"
            value-format="HH:mm"
            :format="'HH:mm'"
            :picker-options="{ selectableRange: '00:00:00 - 23:59:59' }"
            @change="handlerPreDurationDayChange"
        ></el-time-picker>
        之前确认,
        <span style="font-weight: bold">超时不确认将自动取消订单!</span>
    </div>
</el-form-item>

第一个输入框的校验规则:

preDurationDay: [
    {
        required: true,
        trigger: ["blur", "change"],
        validator: (rule, value, callback) => {
            // 具体规则....
            let inputMinite = (this.form.preSubResourceDurationDay + 1) * 24 * 60 - 1 - this.convertTimeToMinutes(this.form.preSubResourceDurationTime);
            if (inputMinite > 0 && inputMinite < this.lastMinite) {
                callback();
            } else {
                callback(new Error("最晚确认时长,已超过提前预订天数,请重新设置最晚确认时长!"));
            }
        },
    },
],

第二个输入框触发第一个输入框的校验:

handlerPreDurationDayChange() {
    this.$refs.form.validateField("preSubResourceDurationDay");
},

2. 场景二

① 

② 

像这种,两边控制一个校验规则,只需要一边输入完,就通过校验的场景,在场景一的基础上,再去在自定义规则中定义自定义属性来实现:

:rules="[
    {
        required: true,
        validator: validatorCostAmount,
        otherValidator: () => item.advanceReservation,  // checkbox 绑定的值
        trigger: ['blur', 'change'],
    },
]"

data 中定义:

validatorCostAmount: (rule, value, callback) => {
    if (rule.otherValidator() == 20 || value >= 0) {
        callback();
    } else {
        callback(new Error("请输入费用或勾选需客人自行预约"));
    }
},

最后再去页面上 checkbox 的地方绑定一个 change 事件,去触发左边的校验即可。

  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Master_hl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值