el-tree方法的整理

1.点击树的文字不要收缩仅点击图标的时候收缩

expand-on-click-node:是否在点击节点的时候展开或者收缩节点, 默认值为 true,如果为 false,则只有点箭头图标的时候才会展开或者收缩节点。

javascript 复制代码
  <el-tree
      :expand-on-click-node="false"
      :data="data"
      node-key="id"
      default-expand-all
      @node-drag-start="handleDragStart"
      @node-drag-enter="handleDragEnter"
      @node-drag-leave="handleDragLeave"
      @node-drag-over="handleDragOver"
      @node-drag-end="handleDragEnd"
      @node-drop="handleDrop"
      draggable
      :allow-drop="allowDrop"
      :allow-drag="allowDrag"
    >
    </el-tree>

2.当前选中样式自定义

设置 :highlight-current="true" 从而高亮当前选中节点

javascript 复制代码
.catalog-tree .el-tree-node:focus > .el-tree-node__content {
  background-color: #f0f5ff !important;
  color: #409eff !important;
}

.catalog-tree  .el-tree-node.is-current > .el-tree-node__content {
  background-color: #f0f5ff !important;
  color: #409eff !important;
}

.catalog-tree为给树形结构自定义的类名

javascript 复制代码
 <el-tree
        class="catalog-tree"
        :data="treedata"
        :props="defaultProps"
        node-key="id"
        default-expand-all
        :expand-on-click-node="false"
        :highlight-current="true"
        draggable
        :allow-drop="allowDrop"
        :allow-drag="allowDrag"
      >

3.el-tree 动态指定默认选中节点

核心代码
highlight-current 高亮选中节点
:current-node-key="current" 自定义current变量,存储默认选中节点对应的key值
v-if="current" 因是动态绑定,最开始current为空,所以需在current有值后,才渲染 el-tree

javascript 复制代码
 mounted() {
  this.current = '对应想要赋值的id'
},

4.el-tree 指定当前选中节点样式,点击时focus样式,hover时样式

javascript 复制代码
/* 点击样式 */
.catalog-tree .el-tree-node:focus > .el-tree-node__content {
  background-color: #FFFFFF;
  color: #606266;
}

/* hover */
.catalog-tree .el-tree-node__content:hover{
  background-color: #f0f5ff !important;
  color: #409eff !important;
}
/* 当前选中节点 */
.catalog-tree .el-tree-node.is-current > .el-tree-node__content {
  background-color: #f0f5ff !important;
  color: #409eff !important;
}

5.tree点击节点时让其选中指定节点,在tree上添加自定义的选中节点

javascript 复制代码
 <el-tree
          v-if="current!=''"
          ref="mulutree"
          :current-node-key="current"
          class="catalog-tree"
          :data="treedata"
          :props="defaultProps"
          node-key="id"
          :expand-on-click-node="false"
          :default-expand-all="true"
          draggable
          :allow-drop="allowDrop"
          :allow-drag="allowDrag"
          @node-click="handleNodeClick"
        >
          <div class="catalogue-tree-node" slot-scope="{ node, data }">
            <div class="headlineText">{{ node.label }}</div>
            <el-popover
              placement="bottom"
              trigger="click"
              popper-class="fuwenbenCustomPopper"
              :ref="'popover-' + node.level + '-' + node.id"
            >
              <div style="text-align: left">
                <div class="sectionSet" @click="appendSiblingTree(node, data)">
                  添加同级章节
                </div>
                <div class="sectionSet" @click="appendTree(node, data)">
                  添加子章节
                </div>
                <div class="sectionSet" @click="setTreeName(node, data)">
                  章节设置
                </div>
                <div
                  class="sectionSet"
                  @click="exportToDocx('child', node, data)"
                >
                  下载章节
                </div>
                <div class="sectionSet" @click="removeTree(node, data)">
                  删除
                </div>
              </div>
              <div slot="reference" class="catalogueEdit">
                <i class="el-icon-more"></i>
              </div>
            </el-popover>
          </div>
        </el-tree>
 methods: {
    handleNodeClick(data,Node) {
      // 点击树形结构节点
      this.current = ""
      this.current = 1754462696445;
      this.$refs.mulutree.setCurrentKey(1754462696445)
    },
}

6.给el-tree目录前面加序号 带层级关系的 1.1.1 1.1.2 2.1.1 .等等

效果如下:

代码如下:

javascript 复制代码
<el-tree
  :data="treeData"
  node-key="id"
>
  <div class="catalogue-tree-node" slot-scope="{ node, data }">
  	 {{ getLevelIndex(node) }}//这里调用方法
     {{ node.label }}
  </div>
</el-tree>


methods: {
    getLevelIndex(node) {
      const getIndexPath = (node) => {
        if (!node.parent) return [];
        const parentPath = getIndexPath(node.parent);
        const currentIndex =
          node.parent.childNodes.findIndex((n) => n.data.id === node.data.id) +
          1;
        return [...parentPath, currentIndex];
      };

      let index = getIndexPath(node).join(".");
      return index;//没有层级限制,多少层都可以用
    },
}

7.el-tree目录前面加元素索引

效果如下:

代码如下:

javascript 复制代码
<el-tree
  :data="treeData"
  node-key="id"
>
  <div class="catalogue-tree-node" slot-scope="{ node, data }">
  	 {{ getLevelIndex(node) }}//这里调用方法
     {{ node.label }}
  </div>
</el-tree>


methods: {
    getLevelIndex(node) {
     // 获取当前节点在同级中的索引,从1开始
       return node.parent ? node.parent.childNodes.findIndex(n => n.data.id === node.data.id) + 1 : 1
    },
}
相关推荐
蚂蚁集团数据体验技术7 分钟前
一个可以补充 Mermaid 的可视化组件库 Infographic
前端·javascript·llm
LQW_home16 分钟前
前端展示 接受springboot Flux数据demo
前端·css·css3
q***d17322 分钟前
前端增强现实案例
前端·ar
IT_陈寒23 分钟前
Vite 3.0 重磅升级:5个你必须掌握的优化技巧和实战应用
前端·人工智能·后端
JarvanMo28 分钟前
Flutter 3.38 + Firebase:2025 年开发者必看的新变化
前端
Lethehong36 分钟前
简历优化大师:基于React与AI技术的智能简历优化系统开发实践
前端·人工智能·react.js·kimi k2·蓝耘元生代·蓝耘maas
华仔啊1 小时前
还在用 WebSocket 做实时通信?SSE 可能更简单
前端·javascript
鹏北海1 小时前
多标签页登录状态同步:一个简单而有效的解决方案
前端·面试·架构
_AaronWong1 小时前
基于 Vue 3 的屏幕音频捕获实现:从原理到实践
前端·vue.js·音视频开发
孟祥_成都1 小时前
深入 Nestjs 底层概念(1):依赖注入和面向切面编程 AOP
前端·node.js·nestjs