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.mzph.cn/bicheng/27829.shtml

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

相关文章

算法训练营第六十天(延长12天添加图论) | LeetCode 647 回文子串、LeetCode 516 最长回文子序列

LeetCode 67 回文子串 思路很简单&#xff0c;每一个dp[i]等于dp[i-1]加上当前字符向前直到0各个长度字符串回文串个数即可 代码如下&#xff1a; class Solution {public boolean isValid(String s) {int l 0, r s.length() - 1;while (l < r) {if (s.charAt(l) ! s.ch…

如何通过抖音自动评论精准获客实现业务增长?这些方法值得一试!

在当今竞争激烈的商业环境中&#xff0c;企业若想脱颖而出&#xff0c;就必须掌握精准获客的艺术。精准获客&#xff0c;即通过精确的市场定位和营销策略&#xff0c;吸引并保留最有可能成为客户的目标群体。它不仅能提高转化率&#xff0c;还能有效降低营销成本&#xff0c;是…

搭建自己的AI模型应用网站:JavaScript + Flask-Python + ONNX

1. 前言 本文作者以一个前端新手视角&#xff0c;部署自己的神经网络模型作为后端&#xff0c;搭建自己的网站实现应用的实战经历。目前实现的网页应用有&#xff1a; AI 语音服务主页AI 语音识别AI 语音合成AI CP号码生成器 欢迎大家试用感受&#xff0c;本文将以博客基于G…

机器人运动学笔记

一、建模 参考资料&#xff1a;https://zhuanlan.zhihu.com/p/137960186 1、三维模型和连杆、关节定义 2、设置z轴 SDH和MDH会不一样&#xff0c;主要的区别在于SDH中坐标系在连杆末端&#xff0c;MDH中坐标系在连杆首端。虽然这里只是给出z轴&#xff0c;但是由于后面原点位…

【C++】Template模板

创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞 关注支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; &#x1f525;c系列专栏&#xff1a;C/C零基础到精通 &#x1f525; 给大…

【计算机视觉】人脸算法之图像处理基础知识(五)

图像的几何变换 3.图像的旋转 图像的旋转就是让图像按照某一点旋转到指定的角度。需要确定3个参数&#xff1a;图像的旋转中心、旋转角度和缩放因子。在openv中通过getRotationMatrix2D()函数来实现图像的旋转。 import cv2 import numpy as npimgpath "images/img1.j…

CrossOver和PD虚拟机谁更强大?CrossOver和PD虚拟机应该怎么选择

在当前的虚拟化技术和应用程序兼容性解决方案中&#xff0c;CrossOver和PD虚拟机&#xff08;Parallels Desktop&#xff09;都是备受用户喜爱的选择。对于需要在非原生系统上运行应用程序的用户而言&#xff0c;选择合适的工具尤为重要。那么&#xff0c;CrossOver和PD虚拟机谁…

Java SSTI服务端模版注入漏洞原理与利用

文章目录 前言Velocity基础语法基础示例命令执行 靶场实践漏洞代码漏洞验证检测工具 FreeMarker基础示例漏洞示例CMS案例 Thymeleaf基础示例漏洞示例安全方案 总结 前言 SSTI&#xff08;Server Side Template Injection&#xff09;全称服务端模板注入漏洞&#xff0c;在 Jav…

挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构

目标 在清晨的代码编辑器上&#xff0c;一场新的挑战即将开始。程序员们肃立于安静的办公室&#xff0c;眼神专注地盯着屏幕&#xff0c;等待着编译器的一声提示。 随着编译器输出的激动人心的"start!"的提示&#xff0c;战斗的序幕拉开了。Bug如潮水般涌来&#x…

python保存文件后打不开的原因是什么

引入数据集&#xff0c;奇怪的是怎么也打不开&#xff0c;显示不存在这个文件&#xff1a; 但是&#xff0c;我将文件改个名字&#xff0c;就打开了&#xff0c;难道csv的文件命名必须有一定合法性&#xff1f; import pandas users pandas.read_csv("H:\python\data an…

