当前位置:首页 > VUE

vue实现部门树

2026-01-14 07:56:53VUE

Vue 实现部门树

数据结构设计

部门树通常采用嵌套的树形结构,每个节点包含 idnamechildren 等字段。例如:

{
  "id": 1,
  "name": "总公司",
  "children": [
    {
      "id": 2,
      "name": "技术部",
      "children": []
    }
  ]
}

递归组件实现

使用 Vue 的递归组件可以方便地渲染树形结构。创建一个名为 TreeItem 的组件:

<template>
  <li>
    <div>{{ node.name }}</div>
    <ul v-if="node.children && node.children.length">
      <TreeItem
        v-for="child in node.children"
        :key="child.id"
        :node="child"
      />
    </ul>
  </li>
</template>

<script>
export default {
  name: 'TreeItem',
  props: {
    node: Object
  }
}
</script>

主组件调用

在主组件中引入 TreeItem 并传递树形数据:

<template>
  <ul>
    <TreeItem :node="treeData" />
  </ul>
</template>

<script>
import TreeItem from './TreeItem.vue'

export default {
  components: { TreeItem },
  data() {
    return {
      treeData: {
        id: 1,
        name: "总公司",
        children: [
          {
            id: 2,
            name: "技术部",
            children: []
          }
        ]
      }
    }
  }
}
</script>

动态加载数据

如果数据需要从后端获取,可以使用 axiosfetch

methods: {
  async fetchDepartmentTree() {
    const response = await axios.get('/api/departments/tree')
    this.treeData = response.data
  }
},
created() {
  this.fetchDepartmentTree()
}

样式优化

添加 CSS 样式美化树形结构:

ul {
  list-style-type: none;
  padding-left: 20px;
}
li {
  margin: 5px 0;
}

交互功能扩展

为节点添加点击事件或展开/折叠功能:

<template>
  <li>
    <div @click="toggle">
      {{ node.name }}
    </div>
    <ul v-if="isExpanded && node.children && node.children.length">
      <TreeItem
        v-for="child in node.children"
        :key="child.id"
        :node="child"
      />
    </ul>
  </li>
</template>

<script>
export default {
  data() {
    return {
      isExpanded: false
    }
  },
  methods: {
    toggle() {
      this.isExpanded = !this.isExpanded
    }
  }
}
</script>

使用第三方库

若需更复杂的功能(如拖拽、懒加载),可考虑使用现成的树形组件库:

vue实现部门树

  • vue-tree-list:支持拖拽和复选框
  • element-uiel-tree:提供丰富的 API 和样式

标签: 部门vue
分享给朋友:

相关文章

vue  select实现

vue select实现

Vue Select 实现方法 在 Vue 中实现下拉选择功能可以使用原生 <select> 标签或第三方库如 vue-select。以下是两种方法的详细说明: 原生 HTML Sele…

vue grid实现

vue grid实现

Vue Grid 实现方法 在 Vue 中实现网格布局可以通过多种方式完成,包括使用原生 CSS Grid、第三方组件库或自定义组件。以下是几种常见方法: 使用原生 CSS Grid 通过 Vue…

vue实现监控

vue实现监控

Vue 实现监控功能的方法 在 Vue 中实现监控功能通常涉及数据变化监听、事件监听或第三方监控工具集成。以下是几种常见实现方式: 使用 Vue 的 watch 监听数据变化 通过 watch 可以…

vue 实现单点登录

vue 实现单点登录

单点登录(SSO)实现原理 单点登录允许用户通过一次身份验证访问多个系统。核心原理是用户首次登录后,认证中心颁发令牌(如Token),其他系统通过验证令牌实现免登录。 Vue中实现SSO的方案 基于…

vue实现流程转化

vue实现流程转化

Vue 实现流程转化 在 Vue 中实现流程转化通常涉及多个步骤,包括状态管理、组件通信和动态渲染。以下是几种常见的实现方法: 使用 Vuex 进行状态管理 Vuex 是 Vue 的官方状态管理库,…

vue歌词滚动实现

vue歌词滚动实现

实现 Vue 歌词滚动的核心方法 监听当前播放时间 通过 audio 元素的 timeupdate 事件获取当前播放时间,并与歌词时间戳对比。在 Vue 中使用 @timeupdate 绑定事件:…