zoukankan      html  css  js  c++  java
  • element-tree组件简单用法

    前言:最近开发中用到element-tree组件,再次做个笔记记录一哈,不喜勿喷!!!谢谢

    1、在项目中我们需要用的层级有4级,超过以后就给个提示就行;每条数据上都有新增子级、删除、修改

    2、按照官网给的实例,每条数据后面都会跟上新增、删除按钮,自我定制:当鼠标移上去才显示新增、删除按钮

       官网给的实例:

      自己修改后:

    3、修改当前数据的名称、并上传到后台,在重新从后台获取到数据显示在页面上

    以上问题就是写这个文档的目的!话不多说了   直接上代码!

    首先是html代码

    <el-tree ref="SlotTree" :data="setTree" :props="defaultProps" default-expand-all highlight-current :expand-on-click-node="false" :node-key="NODE_KEY">
            <div class="comp-tr-node" slot-scope="{ node, data }">
               <!-- 编辑状态 -->
               <template v-if="node.isEdit">
                  <el-input
                    v-model="data.jgMc"
                    autofocus
                    size="small"
                    :ref="'slotTreeInput'+data[NODE_KEY]"
                    @blur.stop="handleInput(node, data)"
                    @keyup.enter.native="handleInput(node, data)"></el-input>
                </template>
               <!-- 非编辑状态 -->
               <template v-else>
                <!-- 名称: 新增节点增加class(is-new) -->
                <span :class="[data[NODE_KEY] < NODE_ID_START ? 'is-new' : '', 'comp-tr-node--name']">
                  <span>{{ data.jgMc }}</span>
                </span>
                  <!-- 按钮 -->
                  <span class="comp-tr-node--btns">
                    <!-- 新增 -->
                    <el-button icon="el-icon-plus" size="mini" circle type="primary" @click="handleAdd(node, data)"></el-button>
                    <!-- 编辑 -->
                    <el-button icon="el-icon-edit" size="mini" circle type="info" @click="handleEdit(node, data)"></el-button>
                    <!-- 删除 -->
                    <el-button icon="el-icon-delete" size="mini" circle type="danger" @click="handleDelete(node, data)"></el-button>
                  </span>
               </template>
             </div>
          </el-tree>

    接下来是css代码(tree-box:是tree外层的div class名)

      .tree-box >>> .el-tree-node {
        line-height:45px;
      }
      .tree-box >>> .el-tree-node__content{
        height:45px;
        line-height:45px;
      }
      .comp-tr-top{
        margin-left:10%;
      }
      .comp-tr-node{
        height:45px;
      }
      .comp-tr-node >>> .is-new{
        font-weight: bold;
      }
      .comp-tr-node >>> .comp-tr-node--name{
        270px;
        display: inline-block;
        line-height: 45px;
      }
      .tree-box >>> .el-tree-node__expand-icon{
        font-size:26px;
      }
      .comp-tr-node--btns{
        opacity:0;
      }
      .el-tree-node__content:hover  .comp-tr-node--btns{
        opacity:1;
      }
    

      最后是js代码

    data(){
          return{
            backupsMode:false,
            signTree:false,//判断tree是新增还是修改
            setTree: [],// tree数据
            NODE_KEY: 'id',// id对应字段
            MAX_LEVEL: 4,// 设定最大层级
            NODE_ID_START: 0,// 新增节点id,逐次递减
            startId: null,
            defaultProps: {// 默认设置
              children: 'jg',
              label: 'jgMc'
            },
            initParam: {// 新增参数
              jgMc: '请填写备件库名',
              pid: 0,
              children: []
            },
          }
        },

      

          // 删除节点
          handleDelete(_node, _data){
            console.log(_node, _data)
            // 判断是否存在子节点
            if(_data.jg && _data.jg.length !== 0){
              this.$message.error("此节点有子级,不可删除!")
              return false;
            }else{
              // 删除操作
              let DeletOprate = () => {
                this.$refs.SlotTree.remove(_data)
                //这个可以填写删除当前数据的接口
              }
              // 二次确认
              let ConfirmFun = () => {
                this.$confirm("是否删除此节点?","提示",{
                  confirmButtonText: "确认",
                  cancelButtonText: "取消",
                  type: "warning"
                }).then(() => {
                  DeletOprate()
                }).catch(() => {})
              }
              // 判断是否新增:新增节点直接删除,已存在的节点要二次确认
              _data[this.NODE_KEY] < this.NODE_ID_START ? DeletOprate() : ConfirmFun()
            }
          },
          // 修改节点
          handleInput(_node, _data){
            console.log(_node, _data)
            if(_node.isEdit){
              this.$set(_node, 'isEdit', false)
              // 填写修改节点的接口
            }
          },
          // 编辑节点
          handleEdit(_node, _data){
            console.log(_node, _data)
            if(!_node.isEdit){
              this.$set(_node, 'isEdit', true)
            }
            // 输入框聚焦
            this.$nextTick(() => {
              if(this.$refs['slotTreeInput'+_data[this.NODE_KEY]]){
                this.$refs['slotTreeInput'+_data[this.NODE_KEY]].$refs.input.focus()
              }
            })
          },
          // 新增节点
          handleAdd(_node, _data){
            console.log(_node, _data)
            // 判断层级
            if(_node.level >= this.MAX_LEVEL){
              this.$message.warning("当前已达到"+ this.MAX_LEVEL + "级,无法新增!")
              return false;
            }
            // 参数修改
            let obj = JSON.parse(JSON.stringify(this.initParam));// copy参数
            console.log(obj)
            obj.pid = _data.jgId;// 父id
            obj[this.NODE_KEY] = ++this.startId;// 节点id:逐次递增id
            // 判断字段是否存在
            if(!_data.jg){
              this.$set(_data, 'jg', [])
            }
            // 新增数据
            _data.jg.push(obj)
            // 展开节点
            // _node.expanded = true
            if(!_node.expanded){
              _node.expanded = true
            }
          },
          // 添加顶部节点
          handleAddTop(){
            let obj = JSON.parse(JSON.stringify(this.initParam));// copy参数
            obj[this.NODE_KEY] = ++this.startId;// 节点id:逐次递增id
            this.setTree.push(obj)
            console.log(this.setTree)
          },                
    

      

  • 相关阅读:
    vmware安装ubuntu
    加快pip install的速度
    在Dataframe中寻找特定值所在行的行号
    后续:尝试交易策略
    小实验:股票涨幅日间的相关性
    大数据之数据预处理
    并查集
    2020华为杯数学建模B题-RON建模 赛后总结与分析
    二叉树的遍历总结
    几数之和分析,解法,优化和总结
  • 原文地址:https://www.cnblogs.com/WEB_zhumeng/p/15018863.html
Copyright © 2011-2022 走看看