vue3+js的组织架构图(vue3-tree-org)

一个基于vue3.x的简易版组织架构图

安装

npm install vue3-tree-org --save

import vue3TreeOrg from 'vue3-tree-org'
import 'vue3-tree-org/lib/vue3-tree-org.css'
app.use(vue3TreeOrg)```

执行代码

<template>
  <div class="wrap">
    <div class="treeBox">
      <vue3-tree-org
        :data="state.data"
        :node-draggable="false"
        :horizontal="state.horizontal"
        :label-style="state.style"
        :default-expand-level="3"
        :tool-bar="state.toolBar"
        @on-node-click="onNodeClick"
      />
    </div>
    <div class="right">右边</div>
  </div>
  <page-footer />
</template>

<script setup>
import { reactive, onMounted } from 'vue'

const state = reactive({
  data: {
    id: 1,
    label: 'xxx科技有限公司',
    children: [
      {
        id: 2,
        pid: 1,
        label: '产品研发部',
        children: [
          { id: 6, pid: 2, label: '禁止编辑节点' },
          { id: 8, pid: 2, label: '禁止拖拽节点' },
          { id: 10, pid: 2, label: '测试' }
        ]
      },
      {
        id: 3,
        pid: 1,
        label: '客服部',
        children: [
          { id: 11, pid: 3, label: '客服一部' },
          {
            id: 12,
            pid: 3,
            label: '客服二部'
          }
        ]
      },
      { id: 4, pid: 1, label: '业务部' }
    ]
  },
  horizontal: true,
  expandAll: true,
  toolBar: false,
  style: {
    background: '#fff',
    color: '#5e6d82'
  }
})
onMounted(() => {
  toggleExpand(state.data, state.expandAll)
})
function onNodeClick(e, data) {
  console.log('data.label', data.label)
}
function toggleExpand(data, val) {
  if (Array.isArray(data)) {
    data.forEach(item => {
      item.expand = val
      if (item.children) {
        toggleExpand(item.children, val)
      }
    })
  } else {
    data.expand = val
    if (data.children) {
      toggleExpand(data.children, val)
    }
  }
}
</script>

<style lang="scss" scoped>
.wrap {
  display: flex;
  height: 90%;
  background: #fff;
  margin: 5px;
  padding: 20px;
  .treeBox {
    width: 50%;
    height: 100%;
    border: 1px solid #c3d0e2;
    ::v-deep .tree-org-node {
      padding-left: 0;
    }
  }
}
</style>

效果
在这里插入图片描述

vue3-git地址:https://gitee.com/sangtian152/vue3-tree-org/
vue3-文档:https://sangtian152.github.io/vue3-tree-org/demo/

vue2-文档地址:https://sangtian152.gitee.io/zm-tree-org/#/guide

添加的额外样式后
在这里插入图片描述

 style: {
    background: '#fff',
    color: '#5e6d82',
    width: ' 100px',
    boxShadow: 'none',
    border: '1px solid #c3d0e2',
    borderRadius: '5px',
    fontSize: '12px'
  }
  
**这些css放在全局才生效 不要加scoped**
.zm-tree-org {
  height: 96%;
}
.tree-org-node__content .tree-org-node__text {
  padding: 3px;
  font-weight: bold;
}
.horizontal .tree-org-node.is-leaf,
.horizontal .tree-org-node.collapsed {
  padding-top: 0;
  padding-bottom: 0;
}
  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
在使用 Vue ElementUI 构建项目时,可以采用以下常见的项目架构: 1. **目录结构**: - `src` 目录:主要存放源代码。 - `assets` 目录:存放静态资源文件,如片、字体等。 - `components` 目录:存放可复用的 Vue 组件。 - `views` 目录:存放各个页面的 Vue 组件。 - `router` 目录:存放路由相关的配置文件。 - `store` 目录:存放 Vuex 的状态管理相关的文件。 - `api` 目录:存放与后端接口交互的文件。 - `utils` 目录:存放一些工具函数或插件。 - `App.vue`:根组件,负责整个应用的布局和路由视的渲染。 - `main.js`:入口文件,负责初始化 Vue 实例和引入全局依赖。 - `public` 目录:存放静态资源文件,如 HTML 模板、favicon 等。 2. **路由配置**: 在 `router` 目录下,创建一个 `index.js` 文件来配置路由。可以使用 Vue Router 来定义不同页面的路由,并实现页面之间的导航。 3. **状态管理**: 在 `store` 目录下,创建一个 `index.js` 文件来配置 Vuex 的状态管理。可以定义全局的状态、mutations、actions 等,用于管理应用的状态。 4. **接口封装**: 在 `api` 目录下,创建一个或多个文件来封装与后端接口的交互。可以使用 axios 或其他 HTTP 请求库发送请求,并处理返回的数据。 5. **页面组件**: 在 `views` 目录下,创建各个页面的 Vue 组件。可以使用 ElementUI 提供的组件来构建页面,并与后端接口进行数据交互。 6. **静态资源**: 在 `assets` 目录下,存放项目所需的静态资源文件,如片、字体等。 7. **全局样式和插件**: 可以在 `main.js` 文件中引入全局样式文件或插件,如 ElementUI 的样式和主题配置、自定义的全局样式等。 这些只是一个基本的项目架构示例,你可以根据实际需求进行调整和扩展。希望对你有所帮助!如有更多问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值