vxe-table表格新增节点

做前端的朋友可以参考下:也可结合实际需求查看相应的官方文档

效果图

附上完整代码

<template><div><vxe-toolbar ref="toolbarRef" :refresh="{queryMethod: searchMethod}" export print custom><template #buttons><vxe-button @click="insertEvent">新增</vxe-button><vxe-button @click="getInsertEvent">获取新增</vxe-button><vxe-button @click="getRemoveEvent">获取删除</vxe-button><vxe-button @click="getUpdateEvent">获取修改</vxe-button><vxe-button @click="setTreeEvent">展开</vxe-button></template></vxe-toolbar><vxe-tableshow-overflowkeep-sourceref="tableRef":row-config="{keyField: 'id'}":column-config="{resizable: true}":print-config="{}":export-config="{}":loading="loading":tree-config="{transform: true, rowField: 'id', parentField: 'parentId',iconOpen: 'vxe-icon-square-minus',iconClose: 'vxe-icon-square-plus'}":edit-config="{trigger: 'click', autoClear:false, mode: 'row', showStatus: true}":data="tableData"><vxe-column type="checkbox" width="60"></vxe-column><vxe-column field="name" title="ID" tree-node></vxe-column><vxe-column field="size" title="Size" width="100" :edit-render="{}"><template #edit="{ row }"><vxe-input v-model="row.size" mode="text"></vxe-input></template></vxe-column><vxe-column field="date" title="Date" :edit-render="{}"><template #edit="{ row }"><vxe-input v-model="row.date" type="date" transfer></vxe-input></template></vxe-column><vxe-column title="操作" width="640"><template #default="{ row }"><vxe-button mode="text" status="primary" @click="insertRow(row, 'current')">当前位置插入</vxe-button><vxe-button mode="text" status="primary" @click="insertNextRow(row, 'current')">下一行插入</vxe-button><vxe-button mode="text" status="primary" @click="insertRow(row, 'top')">顶部插入</vxe-button><vxe-button mode="text" status="primary" @click="insertRow(row, 'bottom')">尾部插入</vxe-button><vxe-button mode="text" status="danger" @click="removeRow(row)">删除</vxe-button><vxe-button mode="text" status="danger" @click="saveRowEvent(row)">保存</vxe-button><vxe-button mode="text" status="danger" @click="cancelRowEvent(row)">取消</vxe-button></template></vxe-column></vxe-table></div>
</template><script setup>
import { ref, nextTick } from 'vue'
import { VxeUI } from 'vxe-table'
const loading = ref(false)
const tableData = ref([])
const tableRef = ref()
const toolbarRef = ref()
const findList = () => {loading.value = truereturn new Promise(resolve => {setTimeout(() => {tableData.value = [{ id: 10000, parentId: null, name: 'vxe-table test abc1', type: 'mp3', size: 1024, date: '2020-08-01' },{ id: 10050, parentId: null, name: 'Test2', type: 'mp4', size: 0, date: '2021-04-01' },{ id: 24300, parentId: 10050, name: 'Test3', type: 'avi', size: 1024, date: '2020-03-01' },{ id: 20045, parentId: 24300, name: 'vxe-table test abc4', type: 'html', size: 600, date: '2021-04-01' },{ id: 10053, parentId: 24300, name: 'vxe-table test abc96', type: 'avi', size: 0, date: '2021-04-01' },{ id: 24330, parentId: 10053, name: 'vxe-table test abc5', type: 'txt', size: 25, date: '2021-10-01' },{ id: 21011, parentId: 10053, name: 'Test6', type: 'pdf', size: 512, date: '2020-01-01' },{ id: 22200, parentId: 10053, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' },{ id: 23666, parentId: null, name: 'Test8', type: 'xlsx', size: 2048, date: '2020-11-01' },{ id: 23677, parentId: 23666, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' },{ id: 23671, parentId: 23677, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' },{ id: 23672, parentId: 23677, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' },{ id: 23688, parentId: 23666, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' },{ id: 23681, parentId: 23688, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' },{ id: 23682, parentId: 23688, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' },{ id: 24555, parentId: null, name: 'vxe-table test abc9', type: 'avi', size: 224, date: '2020-10-01' },{ id: 24566, parentId: 24555, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' },{ id: 24577, parentId: 24555, name: 'Test7', type: 'js', size: 1024, date: '2021-06-01' }]loading.value = falseresolve(null)}, 300)})
}
const searchMethod = () => {const $table = tableRef.valueif ($table) {// 清除所有状态$table.clearAll()return findList()}return Promise.resolve()
}
const insertRow = async (currRow, locat) => {const $table = tableRef.valueif ($table) {const date = new Date()// 如果 null 则插入到目标节点顶部// 如果 -1 则插入到目标节点底部// 如果 row 则有插入到效的目标节点该行的位置const rid = Date.now()if (locat === 'current') {const record = {name: `${rid}`,id: rid,parentId: currRow.parentId,date: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`}const { row: newRow } = await $table.insertAt(record, currRow)await $table.setEditRow(newRow) // 插入子节点} else if (locat === 'top') {const record = {name: `新数据${rid}`,id: rid,parentId: currRow.id,date: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`}const { row: newRow } = await $table.insert(record)await $table.setTreeExpand(currRow, true) // 将父节点展开await $table.setEditRow(newRow) // 插入子节点} else if (locat === 'bottom') {const record = {name: `新数据${rid}`,id: rid,parentId: currRow.id,date: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`}const { row: newRow } = await $table.insertAt(record, -1)await $table.setTreeExpand(currRow, true) // 将父节点展开await $table.setEditRow(newRow) // 插入子节点}}
}
const insertNextRow = async (currRow, locat) => {const $table = tableRef.valueif ($table) {const date = new Date()// 如果 null 则插入到目标节点顶部// 如果 -1 则插入到目标节点底部// 如果 row 则有插入到效的目标节点该行的位置const rid = Date.now()if (locat === 'current') {const record = {name: `新数据${rid}`,id: rid,parentId: currRow.parentId,date: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`}const { row: newRow } = await $table.insertNextAt(record, currRow)await $table.setEditRow(newRow) // 插入子节点}}
}
const removeRow = async (row) => {const $table = tableRef.valueif ($table) {await $table.remove(row)}
}
//保存(单前行数据)
const saveRowEvent = (rows) => {const { row } = rowsconst $table = tableRef.valueif ($table) {$table.clearEdit()/* .then(() => {getSelectRowToUpdate()})*/}
}//取消
const cancelRowEvent = async  (rows) => {console.log(rows,'--->>>.rowsrows');const { row } = rowsconst $table = tableRef.valueif ($table) {await $table.clearEdit()// 还原数据await $table.revertData(rows)}
}
// 展开第一个
const setTreeEvent = () => {const $table = tableRef.valueif ($table) {$table.setTreeExpand([tableData.value[1],tableData.value[2]], true)}
}const insertEvent = async () => {const $table = tableRef.valueif ($table) {const date = new Date()const rid = Date.now()const record = {name: `新数据${rid}`,id: rid,parentId: null,date: `${date.getFullYear()}-${date.getMonth() + 1}-${date.getDate()}`}const { row: newRow } = await $table.insert(record)await $table.setEditRow(newRow)}
}
const getInsertEvent = () => {const $table = tableRef.valueif ($table) {const insertRecords = $table.getInsertRecords()VxeUI.modal.alert(`新增:${insertRecords.length}`)}
}
const getRemoveEvent = () => {const $table = tableRef.valueif ($table) {const removeRecords = $table.getRemoveRecords()VxeUI.modal.alert(removeRecords.length)}
}
const getUpdateEvent = () => {const $table = tableRef.valueif ($table) {const updateRecords = $table.getUpdateRecords()VxeUI.modal.alert(`更新:${updateRecords.length}`)}
}
nextTick(() => {// 将表格和工具栏进行关联const $table = tableRef.valueconst $toolbar = toolbarRef.valueif ($table && $toolbar) {$table.connect($toolbar)}findList()
})
</script>

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

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

相关文章

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 生成哈夫曼树(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 生成哈夫曼树(100分) 🌍 评测功能需要订阅专栏后私信联系清…

FinGPT:12.3k 星星!金融领域的开源大模型来了!

✨点击这里✨&#xff1a;&#x1f680;原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; FinGPT&#xff1a;12.3k 星星&#xff01;金融领域的开源大模型来了&#xff01; &#x1f31f;如…

C语言概述与历史

引言 C语言是一门历史悠久且影响深远的编程语言。它不仅为后继的许多编程语言奠定了基础&#xff0c;同时因其高效性和灵活性在系统编程和嵌入式开发领域得到了广泛应用。本篇文章将全面介绍C语言的起源与发展、设计目标与理念&#xff0c;以及C语言的标准演化历程&#xff0c;…

IT入门知识博客文章大纲第一部分《IT基础知识》(1/10)

目录 IT入门知识博客文章大纲第一部分《IT基础知识》&#xff08;1/10&#xff09; 1.引言 2.第一部分&#xff1a;IT基础知识 2.1 计算机硬件 CPU&#xff1a;计算机的心脏 内存&#xff1a;数据的临时居所 存储设备&#xff1a;数据的长期仓库 输入输出设备&#xff1…

Lua实现自定义函数面向对象编程

本文目录 1、引言2、原理3、实例4、层析验证 文章对应视频教程&#xff1a; 暂无&#xff0c;可以关注我的B站账号等待更新。 点击图片或链接访问我的B站主页~~~ 1、引言 在现代软件开发中&#xff0c;面向对象编程&#xff08;OOP&#xff09;已经成为一种广泛使用的编程范式…

海外仓系统如何让海外仓受益,WMS海外仓系统使用指南

随着跨境电商业务的快速发展&#xff0c;海外仓面临着需要更加高速运转的巨大挑战。 当海外仓出现因为手动作业导致效率低下&#xff0c;成本不断飙升或者出现库存管理问题的时候&#xff0c;意味着是时候引入一套合适的海外仓管理系统了。 对于寻求海外仓业务流程优化的企业…

Java17 --- RabbitMQ之插件使用

目录 一、Federation插件 1.1、运行两个rabbitmq实例 1.2、启用插件 1.3、在下游端点添加上游端点 1.4、创建策略 1.6、测试 二、联邦队列 2.1、创建策略 2.2、创建交换机与队列 2.2.1、创建52000的队列与交换机 2.2.2、创建62000的队列 三、Shovel 3.1、启…

力控算法每日一练:209. 长度最小的子数组(java)

给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c;返回 0 。 class Solution {public int minSu…

Docker镜像技术剖析

目录 1、概述1.1 什么是镜像&#xff1f;1.2 联合文件系统UnionFS1.3 bootfs和rootfs1.4 镜像结构1.5 镜像的主要技术特点1.5.1 镜像分层技术1.5.2 写时复制(copy-on-write)策略1.5.3 内容寻址存储(content-addressable storage)机制1.5.4 联合挂载(union mount)技术 2.机制原理…

技术转管理,是灾难还是奇迹?

深耕技术or转战管理&#xff1f;this is a question! 如果你还没有想好&#xff0c;那请继续往下看&#xff01; 技术专家&#xff1a;技术前瞻者、方案构建者、难题破解者、团队聚核者 管理专家&#xff1a;战略规划者、高效组织者、变革引领者、团队建设者 特点和重心都不在…

Unity动态添加聊天文本

1.创建一个滚动视图 2.调整滚动视图的位置并删掉这个 3.创建一个输入框和一个按钮 这里插一句一定要给content添加这个组件并设置单元格大小 4创建一个脚本并编写下面代码 using System.Collections; using System.Collections.Generic; using TMPro; using Unity.VisualScrip…

C#的Switch语句(在C#中如何根据结果执行不同的代码)

文章目录 基本语法示例 注意使用goto跳转其他标签 基本语法 switch语句是一种选择结构&#xff0c;用于基于某个表达式的值执行不同的代码块。它提供了一种更简洁、更易读的方式来处理多路分支逻辑&#xff0c;相比于多个嵌套的if…else if…else语句。下面是switch语句的基本…

排序算法、堆排序、大顶堆、小顶堆、手写快排-215. 数组中的第K个最大元素、2336. 无限集中的最小数字

目录 215. 数组中的第K个最大元素 题目链接及描述 题目分析 堆排序分析 堆排序代码编写 快排分析 快排代码编写 2336、无限集中的最小数字 题目链接及描述 题目分析 代码编写 215. 数组中的第K个最大元素 题目链接及描述 215. 数组中的第K个最大元素 - 力扣&#…

前端菜鸡流水账日记 -- pnpm的学习

哈咯哇大家&#xff0c;我又来了&#xff0c;最近稍微悠闲一些&#xff0c;所以就趁着这个机会学习一些新的知识&#xff0c;今天就是碰巧遇到了pnm&#xff0c;这个可以看作是npm的升级版本&#xff0c;比npm要快&#xff0c;用起来也更得劲更迅速 官网地址&#xff1a;https…

ArrayList集合+综合案例

数组与集合的区别 ArrayList 概述 是java编写好的一个类,用于表示一个容器,使用的时候,需要注意指定容器中元素的数据类型;(如果不指定,语法不报错,但是取值的时候不方便)注意事项 使用的时候,写ArrayList<元素的数据类型>的数据类型的时候,带着泛型;使用ArrayList集合…

智能资产时代:探索Web3对数字资产的变革

随着科技的不断进步&#xff0c;数字资产的概念已经深入人心。从最初的比特币到如今的多样化数字资产&#xff0c;技术的革新改变了我们对资产的理解和管理方式。作为新一代互联网的核心&#xff0c;Web3正在引领一场关于数字资产的革命。本文将深入探讨Web3如何变革数字资产&a…

达梦数据库备份还原(RPO/RTO)

不带归档的还原&#xff08;还原到备份集的状态&#xff09; 本文使用作业备份数据库数据Linux环境 备份 1.创建代理环境 2.创建作业&#xff08;图片从左到右依次创建&#xff09; 注意备份的路径选择好 这里可以查询备份作业日志 还原 关闭数据库 在终端切换到达梦的bin…

防止Selenium被检测 Google Chrome 125

背景 最近在使用selenium自动播放学习课程&#xff0c;相信大家也有一些类似的使用场景。 能自动化的事情&#xff0c;绝不自己干。 为防止被检测是机器人做题&#xff0c;刷视频&#xff0c;需要做一些小调整。 先来看作为服务方维护者&#xff0c;是如何检测是Selenium打…

Coolify:24.2K 星星!使用全新、开源免费且自托管的替代方案,部署应用程序的最佳工具(停止使用 Vercel)

✨点击这里✨&#xff1a;&#x1f680;原文链接&#xff1a;&#xff08;更好排版、视频播放、社群交流、最新AI开源项目、AI工具分享都在这个公众号&#xff01;&#xff09; Coolify&#xff1a;24.2K 星星&#xff01;使用全新、开源免费且自托管的替代方案&#xff0c;部…

[Python学习篇] Python字符串

字符串是 Python 中最常用的数据类型&#xff0c;一般使用单引号或引号来创建字符串 语法&#xff1a; 字符串变量名A 字符串变量值A 字符串变量名B "字符串变量值B" 示例&#xff1a; a Hello A print(a) b "Hello B" print(b) 字符串特征 一对引号字…