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 ...
随机推荐
- Ubuntu 18.04.4 安装docker18.09 (使用阿里云的源)
由于AI_Station 是使用容器构建环境的,而且只提供镜像上传下载功能,不为容易提供网络功能,因此需要在平台上把镜像拉取到本地,并安装一些必备软件然后再打包成镜像上传回去,因此需要在本地构建doc ...
- 从baselines库的common/vec_env/vec_normalize.py模块看方差的近似计算方法
在baselines库的common/vec_env/vec_normalize.py中计算方差的调用方法为: RunningMeanStd 同时该计算函数的解释也一并给出了: https://en. ...
- 【转载】回复“大修意见”(Major Revision)的模板 —— 审稿意见回复模板
原文地址: https://zhuanlan.zhihu.com/p/80214252 ================================================== 上周有个小 ...
- vue&element项目实战 之element使用&用户&字典模块实现
6.用户模块 用户模块api import request from '@/utils/request' export function login(data) { return request({ ...
- 深度解读昇腾CANN小shape算子计算优化技术,进一步减少调度开销
摘要:Host调度模式下,GE将模型中算子的执行单元划分为Host CPU执行与Device(昇腾AI处理器)执行两大类. 本文分享自华为云社区<深度解读昇腾CANN小shape算子计算优化技术 ...
- Leetcode: 586. Customer Placing the Largest Number of Orders
题目要求如下: 给出的例子如下: 简单地说就是要找出表中订单最多客户的ID. 使用如下的代码进行实现: import pandas as pd def largest_orders(orders: p ...
- Unity编辑器批量设置图片格式
在游戏开发中,经常需要批量设置图片的格式为Sprite类型,手动设置太麻烦,下面的编辑器脚本实现选中文件夹右键/Texture/SetAllImagesToSpriteType实现批量设置图片格式,具 ...
- SMU Summer 2024 Contest Round 7
SMU Summer 2024 Contest Round 7 Make Equal With Mod 题意 给定一个长度为 \(n\) 的数列 \(a\).你可以执行若干次操作,每次操作选择一个大于 ...
- 从0实现基于Linux socket聊天室-多线程服务器一个很隐晦的错误-2
根据 <0 基于socket和pthread实现多线程服务器模型>所述,server创建子线程的时候用的是以下代码: pconnsocke = (int *) malloc(sizeof( ...
- Dapr v1.14 版本已发布
Dapr是一套开源.可移植的事件驱动型运行时,允许开发人员轻松立足云端与边缘位置运行弹性.微服务.无状态以及有状态等应用程序类型.Dapr能够确保开发人员专注于编写业务逻辑,而不必分神于解决分布式系统 ...