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


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

    代码:

    1. <script lang="ts" setup>
    2. import { ref } from 'vue'
    3. const tableData = ref([
    4. {
    5. id: 1,
    6. date: '2016-05-02',
    7. name: 'wangxiaohu',
    8. address: 'No. 189, Grove St, Los Angeles',
    9. },
    10. {
    11. id: 2,
    12. date: '2016-05-04',
    13. name: 'wangxiaohu',
    14. address: 'No. 189, Grove St, Los Angeles',
    15. },
    16. {
    17. id: 3,
    18. date: '2016-05-01',
    19. name: 'wangxiaohu',
    20. address: 'No. 189, Grove St, Los Angeles',
    21. children: [
    22. {
    23. id: 31,
    24. date: '2016-05-01',
    25. name: 'wangxiaohu',
    26. address: 'No. 189, Grove St, Los Angeles',
    27. },
    28. {
    29. id: 32,
    30. date: '2016-05-01',
    31. name: 'wangxiaohu',
    32. address: 'No. 189, Grove St, Los Angeles',
    33. },
    34. ],
    35. },
    36. {
    37. id: 4,
    38. date: '2016-05-03',
    39. name: 'wangxiaohu',
    40. address: 'No. 189, Grove St, Los Angeles',
    41. },
    42. ])
    43. // 平级新增递归的方法
    44. const addLeaveLoop = (arr: any[], id: number | string) => {
    45. for (let i = 0; i < arr.length; i++) {
    46. if (arr[i].id === id) {
    47. arr.splice(i + 1, 0, { id: +new Date(), date: '2023-11-03', name: '辉辉', address: 'dashjdsakljdl' })
    48. } else if (arr[i].children) {
    49. arr[i].children = addLeaveLoop(arr[i].children, id)
    50. }
    51. }
    52. return arr
    53. }
    54. // 新增平级
    55. const add = (row: any) => {
    56. addLeaveLoop(tableData.value, row.id)
    57. }
    58. // 新增一个子节点的方法
    59. const addSonLoop = (arr: any[], id: number | string) => {
    60. for (let i = 0; i < arr.length; i++) {
    61. if (arr[i].id === id) {
    62. // 判断有没有children,有就前面新增,没有就创建
    63. if (arr[i].children && arr[i].children.length) {
    64. arr[i].children.unshift({ id: +new Date(), date: '2023-11-03', name: '张三', address: 'dashjdsakljdl' })
    65. } else {
    66. arr[i].children = [{ id: +new Date(), date: '2023-11-03', name: '李四', address: 'dashjdsakljdl' }]
    67. }
    68. } else if (arr[i].children) {
    69. arr[i].children = addSonLoop(arr[i].children, id)
    70. }
    71. }
    72. return arr
    73. }
    74. // 新增子级
    75. const addSon = (row: any) => {
    76. addSonLoop(tableData.value, row.id)
    77. }
    78. // 删除递归的方法
    79. const delLoop = (arr: any[], id: number | string) => {
    80. for (let i = 0; i < arr.length; i++) {
    81. if (arr[i].id === id) {
    82. arr.splice(i, 1)
    83. } else if (arr[i].children) {
    84. arr[i].children = delLoop(arr[i].children, id)
    85. }
    86. }
    87. return arr
    88. }
    89. // 删除
    90. const delItem = (row: any) => {
    91. delLoop(tableData.value, row.id)
    92. }
    93. script>

  • 相关阅读:
    Vue3 实现文件预览 Word Excel pdf 图片 视频等格式 大全!!!!
    Android:OkHttp同步请求和异步请求
    mysql的行列互转
    Pytorch 复习总结 3
    Wi-Fi 6还没用上,Wi-Fi 7就要来了?
    [杂项]从子域名接管到Subtaker
    Go坑:time.After可能导致的内存泄露问题分析
    实现一个小功能,原生js点击图片上传图片并切换
    Android - Application
    WordPress Mixed Content混合内容警告:4 种简单的修复方法
  • 原文地址:https://blog.csdn.net/qq_52845451/article/details/134196633