• 结合组件库实现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>

  • 相关阅读:
    el-tooltip在el-table-column的使用
    安卓Frida 脱壳
    String到底能不能改变?
    淘宝客系统开发
    【分类网络】VGG
    【Webpack】样式处理 - 样式预处理
    Android 单ABI架构适配指南:保姆级教学 INSTALL_FAILED_NO_MATCHING_ABIS
    10.3使用Servlet写一个表白墙网站
    超市购物车功能
    Vue插件(Plugin)、动态组件(component)和混入(mixin)介绍
  • 原文地址:https://blog.csdn.net/qq_52845451/article/details/134196633