当前位置:首页 > 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 以指定数据结构的字段名:

vue elementui实现机构树

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>

监听复选框变化事件:

vue elementui实现机构树

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
分享给朋友:

相关文章

vue实现多人视频

vue实现多人视频

实现多人视频通话的Vue方案 使用WebRTC技术结合Vue框架可以构建多人视频通话应用。以下是核心实现方法: 技术栈选择 Vue 2/3作为前端框架 WebRTC用于实时通信 Socket.io…

vue怎么实现选中删除

vue怎么实现选中删除

实现选中删除功能的方法 在Vue中实现选中删除功能通常涉及以下几个关键步骤: 数据绑定与选中状态管理 使用v-model或v-for指令绑定列表数据,结合复选框或单选按钮实现选中状态管理。例如:…

vue实现倒计时抢券

vue实现倒计时抢券

Vue 实现倒计时抢券功能 核心逻辑 倒计时抢券功能需要结合时间计算、状态管理和界面交互。通过 Vue 的响应式特性和生命周期钩子,可以高效实现这一需求。 实现步骤 1. 数据准备 在 Vue 组件…

vue实现alert

vue实现alert

实现自定义 Alert 组件 在 Vue 中可以通过组件化方式实现自定义 Alert 弹窗。以下是基于 Vue 3 的实现示例: 组件代码 (Alert.vue) <template>…

vue广告实现

vue广告实现

Vue 广告实现方法 在 Vue 项目中实现广告功能可以通过多种方式完成,具体取决于广告类型和需求。以下是几种常见的实现方法: 使用第三方广告平台 许多广告平台如 Google AdSense、百…

vue实现图片

vue实现图片

Vue 实现图片功能的方法 静态图片引入 在 Vue 项目中,可以通过 src 属性直接引入静态图片。图片通常放在 public 或 assets 目录下。 <template> &…