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

结合组件库实现table组件树状数据的增删改

如图所示,可以实现树状数据的新增子项,新增平级,删除。主要用到了递归

代码:

<template><el-table :data="tableData" style="width: 100%; margin-bottom: 20px" row-key="id" border default-expand-all><el-table-column prop="date" label="Date" /><el-table-column prop="name" label="Name" /><el-table-column prop="address" label="Address" /><el-table-column label="Operations"><template #default="scope"><el-button size="small" @click="add(scope.row)">新增平级</el-button><el-button size="small" @click="addSon(scope.row)">新增子级</el-button><el-button size="small" type="danger" @click="delItem(scope.row)">删除</el-button></template></el-table-column></el-table>
</template><script lang="ts" setup>
import { ref } from 'vue'const tableData = ref([{id: 1,date: '2016-05-02',name: 'wangxiaohu',address: 'No. 189, Grove St, Los Angeles',},{id: 2,date: '2016-05-04',name: 'wangxiaohu',address: 'No. 189, Grove St, Los Angeles',},{id: 3,date: '2016-05-01',name: 'wangxiaohu',address: 'No. 189, Grove St, Los Angeles',children: [{id: 31,date: '2016-05-01',name: 'wangxiaohu',address: 'No. 189, Grove St, Los Angeles',},{id: 32,date: '2016-05-01',name: 'wangxiaohu',address: 'No. 189, Grove St, Los Angeles',},],},{id: 4,date: '2016-05-03',name: 'wangxiaohu',address: 'No. 189, Grove St, Los Angeles',},
])// 平级新增递归的方法
const addLeaveLoop = (arr: any[], id: number | string) => {for (let i = 0; i < arr.length; i++) {if (arr[i].id === id) {arr.splice(i + 1, 0, { id: +new Date(), date: '2023-11-03', name: '辉辉', address: 'dashjdsakljdl' })} else if (arr[i].children) {arr[i].children = addLeaveLoop(arr[i].children, id)}}return arr
}
// 新增平级
const add = (row: any) => {addLeaveLoop(tableData.value, row.id)
}// 新增一个子节点的方法
const addSonLoop = (arr: any[], id: number | string) => {for (let i = 0; i < arr.length; i++) {if (arr[i].id === id) {// 判断有没有children,有就前面新增,没有就创建if (arr[i].children && arr[i].children.length) {arr[i].children.unshift({ id: +new Date(), date: '2023-11-03', name: '张三', address: 'dashjdsakljdl' })} else {arr[i].children = [{ id: +new Date(), date: '2023-11-03', name: '李四', address: 'dashjdsakljdl' }]}} else if (arr[i].children) {arr[i].children = addSonLoop(arr[i].children, id)}}return arr
}
// 新增子级
const addSon = (row: any) => {addSonLoop(tableData.value, row.id)
}// 删除递归的方法
const delLoop = (arr: any[], id: number | string) => {for (let i = 0; i < arr.length; i++) {if (arr[i].id === id) {arr.splice(i, 1)} else if (arr[i].children) {arr[i].children = delLoop(arr[i].children, id)}}return arr
}
// 删除
const delItem = (row: any) => {delLoop(tableData.value, row.id)
}
</script>

相关文章:

  • 向量数据库的崛起与多元化场景创新
  • spring boot导入导出excel,集成EasyExcel
  • CMake引用OSG
  • react使用react-sortable-hoc实现拖拽
  • 海外媒体发稿:如何利用8种出口贸易媒体发稿实现销售突破-华媒舍
  • 路由器基础(七):NAT原理与配置
  • 数据中心系统解决方案
  • XXL-JOB 默认 accessToken 身份绕过导致 RCE
  • 计算机视觉基础——基于yolov5-face算法的车牌检测
  • dubbo集群容错策略
  • mediasoup webrtc音视频会议搭建
  • 【KVM】软件虚拟化和硬件虚拟化类型
  • JavaScript执行上下文和调用栈
  • chrome 扩展 popup 弹窗的使用
  • 微信小程序 uCharts的使用方法
  • [译]CSS 居中(Center)方法大合集
  • create-react-app做的留言板
  • hadoop入门学习教程--DKHadoop完整安装步骤
  • iBatis和MyBatis在使用ResultMap对应关系时的区别
  • iOS 颜色设置看我就够了
  • Median of Two Sorted Arrays
  • React 快速上手 - 07 前端路由 react-router
  • SpriteKit 技巧之添加背景图片
  • Vue.js-Day01
  • 阿里云Kubernetes容器服务上体验Knative
  • 马上搞懂 GeoJSON
  • 少走弯路,给Java 1~5 年程序员的建议
  • 听说你叫Java(二)–Servlet请求
  • 如何用纯 CSS 创作一个货车 loader
  • #NOIP 2014# day.1 生活大爆炸版 石头剪刀布
  • ( 10 )MySQL中的外键
  • (1/2)敏捷实践指南 Agile Practice Guide ([美] Project Management institute 著)
  • (附源码)springboot车辆管理系统 毕业设计 031034
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (附源码)计算机毕业设计SSM基于java的云顶博客系统
  • (十六)一篇文章学会Java的常用API
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (完整代码)R语言中利用SVM-RFE机器学习算法筛选关键因子
  • (转)fock函数详解
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .net core Swagger 过滤部分Api
  • .Net CoreRabbitMQ消息存储可靠机制
  • .Net Web窗口页属性
  • .Net 路由处理厉害了
  • .net开发引用程序集提示没有强名称的解决办法
  • /3GB和/USERVA开关
  • @Pointcut 使用
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [Android Pro] listView和GridView的item设置的高度和宽度不起作用
  • [AX]AX2012开发新特性-禁止表或者表字段
  • [Big Data - Kafka] kafka学习笔记:知识点整理
  • [C进阶] 数据在内存中的存储——浮点型篇
  • [DevEpxress]GridControl 显示Gif动画
  • [EFI]Dell Latitude-7400电脑 Hackintosh 黑苹果efi引导文件
  • [javaSE] GUI(Action事件)