正运动邀您共聚2024深圳激光展,助力激光加工与智能制造!

■展会名称 2024深圳激光展 ■展会日期 2024年6月19日 - 21日 ■展馆地点 深圳国际会展中心&#xff08;新馆&#xff09; ■展位号 9H - D101 6月19至21日&#xff0c;深圳激光展将在中国深圳国际会展中心(新馆)举办。 激光加工在消费电子、光伏锂电新能源、半导体等行…

树莓派4B_OpenCv学习笔记9:图片的腐蚀与膨胀

今日继续学习树莓派4B 4G&#xff1a;&#xff08;Raspberry Pi&#xff0c;简称RPi或RasPi&#xff09; 本人所用树莓派4B 装载的系统与版本如下: 版本可用命令 (lsb_release -a) 查询: Opencv 版本是4.5.1&#xff1a; 图像的膨胀与腐蚀一般用于灰度图或者二值图,今日便来学习…

湘潭大学软件工程数据库2(题型,复习资源和计划)

文章目录 选择题关系范式事务分析E-R 图sql作业题答案链接&#xff08;仅限有官方答案的版本&#xff09;结语 现在实验全部做完了&#xff0c;实验和作业占比是百分之 40 &#xff0c;通过上图可以看出来&#xff0c;重点是 sql 语言 所以接下来主要就是学习 sql 语句怎么书写…

软考 系统架构设计师系列知识点之杂项集萃(36)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之杂项集萃&#xff08;35&#xff09; 第58题 对软件体系结构风格的研究和实践促进了对设计的复用。Garlan和Shaw对经典体系结构风格进行了分类。其中&#xff0c;&#xff08; &#xff09;属于数据流体系结构风格&am…

孝子黄香与颍川□董超

“香九龄&#xff0c;能温席&#xff0c;孝于亲&#xff0c;所当执。”家喻户晓、妇孺皆知的《三字经》让孝子黄香名扬千秋&#xff0c;成为“二十四孝”中闻名于世的“扇枕温衾”故事的主角。 黄香&#xff08;公元68—122年&#xff09;&#xff0c;字文强&#xff0c;东汉江…

【Apache Doris】Compaction 原理 | 实践全析

【Apache Doris】Compaction 原理 | 实践全析 一、Compaction 前文概要二、Compaction 版本策略三、Compaction 类型说明四、Compaction 工程实现五、Compaction 生产实践 作者 &#xff5c; 俞剑波 一、Compaction 前文概要 LSM-Tree 简介 LSM-Tree&#xff08; Log Structu…

【Vue】Pinia管理用户数据

Pinia管理用户数据 基本思想&#xff1a;Pinia负责用户数据相关的state和action&#xff0c;组件中只负责触发action函数并传递参数 步骤1&#xff1a;创建userStore 1-创建store/userStore.js import { loginAPI } from /apis/user export const useUserStore defineStore(…

大众点评js逆向过程(未完)

1、这里mtgsig已经被拼到url中 2、进入后mtgsig已经计算完&#xff0c; ir he(this[b(4326)], !1), 就是加密函数 32 次 796 1143 ->508 -> 754 -> 1151 160 注意IC这个数组 控制流平坦化进行AST 解析 AST网址

uniapp开发微信小程序问题汇总

1. 自定义校验规则validateFunction失效 2. 微信小程序不支持<Br>换行 在 <text></text> 标签中使用\n(必须 text 标签&#xff0c;view 标签无效 ) 3. 微信小程序无法使用本地静态资源图片的解决方法 (1) 将图片上传到服务器&#xff0c;小程序访问该图片…

MySQL基础——函数和约束

目录 1函数 1.1字符串函数 1.2数值函数 1.3日期函数 1.4流程函数 2约束 2.1约束概述和演示 2.2外键约束&#xff08;表连接键&#xff09; 1函数 函数是指一段可以直接被另一段程序调用的程序或代码。 1.1字符串函数 MySQL中内置了很多字符串函数&#xff0c;常用的…