当前位置:首页 > VUE

vue elementui实现机构树

2026-01-23 10:06:05VUE

实现机构树的基本思路

使用 Vue 和 ElementUI 实现机构树,主要依赖 ElementUI 的 el-tree 组件。机构树通常展示层级关系数据,支持展开、折叠、选中等交互功能。

安装 ElementUI

确保项目中已安装 ElementUI。若未安装,可以通过以下命令安装:

npm install element-ui -S

在 main.js 中引入 ElementUI:

import Vue from 'vue';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';

Vue.use(ElementUI);

数据结构准备

机构树的数据通常为嵌套结构,每个节点包含 label(显示文本)、children(子节点)等属性。示例数据如下:

treeData: [
  {
    label: '一级机构',
    children: [
      {
        label: '二级机构1',
        children: [
          { label: '三级机构1' },
          { label: '三级机构2' }
        ]
      },
      {
        label: '二级机构2',
        children: [
          { label: '三级机构3' }
        ]
      }
    ]
  }
]

使用 el-tree 组件

在 Vue 模板中使用 el-tree 组件绑定数据:

<template>
  <div>
    <el-tree
      :data="treeData"
      :props="defaultProps"
      @node-click="handleNodeClick"
    ></el-tree>
  </div>
</template>

配置 props 以指定数据结构的字段名:

data() {
  return {
    treeData: [...], // 机构树数据
    defaultProps: {
      children: 'children',
      label: 'label'
    }
  };
}

处理节点点击事件

通过 @node-click 事件监听节点点击,并获取当前节点数据:

methods: {
  handleNodeClick(data) {
    console.log('点击节点:', data);
  }
}

自定义节点内容

如果需要自定义节点显示内容,可以使用 scoped slot

<el-tree :data="treeData" :props="defaultProps">
  <span slot-scope="{ node, data }" class="custom-node">
    <span>{{ node.label }}</span>
    <span v-if="node.level === 1" class="custom-tag">一级机构</span>
  </span>
</el-tree>

添加复选框支持

通过 show-checkbox 属性启用复选框:

<el-tree
  :data="treeData"
  :props="defaultProps"
  show-checkbox
  @check-change="handleCheckChange"
></el-tree>

监听复选框变化事件:

methods: {
  handleCheckChange(data, checked, indeterminate) {
    console.log('节点选中状态变化:', data, checked, indeterminate);
  }
}

动态加载节点数据

对于大型机构树,可以通过 lazyload 方法动态加载子节点:

<el-tree
  :props="defaultProps"
  :load="loadNode"
  lazy
></el-tree>

实现 loadNode 方法:

methods: {
  loadNode(node, resolve) {
    if (node.level === 0) {
      // 加载根节点
      resolve([{ label: '一级机构', isLeaf: false }]);
    } else {
      // 根据 node.data 加载子节点
      setTimeout(() => {
        resolve([
          { label: '二级机构1', isLeaf: false },
          { label: '二级机构2', isLeaf: true }
        ]);
      }, 500);
    }
  }
}

样式调整

通过 CSS 自定义树形结构的样式:

.custom-node {
  flex: 1;
  display: flex;
  align-items: center;
  justify-content: space-between;
  padding-right: 8px;
}
.custom-tag {
  background: #f0f2f5;
  padding: 2px 6px;
  border-radius: 3px;
  font-size: 12px;
}

完整示例代码

以下是一个完整的 Vue 组件示例:

<template>
  <div>
    <el-tree
      :data="treeData"
      :props="defaultProps"
      @node-click="handleNodeClick"
      show-checkbox
    ></el-tree>
  </div>
</template>

<script>
export default {
  data() {
    return {
      treeData: [
        {
          label: '一级机构',
          children: [
            {
              label: '二级机构1',
              children: [
                { label: '三级机构1' },
                { label: '三级机构2' }
              ]
            },
            {
              label: '二级机构2',
              children: [
                { label: '三级机构3' }
              ]
            }
          ]
        }
      ],
      defaultProps: {
        children: 'children',
        label: 'label'
      }
    };
  },
  methods: {
    handleNodeClick(data) {
      console.log('点击节点:', data);
    }
  }
};
</script>

通过以上步骤,可以快速实现一个功能完整的机构树组件,支持交互和动态数据加载。

vue elementui实现机构树

标签: 机构vue
分享给朋友:

相关文章

vue实现自动翻译

vue实现自动翻译

Vue 实现自动翻译的方法 在 Vue 项目中实现自动翻译功能可以通过多种方式完成,以下是几种常见的方法: 使用第三方翻译 API 注册并获取翻译 API 的密钥(如 Google Translat…

vue实现打字机

vue实现打字机

Vue实现打字机效果 在Vue中实现打字机效果可以通过动态更新文本内容并添加延迟来实现。以下是几种常见的实现方法: 使用setInterval实现 <template> <d…

vue实现访问量

vue实现访问量

Vue 实现访问量统计的方法 使用前端计数 在 Vue 中可以通过简单的计数器实现页面访问量的统计。这种方法适合小型项目或演示用途。 // 在 Vue 组件中 data() { return {…

vue弹幕实现不重叠

vue弹幕实现不重叠

实现 Vue 弹幕不重叠的方法 CSS 定位与动画控制 通过绝对定位和动态计算弹幕轨道高度,确保弹幕在不同轨道上运行。每条弹幕占据固定高度的轨道,避免重叠。 // 弹幕轨道高度计算 const tr…

vue实现全局遮罩层

vue实现全局遮罩层

实现全局遮罩层的方法 在Vue中实现全局遮罩层可以通过多种方式完成,以下是几种常见的实现方法: 使用Vue组件创建遮罩层 创建一个遮罩层组件,通过全局注册或动态挂载的方式实现全局调用。以下是一个简…

vue实现一个系统

vue实现一个系统

Vue 系统实现步骤 项目初始化与配置 使用 Vue CLI 或 Vite 创建项目: npm init vue@latest my-system 选择需要的配置(Router、Pinia 等)。…