当前位置: 首页 > news >正文

【Element】el-form和el-table嵌套实现表格编辑并提交表单校验

一、背景

页面需要用到表格采集用户数据,提交时进行表单校验;即表格中嵌套着表单,保存时进行表单校验

二、功能实现

2.1、el-form和el-table嵌套说明

:model="formData" 给表单绑定数据,formData是表单的数据对象

② 表单数据对象formData中定义的tableData是表单内嵌套的表格显示数据

rules为表单绑定的校验规则

:prop="'tableData.' + scope.$index + '.name'" 绑定传入Form 组件的 model 中对应的字段name

⑤ :rules="rules.name" 绑定表单校验规则

⑥ 整个html结构是一个大表单 el-form里边嵌套的el-table,而el-table中又嵌套了表单项 el-form-item支持编辑。

备注:大多情况下prop会按照惯有思维直接写入字段,而这里是动态绑定的,另外一定要记得每项动态写入rules来进行绑定表单校验 

2.2、具体代码

<template><div><el-form:model="formData"ref="formRef":rules="rules"label-width="108px":inline="true"><el-table:data="formData.tableData"style="width: 100%" border><el-table-column type="index" width="55" align="center"></el-table-column><el-table-column label="姓名" prop="name" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.name'" :rules="rules.name"><el-input type="text" size="small" placeholder="请输入姓名" v-model="scope.row.name"></el-input></el-form-item></template></el-table-column><el-table-column label="年龄" prop="age" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.age'" :rules="rules.age"><el-input type="text" size="small" placeholder="请输入年龄" v-model="scope.row.age"></el-input></el-form-item></template></el-table-column><el-table-column label="性别" prop="sex" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.sex'" :rules="rules.sex"><el-input type="text" size="small" placeholder="请输入性别" v-model="scope.row.sex"></el-input></el-form-item></template></el-table-column></el-table><el-form-item class="footer"><el-button type="primary" @click="save">保存</el-button><el-button>取消</el-button></el-form-item></el-form></div>
</template><script>
export default{data(){return{formData:{tableData:[{name:'张三',age:18,sex:''},{name:'李四',age:19,sex:''},]},rules:{name:[{ required: true, message: '请输入姓名', trigger: 'blur' },],age:[{ required: true, message: '请输入年龄', trigger: 'blur' },],sex:[{ required: true, message: '请输入性别', trigger: 'blur' },],}}},methods:{//保存save(){this.$refs.formRef.validate((valid) => {console.log('valid',valid);if(valid){//如果valid为true,表示校验通过,可以提交表单,调取接口进行保存console.log('表单校验通过');}else {this.$message.warning("请填写完整的数据");}})},}
}
</script><style lang="scss" scoped>
.footer{margin-top: 50px;
}
</style>

三、实际项目应用

3.1、增加添加与删除操作

需求:表格增加操作项,具有添加和删除按钮,第一项无法删除,点击添加时,动态增加表格的行数,点击删除的时候,删除表格的行数据。

3.2、添加和删除代码

结构:直接添加一个表格项

<el-table-column label="操作" resizable align="center" header-align="center"><template slot-scope="{$index}"><el-button type="primary" icon="el-icon-plus" circle @click="addTable()" v-if="$index == 0"></el-button><el-button icon="el-icon-minus" circle @click="delTable($index)" v-if="$index > 0"></el-button></template>
</el-table-column>
methods:{//添加addTable(){let newArr = [{name:'',age:'',sex:''}]this.formData.tableData.push(...newArr)},//删除delTable(i){this.formData.tableData.splice(i,1)}
}

3.3、完整代码

<template><div><el-form:model="formData"ref="formRef":rules="rules"label-width="108px":inline="true"><el-table:data="formData.tableData"style="width: 100%" border><el-table-column type="index" width="55" align="center"></el-table-column><el-table-column label="姓名" prop="name" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.name'" :rules="rules.name"><el-input type="text" size="small" placeholder="请输入姓名" v-model="scope.row.name"></el-input></el-form-item></template></el-table-column><el-table-column label="年龄" prop="age" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.age'" :rules="rules.age"><el-input type="text" size="small" placeholder="请输入年龄" v-model="scope.row.age"></el-input></el-form-item></template></el-table-column><el-table-column label="性别" prop="sex" resizable align="center" header-align="center"><template slot-scope="scope"><el-form-item :prop="'tableData.' + scope.$index + '.sex'" :rules="rules.sex"><el-input type="text" size="small" placeholder="请输入性别" v-model="scope.row.sex"></el-input></el-form-item></template></el-table-column><el-table-column label="操作" resizable align="center" header-align="center"><template slot-scope="{$index}"><el-button type="primary" icon="el-icon-plus" circle @click="addTable()" v-if="$index == 0"></el-button><el-button icon="el-icon-minus" circle @click="delTable($index)" v-if="$index > 0"></el-button></template></el-table-column></el-table><el-form-item class="footer"><el-button type="primary" @click="save">保存</el-button><el-button>取消</el-button></el-form-item></el-form></div>
</template><script>
export default{data(){return{formData:{tableData:[{name:'张三',age:18,sex:'男'},{name:'李四',age:19,sex:''},]},rules:{name:[{ required: true, message: '请输入姓名', trigger: 'blur' },],age:[{ required: true, message: '请输入年龄', trigger: 'blur' },],sex:[{ required: true, message: '请输入性别', trigger: 'blur' },],}}},methods:{//保存save(){this.$refs.formRef.validate((valid) => {console.log('valid',valid);if(valid){//如果valid为true,表示校验通过,可以提交表单,调取接口进行保存console.log('表单校验通过');}else {this.$message.warning("请填写完整的数据");}})},//添加addTable(){let newArr = [{name:'',age:'',sex:''}]this.formData.tableData.push(...newArr)},//删除delTable(i){this.formData.tableData.splice(i,1)}}
}
</script><style>
.footer{margin-top: 50px;
}
</style>

3.4、实际效果

 最后:👏👏 😀😀😀 👍👍  

相关文章:

【Element】el-form和el-table嵌套实现表格编辑并提交表单校验

一、背景 页面需要用到表格采集用户数据&#xff0c;提交时进行表单校验&#xff1b;即表格中嵌套着表单&#xff0c;保存时进行表单校验 二、功能实现 2.1、el-form和el-table嵌套说明 ① :model"formData" 给表单绑定数据&#xff0c;formData是表单的数据对象 …...

初识Winform

什么是winform&#xff1f; WinForms&#xff08;Windows Forms&#xff09;是Microsoft .NET框架中的一个用户界面&#xff08;UI&#xff09;技术&#xff0c;用于创建Windows应用程序。它提供了一组用于构建图形用户界面的类和控件&#xff0c;以及与用户交互的事件模型。 …...

Redis:原理速成+项目实战——Redis实战5(互斥锁、逻辑过期解决缓存击穿问题)

&#x1f468;‍&#x1f393;作者简介&#xff1a;一位大四、研0学生&#xff0c;正在努力准备大四暑假的实习 &#x1f30c;上期文章&#xff1a;Redis&#xff1a;原理速成项目实战——Redis实战4&#xff08;解决Redis缓存穿透、雪崩、击穿&#xff09; &#x1f4da;订阅专…...

前端优化之一:dns预获取 dns-prefetch 提升页面载入速度

问题&#xff1a;怎么做到dns域解析&#xff1f; 用于优化网站页面的图片 问题&#xff1a;怎么提升网站性能&#xff1f; dns域解析&#xff0c;是提升网站的一个办法。 DNS Prefetch&#xff0c;即DNS预获取&#xff0c;是前端优化的一部分。 一般来说&#xff0c;在前端…...

C语言中一些基本数据类型的典型大小

char&#xff1a;通常是1字节。表示一个字符。int&#xff1a;通常在现代系统中是4字节&#xff08;但这取决于编译器和架构&#xff0c;有时可能是2字节&#xff09;。float&#xff1a;通常是4字节。double&#xff1a;通常是8字节。short 和 short int&#xff1a;通常是2字…...

[C/C++]排序算法 快速排序 (递归与非递归)

目录 &#x1f6a9;概念: &#x1f6a9;实现: ⚡1.hoare ⚡2.挖坑法 ⚡3.双指针法 &#x1f6a9;快速排序递归实现 &#x1f6a9;快速排序非递归实现 &#x1f6a9;概念: 通过一趟排序将要排序的数据分割成独立的两部分&#xff0c;其中一部分的所有数据比另一部分的所有…...

『年度总结』逐梦编程之始:我的2023学习回顾与展望

目录 前言 我与Python 我与C语言 第一篇正式博客&#xff1a; 第二篇正式博客&#xff08;扫雷&#xff09;&#xff1a; 指针学习笔记: C语言学习笔记&#xff1a; 我与数据结构&#xff1a; yuan 这篇博客&#xff0c;我将回顾2023年编程之旅的起点&#xff0c;同时展…...

MyBatis学习二:Mapper代理开发、配置文件完成增删改查、注解开发

前言 公司要求没办法&#xff0c;前端也要了解一下后端知识&#xff0c;这里记录一下自己的学习 学习教程&#xff1a;黑马mybatis教程全套视频教程&#xff0c;2天Mybatis框架从入门到精通 文档&#xff1a; https://mybatis.net.cn/index.html Mapper代理开发 目的 解决…...

【React系列】受控非受控组件

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. refs 的使用 在React的开发模式中&#xff0c;通常情况下不需要、也不建议直接操作DOM原生&#xff0c;但是某些…...

OpenCV-Python(22):2D直方图

目标 了解图像的2D直方图绘制2D直方图 介绍 在前面的部分我们介绍了如何绘制一维直方图&#xff0c;之所以称为一维&#xff0c;是因为我们只考虑了图像的一个特征&#xff1a;灰度值。但是在2D 直方图中我们就需要考虑两个图像特征。对于彩色图像的直方图通常情况下我们需要…...

Kubernetes 100个常用命令

本文简单总结关于使用 Kubectl 进行 Kubernetes 诊断的指南。列出了 100 个 Kubectl 命令&#xff0c;这些命令对于诊断 Kubernetes 集群中的问题非常有用。这些问题包括但不限于&#xff1a; 集群信息 Pod 诊断 服务诊断 部署诊断 网络诊断 持久卷和持久卷声明诊断 资源…...

labuladong日常刷题-差分数组 | LeetCode 1109航班预定统计 | 花式遍历 151反转字符串里的单词

差分数组–前缀和数组的升级 LeetCode 1109 航班预定统计 2024.1.1 题目链接labuladong讲解[链接] class Solution { public:vector<int> corpFlightBookings(vector<vector<int>>& bookings, int n) {//构建航班人数数组&#xff0c;数组大小为n,初…...

HbuilderX中的git的使用

原文链接https://blog.csdn.net/Aom_yt/article/details/119924356...

LeetCode每日一题 | 1944. 队列中可以看到的人数

文章目录 队列中可以看到的人数题目描述问题分析程序代码&#xff08;Golang 版本&#xff09; 队列中可以看到的人数 题目描述 原题链接 有 n 个人排成一个队列&#xff0c;从左到右 编号为 0 到 n - 1 。给你以一个整数数组 heights &#xff0c;每个整数 互不相同&#xff…...

React16源码: JSX2JS及React.createElement源码实现

JSX 到 Javascript 的转换 React中的 JSX 类似于 Vue中的template模板文件&#xff0c;Vue是基于编译时将template模板转换成render函数在React中&#xff0c;JSX是类似于html和javascript混编的语法&#xff0c;而javascript是真的javascript, html并非真的html它的可阅读性可…...

整理composer安装版本的python脚本

整理composer安装版本的python脚本 脚本实现的功能是去除composer安装命令后的版本号 def remove_version_numbers(commands):"""Remove version numbers from composer require commands.Args:commands (list of str): List of composer require commands.Retu…...

十、基本对话框大集合(Qt5 GUI系列)

目录 一、设计需求 二、实现代码 三、代码解析 四、总结 一、设计需求 Qt提供了很多标准的对话框。例如标准文件对话框(QFileDialog)、标准颜色对话框(QColorDialog)、标准字体对话框 (QFontDialog)、标准输入对话框 (QInputDialog) 及消息对话框 (QMessageBox)。本文展示各…...

大A又跌了

才开盘几天&#xff0c;又开始下跌了。生活更加苦难。期待高深算法。...

This error originates from a subprocess, and is likely not a problem with pip

我遇这个问题是的原因是包名错误 注意检查包名...

数据库基础知识1

关系模型的程序员不需熟悉数据库的存取路径 在3层模式结构中,___I___是数据库的核心和关键,___Ⅱ___通常是模式的子集,数据库模式的描述提供给用户,____Ⅲ__的描述存储在硬盘上。Ⅰ.模式Ⅱ. 外模式Ⅲ. 内模式 数据库中,数据的物理独立性是指用户的应用程序与存储在磁盘上数据库…...

vscode里如何用git

打开vs终端执行如下&#xff1a; 1 初始化 Git 仓库&#xff08;如果尚未初始化&#xff09; git init 2 添加文件到 Git 仓库 git add . 3 使用 git commit 命令来提交你的更改。确保在提交时加上一个有用的消息。 git commit -m "备注信息" 4 …...

django filter 统计数量 按属性去重

在Django中&#xff0c;如果你想要根据某个属性对查询集进行去重并统计数量&#xff0c;你可以使用values()方法配合annotate()方法来实现。这里有两种常见的方法来完成这个需求&#xff1a; 方法1&#xff1a;使用annotate()和Count 假设你有一个模型Item&#xff0c;并且你想…...

linux 下常用变更-8

1、删除普通用户 查询用户初始UID和GIDls -l /home/ ###家目录中查看UID cat /etc/group ###此文件查看GID删除用户1.编辑文件 /etc/passwd 找到对应的行&#xff0c;YW343:x:0:0::/home/YW343:/bin/bash 2.将标红的位置修改为用户对应初始UID和GID&#xff1a; YW3…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

JAVA后端开发——多租户

数据隔离是多租户系统中的核心概念&#xff0c;确保一个租户&#xff08;在这个系统中可能是一个公司或一个独立的客户&#xff09;的数据对其他租户是不可见的。在 RuoYi 框架&#xff08;您当前项目所使用的基础框架&#xff09;中&#xff0c;这通常是通过在数据表中增加一个…...

关于easyexcel动态下拉选问题处理

前些日子突然碰到一个问题&#xff0c;说是客户的导入文件模版想支持部分导入内容的下拉选&#xff0c;于是我就找了easyexcel官网寻找解决方案&#xff0c;并没有找到合适的方案&#xff0c;没办法只能自己动手并分享出来&#xff0c;针对Java生成Excel下拉菜单时因选项过多导…...

uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)

UniApp 集成腾讯云 IM 富媒体消息全攻略&#xff08;地理位置/文件&#xff09; 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型&#xff0c;核心实现方式&#xff1a; 标准消息类型&#xff1a;直接使用 SDK 内置类型&#xff08;文件、图片等&#xff09;自…...

医疗AI模型可解释性编程研究:基于SHAP、LIME与Anchor

1 医疗树模型与可解释人工智能基础 医疗领域的人工智能应用正迅速从理论研究转向临床实践,在这一过程中,模型可解释性已成为确保AI系统被医疗专业人员接受和信任的关键因素。基于树模型的集成算法(如RandomForest、XGBoost、LightGBM)因其卓越的预测性能和相对良好的解释性…...

大陆4D毫米波雷达ARS548调试

本文介绍了大陆ARS548毫米波雷达的调试与测试流程&#xff0c;主要包括以下内容&#xff1a; 设备参数&#xff1a;最大检测距离301m&#xff08;可调93-1514m&#xff09;&#xff0c;支持gPTP时间同步。 接线调试&#xff1a; Windows需使用USB-RJ45转换器 Linux可直接连接网…...

PHP 表单 - 验证邮件和URL

PHP 表单 - 验证邮件和URL 引言 在Web开发中&#xff0c;表单是用户与网站交互的重要途径。一个功能完善的表单不仅可以收集用户数据&#xff0c;还能提高用户体验。在表单设计中&#xff0c;验证邮件地址和URL是常见的需求。本文将详细介绍如何在PHP中实现邮件和URL的验证&a…...