Vue3 element-plus表单嵌套表格实现动态表单验证

这篇具有很好参考价值的文章主要介绍了Vue3 element-plus表单嵌套表格实现动态表单验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Vue3结合element-plus表单项可以动态添加/删除

部分效果图如下:
Vue3 element-plus表单嵌套表格实现动态表单验证,Vue,vue.js,javascript,ecmascript

另表格有添加和删除按钮,点击提交进行表单验证。

  1. 首先data格式必须是对象包裹数组
import { ref, reactive } from 'vue';
import { FormInstance } from 'element-plus'
const froms = ref<FormInstance>()
const form = ref({
    tableData: <any>[]
})
  1. 给表单绑定form数据
<el-form ref="forms" :model="form">
</el-form>
  1. 表格绑定tableData数据
<el-table :data="form.tableData" border style="width: 100%">
</el-table>
  1. 给表单项增加验证规则
<el-table-column label="身份证号" align="center" show-overflow-tooltip>
    <template #default="{ row, $index }">
        <el-form-item :prop="`tableData.${$index}.cardId`" :rules="rules.cardId">
            <el-input size="large" v-model="row.cardId" class="wih-150p" placeholder="请输入身份证号" />
        </el-form-item>
    </template>
</el-table-column>
<el-table-column align="center" fixed="right" label="操作" width="100px">
   <template #default="{ row, $index }">
        <el-button text type="danger" @click="delEdit($index, row)">删除</el-button>
    </template>
</el-table-column>
 <el-button size="large" type="primary" @click="subHandle(froms)">
    提交
 </el-button>

rules对应data rules对象,prop对应表单字段(注意是表格里每一行对应的字段 forms.tableData[下标].key)
prop的关键就在于下标 $index

  1. 部分验证规则
import { FormRules } from 'element-plus'
const rules = reactive<FormRules>({
    cardId: [
        { required: true, message: "请输入身份证号", trigger: "blur" },
        { pattern: /^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/, message: '请输入正确的身份证号', trigger: 'blur' }
    ],
    professional: [
        { required: true, message: "请输入从事专业", trigger: "blur" },
    ],
    months: [
        { required: true, message: "请输入投入时间", trigger: "blur" },
        { pattern: /^[1-9]\d*$/, message: '请输入正确的月份', trigger: 'blur' }
    ],
    phone: [
        { required: true, message: "请输入联系电话", trigger: "blur" },
        { pattern: /^[1][3,4,5,6,7,8,9][0-9]{9}$/, message: '请输入正确的手机号码', trigger: 'blur' }
    ],
    email: [
        { required: true, message: "请输入邮箱", trigger: "blur" },
        {
            type: 'email',
            message: '请输入正确的邮箱格式',
            trigger: ['blur', 'change'],
        },
    ],
     cost: [
        { required: true, message: "请输入金额", trigger: "blur" },
        { pattern: /^[1-9]\d*(\.\d+)?$/, message: '请输入正确的金额', trigger: 'blur' }
    ]
});
前端Vue中常用rules校验规则:

1、是否合法IP地址:

pattern:/^(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])\.(\d{1,2}|1\d\d|2[0-4]\d|25[0-5])$/,

2.是否手机号码或者固话
pattern:/^((0\d{2,3}-\d{7,8})|(1[345789]\d{9}))$/,

3. 是否身份证号码
pattern:/(^\d{15}$)|(^\d{18}$)|(^\d{17}(\d|X|x)$)/,

4.是否邮箱
pattern:/^([a-zA-Z0-9]+[-_\.]?)+@[a-zA-Z0-9]+\.[a-z]+$/,

5.整数填写
pattern:/^-?[1-9]\d*$/,

6.正整数填写
pattern:/^[1-9]\d*$/,

7.小写字母
pattern:/^[a-z]+$/,

8.大写字母
pattern:/^[A-Z]+$/,

9.大小写混合
pattern:/^[A-Za-z]+$/,

10.多个8位数字格式(yyyyMMdd)并以逗号隔开
pattern:/^\d{8}(\,\d{8})*$/,

11.数字加英文,不包含特殊字符
pattern:/^[a-zA-Z0-9]+$/,

12.前两位是数字后一位是英文
pattern:/^\d{2}[a-zA-Z]+$/,

