element组织树总结

页面效果

主要代码

        <el-tree
            :data="deptOptions"
            :props="defaultProps"
            :expand-on-click-node="false"
            :filter-node-method="filterNode"
            ref="tree"
            class="trees"
            default-expand-all
            @node-click="handleNodeClick"
          >
            <div class="custom-tree-node treeNode" slot-scope="{ node, data }">
              <span class="label" :title="node.label">{{ node.label }}</span>
              <span class="icon">
                <el-dropdown @command="handleCommand">
                  <span class="el-dropdown-link">
                    <i class="el-icon-more" style="transform: rotate(-90deg);"></i>
                  </span>
                  <el-dropdown-menu slot="dropdown">
                    <el-dropdown-item :command="beforeHandleCommand(node, data, 'edit')"
                      >编辑</el-dropdown-item
                    >
                    <el-dropdown-item :command="beforeHandleCommand(node, data, 'child')"
                      >创建子部门</el-dropdown-item
                    >
                    <el-dropdown-item :command="beforeHandleCommand(node, data, 'up')"
                      >上移</el-dropdown-item
                    >
                    <el-dropdown-item :command="beforeHandleCommand(node, data, 'down')"
                      >下移</el-dropdown-item
                    >
                    <el-dropdown-item :command="beforeHandleCommand(node, data, 'del')"
                      >删除</el-dropdown-item
                    >
                  </el-dropdown-menu>
                </el-dropdown>
              </span>
            </div>
          </el-tree>
 .trees {
        .el-tree-node__content {
          width: 100%;
        }
        .treeNode {
          width: 100%;
          box-sizing: border-box;
          margin-left: -24px;
          padding-left: 24px;
          display: flex;
          align-items: center;
          justify-content: space-between;
          .label {
            overflow: hidden;
            white-space: nowrap;
            text-overflow: ellipsis;
          }
          .icon {
            float: right;
          }
        }
      }
  // 下拉组件点击事件
    beforeHandleCommand (node, data, command) {
      return { node, data, command }
    },
    handleCommand (obj) {
      // console.log(obj)
      if (obj.command === 'del') {
        this.deleteDept(obj.data)
      } else if (obj.command === 'edit') {
        this.editDept(obj.data)
      } else if (obj.command === 'child') {
        this.addChildrenDept(obj.data)
      } else if (obj.command === 'up') {
        if (!obj.node.previousSibling) {
          // this.$alert.error('已经在最顶部啦!')
          this.$alert('已经在最顶部啦!', '温馨提示', {
            confirmButtonText: '确定'
          })
        } else {
          let sort = obj.data.sort
          obj.data.sort = obj.node.previousSibling.data.sort
          obj.node.previousSibling.data.sort = sort
          let p1 = Promise.resolve(this.removeDept(obj.data))
          let p2 = Promise.resolve(this.removeDept(obj.node.previousSibling.data))
          Promise.all([p1, p2]).then(() => {
            setTimeout(() => {
              this.getTrees()
              this.$message.success('上移成功')
            }, 1000)
          })
        }
      } else if (obj.command === 'down') {
        if (!obj.node.nextSibling) {
          // this.$message.error('已经在最底部啦!')
          this.$alert('已经在最底部啦!', '温馨提示', {
            confirmButtonText: '确定'
          })
        } else {
          let sort = obj.data.sort
          obj.data.sort = obj.node.nextSibling.data.sort
          obj.node.nextSibling.data.sort = sort
          let p1 = Promise.resolve(this.removeDept(obj.data))
          let p2 = Promise.resolve(this.removeDept(obj.node.nextSibling.data))
          Promise.all([p1, p2]).then(() => {
            setTimeout(() => {
              this.getTrees()
              this.$message.success('下移成功')
            }, 1000)
          })
        }
      }
    },

遇到问题:

1.为了下拉菜单图标和部门名称左右布局用到了弹性布局。当部门名称太长时,后面的下拉菜单图标会被挤到看不见

分析发现时前面小三角图标的影响,因为宽度100%跟父盒子一样宽,但其实这里是有一个三角图标占24px的,所以下拉菜单图标就被挤到后面了24px看不到了,添加margin-left: -24px; padding-left: 24px;就可以解决图标问题

2.下拉菜单多个的时候传参问题(el-down的Command事件只能接受一个参数)

下拉菜单多个的时候可以用el-dropdown-item里command传一个参数去判断具体哪个触发的el-down的Command事件,但是如果需要传多个数据就需要传递对象,传递对象的方式是el-dropdown-item上面先用:command="beforeHandleCommand(node, data, 'down')传递参数,

beforeHandleCommand (node, data, command) {

      return { node, data, command }

    },然后返回成对象格式,再触发el-down的Command事件

3.因为上移和下移我的后端要求调两次接口,而我需要两次都成功之后刷新组织树并提示移动成功,所以使用promise.all去实现

let p1 = Promise.resolve(this.removeDept(obj.data))
          let p2 = Promise.resolve(this.removeDept(obj.node.nextSibling.data))
          Promise.all([p1, p2]).then(() => {
            setTimeout(() => {
              this.getTrees()
              this.$message.success('下移成功')
            }, 1000)
          })

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值