vue中elementUI表单循环验证

news2024/10/5 22:24:41

在这里插入图片描述

进行验证的步骤

1、表单el-form 添加 :model="form" ref="form" :rules="rules",注意是 :model="form"不是v-model,而后每个el-form-item绑定prop
2、不循环的示例在官网可看
3、循环表单的验证:
 3-1、el-form-item 绑定 :prop="`addList[${index}][orderNum]`" :rules="rules.orderNum"
 	注意不循环的表单每个el-form-item 不需要单独加:rules="rules.orderNum"
 	然后prop的名字要与data中的rules数组对象的名称相同即可
 3-2、js判断时,此处的orderNum也就是data中的rules中的名称
 `this.$refs.form.validateField('orderNum', (valid) => {
      //valid返回的是规则集中写的错误提示信息,如果满足条件,返回的就是空
      if (valid) {
         return this.$refs["form"].clearValidate('orderNum');
        }
   });`
<el-form class="demo-form" :model="form" ref="form" :rules="rules" label-width="100px">
      <el-col :span="12">
        <el-form-item label="名称:" prop="name">
          <el-input clearable v-model="form.name" placeholder="请输入考评名称"></el-input>
        </el-form-item>
      </el-col>
      <el-col :span="12">
        <el-form-item label="选择:" prop="indexId">
          <el-select clearable v-model="form.indexId" placeholder="请选择指标" style="width:100%;" @change="removeHintChange(form.indexId,'indexId')">
            <el-option v-for="item in targetOptions" :key="item.value" :label="item.label" :value="item.value">
            </el-option>
          </el-select>
        </el-form-item>
      </el-col>
      <el-col class="wrap">
        <div class="step" v-for="(item, index) in form.addList" :key="index">
          <div class="stepName">
            步骤{{index+1}}</div>
          <el-form-item label="考试考试考试考试:" class="evaluationPerson" :prop="`addList[${index}][personNameId]`" :rules="rules.personNameId">
            <el-select clearable v-model="item.personNameId" placeholder="请选择人员" @change="removeHintChange(item.personNameId,`addList[${index}][personNameId]`)">
              <el-option v-for="item in personOptions" :key="item.value" :label="item.label" :value="{value:item.value,label:item.label}">
              </el-option>
            </el-select>
          </el-form-item>
          <el-form-item label="顺序:" class="order" :prop="`addList[${index}][orderNum]`" :rules="rules.orderNum">
            <el-input clearable v-model="item.orderNum" @input="changeMemberId($event,index,0)"></el-input>
          </el-form-item>
          <el-form-item label="顺1:" class="weight" :prop="`addList[${index}][ratio]`" :rules="rules.ratio">
            <el-input clearable v-model="item.ratio" @input="changeMemberId($event,index,1)"></el-input>
            <div class="percent">%</div>
          </el-form-item>
          <el-form-item label="备注:" class="remarks" :prop="`addList[${index}][remark]`" :rules="rules.remark">
            <el-input clearable type="textarea" v-model="item.remark" placeholder="部门负责人"></el-input>
            <div class="iconPic" @click="deleteInformation(index)"><i class="el-icon-delete-solid"></i></div>
          </el-form-item>
        </div>
      </el-col>
      <el-col class="addInfor">
        <el-button type="primary" plain size="mini" @click="addInformation">
          <i class="el-icon-plus"></i>添加
        </el-button>
      </el-col>
    </el-form>
data() {
    return {
      dialogShow1: true,
      // 指标选择
      indexId: "",
      targetOptions: [{ label: "11", value: 1 }],
      // 考评人员
      personNameId: "",
      personOptions: [{ label: "22", value: 1 }],
      form: {
        indexId: "",
        // 表单字段列表
        addList: [{ personNameId: "", orderNum: "", ratio: "", remark: "" }],
      },
      // 校验规则
      rules: {
        name: [{ required: true, message: "请输入名称", trigger: "blur" }],
        indexId: [
          { required: true, message: "请选择", trigger: "blur" },
        ],
        personNameId: [
          { required: true, message: "请选择(人员)", trigger: "blur" },
        ],
        orderNum: [{ required: true, message: "请输入顺序", trigger: "blur" }],
        ratio: [{ required: true, message: "请输入权重", trigger: "blur" }],
        remark: [{ required: true, message: "请输入备注", trigger: "blur" }],
      },
    };
  },
