element tree自定义拖拽xianz

目录

功能说明:

效果图:

代码:


功能说明:

  1. 可通过拖拽改变,数据嵌套顺序
  2. 首层节点(主干):不可拖拽,不可以有同级节点
  3. 主干,限制仅有一个主干
  4. 主干:不可删除,可编辑,
  5. 子节点限制:如果节点为汉字类型就禁止添加下一级,即为末尾节点(叶子)

效果图

代码:

      <el-tree
        :data="branchFrom.data"
        default-expand-all
        draggable
        node-key="id"
        :allow-drop="allowDrop"
        :allow-drag="allowDrag">
          <span class="custom-tree-node" slot-scope="{ node, data }">
            <span>
              <span v-if="nodetotle(node.label)" 
                    style="color:#409EFF;margin-right: 10px;">{{ node.label}}</span>
                        //逻辑符号蓝色
              <span v-else style="color:#888;">{{ node.label}}</span>
            </span>
            <span>
              <el-button
              v-if="nodetotle(data.label)"
                class="el-icon-plus"
                type="text"
                size="mini"
                @click="() => append(data)">
                <!-- add -->
              </el-button>
              <el-button
                class="el-icon-edit"
                type="text"
                size="mini"
                @click="() => edit(node,data)">
                <!-- edit -->
              </el-button>
                <!-- v-if="node.label" -->
              <el-button
              v-if="branchFrom.data[0].id!==data.id"
                class="el-icon-delete"
                type="text"
                size="mini"
                @click="() => remove(node, data)">
                <!-- Delete -->
              </el-button>
            </span>
          </span>
      </el-tree>
        //页面数据
          data: [{
          id: 1,
          label: '一级 1',
          children: [{
            id: 4,
            label: '二级 1-1',
            children: [{
              id: 9,
              label: '三级 1-1-1'
            }, {
              id: 10,
              label: '三级 1-1-2'
            }]
          }]
        }],
           


      //节点类型识别
      nodetotle(a){
        return a=='and'||a=='not'||a=='or'
      },
   

     //tree数据拖拽
      allowDrop(draggingNode, dropNode, type) {
            //限制首层仅有一个节点,其他节点不可并列
            if(!dropNode.parent.parent){
              return false
            }

        if (dropNode.data.label === '二级 3-1') {
          return type !== 'inner';
        } else {
          return true;
        }
      },

      allowDrag(draggingNode) {
        //首层节点禁止拖拽
        if(draggingNode.data.id==this.data[0].id){
          this.$message({
            message: '首个逻辑禁止拖拽',
            type: 'warning'
          });
          return false
        }

        return draggingNode.data.label.indexOf('1') === -1;
      },

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值