vue-element树形控件增删改

<el-button
          type="primary"
          icon="el-icon-plus"
          style="margin: 10px"
          v-show="treeData.length == 0"
          @click.enter="addParentLevelNode"
          >新增</el-button >
        <el-tree
          :data="treeData"
          node-key="id"
          show-checkbox
          default-expand-all
          @node-click="handleLeftclick"
          :expand-on-click-node="false"
          :filter-node-method="filterNode"
          ref="tree">
          <template #default="{ node }">
            <span class="custom-tree-node">
              <span>{{ node.label }}</span>
              <span>
                <el-dropdown trigger="click">
                  <span class="el-dropdown-link">
                    <i class="el-icon-more"></i>
                  </span>
                  <template #dropdown>
                    <el-dropdown-menu>
                      <el-dropdown-item
                        v-show="firstLevel"
                        @click.enter="addSameLevelNode"
                        >新增同级</el-dropdown-item>
                      <el-dropdown-item
                        v-show="lastLevel"
                        @click.enter="addChildNode"
                        >新增下级</el-dropdown-item>
                      <el-dropdown-item @click.enter="editNode"
                        >编辑</el-dropdown-item>
                      <el-dropdown-item @click.enter="deleteNode"
                        >删除</el-dropdown-item >
                    </el-dropdown-menu>
                  </template>
                </el-dropdown>
              </span>
            </span>
          </template>
        </el-tree>
treeData: [
        {
          id: 1,
          label: "1111",
          isEdit: true,
        },
      ],
      isShow: false,
      currentData: "",
      currentNode: "",
      menuVisible: false,
      firstLevel: false,
      lastLevel: false,
      filterText: "",
      maxexpandId: 4,
handleLeftclick(data, node) {
      this.currentData = data;
      this.currentNode = node;
      if (node.level != 1) {
        //如果是根节点则不显示新增同级
        this.firstLevel = true;
      } else {
        this.firstLevel = false;
      }
      if (node.level != 3) {
        //如果是最后一级则不显示新增下级
        this.lastLevel = true;
      } else {
        this.lastLevel = false;
      }
    },
    // 增加父节点事件
    addParentLevelNode() {
      let id = Math.ceil(Math.random() * 100);
      this.$prompt("请输入父节点名称", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
      })
        .then(({ value }) => {
          let treeD = { id: id, label: value };
          this.$refs.tree.append(treeD, this.currentNode.parent);
        })
        .catch(() => {});
    },
    // 增加同级节点事件
    addSameLevelNode() {
      let id = Math.ceil(Math.random() * 100);
      this.$prompt("请输入子节点名称", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
      })
        .then(({ value }) => {
          let treeD = { id: id, label: value };
          this.$refs.tree.append(treeD, this.currentNode.parent);
        })
        .catch(() => {});
    },

    // 增加子级节点事件

    addChildNode() {
      if (this.currentNode.level >= 3) {
        this.$message.error("最多只支持三级!");
        return false;
      }
      let id = Math.ceil(Math.random() * 100);
      this.$prompt("请输入子节点名称", "提示", {
        confirmButtonText: "确定",
        cancelButtonText: "取消",
      })
        .then(({ value }) => {
          let treeD = { id: id, label: value };
          this.$refs.tree.append(treeD, this.currentNode);
        })
        .catch(() => {});
    },
    // 删除节点

    deleteNode() {
      this.$confirm(
        "确定删除'${this.currentNode.label}'节点, 是否继续?",
        "提示",
        {
          confirmButtonText: "确定",
          cancelButtonText: "取消",
          type: "warning",
        }
      )
        .then(() => {
          this.$refs.tree.remove(this.currentNode);
        })
        .catch(() => {});
    },
    //编辑节点
    editNode() {
      if (this.currentData.isEdit) {
        this.$prompt("请输入节点名称", "提示", {
          confirmButtonText: "确定",
          inputValue: this.currentNode.data.label,
          cancelButtonText: "取消",
        }).then(({ value }) => {
          this.$set(this.currentData, "label", value);
        });
      }
    },

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值