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 ...
随机推荐
- 06 定时器和PWM(1)
前言 前面介绍了一下外部中断,这一节主要介绍一下内部定时器和PWM,这两个知识还是比较重要的. 一.定时器 1.什么是定时器 定时器其实和计数器一样,我们通过设置一个值,当计数器运行一个计数寄存器向上 ...
- 【MongoDB】Re04 副本集 ReplicationSet
MongoDB中的副本集(Replica Set)是一组维护相同数据集的mongod服务. 副本集可提供冗余和高 可用性,是所有生产部署的基础. 也可以说,副本集类似于有自动故障恢复功能的主从集群.通 ...
- 论文写作:test 和 testing 使用的区别
"test" 和 "testing" 的区别主要在于它们在句子中的用途和语法功能: Test: 名词: 指的是一次测试或考试.例如: "The stu ...
- 为什么美国人聊天,结尾的时候他们会说“peace”
相关: https://www.youtube.com/watch?v=w2O--Ly0aQg 作为世界上当前唯一的军事霸权国家,美国居然通过立法的形式来支持种族清洗,这样的国家用虚假的"自 ...
- 人形机器人(具身智能,Embodied Intelligence)—— 抓取动作(上半身动作规划)的各大公司技术路线
视频地址: https://www.youtube.com/watch?v=UZBSXzNKB1Q
- 【转载】冲压过程仿真模拟及优化 —— 冲压仿真的方法分类PPT
地址: https://www.renrendoc.com/paper/310415051.html
- 微服务开发手册之GRPC
荐
GRPC是一个高性能.通用的开源RPC框架,基于HTTP/2协议标准和Protobuf序列化协议开发,支持众多的开发语言. @[TOC] 1 简介 在GRPC框架中,客户端可以像调用本地对象一样直接调 ...
- stm32g070 不同channel区别
1. TIM 2.UART
- JavaScript设计模式样例九 —— 桥接模式
桥接模式(Bridge Pattern) 定义:是用于把抽象化与实现化解耦,使得二者可以独立变化. 目的:将抽象部分与实现部分分离,使它们都可以独立的变化. 场景:实现系统可能有多个角度分类,每一种角 ...
- windows启动jar包并显示标题
cmd启动java的jar并显示窗口标题 title xx服务 D: cd D:\xx服务 java -jar guns-vip-main.jar 文件名名为 run.bat 双击即可运行