ant design vue 右键点击菜单实现树tree 增删改查

实现思路:

vue的实现思路和前面写的react版本的是一样的…

ant design vue 有一个右键点击的API @rightClick, 所以想自己扩展基于树结构的增删改查功能还是蛮简单的。

我这里实现的是,右键点击会出现操作图标,增加、删除按钮会弹出相应的操作弹窗。

因为本人觉得这个增删改菜单长得实在是太丑了,所以我对样式进行了改造,具体可以看下一篇文章:点击查看。

效果展示:
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
部分代码实现:

因为项目里还有设计其他的业务逻辑,这里只展示了核心代码。

html:

  <a-card :bordered="false" @click="clearMenu" class="card-box">
        <a-tree
          v-if="treeData.length>0"
          :treeData="treeData"
          :defaultExpandAll="true"
          @select="this.onSelect"
          @rightClick="this.onRightClick"
        >a-tree>
        <div :style="this.tmpStyle" v-if="this.NodeTreeItem">
          <div class="menu-item" @click="orgAdd">
            <a-tooltip placement="bottom" title="新增子组织">
              <a-icon type="plus-circle-o" />
            a-tooltip>
          div>
          <div class="menu-item" @click="orgEdit">
            <a-tooltip placement="bottom" title="修改">
              <a-icon type="edit" />
            a-tooltip>
          div>
          <div class="menu-item" @click="orgDelete" v-if="this.NodeTreeItem.parentOrgId">
            <a-tooltip placement="bottom" title="删除">
              <a-icon type="minus-circle-o" />
            a-tooltip>
          div>
        div>
a-card>

js:

export default {
  data () {
    return {
      NodeTreeItem: null, // 右键菜单
      tmpStyle: '',
      treeData: []
     }
  },
  methods: {
    onSelect (selectedKeys, info) {
      this.queryParam = {
        orgId: selectedKeys[0]
      };
      // 写自己的业务逻辑
      // this.$refs.table.refresh(true);
    },
    onRightClick ({ event, node }) {
      const x =
        event.currentTarget.offsetLeft + event.currentTarget.clientWidth;
      const y = event.currentTarget.offsetTop;
      this.NodeTreeItem = {
        pageX: x,
        pageY: y,
        id: node._props.eventKey,
        title: node._props.title,
        parentOrgId: node._props.dataRef.parentOrgId || null
      };
      this.tmpStyle = {
        position: 'absolute',
        maxHeight: 40,
        textAlign: 'center',
        left: `${x + 10 - 0}px`,
        top: `${y + 6 - 0}px`,
        display: 'flex',
        flexDirection: 'row'
      };
    },
    // 用于点击空白处隐藏增删改菜单
   clearMenu () {
      this.NodeTreeItem = null;
    },
    orgAdd () {
     // 写自己的业务逻辑
    },
    orgEdit () {
    // 写自己的业务逻辑
    },
    orgDelete () {
    // 写自己的业务逻辑
    }

...
}

你可能感兴趣的:(Vue)