HRM平台 - 组织结构的渲染
组织结构是一个公司的灵魂 ,多使用树型结构 ;
页面格式:

渲染头部 :

头部代码:
<template>
<el-row
type="flex"
justify="space-around"
style="height: 40px; width: 100%"
align="middle"
>
<!-- 左边 -->
<el-col>{{ treeData.name }}</el-col>
<!-- 右边 -->
<el-col>
<el-row type="flex" justify="end">
<el-col :span="6">{{ treeData.manager }}</el-col>
<el-col :span="6">
<!-- 下拉菜单 -->
<el-dropdown>
<span class="el-dropdown-link">
操作<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="$emit('addDept', treeData.id)">
添加子部门
</el-dropdown-item>
<el-dropdown-item
v-if="!isRoot"
@click.native="$emit('editDept', treeData.id)"
>
编辑部门
</el-dropdown-item>
<el-dropdown-item v-if="!isRoot" @click.native="delRow">
删除部门
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-col>
</el-row>
</el-col>
</el-row>
</template>


将树型内容抽离成组件 tree-tool
代码:
<template>
<el-row
type="flex"
justify="space-around"
style="height: 40px; width: 100%"
align="middle"
>
<!-- 左边 -->
<el-col>{{ treeData.name }}</el-col>
<!-- 右边 -->
<el-col>
<el-row type="flex" justify="end">
<el-col :span="6">{{ treeData.manager }}</el-col>
<el-col :span="6">
<!-- 下拉菜单 -->
<el-dropdown>
<span class="el-dropdown-link">
操作<i class="el-icon-arrow-down el-icon--right"></i>
</span>
<el-dropdown-menu slot="dropdown">
<el-dropdown-item @click.native="$emit('addDept', treeData.id)">
添加子部门
</el-dropdown-item>
<el-dropdown-item
v-if="!isRoot"
@click.native="$emit('editDept', treeData.id)"
>
编辑部门
</el-dropdown-item>
<el-dropdown-item v-if="!isRoot" @click.native="delRow">
删除部门
</el-dropdown-item>
</el-dropdown-menu>
</el-dropdown>
</el-col>
</el-row>
</el-col>
</el-row>
</template>
<script>
import { delDepartmentApi } from "@/api/department";
export default {
name: "TreeTools",
props: {
// 是否根节点
isRoot: {
type: Boolean,
default: false,
},
// 工具条的数据
treeData: {
type: Object, // { name:'xxx', magager:'xx' }
required: true,
},
},
methods: {
// 删除当前行的数据
async delRow() {
// 1.提示确认框
try {
await this.$confirm("确认删除吗?");
} catch (error) {
return console.log(error);
}
// 2. 发生删除请求
await delDepartmentApi(this.treeData.id);
// 3. 失败处理
// 4. 成功处理
this.$message.success("删除成功");
this.$emit("updateList");
},
},
};
</script>
<style></style>
父级页面调用 组件:
代码:
<template>
<div class="dashboard-container">
<div class="app-container">
<el-card class="page-card">
<!-- *绘制工具条 -->
<TreeTools @addDept="openDialog" :is-root="true" :tree-data="company" />
<!-- data是树的数据 -->
<!-- props配置选项 就是展示规则 -->
<!-- props里面有2个核心属性: children 子级存放的字段,默认children; label显示的文字字段,默认label -->
<!-- 一旦有插槽,就用插槽去渲染,不采用props渲染规则 -->
<el-tree :data="data" :props="defaultProps">
<!-- !注意:暗坑,需要给el-tree的插槽内容加上作用域才可以,否则下拉会出现bug -->
<!-- 作用域插槽:大家要考虑scope里面到底有什么东西,要么查文档,要么自己测试 -->
<!-- *绘制工具条 -->
<!-- 4. 【列表功能】 渲染数据 -->
<TreeTools
@addDept="openDialog"
@editDept="openEditDialog"
@updateList="initData"
:tree-data="data"
slot-scope="{ data }"
/>
</el-tree>
</el-card>
</div>
<!-- * 绘制弹框 -->
<addDept ref="addDeptRef" @loadList="initData" />
</div>
</template>
<script>
import TreeTools from "./components/tree-tools.vue";
import { getDepartmentListApi, getDepartmentInfoApi } from "@/api/department";
import { tranListToTreeData } from "@/utils";
import addDept from "./components/add-dept.vue";
export default {
name: "Department",
components: { TreeTools, addDept },
data() {
return {
// 根的数据
company: {
name: "江苏传智播客教育科技股份有限公司",
manager: "负责人",
id: "",
},
// 1. 【列表功能】定义树组件的数据
data: [],
defaultProps: {
children: "child",
label: "name",
},
};
},
created() {
// 3. 【列表功能】 调用数据
this.initData();
},
methods: {
// 2.【列表功能】 获取组织架构数据
async initData() {
// 2.1 发生请求
let res = await getDepartmentListApi();
// 2.2 失败处理 响应拦截器
// 2.3 成功处理 (加工数据、赋值数据)
this.company.name = res.companyName;
this.data = tranListToTreeData(res.depts, "");
},
// 监听新增打开的自定义事件
openDialog(data) {
console.log(data); // 要给data添加子部门
// 通过ref获取到组件实例
this.$refs.addDeptRef.isDialogShow = true;
this.$refs.addDeptRef.formData.pid = data;
},
// 监听修改打开的自定义事件 【回显逻辑】
async openEditDialog(data) {
console.log(data); // 修改data这个数据 id
// 请求要修改的数据,拿到给表单进行回显
let res = await getDepartmentInfoApi(data);
// 给弹框组件内的表单
this.$refs.addDeptRef.formData = res;
// 打开弹框
this.$refs.addDeptRef.isDialogShow = true;
},
},
};
</script>
<style lang="scss" scoped>
.page-card {
padding: 40px 100px;
}
</style>
HRM平台 - 组织结构的渲染的更多相关文章
- 实战OpenGLES--iOS平台使用OpenGLES渲染YUV图片
上一篇文章 实战FFmpeg--iOS平台使用FFmpeg将视频文件转换为YUV文件 演示了如何将视频文件转换为yuv文件保存,现在要做的是如何将yuv文件利用OpenGLES渲染展示出图像画面.要将 ...
- cocos2dx渲染架构
2dx的时代UI树便利和渲染是没有分开的,遍历UI树的时候就渲染.3dx版本为了分离了ui树的遍历和渲染,先遍历生成渲染命令发到渲染队列,之后遍历渲染命令队列开始渲染.这样做的好处是渲染命令可以重用, ...
- 字体渲染技术(字体抗锯齿技术) -webkit-font-smoothing: antialiased;
1.-webkit-font-smoothing控制的字体渲染只对MacOS的webkit有效.所以,你在MacOS测试环境下面设置-webkit-font-smoothing时,只要你不把它设置为n ...
- tbox的项目:vm86(汇编语言虚拟机),tbox(类似dlib),gbox(c语言实现的多平台图形库)
https://github.com/tboox/tbox GBOX是一个用c语言实现的多平台图形库,支持windows.linux.mac.ios.android以及其他嵌入式系统. 现在这个项目, ...
- React于React native的渲染机制
面向virtual DOM编程 vs 面向native componet编程: 状态编程引起的UI变化会全部提交到native compnent然后走平台原来的渲染流程. The DOM is jus ...
- 实战FFmpeg + OpenGLES--iOS平台上视频解码和播放
一个星期的努力终于搞定了视频的播放,利用FFmpeg解码视频,将解码的数据通过OpenGLES渲染播放.搞清楚了自己想知道的和完成了自己的学习计划,有点小兴奋.明天就是“五一”,放假三天,更开心啦. ...
- 剖析虚幻渲染体系(15)- XR专题
目录 15.1 本篇概述 15.1.1 本篇内容 15.1.2 XR概念 15.1.2.1 VR 15.1.2.2 AR 15.1.2.3 MR 15.1.2.4 XR 15.1.3 XR综述 15. ...
- 渲染器的实现(1)--《vue.js设计与实现》
function renderer(domString, container) { container.innerHTML = domString } let count = ref(1) rende ...
- B站开源ijkplayer 等多个项目
弹幕视频网 Bilibili(B 站)近日在 GitHub 网站上建立了开源工作组(BOSTF),用以分享与维护自己的开源项目,其中包括 DanmakuFlameMaster(燃烧吧!烈焰弹幕使)与 ...
- Dreamweaver 升级问题汇总
Adobe的产品开始从CC (Creative Cloud) 开始转向云平台,CS将逐渐成为过去时.不过CC并不限制用户在同一台机器上同时使用CS和CC,这种策略估计要持续较长一段时间. If you ...
随机推荐
- 【CentOS】 8版本 Cannot update read-only repo 问题
GUI界面应用市场无法访问 https://blog.csdn.net/hm0406120201/article/details/104553205/
- Http、Https简介和Session、token的请求流程
Http Http (超文本输出协议) 是一种分布式.协作式和超媒体信息系统的应用层协议,它通常运行在TCP之上,因特网应用最广泛的便是Http协议,所有www都遵循这个标准.主要用于Web 浏览器与 ...
- 机器人控制与图网络( 利用关系归纳偏置改善泛化和控制)—— Robotic Control with Graph Networks——Exploiting relational inductive bias to improve generalization and control
英文原文: https://towardsdatascience.com/robotic-control-with-graph-networks-f1b8d22b8c86 强化学习算法是不是另一种形式 ...
- 小程序报错 .wxss 无法找到
转子:http://blog.csdn.net/u012329294/article/details/78610593
- AC自动机 提高篇
文本生成器 首先考虑一个容斥,算出不包含任何一个单词的文章的数量. 我们设 \(dp_{i,j}\) 表示当前文章长度为 \(i\),最后一个字符在 \(AC\) 自动机上的 \(j\) 号点的方案数 ...
- 从0写一个电话号码管理的C入门项目【适合初学者】
0.前言 上次发了一个嵌入式的学习路线,很多粉丝问我各个阶段的入门项目,其中第二阶段的<基于socket聊天室>写了4篇循序渐进的文章,而第一阶段的<电话号码本管理>也非常想要 ...
- 组合逻辑环(Combinational Logic Loop)
组合逻辑电路 组合逻辑电路是数字电子学中一类基本的电路类型,它由一系列逻辑门组成,用于实现特定的逻辑功能.与时序逻辑电路不同,组合逻辑电路的输出完全取决于当前的输入信号,而不受之前输入的影响.换句话说 ...
- DASCTF 2024暑期挑战赛 RE
DASCTF 2024暑期挑战赛 DosSnake 使用ghidra看反汇编 发现有XOR操作 在ida里面看汇编跟一下 字符DASCTF地址往下6个存放的数据与DASCTF字符串进行异或 A=[0x ...
- webpack笔记-loader的详细使用介绍(四)
loader 基本上都是第三方类库,使用时需要安装,有一些 loader 还需要安装额外的类库,例如 less-loader 需要 less,babel-loader 需要 babel 等. load ...
- 1. Two Sum Go实现
在数组中找到 2 个数之和等于给定值的数字,结果返回 2 个数字在数组中的下标. 1. 解法1 时间复杂度 O(n^2) 直接两次遍历所有节点,进行求和比较 代码如下: func twoSum(num ...