表格树插入子目录、后方添加目录、前方添加目录、上移、下移、升级、降级、条目重新排序

本文介绍了前端如何在不调用接口的情况下,实现表格树结构的目录重编功能,包括上移、下移、升级、降级、插入子目录以及前后方插入目录的操作方法和相应的函数实现。
摘要由CSDN通过智能技术生成

在这里插入图片描述

图为表格树,在不调用接口的情况下,前端进行目录重编,上移、下移、升级、降级、插入目录功能。

插入子目录

// 插入子目录
 reviewItemInsertChild(list, row){
   if(list.some(item => row.id == item.id)){
     list.forEach((element, i) => {
       if(element.id == row.id){
         list[i] = row;
       }
     });
   }else{
     list.forEach(element => {
       if(element.children){
         this.reviewItemInsertChild(element.children, row)
       }
     });
   }

   return list;
 },

前后方插入目录

// 前方后方插入目录
  reviewItemInsert(list, row, currentItem){
    if(list.some(item => row.parentItemId == item.parentItemId)){
      let _index = 0;
      for (let i = 0; i < list.length; i++) {
        if(currentItem.id == list[i].id){
          _index = i;
          break;
        }
      }

      if(this.reviewItemsType == "rearInsert"){
        _index++;
      }

      list.splice(_index, 0, row);

    }else{
      list.forEach(element => {
        if(element.children){
          this.reviewItemInsert(element.children, row, currentItem)
        }
      });
    }

    return this.reviewItemChildItemNo(list);
  },

条目重拍

// 条目重排
 reviewItemChildItemNo(list, itemNo){
   list.forEach((element,i) => {
     if(element.itemIndent == 0){
       element.itemNo = i + 1;
     }else{
       element.itemNo = itemNo + '.' + (i+1);
     }

     if(element.children && element.children.length > 0){
       this.reviewItemChildItemNo(element.children, element.itemNo)
     }

   });

   return list;
 },

上移下移

// 上移下移
  reviewItemMove(list, currentItem){
    for (let i = 0; i < list.length; i++) {
      const element = list[i];
      if(currentItem.id == element.id){
        if(i != 0 && this.reviewItemsType == "moveUp"){
          list[i] = list.splice(i-1, 1, list[i])[0];
        }

        if(i != list.length - 1 && this.reviewItemsType == "moveDown"){
          list[i] = list.splice(i+1, 1, list[i])[0];
        }
        break;
      }
      if(element.children){
        this.reviewItemMove(element.children, currentItem);
      }
    }

    return this.reviewItemChildItemNo(list);
  },

条目升级

// 条目升级
  reviewItemUpgrade(list, currentItem, parentItemList, parentItemIndex){
    if(list.some(item => item.id == currentItem.id)){
      list.forEach((element,index) => {
        if(element.id == currentItem.id){
          list.splice(index,1);
        }
      });
      currentItem.itemIndent--;
      parentItemIndex++;
      parentItemList.splice(parentItemIndex, 0, currentItem);
    }else{
      list.forEach((element,index) => {
        this.reviewItemUpgrade(element.children, currentItem, list, index);
      })
    }

    return this.reviewItemChildItemNo(list);
  },

条目降级

// 条目降级
  reviewItemDownGrade(list, currentItem){
    if(list.some(item => item.id == currentItem.id)){
      list.forEach((element,index) => {
        if(element.id == currentItem.id){
          list.splice(index,1);

          if(!list[index-1].children){
            list[index-1].children = [];
          }
          currentItem.itemIndent++
          list[index-1].children.push(currentItem);
        }
      });
    }else{
      list.forEach((element,index) => {
        this.reviewItemDownGrade(element.children, currentItem, list, index);
      })
    }

    return this.reviewItemChildItemNo(list);
  },

写的可能有点小瑕疵,请多多指正!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值