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

  • 相关阅读:
    Kaldi语音识别技术(四) ----- 完成G.fst的生成
    类和对象(上)
    机器学习:基于Python实现人工神经网络训练过程
    WorkPlus AI智能助理,基于GPT为企业提供专属的私有化部署解决方案
    百度搜索清理大量低质量网站
    《网络协议》07. 其他协议
    60道Python常见面试题,做对80% Offer任你挑!
    22 OpenCV 直方图计算
    CSDN第11期周赛题解
    回归预测 | MATLAB实现贝叶斯优化门控循环单元(BO-GRU)多输入单输出
  • 原文地址:https://blog.csdn.net/qq_52845451/article/details/134196633