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 ...
随机推荐
- 【SQL】 牛客网SQL训练Part2 中等难度
查找当前薪水详情以及部门编号dept_no 查找 1.各个部门当前领导的薪水详情以及其对应部门编号dept_no, 2.输出结果以salaries.emp_no升序排序, 3.并且请注意输出结果里面d ...
- 【Tutorial C】04 基本输入输出
输出单个字符 putchar('a'); // 字符输出函数,其功能是在终端(显示器)输出单个字符. putchar('\n'); // 支持转义换行 putchar(77); // 可以直接注入AS ...
- 【Vue】Re05 操作数组的API
一.响应式处理的操作: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...
- 国产深度学习框架吸引用户的一种免费手段——免费GPU时长
国产的深度学习框架基本成为了一个头部公司的标配了,不论是阿里.百度还是华为都推出了自己的深度学习框架,这几家公司为了吸引用户也都采取了免费使用GPU的活动,但是与阿里.百度的不同,华为是与固定的高校的 ...
- 循环神经网络 —— LSTM 有状态模型(stateful LSTM)和无状态模型(stateless LSTM)
相关参考: 训练后的LSTM模型在进行预测时的初始h_n和c_n是什么或应该怎么设置? Keras中对RNN网络的statefull和stateless设置: 链接:https://keras.io/ ...
- 华为高性能计算(HPC)文档——技术支持>智能计算解决方案>高性能计算>HPC
链接地址: https://support.huawei.com/enterprise/zh/server-solutions/hpc-pid-253585671 ================== ...
- 7月新特性 | 软件开发生产线CodeArts发布多项新特性等你体验!
华为云软件开发生产线CodeArts是一站式.全流程.安全可信的云原生DevSecOps平台,覆盖需求.开发.测试.部署.运维等软件交付全生命周期环节,为开发者打造全云化研发体验.2024年7月,Co ...
- CF1234D
CF1234D 链接: https://codeforces.com/problemset/problem/1234/D 题目大意: 给你一个字符串s,你需要完成如下q次询问 把 s 的第 p 位改为 ...
- JavaScript设计模式样例十五 —— 状态模式
状态模式(State Pattern) 定义:创建表示各种状态的对象和一个行为随着状态对象改变而改变的 context 对象.目的:允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类 ...
- Conda 使用
简介 Conda 和 Anaconda.Miniconda 的关系 Conda 是一个包管理器及环境管理器. Anaconda 和 Miniconda 都是一种 Python 和 R 发行版,其包括了 ...