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

需求描述

在项目中遇到需要实现表格动态的新增、编辑、删除表格行的需求,同时带有校验规则

在这里插入图片描述

代码解决

  1. 点击新增的时候,给新增row默认属性,给相应的默认值,包括给一个isEditor: true,用来区分是否需要编辑。同时当有编辑行的时候,应当不能新增新的行或者编辑其他行,全局定义一个isHasEdit,用来分辨当下是否有正在编辑的行。
const isHasEdit = ref('1') // 1 默认没有正在编辑的, 0 有正在编辑的row,其他row不能编辑/新增
const addRow = (index: number) => {if(isHasEdit.value == '1') {tableData.value.splice(index + 1, 0, {key: "",value: "",isEditor: true})isHasEdit.value = '0'}
}
  1. isEditor为true的时候能编辑,表格当中要插入相应需求的el-form-item,通过isEditor判断是否显示
<el-form :model="tableData" ref="tableForm"><div class="btn"><el-button type='primary' link @click='addRow(tableData.length-1)'>新增行</el-button></div><el-table :data="tableData" stripe border header-cell-class-name='x-table-header' cell-class-name='x-table-cell'><el-table-column type="index" width="60" label="序号" align="center"></el-table-column><el-table-column prop="key" label="职级" align="center"><template #default="{row, $index}"><el-form-item v-if="row.isEditor":prop="`${$index}.key`":rules="rules.key"><el-input v-model="row.key" /></el-form-item><span v-else>{{ row.key }}</span></template></el-table-column><el-table-column prop="value" label="金额/天" align="center"><template #default="{row, $index}"><el-form-itemv-if="row.isEditor":prop="`${$index}.value`":rules="rules.value"><el-input v-model="row.value"/></el-form-item><span v-else>{{ row.value }}</span></template></el-table-column><el-table-column label="操作" align="center"><template #default="{row, $index}"><el-button type='primary' v-if="!row.isEditor" text @click="editRow(row, $index)">编辑</el-button><el-button type="primary" v-else text @click="saveRow(row, $index)">保存</el-button><el-button type="danger" text @click="delRow(row.id, $index)">删除</el-button></template></el-table-column></el-table></el-form>

:prop=“${$index}.value” 动态的绑定,确保相应正确校验
3.完整代码

