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 ...
随机推荐
- 【Java】将枚举类转换为Redis字典缓存
字典翻译框架实现看这篇: https://www.cnblogs.com/mindzone/p/16890632.html 枚举的特性 首先是枚举的一些特性: 1.枚举实例直接在枚举类中声明 2.重载 ...
- Google公司的python编码规范指南
原文地址: https://google.github.io/styleguide/pyguide.html ============================================= ...
- CH03_运算符
CH03_运算符 算术运算符 作用:用于处理四则运算 示例: #include <iostream> using namespace std; int main() { int a = 1 ...
- 粉丝提问|c语言:如何定义一个和库函数名一样的函数,并在函数中调用该库函数
问题描述: 某个函数fun_1()是在lib内,没法修改的,在程序中大量的使用了该函数,现在想把原本fun_1失效(现在失效的方法是#define fun_1(..)),用另外一个函数fun_2(), ...
- 100ASK_IMX6ULL arm板子如何移植刷卡器
最近为了在arm板子上移植刷卡器,比较简单,但也遇到了坑,现在和大家分享下. 购买刷卡器 某宝很多,应该选哪一种呢? 一口君一共买了4种刷卡器,有2种可以用,还有2种不能用. 下图为最方便的一款,一口 ...
- [计算机网络] IPv6
1 IPv6 概述 引言 近期突发奇想,能不能用 IPv6 的公网地址,给家里的 NAS 做 内网穿透. 技术上是可行的.只是必须确保是 IPv6 的公网地址. 大学学的 IPv6 的知识,早就抛到九 ...
- Mac M1 安装Homebrew
/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- canfestival源码下载教程
先进入官网的这个页面 https://canfestival.org/code.html.en 点击箭头所指的地方 选择日期最新的点击下载
- .NET Core3.1 跨域 Cors 找不到 “Access-Control-Allow-Origin”
今天在做项目的时候遇到了调用WebAPI跨域的问题 No 'Access-Control-Allow-Origin' header is present on the requested resour ...
- 四,分析Spring Boot底层机制(Tomcat 启动分析+Spring容器初始化+Tomcat如何关联 Spring 容器) 以及个人编写启动 Tomcat
四,分析Spring Boot底层机制(Tomcat 启动分析+Spring容器初始化+Tomcat如何关联 Spring 容器) 以及个人编写启动 Tomcat @ 目录 四,分析Spring Bo ...