13.密码校验(6-20位英文字母、数字或者符号(除空格),且字母、数字和标点符号至少包含两种)
pattern:/^(?![\d]+$)(?![a-zA-Z]+$)(?![^\da-zA-Z]+$)([^\u4e00-\u9fa5\s]){6,20}$/,

14.中文校验
pattern:/^[\u0391-\uFFE5A-Za-z]+$/,
inputed: /[^\d]/g //只能输入数字
inputed: /[^a-zA-Z]/g //只能输入英文
inputed: /[^\d\x\X]/g //只能输入数字和英文/[\W]/g
inputed: /[^\u4E00-\u9FA5]/g //只能输入中文
inputed: /[\u4E00-\u9FA5]/g //输入非中文字符
inputed: /^[a-zA-Z0-9_]{1,}$/ //仅支持字母数字下划线
inputed: /^[1-9]\d*$/ //正整数
inputed: /^[A-Za-z0-9]{6,7}$/ //输入的字母数字长度限制在 6-7
inputed: /^(?:[01]\d|2[0-3]):[0-5]\d:[0-5]\d$/ //24小时制时间(HH:mm:ss)
inputed: /^(?:1[0-2]|0?[1-9]):[0-5]\d:[0-5]\d$/ //12小时制时间(hh:mm:ss)
inputed: /^(?:(?:\+|00)86)?1\d{10}$/ //中国手机号
inputed: /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/ //邮箱地址
inputed: /^.*(?=.{6,})(?=.*\d)(?=.*[A-Z])(?=.*[a-z])(?=.*[!@#$%^&*? ]).*$/ //密码强度正则,最少6位,包括至少1个大写字母,1个小写字母,1个数字,1个特殊字符
inputed: /[^A-Za-z0-9\u4e00-\u9fa5]/g //只能输入数字,英文及中文

更多正则校验可查看:vue常用正则表达式

  1. 动态添加的实现
// 添加人员
const addPerson = () => {
    form.value.tableData.push({
        // 身份证号
        cardId: '',
        // 从事专业
        professional: '',
        // 投入时间(月)
        months: '',
        // 联系电话
        phone: '',
        // 邮箱
        email: ''
    })
}
  1. 表格删除的实现
// 存储删除的数据
let delList: any = []
const delEdit = (index: number, row: any) => {
    form.value.tableData.splice(index, 1)
    delList.push(row)
}
  1. 提交时再次验证
// 提交
const subHandle = async (formEl: FormInstance | any) => {
    if (!formEl) return
    await formEl.validate(async (valid: any) => {
        if (valid) {
	        // 通过校验调用接口
	        ...
		}
	}
}

效果展示:
Vue3 element-plus表单嵌套表格实现动态表单验证,Vue,vue.js,javascript,ecmascript文章来源地址https://www.toymoban.com/news/detail-629643.html

到了这里,关于Vue3 element-plus表单嵌套表格实现动态表单验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • vue3+element-plus表格默认排序default-sort失效问题

    vue3+element-plus表格默认排序default-sort失效问题

    在使用动态数据渲染的场景,el-table设置默认属性default-sort失效。 el-table的default-sort属性是针对静态数据的,如果是动态数据,default-sort则无法监听到。 案例:静态数据 默认排序正常 案例:模拟动态数据(setTimeout模拟后端延时数据返回) 默认排序失效 等待数据渲染结束后(n

    2024年02月12日
    浏览(11)
  • vue3 - element-plus表格组件el-table实现鼠标拖曳排序功能,vue3 Table表格拖拽排序,表格每行使用鼠标拖动进行排序功能,表格拖拽排序实现(详细示例代码,一键复制开箱即用

    vue3 - element-plus表格组件el-table实现鼠标拖曳排序功能,vue3 Table表格拖拽排序,表格每行使用鼠标拖动进行排序功能,表格拖拽排序实现(详细示例代码,一键复制开箱即用

    在vue3+elementPlus网站开发中,详细完成el-table表格的鼠标拖拽/拖曳/拖动排序,vue3使用element plus表格组件进行表格每行的拖动换位置排序功能(支持一键开启和关闭鼠标是否可拖动排序,代码易改造灵活),稍加改造可支持【树形复杂表格的排序】! 详细示例源代码,复制运行

    2024年04月09日
    浏览(12)
  • vue3+element-plus点击列表中的图片预览时,图片被表格覆盖

    vue3+element-plus点击列表中的图片预览时,图片被表格覆盖

    视觉 点击图片进行预览,但还能继续选中其他的图片进行预览,鼠标放在表格上,那一行表格也会选中,如图所示第一行的效果。 代码 官网文档有这么一个属性,官网是这个描述的Image属性。 在 el-image 中加入属性 preview-teleported=\\\"true\\\" 即可。

    2024年02月13日
    浏览(19)
  • vue3+ts+element-plus实际开发之导出表格和不同类型之间相互赋值

    vue3+ts+element-plus实际开发之导出表格和不同类型之间相互赋值

    1. 安装依赖 npm run xlsx 2. 引入,import * as XLSX from “xlsx”; 3. 报错找不到模块“xlsx”或其相应的类型声明 修改成大写就好了 import * as XLSX from \\\'XLSX\\\' ,如果没有报提示就直接用 4. 使用导出文件 //---- 导出表 1. 直接用a标签下载 鼠标移入样式,点击自动下载 2. 有特殊数据需要解析

    2024年02月15日
    浏览(11)
  • vue3+element-plus 表格全选和跨页勾选,以及全选全部功能

    vue3+element-plus 表格全选和跨页勾选,以及全选全部功能

    目录 背景描述 实现效果 详细开发 1.模拟数据和页面布局 2.跨页勾选和点击勾选功能 3.表头全选 4. 全选全部 (1)全选后禁用表格勾选(简单) (2)真正意义上的全选全部(难) 总结 表格的全选、部分勾选、跨页勾选、本页全选,这几个功能,有很多实现的方法,先说如何

    2024年02月07日
    浏览(5)
  • vue3+ts+element-plus 之使用node.js对接mysql进行表格数据展示

    vue3+ts+element-plus 之使用node.js对接mysql进行表格数据展示

    * 初始化node 查看node是否安装 node -v 初始化命令 npm init 初始化配置解释如下: 完成后会有一个package.json文件 * 安装可能用到的依赖 根据需求安装,我这里需要对接mysql,安装依赖 ,我是一次性安装完,后边会直接使用,也可以边安装边使用。如下 安装成功如下: * 配置文件

    2024年02月15日
    浏览(24)
  • vue3 element-plus 实现图片预览

    vue3 element-plus 实现图片预览

    element-plus下有这么一个组件 el-image-viewer /,但是这个组件是没写在文档上面的,像普通组件一样使用即可 可以通过点击按钮实现图片预览,而非el-image组件只能通过点击图片实现预览 2.1封装组件 2.3组件使用 在需要使用的地方引入,然后使用即可,这不是重点,每个人使用的

    2024年02月15日
    浏览(6)
  • Vue3+element-plus实现后台管理系统

    Vue3+element-plus实现后台管理系统

     环境:node.js软件 、Vs code、vite、elemnt-plus、windicss(样式框架)     1、首先,使用npm 命令构建项目( vscode安装的插件 vscode中文显示插件   2、高亮提示插件volar   3、vue 3 sni 代码提示) 快速上手 | Vue.js    a. npm -v 查看node.js 版本    b.  npm  config get registry   查看注册镜像是

    2024年02月09日
    浏览(10)
  • (二) Vue3 + Element-Plus 实现动态菜单栏

    (二) Vue3 + Element-Plus 实现动态菜单栏

    系列介绍:Vue3 + Vite + TS 从零开始学习 项目搭建:(一) Vue3 + Vite + TS 项目搭建 实现动态菜单栏:(二) Vue3 + Element-Plus 实现动态菜单栏 实现动态面包屑:(三) Vue3 + Element-Plus 实现动态面包屑 实现动态标签页:(四) Vue3 + Element-Plus 实现动态标签页 实现动态主题色切换(demo):(五)

    2023年04月23日
    浏览(18)
  • vue+Element UI 实现动态表单(点击按钮增删表格及嵌套输入框的增删)(1)

    vue+Element UI 实现动态表单(点击按钮增删表格及嵌套输入框的增删)(1)

    el-button size=“small” @click=“addTable”新增 el-button size=“small” @click=“delTable”删除 el-table ref=“table” :data=“tableDataBind.taAssessltems” tooltip-effect=“dark” border @selection-change=“selectRow” 规格: 重量: 数量: 加工费: el-button size=“mini” type=“primary” icon=“el-icon-circle-plus-ou

    2024年04月13日
    浏览(13)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包