// 限制有的输入框只能输入数字
    changeMemberId(val, index, num) {
      if (num === 0) {
        this.form.addList[index].orderNum = val.replace(/[^\d]/g, "");
      } else if (num === 1) {
        this.form.addList[index].ratio = val.replace(/[^\d]/g, "");
      }
    },
    // 强制去掉验证
    removeHintChange(value, name) {
      if (value != null || "" || []) {
        this.$refs.form.validateField(name, (valid) => {
          //valid返回的是规则集中写的错误提示信息,如果满足条件,返回的就是空
          if (valid) {
            return this.$refs["form"].clearValidate(name);
          }
        });
      }
    },
    // 添加步骤
    addInformation() {
      this.form.addList.push({
        personNameId: "",
        orderNum: "",
        ratio: "",
        remark: "",
      });
    },
    // 弹窗 - 删除信息
    deleteInformation(val) {
      if (this.form.addList.length > 1) {
        this.form.addList.splice(val, 1);
      } else {
        this.$message({
          message: "不可全部删除,最少一条新增数据信息",
          type: "warning",
        });
      }
    },

<style scoped lang="scss">
// 弹窗中的内容
.addInfor {
  margin-bottom: 16px;
  display: flex;
  justify-content: end;
}
.wrap {
  max-height: 40vh;
  overflow-y: auto;
}
.step {
  display: flex;
  .stepName {
    white-space: nowrap;
    line-height: 36px;
    color: #606266;
    font-size: 14px;
    font-weight: 700;
  }
}
::v-deep .step .el-form-item__content {
  display: flex;
}
::v-deep .step .evaluationPerson .el-form-item__label {
  width: 150px !important;
}
::v-deep .step .order .el-form-item__label,
::v-deep .step .weight .el-form-item__label,
::v-deep .step .remarks .el-form-item__label {
  width: 70px !important;
}
::v-deep .step .order .el-form-item__content,
::v-deep .step .weight .el-form-item__content,
::v-deep .step .remarks .el-form-item__content {
  margin-left: 70px !important;
}
::v-deep .el-dialog__header {
  font-weight: 700;
}
::v-deep .el-textarea textarea {
  height: 36px;
}
.percent {
  margin-left: 10px;
}
.iconPic {
  margin-left: 10px;
  font-size: 16px;
  color: red;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/740840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT 之蓝牙编程

简介 使用PC蓝牙和蓝牙透传模块通讯。使用Android蓝牙和蓝牙透传模块通讯。 准备 QT core gui bluetoothQT蓝牙库相关头文件 #include <QtBluetooth/qbluetoothglobal.h> #include <QtBluetooth/qbluetoothlocaldevice.h> #include <qbluetoothaddre…

6.2.5 网络基本服务----动态主机配置协议DHCP

6.2.5 网络基本服务----动态主机配置协议DHCP 动态主机配置协议允许一台计算机加入新的网络时可自动获取网络配置信息&#xff0c;不用人工参与。连网的计算机需要配置的参数包括 IP地址子网掩码默认路由器的IP地址域名服务器IP地址 DHCP与DNS、FTP、Telnet一样也采用客户服…

Jetbot TinyML Create Sin

浏览器访问ip(oled上显示的ip地址):8888&#xff0c;如192.168.10107:8888&#xff0c;Password:jetbot。 双击Notebool下的Python 3&#xff0c;然后编辑代码&#xff1a; import tensorflow as tf import numpy as np import matplotlib.pyplot as plt import math#Well gen…

医疗器械外贸ERP软件:优化资源分配,提升企业竞争力

随着医疗器械外贸业务的不断发展&#xff0c;外贸业务管理ERP软件已经成为了医疗器械企业必不可少的一项工具。该软件解决方案可以有效地帮助企业管理海外市场、跟进海外订单、协调供应链等关键业务。 医疗器械外贸行业管理难点&#xff1a; 1、法规和标准&#xff1a;涉及到不…

博客系统(Servlet)

我们的目标是实现一个带有服务器版本的博客系统&#xff08;重点关注后端开发&#xff09; 1.准备工作 1&#xff09;创建web项目 2&#xff09;创建相应的目录结构、 3&#xff09;配置pom.xml <?xml version"1.0" encoding"UTF-8"?> <pro…

【玩转Linux操作】一文带你明白Shell的判断,循环语句

&#x1f38a;专栏【玩转Linux操作】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【如愿】 大一同学小吉&#xff0c;欢迎并且感谢大家指出我的问题&#x1f970; 文章目录 &#x1f354;判断语句⭐单层if&#x1f388;示例 ⭐…

C++ 最长子段和

最大子段和详解_最大字段和_Niteip的博客-CSDN博客 #include <iostream> #include <sstream> #include <vector> #include <string> #include <algorithm> #include <climits> #include <unordered_map> #include <set>using…

ElementUI —— Cascader 级联选择器

前言&#xff1a; 项目中使用Cascader级联选择器&#xff0c;通过递归处理后端接口返回的数据。 function fn(temp) {let newArr [];for (let i 0; i < temp.length; i) {let obj {};obj.value temp[i].name;obj.label temp[i].name;obj.children [];if (temp[i].chil…

Python爬虫实战之原神公告获取

前言 好久不见了吧&#xff0c;博主最近也是成为了准高三&#xff0c;没有太多时间去创作文章了&#xff0c;所以这篇文章很有可能是高考前最后一篇文章了(也不一定&#x1f609;) 言归正传&#xff0c;本次文章主要讲解如何去爬取原神官网的公告(我不玩原神&#xff01;&…

如何在WordPress网站中嵌入TikTok视频(3个简单方法)

您想轻松地将 TikTok 视频嵌入您的 WordPress 网站吗&#xff1f; 如果您已经创建了成功的、病毒式传播的 TikTok&#xff0c;那么将这些视频发布到您的网站也是有意义的。通过这种方式&#xff0c;您只需很少的额外努力就能获得更多的观看次数、参与度和社交媒体关注者。 在…

企业面临数字化转型,有什么建议吗?

数字化转型是一个综合过程&#xff0c;涉及利用数字技术增强业务运营、改善客户体验并推动创新。企业数字化转型的一些建议&#xff1a; 制定清晰的愿景&#xff1a;定义数字化转型目标并创建与业务目标相符的愿景。这将有助于指导数字化并确保它们的驱动目标。 拥抱云计算&am…

盲盒抽奖小程序源码-带H5端可打包APP_带安装教程

1.新建站点。上传后台源码文化到新建站点&#xff0c;解压跟目录&#xff01;&#xff01; 2. 导入数据库文件&#xff0c;修改数据库信息&#xff0c;&#xff08;数据库根目录 .env 文件&#xff09; 3. 修改网站运行目录 《运行目录为/public 》 4. 修改伪静态 《伪静态t…

STM32 Proteus仿真双路0-20V直流电压表TM1637数码管-0061

STM32 Proteus仿真双路0-20V直流电压表TM1637数码管-0061 Proteus仿真小实验&#xff1a; STM32 Proteus仿真双路0-20V直流电压表TM1637数码管-0061 功能&#xff1a; 硬件组成&#xff1a;STM32F103R6单片机 TM1637 4位数码管驱动电路2路0~20V电压测量模块2个电位器输出0-…

微信小程序精选,多样化的功能与便捷体验

白噪音Pro、魔术字体和天天倒计时&#xff0c;这三款微信小程序正越来越受到我们的欢迎。它们各自具有独特的功能和特点&#xff0c;为我们提供了多样化的体验。现在&#xff0c;让我们一起来详细介绍一下这三款小程序。 首先是白噪音Pro。随着生活节奏的加快和压力的增加&…

如何把录音转换成文字免费?用三个方法轻松转文字!

录音转文字的技术为我们的生活带来了诸多便利。例如&#xff0c;一家新闻机构正在进行一项采访&#xff0c;需要记录受访者的观点和信息&#xff0c;他们选择使用录音设备来收集数据&#xff0c;因为这样可以更准确地捕捉受访者的原始反应。然而&#xff0c;手动将录音内容转化…

动态路由介绍

目录 动态路由 协议的划分&#xff1a; 通过协议算法的不同可以分为两类&#xff1a; RIP RIP的基础配置 拓展配置&#xff1a; 1.RIP的手工认证——RIPV2的手工认证 2.RIP的手工汇总 3.RIP的沉默接口 4.RIP的加快收敛 5.RIP的缺省路由 OSPF 动态路由评判标准&…

今天给大家分享几款优质的图片处理软件

图片处理软件是现代生活中不可或缺的一种工具。无论是平面设计、摄影后期还是日常生活中的照片编辑等&#xff0c;都需要借助优质的图片处理软件来完成各种任务。今天&#xff0c;我将向大家介绍几款非常优秀的图片处理软件&#xff0c;它们功能强大、易于操作&#xff0c;可以…

ES trouble shotting

一、背景 KfES 实例不同节点&#xff0c;会出现隔断时间告警&#xff0c;需要kill后恢复。 二、排查 排查是es 2.3.0低版本的bug&#xff0c;LRUQueryCache 初始化后一直在占用着内存没有释放。 2.1 ES 版本 2.2 内存占用情况 2.3 ES 源码 2.4 社区经验 elasticsearch2.3.…

特征融合篇 | YOLOv8 引入渐进特征金字塔网络 AFPN 结构 | 《2023年6月28日最新发表》

论文地址:https://arxiv.org/pdf/2306.15988.pdf 代码地址:https://github.com/gyyang23/AFPN 多尺度特征在目标检测任务中对于编码具有尺度变化的对象非常重要。一种常见的多尺度特征提取策略是采用经典的自顶向下和自底向上的特征金字塔网络。然而,这些方法存在特征信息的…

快手详情API接口jason格式java php

随着移动互联网的快速发展&#xff0c;短视频应用成为越来越多用户获取信息和进行购物的重要途径。作为广告商或电商平台&#xff0c;了解和充分利用快手的商品详情API接口将为您的营销策略带来巨大的潜力 了解快手商品详情API接口 快手的商品详情API接口是一组提供商品相关信息…