element el-table实现表格动态增加/删除/编辑表格行,带校验规则

本篇文章记录el-table增加一行可编辑的数据列,进行增删改。

1.增加空白行

直接在页面mounted时对form里面的table列表增加一行数据,直接使用push() 方法增加一列数据这个时候也可以设置一些默认值。比如案例里面的 产品件数 。

	mounted() {this.$nextTick(() => {this.addFormData.productList.push({productName: '',//产品名称price: '',//单价(元/㎡)productCount: '1', //产品件数totalAmount: '', //小计¥元})})},

2.产品名称选中拿到数据展示到列表行

因为当前案例的产品名是下拉选择的,所以我们要请求接口拿到数据渲染到下拉列表,这里直接使用了假数据。

	data() {return {addFormData: {// 产品列表productList: [],},addFormRules: {productName: [{required: true,message: '请选择产品',trigger: 'blur'}],price: [{required: true,message: '请输入单价',trigger: 'blur'}],productCount: [{required: true,message: '请输入产品件数',trigger: 'blur'}]},optionsList: [{id:1,productName:'橘子',price:'10',},{id:2,productName:'苹果',price:'8',}]}},<el-form ref="addFormRef" :model="addFormData" :rules="addFormRules" size="mini" :inline="true"><el-table tooltip-effect="light" :data="addFormData.productList" ><el-table-column label="产品名称" prop="productName" min-width="150"><template slot-scope="scope"><el-form-item size="mini" :prop="'productList.' + scope.$index + '.productName'":rules="addFormRules.productName" class="all"><el-select v-model="scope.row.productName" filterable value-key="id" placeholder="请选择"@change="pestChange($event, scope.$index)"><el-option v-for="item in optionsList" :key="item.id" :label="item.productName":value="item"></el-option></el-select></el-form-item></template></el-table-column><el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right"width="150"><template slot-scope="scope"><el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdateYes(scope.row)"v-hasPermi="['system:order:edit']">增加</el-button><el-button size="mini" type="text" icon="el-icon-delete" @click="handleDeleteProduct(scope.row)"v-hasPermi="['system:order:remove']">删除</el-button></template></el-table-column></el-table><el-form-item size="large"><el-button type="primary" @click="handleSubmitAdd">提交</el-button><el-button @click="handleCancelAdd">取消</el-button></el-form-item></el-form>pestChange(e, index) {//此时的e 就是optionsList中的某一项//让后解构赋值给我们这一行对应的值 let data = this.addFormData.productList[index]Object.keys(data).forEach(key => {data[key] = e[key]})this.addFormData.productList[index].productCount = 1},

3.小计通过(计算属性计算值)

		<el-form ref="addFormRef" :model="addFormData" :rules="addFormRules" size="mini" :inline="true"><el-table tooltip-effect="light" :data="addFormData.productList" ><el-table-column label="小计¥元" prop="totalAmount" width="100"><template slot-scope="scope"><div class="notext">{{ getTotalAmount(scope.row) }}</div></template></el-table-column><el-table-column label="操作" align="center" class-name="small-padding fixed-width" fixed="right"width="150"><template slot-scope="scope"><el-button size="mini" type="text" icon="el-icon-edit" @click="handleUpdateYes(scope.row)"v-hasPermi="['system:order:edit']">增加</el-button><el-button size="mini" type="text" icon="el-icon-delete" @click="handleDeleteProduct(scope.row)"v-hasPermi="['system:order:remove']">删除</el-button></template></el-table-column></el-table><el-form-item size="large"><el-button type="primary" @click="handleSubmitAdd">提交</el-button><el-button @click="handleCancelAdd">取消</el-button></el-form-item></el-form>
	computed: {getTotalAmount(){return (data) => {//先判断单价和数量必须存在if (data.productCount && data.price) {data.totalAmount = parseInt(data.productCount) * parseInt(parseFloat(data.price))return data.totalAmount} else {return 0.00}}}},

4.再增加一行复用上一行的数据

		handleUpdateYes(row) {//拿到上一行数据再往数组中push()新的数据this.addFormData.productList.push({productName: row.productName,//产品名称price: row.price,//单价(元/㎡)productCount: row.productCount, //产品件数totalAmount: '', //小计¥元})},

5.删除某一行

		// 删除产品handleDeleteProduct(row) {this.$confirm('此操作将永久删除该产品信息, 是否继续?', '提示', {confirmButtonText: '确定',cancelButtonText: '取消',type: 'warning'}).then(() => {this.$message({type: 'success',message: '删除成功!'});this.addFormData.productList.splice(row.index, 1)}).catch(() => {this.$message({type: 'info',message: '已取消删除'});});},

6.点击提交对表单校验

		// 添加订单表单提交handleSubmitAdd() {this.$refs.addFormRef.validate(async (valid) => {if (!valid) return//校验通过 往下执行})},

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

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

相关文章

latex 使用 thanks 首页空白 问题

写IEEE journal的时候遇到的问题……用latex写了\thanks&#xff0c;编译的论文第一页是空的&#xff0c;这是因为\thanks要在\author内部&#xff0c;然后再用\maketitle&#xff0c;即\author{… \thanks{}}。这样的话详细信息就会出现在论文首页的左下角 另外&#xff0c;\…

linux创建定时任务

crontab方式 先查看是否有cron systemctl status crond 没有的话就安装 yum install cronie 打开你的crontab文件进行编辑。使用以下命令打开当前用户的crontab文件&#xff1a; crontab -e * * * * * /export/test.sh >> /export/test.log 2>&1/export/test.s…

差分算法中的F 和CR参数

自查使用。。F 类似梯度的大小 两者都用于种群中新个体的生成

leetcode--从中序与后序遍历序列构造二叉树

leeocode地址&#xff1a;从中序与后序遍历序列构造二叉树 给定两个整数数组 inorder 和 postorder &#xff0c;其中 inorder 是二叉树的中序遍历&#xff0c; postorder 是同一棵树的后序遍历&#xff0c;请你构造并返回这颗 二叉树 。 示例 1: 输入&#xff1a;inorder …

Unity插件 Unitask学习日志

Unity插件 Unitask学习日志 下载地址 https://github.com/Cysharp/UniTask点击这里可以查阅中文文档 在Unity 2020,2021 中使用UPM下载会找不到&#xff0c;可以使用2022版本的unity可以在upm中找到。 安装方式&#xff1a; 下载zip之后解压&#xff0c; 复制Plugins 到Uni…

uniapp小程序使用webview 嵌套 vue 项目

uniapp小程序使用webview 嵌套 vue 项目 小程序中发送 <web-view :src"urlSrc" message"handleMessage"></web-view>export default {data() {return {urlSrc: "",};},onLoad(options) {// 我需要的参数比较多 所以比较臃肿// 获取…

01. 数组篇(进行中......)

一. 前缀和技巧 &#xff08;1&#xff09;前缀和 前缀和技巧适用于快速、频繁地计算一个索引区间内的元素之和。 class NumArray { public:vector<int> preSum; //前缀和数组NumArray(vector<int>& nums) {//preSum[0] 0&#xff0c;便于计算累加和preSum…

Qt图形编辑类使用总结—正在编辑中

Qt的图形编辑通常会涉及以下三个类:QGraphicsView类、QGraphicsScene类及QGraphicsItem类。 QGraphicsView 是构建复杂图形用户界面的强大工具,尤其适用于那些需要动态更新、可交互的2D图形化应用程序,如图表绘制、流程图编辑器、游戏地图显示等等。通过结合使用 QGraphics…

Spring中的工厂模式详解及应用示例

1. Spring中的BeanFactory BeanFactory是一个接口&#xff0c;表示它是一个工厂&#xff0c;负责生产和管理bean。在Spring中&#xff0c;BeanFactory是IOC容器的核心接口&#xff0c;定义了管理Bean的通用方法&#xff0c;如 getBean 和 containsBean。 BeanFactory与IOC容器…

Python编程:如何有效等待套接字的读取与关闭

背景介绍 网络编程是现代应用程序开发的重要组成部分&#xff0c;尤其是在大数据和实时通信的背景下。套接字&#xff08;Socket&#xff09;作为网络通信的核心技术&#xff0c;是开发网络应用程序的基础。在Python编程中&#xff0c;如何有效地等待套接字的读取与关闭事件是…

柔性测斜仪:监测钻孔位移的核心利器

柔性测斜仪&#xff0c;作为一款创新的测量工具&#xff0c;凭借其卓越的设计与性能&#xff0c;在地下建筑、桥梁、隧道及水利水电工程等领域展现出非凡的应用价值。其安装便捷、操作简便、高精度及长寿命等特性&#xff0c;使之成为监测钻孔垂直与水平位移的理想选择。以下是…

算力共享,分布式大模型是什么,模型并行,流水线并行

目录 算力共享,分布式大模型是什么 一、算力共享 二、分布式大模型 AllReduce是什么 原理概述 具体原理 简单例子 模型并行,流水线并行是什么 模型并行 流水线并行 环形通信(如Ring AllReduce)、树形通信(如Tree AllReduce 环形通信(Ring AllReduce) 树形通…

【ComfyUI的API接口调用示例】

ComfyUI的API接口调用示例 本文目的 本文调用接口示例主要指导需要调用ComfyUI的开发者如何调用ComfyUI官方的API接口提交任务、查询历史、获取绘画视频结果等。 阅读本文的前提是你本地已经安装了ComfyUI&#xff0c;并且对工作流绘画和生成视频已经有所了解。注意如图右边栏…

arm架构安装chrome

在ARM架构设备上安装谷歌软件或应用通常涉及到几个步骤&#xff0c;这取决于你要安装的具体谷歌产品&#xff0c;比如谷歌浏览器、Google Play服务或者是其他谷歌开发的软件。下面我会给出一些常见的指导步骤&#xff0c;以安装谷歌浏览器为例&#xff1a; 在Linux ARM64上安装…

常用的三角函数公式

sin ⁡ 2 x cos ⁡ 2 x 1 \sin ^2 x \cos ^2 x 1 sin2xcos2x1 tan ⁡ x sin ⁡ x cos ⁡ x \tan x \dfrac{\sin x}{\cos x} tanxcosxsinx​ cot ⁡ x 1 tan ⁡ x cos ⁡ x sin ⁡ x \cot x \dfrac{1}{\tan x}\dfrac{\cos x}{\sin x} cotxtanx1​sinxcosx​ sec …

零基础做项目---五子棋对战---day02

用户模块 完成注册登录&#xff0c;以及用户分数管理~使用数据库来保存上述用户信息. 使用 MyBatis来连接并操作数据库了 主要步骤: 1.修改 Spring的配置文件,使数据库可以被连接上. 2.创建实体类&#xff0c;用户, User 3.创建Mapper接口~ 4.实现MyBatis 的相关xml配置…

MySQL安全值守常用语句

一、用户权限设置 1、Mysql中用户是如何定义的 用户名主机域 10.0.0.5110.0.0.%%10.0.0.0/255.255.255.0Db01Localhost127.0.0.1 2、用户创建 create user xinjing% identified by 123 3、用户删除 drop user username&#xff1b;username 是要删除的用户名:如 drop user root…

GDidees CMS v3.9.1 本地文件泄露漏洞(CVE-2023-27179)

前言 CVE-2023-27179 是一个影响 GDidees CMS v3.9.1 及更低版本的任意文件下载漏洞。这个漏洞存在于 /_admin/imgdownload.php 文件中&#xff0c;攻击者可以通过向 filename 参数传递恶意输入来下载服务器上的任意文件。 漏洞的根源在于对用户输入的 filename 参数处理不当…

【C++修行之道】string类练习题

目录 387. 字符串中的第一个唯一字符 125. 验证回文串 917. 仅仅反转字母 415. 字符串相加&#xff08;重点&#xff09; 541. 反转字符串 II 387. 字符串中的第一个唯一字符 字符串中的第一个唯一字符 - 力扣&#xff08;LeetCode&#xff09; 给定一个字符串 s &#…

中霖教育怎么样?税务专业可以考哪些证书?

在税务专业领域&#xff0c;专业技能的认证对职业发展至关重要。以下为税务专业相关可以考的证书&#xff1a; 1. 注册税务师资格证书&#xff1a;该证书是税务专业人士的关键资质&#xff0c;使持证者可以从事税务相关工作。 2. 会计职称证书&#xff1a;会计系列证书分为初…