<script lang="tsx" setup>
const tableData = ref<any[]>([])
const isHasEdit = ref('1') // 1 默认没有正在编辑的, 0 有正在编辑的row,其他row不能编辑/新增
const addRow = (index: number) => {if(isHasEdit.value == '1') {tableData.value.splice(index + 1, 0, {key: "",value: "",isEditor: true})isHasEdit.value = '0'}
}const editRow = (row:any, index: number) => {// row.isEditor = true;// tableData.value[index].isEditor = trueif(isHasEdit.value == '1') {tableData.value[index].isEditor = trueisHasEdit.value = '0'}
}
const tableForm = ref();
const rules = ({key: [{ required: true, message: '请输入', trigger: 'blur' }],value: [{ required: true, message: '请输入', trigger: 'blur' }],
})
const saveRow = (row:any, index:number) => {tableForm.value?.validate(async(valid:any) => {if(valid) {row.id ? await updateConfig({...row, type: 0}) : await addConfig({...row, type: 0})tableReset()isHasEdit.value = '1'row.isEditor = false;}})}
const delRow = (id:any, index: number) => {ElMessageBox.confirm('即将删除该职级,是否继续','提示',{confirmButtonText: '确 定',cancelButtonText: '取 消',type: 'warning'}).then(async () => {isHasEdit.value = '1'if(id) { // 已保存(存入数据库)数据的删除await delConfig(id)// tableData.value.splice(index, 1)tableReset()}else { // 新增数据,没有存入数据库的数据删除tableData.value.splice(index, 1)} }).catch(()=>{isHasEdit.value = '0'})
}
</script>
<template>
<div class="tab"><el-form :model="tableData" ref="tableForm"><div class="btn"><el-button type='primary' link @click='addRow(tableData.length-1)'>新增行</el-button></div><el-table :data="tableData" stripe border header-cell-class-name='x-table-header' cell-class-name='x-table-cell'><el-table-column type="index" width="60" label="序号" align="center"></el-table-column><el-table-column prop="key" label="职级" align="center"><template #default="{row, $index}"><el-form-item v-if="row.isEditor":prop="`${$index}.key`":rules="rules.key"><el-input v-model="row.key" /></el-form-item><span v-else>{{ row.key }}</span></template></el-table-column><el-table-column prop="value" label="金额/天" align="center"><template #default="{row, $index}"><el-form-itemv-if="row.isEditor":prop="`${$index}.value`":rules="rules.value"><el-input v-model="row.value"/></el-form-item><span v-else>{{ row.value }}</span></template></el-table-column><el-table-column label="操作" align="center"><template #default="{row, $index}"><el-button type='primary' v-if="!row.isEditor" text @click="editRow(row, $index)">编辑</el-button><el-button type="primary" v-else text @click="saveRow(row, $index)">保存</el-button><el-button type="danger" text @click="delRow(row.id, $index)">删除</el-button></template></el-table-column></el-table></el-form></div>
</template>

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

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

相关文章

Redis下载历史版本

Linux版本&#xff1a; https://download.redis.io/releases/ Windows版本&#xff1a; https://github.com/tporadowski/redis/releases Linux Redis对应gcc版本

初识ElasticSearch

一、了解ES 1.1 什么是 ElasticSearch 1、ElasticSearch 是一款非常强大的开源搜索引擎&#xff0c;可以帮助我们从海量的数据中快速的找到需要的内容。 2、ElasticSearch 结合 Kibana、Logstash、Beats、也就是Elastic Stach&#xff08;ELK&#xff09;。被广泛应用在日志数…

【大数据学习 | HBASE高级】hbase-phoenix 与二次索引应用

1. hbase-phoenix的应用 1.1 概述&#xff1a; 上面我们学会了hbase的操作和原理&#xff0c;以及外部集成的mr的计算方式&#xff0c;但是我们在使用hbase的时候&#xff0c;有的时候我们要直接操作hbase做部分数据的查询和插入&#xff0c;这种原生的方式操作在工作过程中还…

Redis在高性能缓存中的应用

&#x1f493; 博客主页&#xff1a;瑕疵的CSDN主页 &#x1f4dd; Gitee主页&#xff1a;瑕疵的gitee主页 ⏩ 文章专栏&#xff1a;《热点资讯》 Redis在高性能缓存中的应用 Redis在高性能缓存中的应用 Redis在高性能缓存中的应用 引言 Redis 概述 定义与原理 发展历程 Redi…

MySQL初学之旅(3)约束

目录 1.前言 2.正文 2.1约束类型 2.2NULL约束 2.3UNIQUE约束 2.4DEFAULT约束 2.5PRIMARY KEY主键约束 2.6FOREIGN KEY外键约束 2.7CHECK约束 3.小结 1.前言 哈喽大家好啊&#xff0c;今儿来继续给大家分享最近学习的MySQL和约束相关的知识点&#xff0c;希望大家一起…

RHCE的学习(20)

变量5种赋值方式 shell中变量赋值5种方式&#xff0c;其中采用name10的方法称A 直接赋值 nameB read命令 read v1C 使用命令行参数 &#xff08;$1 $2 $3 ..&#xff09; name$1D 使用命令的输入 username$(whoami)E 从文件读取 #cut -d : -f1 /etc/passwd > /user.listfor…

Java项目实战II基于微信小程序的电子商城购物平台(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 随着互联网…

Godot的开发框架应当是什么样子的?

目录 前言 全局协程还是实例协程&#xff1f; 存档&#xff01; 全局管理类&#xff1f; UI框架&#xff1f; Godot中的异步&#xff08;多线程&#xff09;加载 Godot中的ScriptableObject 游戏流程思考 结语 前言 这是一篇杂谈&#xff0c;主要内容是对我…

【C++】深入理解 C++ 优先级队列、容器适配器与 deque:实现与应用解析

个人主页: 起名字真南的CSDN博客 个人专栏: 【数据结构初阶】 &#x1f4d8; 基础数据结构【C语言】 &#x1f4bb; C语言编程技巧【C】 &#x1f680; 进阶C【OJ题解】 &#x1f4dd; 题解精讲 目录 前言&#x1f4cc; 1. 优先级队列、容器适配器和 deque 概述✨1.1 什么是优…

SpringMVC学习笔记(一)

一、SpringMVC的基本概念 &#xff08;一&#xff09;三层架构和MVC 1、三层架构概述 我们的开发架构一般都是基于两种形式&#xff0c;一种是 C/S 架构&#xff0c;也就是客户端/服务器&#xff0c;另一种是 B/S 架构&#xff0c;也就是浏览器服务器。在 JavaEE 开发中&…

Jav项目实战II基于微信小程序的助农扶贫的设计与实现(开发文档+数据库+源码)

目录 一、前言 二、技术介绍 三、系统实现 四、文档参考 五、核心代码 六、源码获取 全栈码农以及毕业设计实战开发&#xff0c;CSDN平台Java领域新星创作者&#xff0c;专注于大学生项目实战开发、讲解和毕业答疑辅导。获取源码联系方式请查看文末 一、前言 在当前社会…

Ubuntu安装ollama,并运行ollama和通义千问,使用gradio做界面

Ubuntu安装ollama&#xff0c;并运行ollama和通义千问 安装ollama方式一&#xff1a;方式二 下载安装模型运行大模型运行ollama服务前端的实现python环境安装修改pip国内源前端页面搭建测试前后端联通设计完整的ui 安装ollama 方式一&#xff1a; 访问网站连接&#xff0c;选…

对接阿里云实人认证

对接阿里云实人认证-身份二要素核验接口整理 目录 应用场景 接口文档 接口信息 请求参数 响应参数 调试 阿里云openApi平台调试 查看调用结果 查看SDK示例 下载SDK 遇到问题 本地调试 总结 应用场景 项目有一个提现的场景&#xff0c;需要用户真实的身份信息。 …

C++ 的发展

目录 C 的发展总结&#xff1a;​编辑 1. C 的早期发展&#xff08;1979-1985&#xff09; 2. C 标准化过程&#xff08;1985-1998&#xff09; 3. C 标准演化&#xff08;2003-2011&#xff09; 4. C11&#xff08;2011年&#xff09; 5. C14&#xff08;2014年&#xf…

蓝桥杯——数组

1、移动数组元素 package day3;import java.util.Arrays;public class Demo1 {public static void main(String[] args) {int[] arr {1,2,3,4,5,6};int k 2;int[] arr_new f(arr,k);for (int i : arr_new) {System.out.print(i",");}//或System.out.println();St…

六自由度双足机器人运动控制

最近迷上了研究机器人&#xff0c;花了很多时间研究机器人的控制和交互。先后开发出来了四足四自自由度&#xff0c;四足八自由度&#xff0c;两足四自由度&#xff0c;两足六自由度机器人&#xff0c;并为他们开发了相应的大模型语音交互。通过努力&#xff0c;既锻炼了动手组…

超好用shell脚本NuShell mac安装

利用管道控制任意系统 Nu 可以在 Linux、macOS 和 Windows 上运行。一次学习&#xff0c;处处可用。 一切皆数据 Nu 管道使用结构化数据&#xff0c;你可以用同样的方式安全地选择&#xff0c;过滤和排序。停止解析字符串&#xff0c;开始解决问题。 强大的插件系统 具备强…

第9章 DIV+CSS布局作业

html代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>服务中心</title><link type"text/css" href"../css/322-1.css" rel"stylesheet"/></head><body><di…

nginx源码安装配置ssl域名

nginx源码安装 下载 wget http://nginx.org/download/nginx-1.24.0.tar.gz 解压 tar -zxvf nginx-1.24.0.tar.gz 下载openssl apt install openssl 安装nginx cd nginx-1.24.0 sudo apt-get install libpcre3 libpcre3-dev ./configure --prefix=/home/nginx24 --with-http_ss…

【Linux:IO多路复用(select、poll函数)

目录 什么是IO多路复用&#xff1f; select: 参数介绍&#xff1a; select函数返回值&#xff1a; fd_set类型&#xff1a; 内核如何更新集合中的标志位 处理并发问题 处理流程的步骤&#xff1a; poll: poll的函数原型&#xff1a; 参数介绍&#xff1a; select与p…